<?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>111072</bug_id>
          
          <creation_ts>2013-02-28 06:10:47 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream BlackBerry::Platform::GraphicsContext integration related changes in platform/graphics/blackberry</short_desc>
          <delta_ts>2013-03-01 09:45:35 -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>WebKit BlackBerry</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>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Arvid Nilsson">anilsson</reporter>
          <assigned_to name="Arvid Nilsson">anilsson</assigned_to>
          <cc>anilsson</cc>
    
    <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>jrogers</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>844024</commentid>
    <comment_count>0</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-02-28 06:10:47 -0800</bug_when>
    <thetext>A new platform abstraction for the graphics engine was added in BB10. This is the integration code for the new graphics backend in WebCore/platform/graphics/blackberry. Build system and WebKit/blackberry changes will be other bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844051</commentid>
    <comment_count>1</comment_count>
      <attachid>190722</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-02-28 07:09:31 -0800</bug_when>
    <thetext>Created attachment 190722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844053</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 07:12:17 -0800</bug_when>
    <thetext>Attachment 190722 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/platform/graphics/blackberry/CanvasLayerWebKitThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/CanvasLayerWebKitThread.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/DrawingBufferBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/EGLImageLayerCompositingThreadClient.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/EGLImageLayerCompositingThreadClient.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/EGLImageLayerWebKitThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/EGLImageLayerWebKitThread.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FloatRectBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontCacheBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontCacheBlackberry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontCustomPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GlyphPageTreeNodeBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GradientBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GraphicsContextBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/GraphicsLayerBlackBerry.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/ITypeUtils.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/ImageBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/ImageBufferDataBlackBerry.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/InstrumentedPlatformCanvas.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerCompositingThreadClient.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerData.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerRenderer.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerRendererSurface.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerTile.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerTile.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerTileIndex.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerTiler.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/PathBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/PatternBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/PlatformSupport.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/PlatformSupport.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/PluginLayerWebKitThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/Texture.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/Texture.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/TextureCacheCompositingThread.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/TextureCacheCompositingThread.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/skia/ImageBufferDataSkia.h&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/skia/PlatformSupport.cpp&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/skia/PlatformSupport.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp:56:  Line contains only semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:289:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:290:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:291:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:292:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:293:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:295:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:296:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:297:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:301:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:303:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:306:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:307:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/graphics/blackberry/ImageBufferBlackBerry.cpp:309:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 14 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>844057</commentid>
    <comment_count>3</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-02-28 07:17:41 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=190722) [details]
&gt; Patch

I think this is a bit much to review. Maybe it is better to split out the added files in a separate patch, which would make this one more manageable.
Also crediting all persons involved is a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844921</commentid>
    <comment_count>4</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-03-01 01:39:47 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=190722) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I think this is a bit much to review. Maybe it is better to split out the added files in a separate patch, which would make this one more manageable.
&gt; Also crediting all persons involved is a good idea.

I&apos;ll open a new bug for the new files. I haven&apos;t received a list of all the people yet, see PR 293208 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844925</commentid>
    <comment_count>5</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-03-01 01:41:32 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; Created an attachment (id=190722) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I think this is a bit much to review. Maybe it is better to split out the added files in a separate patch, which would make this one more manageable.
&gt; &gt; Also crediting all persons involved is a good idea.
&gt; 
&gt; I&apos;ll open a new bug for the new files. I haven&apos;t received a list of all the people yet, see PR 293208 for details.

https://bugs.webkit.org/show_bug.cgi?id=111153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845164</commentid>
    <comment_count>6</comment_count>
      <attachid>190965</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-03-01 07:39:53 -0800</bug_when>
    <thetext>Created attachment 190965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845192</commentid>
    <comment_count>7</comment_count>
      <attachid>190965</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-03-01 08:14:00 -0800</bug_when>
    <thetext>Comment on attachment 190965
Patch

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

Some nits but nothing that needs to be fixed in this patch.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:33
&gt; +#include &lt;Vector.h&gt;

Not an improvement, since the former is preferred. Does not need to be part of this patch though.

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:304
&gt; +    char standardVertexShaderString[] =

These could be const to move it into rodata. But not part of this patch...

&gt; Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp:595
&gt; +        glDisable(GL_BLEND);

I see this structure recurring a lot, I wonder if we should make a helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845243</commentid>
    <comment_count>8</comment_count>
      <attachid>190965</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-01 09:45:31 -0800</bug_when>
    <thetext>Comment on attachment 190965
Patch

Clearing flags on attachment: 190965

Committed r144465: &lt;http://trac.webkit.org/changeset/144465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845244</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-01 09:45:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190722</attachid>
            <date>2013-02-28 07:09:31 -0800</date>
            <delta_ts>2013-03-01 07:39:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111072-20130228160541.patch</filename>
            <type>text/plain</type>
            <size>372850</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhmM2ZiMzAyOTRmMzM0
NGZiMGFlZmUyN2M1NTg5NjFlYWYwZWRkYS4uYzcyY2Y0OTVlNDI4YTU5OTliZWI4ODVlZDIyOTY1
NzZmZWUxNmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5OCBAQAorMjAxMy0wMi0yOCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIFVw
c3RyZWFtIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhcGhpY3NDb250ZXh0IGlu
dGVncmF0aW9uIHJlbGF0ZWQgY2hhbmdlcyBpbiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEwNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbGFja0Jl
cnJ5IFBSIDI5MzIwOAorCisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgY29udHJpYnV0aW9u
cyBmcm9tIG1hbnkgbWVtYmVycyBvZiB0aGUgQmxhY2tCZXJyeQorICAgICAgICBXZWJLaXQgdGVh
bS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlVGV4dHVyZXMp
OgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpsYXllckNvbXBv
c2l0aW5nVGhyZWFkRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OmxheWVyVmlzaWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVy
ZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpjbGVhckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OkNhbnZhc0xheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmNvbW1pdFBl
bmRpbmdUZXh0dXJlVXBsb2Fkcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktp
dFRocmVhZDo6Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzTGF5ZXJXZWJLaXRUaHJlYWQ6On5DYW52YXNMYXllcldlYktpdFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVhZDo6Y2xlYXJCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJXZWJL
aXRUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChDYW52YXNMYXllcldlYktpdFRocmVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EaXNwbGF5UmVmcmVzaE1vbml0
b3JCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cjo6ZGlzcGxheUxpbmtGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6On5FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojp1cGxvYWRU
ZXh0dXJlc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTElt
YWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZGVsZXRlVGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpiaW5kQ29u
dGVudHNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6c2V0VGV4dHVyZUFjY2Vzc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5o
OgorICAgICAgICAoR3JhcGhpY3MpOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6
RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxh
eWVyV2ViS2l0VGhyZWFkOjp+RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVGcm9udEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpkZWxldGVGcm9udEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpjb21t
aXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXll
cldlYktpdFRocmVhZDo6Y3JlYXRlVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmJsaXRUb0Zyb250QnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQu
aDoKKyAgICAgICAgKEdyYXBoaWNzKToKKyAgICAgICAgKEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJl
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRSZWN0Qmxh
Y2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6Om5vcm1hbGl6ZWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9Gb250QmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoRlNGaXhlZFRvRmxvYXQpOgor
ICAgICAgICAoRmxvYXRUb0ZTRml4ZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0Zv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYXBoc0luQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRm9udENhY2hlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OmdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWlnaHRUb0ZvbnRjb25maWdXZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvbnRDdXN0b21QbGF0Zm9ybURh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRD
dXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvRm9udFBsYXRmb3JtRGF0YUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpuYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmFwcGx5U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24pOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpzY2FsZWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OnNldEZha2VCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZh
a2VJdGFsaWMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3VyX3NmbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dseXBoUGFnZVRyZWVOb2RlQmxh
Y2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JsZFR5
cGVTY29wZWRQdHIpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRUeXBlU2NvcGVkUHRyOjpXb3Js
ZFR5cGVTY29wZWRQdHIpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRUeXBlU2NvcGVkUHRyOjp+
V29ybGRUeXBlU2NvcGVkUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmxkVHlwZVNjb3BlZFB0
cjo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFkaWVudEJsYWNrQmVycnkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG90YWxTdG9wc05lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsU3RvcHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4
dDNEQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50VG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2
ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdp
blBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0
ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OkdyYXBoaWNzTGF5ZXJCbGFja0Jl
cnJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OmNsZWFyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldE5lZWRz
RGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQmxhY2tCZXJy
eTo6dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckJsYWNrQmVycnk6OnNldHVwQ29udGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oOgorICAgICAg
ICAoR3JhcGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckJsYWNrQmVycnk6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9JVHlwZVV0aWxzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L3NraWEvSW1hZ2VCdWZmZXJEYXRhU2tp
YS5oLgorICAgICAgICAoZmxvYXRUb0lUeXBlRml4ZWQpOgorICAgICAgICAoaW50VG9JVHlwZUZp
eGVkKToKKyAgICAgICAgKGlUeXBlRml4ZWRUb0Zsb2F0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNo
ZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW52YWxp
ZGF0ZVBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCdWZmZXJCbGFja0JlcnJ5LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VCdWZmZXJDdXJyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OmZsdXNoQW5kRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckRhdGFCbGFj
a0JlcnJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUJ1ZmZl
ckRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW5zdHJ1bWVu
dGVkUGxhdGZvcm1DYW52YXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9h
ZHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmg6CisgICAgICAgIChHcmFwaGljcyk6Cisg
ICAgICAgIChMYXllckNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaDoKKyAgICAgICAg
KEdyYXBoaWNzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50Ojpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJEYXRhOjpMYXllckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRh
Ojpjb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCk6CisgICAgICAgIChMYXllckRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjpsYXllclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJEYXRhOjppc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjppc0ZpeGVkVG9Ub3ApOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJEYXRhOjppc0ZpeGVkVG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0
YTo6ZnJhbWVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmZyYW1l
Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Y29udGVudHNTY2Fs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJl
bmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246
OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0
ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckZpbHRlclJlbmRlcmVyOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmls
dGVyUmVuZGVyZXI6OnBvbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJl
cjo6cHVzaFNuYXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6
OnBvcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmFw
cGx5QWN0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlcjo6TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyOjp+TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpz
ZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpjb21wb3NpdGVM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OmdsUm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dG9PcGVuR0xXaW5k
b3dDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpkcmF3RGVi
dWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6ZHJhd0hvbGVQdW5j
aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVy
c1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpjcmVhdGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OnVzZVByb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXNlTGF5ZXJQcm9ncmFtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaDoKKyAgICAgICAg
KExheWVyUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJSZW5kZXJlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
clN1cmZhY2U6OmVuc3VyZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6TGF5
ZXJUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaDoKKyAgICAgICAgKExheWVyVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6OnJlbmRlclN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZTo6bmVlZHNSZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlOjpzZXROZWVkc1JlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6OnNl
dFJlbmRlclBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpzZXRSZW5kZXJE
b25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZUlu
ZGV4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFRpbGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OkxheWVyVGlsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXI6OndpbGxDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlcjo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OmxheWVyVmlzaWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyOjpwcm9jZXNzVGV4dHVyZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
OjphZGRUaWxlSm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBlcmZvcm1UaWxl
Sm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmRyYXdUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXI6OmRyYXdUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyOjpwcnVuZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6
OnVwZGF0ZVRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnNldE5lZWRz
QmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpjb250ZW50c1RleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dGlsZVNpemUpOgorICAgICAgICAoTGF5ZXJU
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpUZXh0dXJlSm9iOjpUZXh0dXJl
Sm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OlRleHR1cmVKb2I6OnNldENvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OlRleHR1cmVKb2I6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKFRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlcjo6bmVlZHNSZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVtb3Zl
VXBkYXRlQ29udGVudHNKb2JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6fkxheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2Vi
S2l0VGhyZWFkOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
V2ViS2l0VGhyZWFkOjpzZXROZWVkc0NvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldl
YktpdFRocmVhZDo6bm90aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzdGFydEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6YWRkU3VibGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6YWRkT3Zl
cmxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVGcm9tU3VwZXJsYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlU3VibGF5ZXJPck92
ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVBbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVyYXJjaHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldElzTWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVsZWFzZUxheWVyUmVzb3VyY2VzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0U3VibGF5ZXIpOgorICAg
ICAgICAoTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRU
aHJlYWQ6OmlzTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVt
b3ZlQWxsU3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpz
ZXRGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpz
ZXRJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpeGVkVG9Ub3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldEZpeGVkVG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
V2ViS2l0VGhyZWFkOjpzZXRGcmFtZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFtZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllcldlYktpdFRocmVhZDo6c2V0TGF5ZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVwYXJlRm9yUmVu
ZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6cGVyY2VudExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9uTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bm90aWZ5Q2hhbGxlbmdlUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6bG9hZEJ1ZmZlcmluZ0ltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldEJ1ZmZlcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmRyYXdCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkNvbmRpdGlvbmFsbHlFbnRlckZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25DcmVhdGVI
b2xlUHVuY2hSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25E
ZXN0cm95SG9sZVB1bmNoUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChCbGFja0JlcnJ5
KToKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKEdyYXBoaWNzKToKKyAgICAgICAgKE1l
ZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9QYXRoQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JhdGNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjdXJyZW50UG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5kaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bW92
ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjphZGRRdWFkQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRC
ZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyY1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmNsb3NlU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjphZGRBcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjphZGRFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnBsYXRm
b3JtQWRkUGF0aEZvclJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6aGFzQ3VycmVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9QYXR0ZXJuQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0dGVybjo6cGxhdGZvcm1QYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRl
cm46OnNldFBsYXRmb3JtUGF0dGVyblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsYXRmb3JtU3VwcG9ydC5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJsYWNr
YmVycnkuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVN1cHBvcnQ6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsYXRmb3JtU3VwcG9ydC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9za2lhL1BsYXRmb3JtU3Vw
cG9ydC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgor
ICAgICAgICAoRm9udEZhbWlseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5MYXllcldlYktpdFRocmVhZDo6c2V0UGx1Z2luVmlldyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9TaW1wbGVGb250RGF0YUJsYWNrQmVycnkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RlNGaXhlZFRvRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnNl
dENvbnRlbnRzVG9Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpwcm90ZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmUuaDoKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6dGV4dHVyZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmlzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZTo6aGFzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpzaXplSW5CeXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZTo6c2V0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6YWxsb2NhdGVUZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6Y29sbGVjdEdhcmJhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVTaXplSW5CeXRl
c0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6aW5zdGFsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6cmVzaXplVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6ZXZpY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnBydW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVy
ZUZvclRpbGVkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQ6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmg6CisgICAgICAgIChU
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZDo6Wm9tYmllVGV4dHVyZTo6Wm9tYmllVGV4dHVyZSk6Cisg
ICAgICAgIChab21iaWVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L3NraWEvUGxhdGZvcm1TdXBwb3J0LmNwcDogUmVtb3ZlZC4KKwogMjAxMy0wMi0yOCAg
QWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIxNDQxNjkpOiBJdCBicm9rZSBjbGlwcGluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktp
dFRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcAppbmRleCBkZmNmOWI5OTgxODQ4NjcyMzVmYWQ3
N2JiM2U1Y2RiZWJkYTcyZDIyLi5lNWIxYTM5ZDZiNGUzYTNhNjIwZTQwZDY3NjQ4Njg4Mzc4YTgz
NTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAt
MTgsNTYgKzE4LDk0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52YXNM
YXllcldlYktpdFRocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKIAotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8U2tHcHVEZXZpY2UuaD4KKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0uaD4KKwordXNpbmcgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKFNrR3B1RGV2
aWNlKiBkZXZpY2UpCi0gICAgOiBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkKENhbnZhc0xheWVy
KQordm9pZCBDYW52YXNMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlVGV4dHVyZXMoKQogewotICAg
IHNldERldmljZShkZXZpY2UpOwogfQogCi1DYW52YXNMYXllcldlYktpdFRocmVhZDo6fkNhbnZh
c0xheWVyV2ViS2l0VGhyZWFkKCkKK2NsYXNzIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQgOiBwdWJsaWMgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCB7CitwdWJsaWM6Cisg
ICAgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudChCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkJ1ZmZlciosIGNvbnN0IEludFNpemUmKTsKKworICAgIHZvaWQgbGF5ZXJD
b21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgeyB9Cisg
ICAgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBi
b29sKSB7IH0KKyAgICB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCopIHsgfQorCisgICAgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJik7CisgICAgdm9pZCBkZWxl
dGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CisKKyAgICB2b2lkIGNvbW1pdFBl
bmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CisKKyAgICB2b2lk
IGNsZWFyQnVmZmVyKCkgeyBtX2J1ZmZlciA9IDA7IH0KKworcHJpdmF0ZToKKyAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7CisgICAgSW50U2l6ZSBt
X3NpemU7Cit9OworCitDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpDYW52YXNM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX2J1ZmZlcihi
dWZmZXIpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBpZiAoU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmdldCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgZGVsZXRlRnJvbnRC
dWZmZXIoKTsKIH0KIAotdm9pZCBDYW52YXNMYXllcldlYktpdFRocmVhZDo6c2V0RGV2aWNlKFNr
R3B1RGV2aWNlKiBkZXZpY2UpCit2b2lkIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNj
YWxlLCBjb25zdCBHTEVTMlByb2dyYW0mKQogewotICAgIG1fZGV2aWNlID0gZGV2aWNlOwotICAg
IHNldE5lZWRzRGlzcGxheSgpOworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGR0ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsK
KyAgICBkdC50cmFuc2xhdGUoLWxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCAtbGF5ZXIt
PmJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKKyAgICBkdC5zY2FsZU5vblVuaWZvcm0oc3RhdGlj
X2Nhc3Q8ZG91YmxlPihsYXllci0+Ym91bmRzKCkud2lkdGgoKSkgLyBtX3NpemUud2lkdGgoKSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpIC8gbV9zaXplLmhl
aWdodCgpKTsKKyAgICBibGl0VG9CdWZmZXIoMCwgbV9idWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHQpLAorICAgICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJjZU92ZXIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KSk7CiB9CiAKLXZvaWQg
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkK
K3ZvaWQgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZGVsZXRlVGV4dHVyZXMo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiB7Ci0gICAgaWYgKCFtX2RldmljZSkKLSAg
ICAgICAgcmV0dXJuOworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgdGhlIGJ1ZmZlciBpcyBu
b3Qgb3duZWQgYnkgdXMuCit9CiAKLSAgICBpZiAoIVNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCkpCit2b2lkIENhbnZhc0xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQ6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiBsYXllcikKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBHclJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxHclJl
bmRlclRhcmdldCo+KG1fZGV2aWNlLT5hY2Nlc3NSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgZHVyaW5nIGEgc3luY2hyb25pemF0aW9uIHBvaW50IGJldHdlZW4gV2ViS2l0IGFuZCBjb21w
b3NpdGluZyB0aHJlYWQuCisgICAgLy8gVGhpcyBpcyBvdXIgb25seSBjaGFuY2UgdG8gdHJhbnNm
ZXIgdGhlIGJhY2sgZGlzcGxheSBsaXN0IHRvIHRoZSBmcm9udCBkaXNwbGF5IGxpc3Qgd2l0aG91
dAorICAgIC8vIHJhY2UgY29uZGl0aW9ucy4KKyAgICAvLyAxLiBGbHVzaCBiYWNrIGRpc3BsYXkg
bGlzdCB0byBmcm9udAorICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6cmVsZWFz
ZUJ1ZmZlckRyYXdhYmxlKG1fYnVmZmVyKTsKKyAgICAvLyAyLiBEcmF3IGZyb250IGRpc3BsYXkg
bGlzdCB0byBGQk8KKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnVwZGF0ZUJ1
ZmZlckJhY2tpbmdTdXJmYWNlKG1fYnVmZmVyKTsKK30KIAotICAgIEdyVGV4dHVyZSogdGV4dHVy
ZSA9IHJlbmRlclRhcmdldC0+YXNUZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAg
ICByZXR1cm47CiAKLSAgICB1cGRhdGVGcm9udEJ1ZmZlcihJbnRTaXplKG1fZGV2aWNlLT53aWR0
aCgpLCBtX2RldmljZS0+aGVpZ2h0KCkpLCB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCkpOwor
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIsIGNvbnN0IEludFNpemUmIHNp
emUpCisgICAgOiBMYXllcldlYktpdFRocmVhZChDYW52YXNMYXllciwgMCkKK3sKKyAgICBtX2Nv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50ID0gbmV3IENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQoYnVmZmVyLCBzaXplKTsKKyAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldENs
aWVudChtX2NvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KTsKIH0KIAotdm9pZCBDYW52YXNMYXllcldl
YktpdFRocmVhZDo6ZGVsZXRlVGV4dHVyZXMoKQorQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6On5D
YW52YXNMYXllcldlYktpdFRocmVhZCgpCit7CisgICAgbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgp
LT5zZXRDbGllbnQoMCk7CisgICAgZGVsZXRlIG1fY29tcG9zaXRpbmdUaHJlYWRDbGllbnQ7Cit9
CisKK3ZvaWQgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OmNsZWFyQnVmZmVyKENhbnZhc0xheWVy
V2ViS2l0VGhyZWFkKiBsYXllcikKIHsKLSAgICBpZiAoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmdldCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgZGVsZXRlRnJvbnRCdWZmZXIo
KTsKKyAgICBsYXllci0+bV9jb21wb3NpdGluZ1RocmVhZENsaWVudC0+Y2xlYXJCdWZmZXIoKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5oCmluZGV4IDYy
ZTYyYjJlM2RkNDQwYTg0NjhiZGMyMGY2MjIyNGUzYzMwNTg1ZjMuLmEwZmYxOTJiNjgyYjAwMDll
OTg2MWVhMDQ4ZWJlZGEwZWMyYWE2ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmgKQEAgLTIzLDMxICsyMywyNyBAQAogCiAjaW5jbHVkZSAiRUdMSW1hZ2VMYXll
cldlYktpdFRocmVhZC5oIgogCi1jbGFzcyBTa0dwdURldmljZTsKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2NsYXNzIENhbnZhc0xheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQ7CiAKLWNsYXNzIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkIDogcHVi
bGljIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQgeworY2xhc3MgQ2FudmFzTGF5ZXJXZWJLaXRU
aHJlYWQgOiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhc0xheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoU2tHcHVEZXZpY2UqIGRl
dmljZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNMYXllcldlYktpdFRocmVhZD4gY3Jl
YXRlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIsIGNvbnN0
IEludFNpemUmIHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZh
c0xheWVyV2ViS2l0VGhyZWFkKGRldmljZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKGJ1ZmZlciwgc2l6ZSkpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgfkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKCk7CiAKLSAgICB2b2lkIHNldERldmljZShT
a0dwdURldmljZSopOworICAgIHN0YXRpYyB2b2lkIGNsZWFyQnVmZmVyKENhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkKik7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZUNvbnRlbnRzSWZOZWVkZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoKTsK
IAogcHJpdmF0ZToKLSAgICBDYW52YXNMYXllcldlYktpdFRocmVhZChTa0dwdURldmljZSopOwot
Ci0gICAgU2tHcHVEZXZpY2UqIG1fZGV2aWNlOworICAgIENhbnZhc0xheWVyV2ViS2l0VGhyZWFk
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwgY29uc3QgSW50U2l6ZSYp
OworICAgIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIG1fY29tcG9zaXRpbmdU
aHJlYWRDbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Rpc3BsYXlSZWZyZXNo
TW9uaXRvckJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9EaXNwbGF5UmVmcmVzaE1vbml0b3JCbGFja0JlcnJ5LmNwcAppbmRleCAwMjgx
YWExZTViN2JmMDE1YzM0ODI0Zjk4YzhlODg1NDY0YTU5YTM5Li5iODVhZmMzNDUxMzY1YTNiYzUz
NmQ2Mjg0NzQ3ZDA0ODI4OTY0YjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0Rpc3BsYXlSZWZyZXNoTW9uaXRvckJsYWNrQmVycnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRGlzcGxh
eVJlZnJlc2hNb25pdG9yQmxhY2tCZXJyeS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBEaXNw
bGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQoKQogCiAgICAgbV9wcmV2aW91c0Zy
YW1lRG9uZSA9IGZhbHNlOwogCi0gICAgbV9tb25vdG9uaWNBbmltYXRpb25TdGFydFRpbWUgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRU
aW1lKCk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKGhhbmRsZURpc3BsYXlSZWZyZXNoZWROb3Rp
ZmljYXRpb25Pbk1haW5UaHJlYWQsIHRoaXMpOwogICAgIG1fbXV0ZXgudW5sb2NrKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdp
bmdCdWZmZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCmluZGV4IDc4MDg3NjA2MTdi
ZjExZWQ2YTRiOTY5NWRiNjliOWRmMTdkYmU5YjMuLmM1MzEwOGMwMGExMWQ3NjBjNTEyMjZlZTlk
NzVkOGUyZTU3YmFiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVy
cnkuY3BwCkBAIC02Nyw4ICs2Nyw2IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9mYm8oY29udGV4dC0+
Y3JlYXRlRnJhbWVidWZmZXIoKSkKLSAgICAsIG1fZnJvbnRDb2xvckJ1ZmZlcigwKQotICAgICwg
bV9zZXBhcmF0ZUZyb250VGV4dHVyZShmYWxzZSkKIHsKICAgICBtX2ludGVybmFsID0gYWRvcHRQ
dHIobmV3IERyYXdpbmdCdWZmZXJJbnRlcm5hbCk7CiAKQEAgLTg3LDYgKzg1LDI1IEBAIERyYXdp
bmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgIG1fY2FsbGJhY2stPndpbGxQdWJsaXNoKCk7CisK
KyAgICAvLyBGSVhNRTogV2UgZG8gdGhlIGNvcHkgaW4gdGhlIGNhbnZhcycgKGNoaWxkKSBjb250
ZXh0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgcmVsYXRpdmUgdG8K
KyAgICAvLyBvdGhlciBjb21tYW5kcyBpbiB0aGUgY2hpbGQgY29udGV4dC4gVGhpcyBlbnN1cmVz
IHRoYXQgdGhlIHBhcmVudCB0ZXh0dXJlIGFsd2F5cyBjb250YWlucyBhIGNvbXBsZXRlCisgICAg
Ly8gZnJhbWUgYW5kIG5vdCBzb21lIGludGVybWVkaWF0ZSByZXN1bHQuIEhvd2V2ZXIsIHRoZXJl
IGlzIG5vIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgdGhhdCB0aGlzIGNvcHkKKyAgICAvLyBo
YXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3cy4gVGhpcyBtZWFucyB3ZSBtaWdodCBk
cmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuIElkZWFsbHkgdGhpcworICAgIC8vIHdvdWxkIGlu
c2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1hbmQgc3RyZWFtIHRoYXQgdGhlIGNvbXBv
c2l0b3IgY291bGQgd2FpdCBmb3IuCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisjZW5kaWYKKwogYm9vbCBEcmF3aW5nQnVm
ZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQogewogICAgIGlmICghbV9jb250ZXh0
KQpAQCAtMTA4LDI0ICsxMjUsNiBAQCBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0
Zm9ybUxheWVyKCkKIHsKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci5nZXQo
KTsKIH0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpwcmVwYXJlQmFja0J1ZmZlcigpCi17Ci19Ci0K
LWJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVxdWlyZXNDb3B5RnJvbUJhY2tUb0Zyb250QnVmZmVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIERyYXdpbmdCdWZmZXI6
OmZyb250Q29sb3JCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBjb2xvckJ1ZmZlcigpOwot
fQotCi12b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyUGxhdGZvcm1MYXllcigpCi17Ci19CiAjZW5k
aWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCmluZGV4IGU1NGFlYWRh
MzUzYWQxODQ1YzIwMzhiNTZjNTM5YzFiMGU4MmFiNmMuLjNlNDhjMjkzNWVjYTJlOGUzNTVkNGFl
N2FmM2EwNWRjN2UyNDk2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTElt
YWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAKQEAgLTIyLDYgKzIyLDggQEAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0
aW5nVGhyZWFkLmgiCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJTaGFyZWRUZXh0dXJlLmg+CiAjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1Mb2cuaD4KICNpbmNsdWRlIDxFR0wvZWdsLmg+CkBAIC0yOSw5NiArMzEsNTYgQEAK
ICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAotbmFt
ZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczsKIAotc3RhdGljIFBGTkdMRUdMSU1BR0VUQVJHRVRURVhUVVJFMkRPRVNQUk9DIGds
RUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMgPSAwOwotc3RhdGljIFBGTkVHTERFU1RST1lJTUFH
RUtIUlBST0MgZWdsRGVzdHJveUltYWdlS0hSID0gMDsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojp+RUdMSW1hZ2VMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50KCkKIHsKICAgICAvLyBTb21lb25lIHNob3VsZCBoYXZlIGNhbGxl
ZCBkZWxldGVUZXh0dXJlcygpIGJ5IG5vdwotICAgIEFTU0VSVCghbV90ZXh0dXJlICYmICFtX2lt
YWdlKTsKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUFjY2Vzc29yKTsKIH0KIAogdm9pZCBFR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCopCiB7Ci0gICAgaWYgKCFtX2ltYWdlQ2hhbmdlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTKSB7Ci0g
ICAgICAgIGdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMgPSByZWludGVycHJldF9jYXN0PFBG
TkdMRUdMSU1BR0VUQVJHRVRURVhUVVJFMkRPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xF
R0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyIpKTsKLSAgICAgICAgQVNTRVJUKGdsRUdMSW1hZ2VU
YXJnZXRUZXh0dXJlMkRPRVMpOwotICAgICAgICBpZiAoIWdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJl
MkRPRVMpIHsKLSAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTsKLSAgICAgICAgICAgIGxvZ0Fsd2F5cyhMb2dMZXZlbFdhcm4sICJlZ2xHZXRQcm9jQWRkcmVz
cyBmb3IgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyBGQUlMRUQiKTsKLSAgICAgICAgICAg
IG1faW1hZ2VDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBpZiAoIW1fdGV4dHVyZSkgewot
ICAgICAgICAgICAgbV90ZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBt
X3RleHR1cmUtPnByb3RlY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENvbm5lY3QgdG8g
dGhlIG5ldyBpbWFnZQotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZS0+dGV4dHVyZUlkKCkpOwotICAgICAgICBnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VT
KEdMX1RFWFRVUkVfMkQsIG1faW1hZ2UpOwotICAgIH0gZWxzZSBpZiAobV90ZXh0dXJlKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZS0+dW5wcm90ZWN0KCk7Ci0gICAgICAgIG1fdGV4dHVyZS5jbGVhcigp
OwotICAgIH0KLQotICAgIG1faW1hZ2VDaGFuZ2VkID0gZmFsc2U7CiB9CiAKLXZvaWQgRUdMSW1h
Z2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSAvKnNjYWxlKi8sIGludCBwb3NpdGlvbkxvY2F0aW9u
LCBpbnQgdGV4Q29vcmRMb2NhdGlvbikKK3ZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRv
dWJsZSAvKnNjYWxlKi8sIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAgICBzdGF0
aWMgZmxvYXQgdXBzaWRlRG93bls0ICogMl0gPSB7IDAsIDEsICAwLCAwLCAgMSwgMCwgIDEsIDEg
fTsKIAotICAgIGlmICghbV90ZXh0dXJlKQorICAgIGlmICghbV90ZXh0dXJlQWNjZXNzb3IgfHwg
IW1fdGV4dHVyZUFjY2Vzc29yLT50ZXh0dXJlSUQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgMCwgJmxheWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5kcygpKTsKLSAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIodGV4Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1
cHNpZGVEb3duKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZS0+
dGV4dHVyZUlkKCkpOworICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKKyAgICBnbEJsZW5kRnVuYyhH
TF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFt
Lm1fcHJvZ3JhbSk7CisgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwg
bGF5ZXItPmRyYXdPcGFjaXR5KCkpOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFt
LnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdl
dFRyYW5zZm9ybWVkQm91bmRzKCkpOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFt
LnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1cHNpZGVEb3du
KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUFjY2Vzc29yLT50
ZXh0dXJlSUQoKSk7CiAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CiB9
CiAKIHZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkZWxldGVUZXh0
dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKIHsKLSAgICBpZiAobV90ZXh0dXJlKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZS0+dW5wcm90ZWN0KCk7Ci0gICAgICAgIG1fdGV4dHVyZS5jbGVhcigp
OwotICAgIH0KLQotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SWYgdGhlIGltYWdlIGlzIHN0aWxsIHdpdGggdXMsIGl0IHdhcyBuZXZlciBkZXN0cm95ZWQgYnkg
dGhlIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuCi0gICAgaWYgKCFlZ2xEZXN0cm95SW1hZ2VL
SFIpCi0gICAgICAgIGVnbERlc3Ryb3lJbWFnZUtIUiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZORUdM
REVTVFJPWUlNQUdFS0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImVnbERlc3Ryb3lJbWFnZUtI
UiIpKTsKLQotICAgIEFTU0VSVChlZ2xEZXN0cm95SW1hZ2VLSFIpOwotICAgIGlmIChlZ2xEZXN0
cm95SW1hZ2VLSFIpCi0gICAgICAgIGVnbERlc3Ryb3lJbWFnZUtIUihCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmVnbERpc3BsYXkoKSwgbV9pbWFnZSk7Ci0KLSAgICBtX2ltYWdlID0g
MDsKKyAgICBkZWxldGUgbV90ZXh0dXJlQWNjZXNzb3I7CisgICAgbV90ZXh0dXJlQWNjZXNzb3Ig
PSAwOwogfQogCiB2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6Ymlu
ZENvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKIHsKLSAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpOworICAgIGlmICht
X3RleHR1cmVBY2Nlc3NvcikKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmVBY2Nlc3Nvci0+dGV4dHVyZUlEKCkpOwogfQogCi12b2lkIEVHTEltYWdlTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudDo6c2V0SW1hZ2Uodm9pZCogaW1hZ2UpCit2b2lkIEVHTElt
YWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6c2V0VGV4dHVyZUFjY2Vzc29yKEdMRVMy
U2hhcmVkVGV4dHVyZUFjY2Vzc29yKiB0ZXh0dXJlQWNjZXNzb3IpCiB7Ci0gICAgaWYgKG1faW1h
Z2UgPT0gaW1hZ2UpCisgICAgaWYgKG1fdGV4dHVyZUFjY2Vzc29yID09IHRleHR1cmVBY2Nlc3Nv
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIG1faW1hZ2VD
aGFuZ2VkID0gdHJ1ZTsKKyAgICBkZWxldGUgbV90ZXh0dXJlQWNjZXNzb3I7CisgICAgbV90ZXh0
dXJlQWNjZXNzb3IgPSB0ZXh0dXJlQWNjZXNzb3I7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudC5oCmluZGV4IDk2N2MxMzBhNjBiNzE5YTQ5ZTljOWNiNmEwNWYyYWYyNzk4OGFh
ODQuLjA5OWQ4NDA2NDQ5YTVmMGVmZjJhZWY5OGM0ZDEzYWQzNmQzODRkNTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQu
aApAQCAtMjIsMTEgKzIyLDE4IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CiAjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oIgotI2luY2x1ZGUgIlRl
eHR1cmUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAorbmFtZXNwYWNl
IEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7
CitjbGFzcyBHTEVTMlNoYXJlZFRleHR1cmVBY2Nlc3NvcjsKK30KK30KK30KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwpAQCAtNDgsMjUgKzU1
LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSB7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3Vi
bGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91
YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5n
VGhyZWFkKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllckNv
bXBvc2l0aW5nVGhyZWFkKik7CiAKLSAgICAvLyBUaGUgaW1hZ2UgbXVzdCBub3QgYmUgZGVsZXRl
ZCB3aGlsZSBpbiBvdXIgY3VzdG9keSwgaG93ZXZlciBhZnRlciBjaGFuZ2luZyBpbWFnZSB5b3Ug
YXJlIGZyZWUgdG8gZGVsZXRlIHRoZSBvbGQgb25lLgotICAgIHZvaWQgc2V0SW1hZ2Uodm9pZCop
OworICAgIHZvaWQgc2V0VGV4dHVyZUFjY2Vzc29yKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6R0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqKTsKIAogcHJpdmF0ZToKICAgICBFR0xJ
bWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoKQotICAgICAgICA6IG1faW1hZ2UoMCkK
LSAgICAgICAgLCBtX2ltYWdlQ2hhbmdlZChmYWxzZSkKKyAgICAgICAgOiBtX3RleHR1cmVBY2Nl
c3NvcigwKQogICAgIHsKICAgICAgICAgcmVmKCk7IC8vIE1hdGNoZWQgYnkgZGVyZWYoKSBpbiBs
YXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKCkKICAgICB9CiAKLSAgICB2b2lkKiBtX2lt
YWdlOwotICAgIGJvb2wgbV9pbWFnZUNoYW5nZWQ7Ci0gICAgUmVmUHRyPFRleHR1cmU+IG1fdGV4
dHVyZTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyU2hhcmVkVGV4
dHVyZUFjY2Vzc29yKiBtX3RleHR1cmVBY2Nlc3NvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmlu
ZGV4IDg5MjBlOTg3YWE3NmQ1YzZkZDc0YTEwZDRhODBhYjJmZDFjN2FkMjQuLjQxNzcwMTQxZDE1
ZmRhMjhkMDdmYzlkZmU3MDAwMGQxMjhmMTRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJ
bWFnZUxheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtMjUsNDEgKzI1LDM2IEBACiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0U3RhdGUuaD4KKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlNoYXJlZFRleHR1cmUuaD4KICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxv
Zy5oPgogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KICNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAKLXVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6R0xFUzJQcm9ncmFtOwotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpH
TEVTMkNvbnRleHRTdGF0ZTsKK3VzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBGTkVHTENSRUFURUlN
QUdFS0hSUFJPQyBlZ2xDcmVhdGVJbWFnZUtIUiA9IDA7Ci1zdGF0aWMgUEZORUdMREVTVFJPWUlN
QUdFS0hSUFJPQyBlZ2xEZXN0cm95SW1hZ2VLSFIgPSAwOwotCiBFR0xJbWFnZUxheWVyV2ViS2l0
VGhyZWFkOjpFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBlKQogICAgIDog
TGF5ZXJXZWJLaXRUaHJlYWQodHlwZSwgMCkKICAgICAsIG1fY2xpZW50KEVHTEltYWdlTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudDo6Y3JlYXRlKCkpCiAgICAgLCBtX25lZWRzRGlzcGxheShm
YWxzZSkKLSAgICAsIG1fZnJvbnRCdWZmZXJUZXh0dXJlKDApCi0gICAgLCBtX2ZibygwKQogICAg
ICwgbV9wcm9ncmFtKDApCi0gICAgLCBtX2ltYWdlKDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAg
ICAsIG1fdGV4dHVyZUFjY2Vzc29yKDApCiB7CiAgICAgbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgp
LT5zZXRDbGllbnQobV9jbGllbnQuZ2V0KCkpOwotICAgIHNldExheWVyUHJvZ3JhbVNoYWRlcihM
YXllclByb2dyYW1TaGFkZXJSR0JBKTsKKyAgICBzZXRMYXllclByb2dyYW0oTGF5ZXJQcm9ncmFt
UkdCQSk7CiB9CiAKIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6On5FR0xJbWFnZUxheWVyV2Vi
S2l0VGhyZWFkKCkKIHsKICAgICAvLyBUaGUgc3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGNh
bGxpbmcgZGVsZXRlRnJvbnRCdWZmZXIoKQogICAgIC8vIGJlZm9yZSB3ZSBnZXQgdGhpcyBmYXIu
Ci0gICAgQVNTRVJUKCFtX2Zyb250QnVmZmVyVGV4dHVyZSk7Ci0gICAgQVNTRVJUKCFtX2Zibyk7
CiAgICAgQVNTRVJUKCFtX3Byb2dyYW0pOwotICAgIEFTU0VSVCghbV9pbWFnZSk7CisgICAgQVNT
RVJUKCFtX3RleHR1cmUpOworICAgIEFTU0VSVCghbV90ZXh0dXJlQWNjZXNzb3IpOwogfQogCiB2
b2lkIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCkBAIC03Niw5
ICs3MSw2IEBAIHZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgaWYgKHNpemUgIT0gbV9zaXplKSB7CiAgICAgICAgICAgICBkZWxldGVGcm9u
dEJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgICAgICAgICAgbV9n
YXJiYWdlLmFwcGVuZChtX2ltYWdlKTsKLSAgICAgICAgICAgIG1faW1hZ2UgPSAwOwogICAgICAg
ICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgfQogCkBAIC04NiwxOSArNzgsNiBAQCB2b2lk
IEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZUZyb250QnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUsIHVuc2lnbmVkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWVn
bENyZWF0ZUltYWdlS0hSKSB7Ci0gICAgICAgIGVnbENyZWF0ZUltYWdlS0hSID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJlZ2xD
cmVhdGVJbWFnZUtIUiIpKTsKLSAgICAgICAgZWdsRGVzdHJveUltYWdlS0hSID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZWds
RGVzdHJveUltYWdlS0hSIikpOwotICAgIH0KLQotICAgIEFTU0VSVChlZ2xDcmVhdGVJbWFnZUtI
UiAmJiBlZ2xEZXN0cm95SW1hZ2VLSFIpOwotICAgIGlmICghZWdsQ3JlYXRlSW1hZ2VLSFIgfHwg
IWVnbERlc3Ryb3lJbWFnZUtIUikgewotICAgICAgICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJy
eTo6UGxhdGZvcm07Ci0gICAgICAgIGxvZ0Fsd2F5cyhMb2dMZXZlbFdhcm4sICJlZ2xHZXRQcm9j
QWRkcmVzcyBmb3IgZWdsQ3JlYXRlL0Rlc3Ryb3lJbWFnZUtIUiBGQUlMRUQiKTsKLSAgICAgICAg
bV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEdM
ZW51bSBjdXJyZW50QWN0aXZlVGV4dHVyZSA9IDA7CiAgICAgZ2xHZXRJbnRlZ2VydihHTF9BQ1RJ
VkVfVEVYVFVSRSwgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZjdXJyZW50QWN0aXZlVGV4dHVy
ZSkpOwogICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CkBAIC0xMDYsNyArODUsNyBA
QCB2b2lkIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZUZyb250QnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUsIHVuc2lnbmVkCiAgICAgewogICAgICAgICBHTEVTMkNvbnRleHRTdGF0
ZTo6VGV4dHVyZUFuZEZCT1N0YXRlU2F2ZXIgdGV4dHVyZUFuZEZCT1N0YXRlU2F2ZXI7CiAKLSAg
ICAgICAgaWYgKCFjcmVhdGVJbWFnZUlmTmVlZGVkKHNpemUpKQorICAgICAgICBpZiAoIWNyZWF0
ZVRleHR1cmVJZk5lZWRlZChzaXplKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBt
X25lZWRzRGlzcGxheSA9IGZhbHNlOwpAQCAtMTE5LDE2ICs5OCwxNCBAQCB2b2lkIEVHTEltYWdl
TGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZUZyb250QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUs
IHVuc2lnbmVkCiAKIHZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlRnJvbnRC
dWZmZXIoKQogewotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fZnJvbnRCdWZmZXJUZXh0dXJl
KTsKLSAgICBtX2Zyb250QnVmZmVyVGV4dHVyZSA9IDA7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKTsKLSAgICBtX2ZibyA9IDA7CisgICAgZGVsZXRlIG1fdGV4dHVyZTsKKyAg
ICBtX3RleHR1cmUgPSAwOwogICAgIGdsRGVsZXRlUHJvZ3JhbShtX3Byb2dyYW0pOwogICAgIG1f
cHJvZ3JhbSA9IDA7CiAKLSAgICAvLyBUaGUgaW1hZ2UgaXMgaW4gb3VyIEVHTEltYWdlTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudCdzIGN1c3RvZHkKKyAgICAvLyBUaGUgdGV4dHVyZSBhY2Nl
c3NvciBpcyBpbiBvdXIgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50J3MgY3Vz
dG9keQogICAgIC8vIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGF0IG9iamVjdCBpcyByZXNwb25zaWJs
ZSBmb3IgZGVsZXRpbmcgaXQuCi0gICAgbV9pbWFnZSA9IDA7CisgICAgbV90ZXh0dXJlQWNjZXNz
b3IgPSAwOwogCiAgICAgLy8gSWYgYW55b25lIHRyaWVzIHRvIHJlbmRlciB1cyBhZnRlciB0aGlz
LCB3ZSdyZSBjZXJ0YWlubHkgZ29pbmcgdG8gbmVlZCBkaXNwbGF5LgogICAgIG1fbmVlZHNEaXNw
bGF5ID0gdHJ1ZTsKQEAgLTEzOSw1NSArMTE2LDIxIEBAIHZvaWQgRUdMSW1hZ2VMYXllcldlYktp
dFRocmVhZDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKICAgICAvLyBUaGlzIGNhbGwg
aXMgc2VyaWFsaXplZCB3aXRoIHRoZSBjb21wb3NpdGluZyB0aHJlYWQsIHNvIGl0J3Mgc2FmZSB0
byB1cGRhdGUgdGhlCiAgICAgLy8gaW1hZ2UgYW5kIGRlc3Ryb3kgYW55IG9sZCBpbWFnZXMuCiAK
LSAgICBtX2NsaWVudC0+c2V0SW1hZ2UobV9pbWFnZSk7Ci0KLSAgICAvLyBEZXN0cm95IHRoZSBn
YXJiYWdlIGltYWdlcyBpbiBhIHRocmVhZC1zYWZlIHdheQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9nYXJiYWdlLnNpemUoKTsgKytpKQotICAgICAgICBlZ2xEZXN0cm95SW1hZ2VLSFIo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjplZ2xEaXNwbGF5KCksIG1fZ2FyYmFnZVtp
XSk7CisgICAgbV9jbGllbnQtPnNldFRleHR1cmVBY2Nlc3NvcihtX3RleHR1cmVBY2Nlc3Nvcik7
CiB9CiAKLWJvb2wgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlSW1hZ2VJZk5lZWRl
ZChjb25zdCBJbnRTaXplJiBzaXplKQorYm9vbCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpj
cmVhdGVUZXh0dXJlSWZOZWVkZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICAvLyBXZSB1
c2UgYSB0ZXh0dXJlIHJhdGhlciB0aGFuIGEgcmVuZGVyYnVmZmVyIGFzIHRoZSBiYXNpcyBvZiB0
aGUgRkJPIGFuZCBFR0xJbWFnZSwKLSAgICAvLyBzaW5jZSB0aGUgRUdMSW1hZ2Ugd2lsbCBiZSB1
c2VkIGFzIGEgdGV4dHVyZSBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFkIGluIHRoZSBlbmQuCi0K
LSAgICBpZiAoIW1fZnJvbnRCdWZmZXJUZXh0dXJlKSB7Ci0gICAgICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm1fZnJvbnRCdWZmZXJUZXh0dXJlKTsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX2Zyb250QnVmZmVyVGV4dHVyZSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
fQotCi0gICAgaWYgKCFtX2ZibykKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKLQotICAgIGlmICghbV9pbWFnZSB8fCBzaXplICE9IG1fc2l6ZSkgewotICAgICAgICBJbnRT
aXplIGZib1NpemUgPSBzaXplOwotCi0gICAgICAgIC8vIEltYWdpbmF0aW9uLXNwZWNpZmljIGZp
eAotICAgICAgICBzdGF0aWMgYm9vbCBpc0ltYWdpbmF0aW9uSGFyZHdhcmUgPSBzdGQ6OnN0cnN0
cihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9SRU5ERVJFUikp
LCAiUG93ZXJWUiBTR1giKTsKLSAgICAgICAgaWYgKGlzSW1hZ2luYXRpb25IYXJkd2FyZSkKLSAg
ICAgICAgICAgIGZib1NpemUgPSBmYm9TaXplLmV4cGFuZGVkVG8oSW50U2l6ZSgxNiwgMTYpKTsK
LQotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZnJvbnRCdWZmZXJUZXh0
dXJlKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIGZib1NpemUu
d2lkdGgoKSwgZmJvU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MCk7Ci0gICAgICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2Zyb250QnVmZmVyVGV4dHVyZSwgMCk7
Ci0KLSAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChnbEdldEVycm9yKCkgIT0gR0xfTk9fRVJST1IpCisgICAgaWYgKCFtX3RleHR1
cmUgfHwgc2l6ZSAhPSBtX3NpemUpIHsKKyAgICAgICAgZGVsZXRlIG1fdGV4dHVyZTsKKyAgICAg
ICAgbV90ZXh0dXJlID0gbmV3IEdMRVMyU2hhcmVkVGV4dHVyZShzaXplKTsKKyAgICAgICAgaWYg
KCFtX3RleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZGVsZXRlIG1fdGV4dHVyZTsK
KyAgICAgICAgICAgIG1fdGV4dHVyZSA9IDA7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KIAotICAgICAgICAvLyBUaGUgc2libGluZyBpcyBvcnBoYW5lZCBhZnRlciBnbFRl
eEltYWdlMkQsIHJlY3JlYXRlIHRoZSBpbWFnZS4KLSAgICAgICAgaWYgKG1faW1hZ2UpCi0gICAg
ICAgICAgICBtX2dhcmJhZ2UuYXBwZW5kKG1faW1hZ2UpOwotICAgICAgICBtX2ltYWdlID0gZWds
Q3JlYXRlSW1hZ2VLSFIoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjplZ2xEaXNwbGF5
KCksIGVnbEdldEN1cnJlbnRDb250ZXh0KCksCi0gICAgICAgICAgICAgICAgRUdMX0dMX1RFWFRV
UkVfMkRfS0hSLCAoRUdMQ2xpZW50QnVmZmVyKW1fZnJvbnRCdWZmZXJUZXh0dXJlLCAwKTsKLSAg
ICAgICAgaWYgKCFtX2ltYWdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X3RleHR1cmVBY2Nlc3NvciA9IG1fdGV4dHVyZS0+Y3JlYXRlVGV4dHVyZUFjY2Vzc29yKCk7CiAK
ICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICB9CkBAIC0yMzQsMTcgKzE3NywxMiBAQCB2b2lk
IEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmJsaXRUb0Zyb250QnVmZmVyKHVuc2lnbmVkIGJh
Y2tCdWZmZXJUZXh0dXJlKQogICAgIGlmICghYmFja0J1ZmZlclRleHR1cmUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgZ2xHZXRJbnRlZ2Vy
dihHTF9DVVJSRU5UX1BST0dSQU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmY3VycmVudFBy
b2dyYW0pKTsKKyAgICBHTEVTMkNvbnRleHRTdGF0ZTo6UHJvZ3JhbVN0YXRlU2F2ZXIgcHJvZ3Jh
bVN0YXRlU2F2ZXI7CiAKICAgICBjcmVhdGVTaGFkZXJJZk5lZWRlZCgpOwogCi0gICAgR0x1aW50
IGN1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmcgPSAwLCBjdXJyZW50RWxlbWVudEFycmF5QnVmZmVy
QmluZGluZyA9IDA7Ci0gICAgR0xpbnQgY3VycmVudFZpZXdwb3J0WzRdID0geyAwLCAwLCAwLCAw
IH07Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9BUlJBWV9CVUZGRVJfQklORElORywgcmVpbnRlcnBy
ZXRfY2FzdDxHTGludCo+KCZjdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKSk7Ci0gICAgZ2xHZXRJ
bnRlZ2VydihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCByZWludGVycHJldF9jYXN0
PEdMaW50Kj4oJmN1cnJlbnRFbGVtZW50QXJyYXlCdWZmZXJCaW5kaW5nKSk7Ci0gICAgZ2xHZXRJ
bnRlZ2VydihHTF9WSUVXUE9SVCwgJmN1cnJlbnRWaWV3cG9ydFswXSk7Ci0KKyAgICBHTEVTMkNv
bnRleHRTdGF0ZTo6QnVmZmVyQmluZGluZ1NhdmVyIGJ1ZmZlckJpbmRpbmdTYXZlcjsKKyAgICBH
TEVTMkNvbnRleHRTdGF0ZTo6Vmlld3BvcnRTYXZlciB2aWV3cG9ydFNhdmVyOwogICAgIEdMRVMy
Q29udGV4dFN0YXRlOjpHbG9iYWxGbGFnU3RhdGVTYXZlciBmbGFnU3RhdGVTYXZlcihHTEVTMkNv
bnRleHRTdGF0ZTo6R2xvYmFsRmxhZ1N0YXRlOjpEb250UmVzdG9yZUJsZW5kRnVuYyk7CiAKICAg
ICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CkBAIC0yNTQsNyArMTkyLDcgQEAgdm9pZCBFR0xJ
bWFnZUxheWVyV2ViS2l0VGhyZWFkOjpibGl0VG9Gcm9udEJ1ZmZlcih1bnNpZ25lZCBiYWNrQnVm
ZmVyVGV4dHVyZSkKICAgICBnbERpc2FibGUoR0xfQkxFTkQpOwogCiAgICAgZ2xWaWV3cG9ydCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1ha2VCdWZmZXJDdXJyZW50KG1fdGV4
dHVyZS0+YnVmZmVyKCksIEdMRVMyKTsKICAgICBnbFVzZVByb2dyYW0obV9wcm9ncmFtKTsKICAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJhY2tCdWZmZXJUZXh0dXJlKTsKICAgICBn
bENvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKQEAgLTI3NywxOCArMjE1LDcgQEAg
dm9pZCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpibGl0VG9Gcm9udEJ1ZmZlcih1bnNpZ25l
ZCBiYWNrQnVmZmVyVGV4dHVyZSkKIAogICAgICAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHTEVTMlByb2dyYW06OlBvc2l0aW9uQXR0cmlidXRlSW5kZXgpOwogICAgICAgICBnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHTEVTMlByb2dyYW06OlRleENvb3JkQXR0cmlidXRlSW5kZXgp
OwotCi0gICAgICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIGN1cnJlbnRBcnJheUJ1
ZmZlckJpbmRpbmcpOwotICAgICAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVIsIGN1cnJlbnRFbGVtZW50QXJyYXlCdWZmZXJCaW5kaW5nKTsKICAgICB9Ci0KLSAgICAvLyBU
aGUgcHJldmlvdXMgcHJvZ3JhbSBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZCBieSByZWZjb3VudCBk
ZXN0cnVjdGlvbgotICAgIC8vIHdpdGggYW5vdGhlciBvbmUgbm93IGluIHVzZS4gRG9uJ3QgdHJ5
IHRvIHJlc3RvcmUgaXQgbGF0ZXIuCi0gICAgaWYgKGN1cnJlbnRQcm9ncmFtICYmICFnbElzUHJv
Z3JhbShjdXJyZW50UHJvZ3JhbSkpCi0gICAgICAgIGN1cnJlbnRQcm9ncmFtID0gMDsKLQotICAg
IGdsVXNlUHJvZ3JhbShjdXJyZW50UHJvZ3JhbSk7Ci0gICAgZ2xWaWV3cG9ydChjdXJyZW50Vmll
d3BvcnRbMF0sIGN1cnJlbnRWaWV3cG9ydFsxXSwgY3VycmVudFZpZXdwb3J0WzJdLCBjdXJyZW50
Vmlld3BvcnRbM10pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktp
dFRocmVhZC5oCmluZGV4IDdmODQyZTk2MGM5YzMxOGQ0ZjZlZDlhMGU2OTljYTM0Nzk2OTAyODcu
LjI3ZTk4NzhmYTY2MDRlZjcwMjdkYWYwZmY1MGY2YTBmMmFlMTlkMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldl
YktpdFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oCkBAIC0yNCw2ICsyNCwxNSBAQAogI2lu
Y2x1ZGUgIkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oIgogI2luY2x1ZGUg
IkxheWVyV2ViS2l0VGhyZWFkLmgiCiAKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFj
ZSBQbGF0Zm9ybSB7CituYW1lc3BhY2UgR3JhcGhpY3MgeworY2xhc3MgR0xFUzJTaGFyZWRUZXh0
dXJlOworY2xhc3MgR0xFUzJTaGFyZWRUZXh0dXJlQWNjZXNzb3I7Cit9Cit9Cit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gQmFzZSBjbGFzcyBmb3IgRUdMSW1hZ2UgYmFzZWQgbGF5ZXJz
CkBAIC00OCwxNyArNTcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVsZXRlRnJvbnRCdWZm
ZXIoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNyZWF0ZUltYWdlSWZOZWVkZWQoY29uc3QgSW50
U2l6ZSYpOworICAgIGJvb2wgY3JlYXRlVGV4dHVyZUlmTmVlZGVkKGNvbnN0IEludFNpemUmKTsK
ICAgICB2b2lkIGNyZWF0ZVNoYWRlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBibGl0VG9Gcm9udEJ1
ZmZlcih1bnNpZ25lZCBiYWNrQnVmZmVyVGV4dHVyZSk7CiAKICAgICBSZWZQdHI8RUdMSW1hZ2VM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50PiBtX2NsaWVudDsKICAgICBib29sIG1fbmVlZHNE
aXNwbGF5OwotICAgIHVuc2lnbmVkIG1fZnJvbnRCdWZmZXJUZXh0dXJlOwotICAgIHVuc2lnbmVk
IG1fZmJvOwogICAgIHVuc2lnbmVkIG1fcHJvZ3JhbTsKLSAgICB2b2lkKiBtX2ltYWdlOwotICAg
IFZlY3Rvcjx2b2lkKj4gbV9nYXJiYWdlOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6R0xFUzJTaGFyZWRUZXh0dXJlKiBtX3RleHR1cmU7CisgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpHTEVTMlNoYXJlZFRleHR1cmVBY2Nlc3NvciogbV90ZXh0dXJlQWNj
ZXNzb3I7CiAgICAgSW50U2l6ZSBtX3NpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UmVjdEJsYWNrQmVycnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9GbG9hdFJlY3RC
bGFja0JlcnJ5LmNwcAppbmRleCBkNDExMzk3MjBjMjgyOTFiZWJkOGY5NTg1NDllNjk0Yjk3ZTcx
ODE1Li5lN2QzYzMyZTdhYzZiY2UzYjg2M2M1NTI0YzliYTc3MDM1YWMxYTFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UmVjdEJs
YWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRmxvYXRSZWN0QmxhY2tCZXJyeS5jcHAKQEAgLTM0LDQgKzM0LDE5IEBAIEZsb2F0UmVj
dDo6b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdCgpIGNvbnN0CiAgICAg
cmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCks
IGhlaWdodCgpKTsKIH0KIAorRmxvYXRSZWN0IEZsb2F0UmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0
Cit7CisgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRSZWN0ID0gKnRoaXM7CisKKyAgICBpZiAod2lk
dGgoKSA8IDApIHsKKyAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsK
KyAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0V2lkdGgoLXdpZHRoKCkpOworICAgIH0KKyAgICBp
ZiAoaGVpZ2h0KCkgPCAwKSB7CisgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFkoeSgpICsgaGVp
Z2h0KCkpOworICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRIZWlnaHQoLWhlaWdodCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRSZWN0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvRm9udEJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwNjdhNDBlYWU5ZTZm
N2Q1NTQzNjY4MmM4N2MxYmY2ZjRiZDZiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcApAQCAt
MCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVy
LmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgorCisjaW5jbHVkZSA8
ZnNfYXBpLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworc3RhdGljIGlubGluZSBm
bG9hdCBGU0ZpeGVkVG9GbG9hdChGU19GSVhFRCBuKSB7IHJldHVybiBuIC8gNjU1MzYuMDsgfQor
c3RhdGljIGlubGluZSBGU19GSVhFRCBGbG9hdFRvRlNGaXhlZChmbG9hdCBuKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxGU19GSVhFRD4obiAqIDY1NTM2KTsgfQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3sKKyAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVy
KHRoaXMsIHJ1bik7CisgICAgc2hhcGVyLnNldERyYXdSYW5nZShmcm9tLCB0byk7CisgICAgaWYg
KCFzaGFwZXIuc2hhcGUoJmdseXBoQnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0
UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHNoYXBlci5hZGp1c3RTdGFydFBvaW50KHBvaW50KTsKKwor
ICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBhZGp1c3RlZFBv
aW50KTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0Zv
bnRzICovLCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBjb25zdAoreworICAg
IEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOworICAgIGlmICghc2hhcGVyLnNoYXBl
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaGFwZXIudG90YWxXaWR0aCgpOwor
fQorCisvLyBSZXR1cm4gdGhlIGNvZGUgcG9pbnQgaW5kZXggZm9yIHRoZSBnaXZlbiB8eHwgb2Zm
c2V0IGludG8gdGhlIHRleHQgcnVuLgoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlz
IG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNz
ZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBw
cm9ibGVtLgorICAgIGludCB0YXJnZXRYID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7CisK
KyAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICBpZiAoIXNoYXBlci5z
aGFwZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hhcGVyLm9mZnNldEZvclBv
c2l0aW9uKHRhcmdldFgpOworfQorCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgSGFyZkJ1enpTaGFwZXIg
c2hhcGVyKHRoaXMsIHJ1bik7CisgICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBzaGFwZXIuc2VsZWN0aW9uUmVjdChwb2ludCwg
aGVpZ2h0LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBGU19TVEFURSogaVR5cGUgPSBmb250LT5wbGF0Zm9y
bURhdGEoKS5zY2FsZWRGb250KGNvbnRleHQtPmdldENUTSgpLnlTY2FsZSgpKTsKKyAgICBpZiAo
IWlUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQg
PSBwb2ludDsKKworICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsKQorICAgICAgICBhZGp1c3RlZFBvaW50Lm1vdmUoLShmb250LT5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC0+Zm9udE1ldHJpY3Mo
KS5mbG9hdEFzY2VudCgpKSwgMCk7CisKKyAgICBib29sIHNvZnR3YXJlQmx1clJlcXVpcmVkID0g
Y29udGV4dC0+c3RhdGUoKS5zaGFkb3dCbHVyIC8gZm9udC0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0
KCkgPiAwLjU7CisKKyAgICBGbG9hdFNpemUgY3VycmVudFNoYWRvd09mZnNldDsKKyAgICBmbG9h
dCBjdXJyZW50U2hhZG93Qmx1cjsKKyAgICBDb2xvciBjdXJyZW50U2hhZG93Q29sb3I7CisgICAg
Q29sb3JTcGFjZSBjdXJyZW50Q29sb3JTcGFjZTsKKworICAgIC8vIElmIHdlIGhhdmUgYSBzaGFk
b3cgYmx1ciwgYW5kIGl0IGlzIHRvbyBiaWcgdG8gYXBwbHkgYXQgdGV4dC1yZW5kZXIgdGltZSwg
d2UgbXVzdCByZW5kZXIgaXQgbm93LgorICAgIGlmIChjb250ZXh0LT5oYXNTaGFkb3coKSAmJiBz
b2Z0d2FyZUJsdXJSZXF1aXJlZCkgeworICAgICAgICBjb250ZXh0LT5nZXRTaGFkb3coY3VycmVu
dFNoYWRvd09mZnNldCwgY3VycmVudFNoYWRvd0JsdXIsIGN1cnJlbnRTaGFkb3dDb2xvciwgY3Vy
cmVudENvbG9yU3BhY2UpOworCisgICAgICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0
YXRlID0gY29udGV4dC0+c3RhdGUoKTsKKyAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IHN0YXRl
LnNoYWRvd09mZnNldDsKKyAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KQorICAgICAgICAgICAgb2Zmc2V0LnNldEhlaWdodCgtb2Zmc2V0LmhlaWdodCgpKTsKKyAgICAg
ICAgU2hhZG93Qmx1ciBzaGFkb3coRmxvYXRTaXplKHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNo
YWRvd0JsdXIpLCBvZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBzdGF0ZS5zaGFkb3dDb2xvclNw
YWNlKTsKKyAgICAgICAgRmxvYXRQb2ludCBtaW5Qb2ludChhZGp1c3RlZFBvaW50LngoKSwgYWRq
dXN0ZWRQb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgRmxvYXRQ
b2ludCBtYXhQb2ludChhZGp1c3RlZFBvaW50LngoKSwgYWRqdXN0ZWRQb2ludC55KCkgKyBmb250
TWV0cmljcygpLmRlc2NlbnQoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50ID0g
YWRqdXN0ZWRQb2ludDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICAgICAgY3VycmVudFBvaW50ICs9ICpnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tICsgaSk7CisgICAgICAgICAgICBtaW5Qb2ludC5zZXRYKHN0ZDo6bWluKG1pblBvaW50Lngo
KSwgY3VycmVudFBvaW50LngoKSkpOworICAgICAgICAgICAgbWluUG9pbnQuc2V0WShzdGQ6Om1p
bihtaW5Qb2ludC55KCksIGN1cnJlbnRQb2ludC55KCkpKTsKKyAgICAgICAgICAgIG1heFBvaW50
ID0gbWF4UG9pbnQuZXhwYW5kZWRUbyhjdXJyZW50UG9pbnQpOworICAgICAgICB9CisgICAgICAg
IGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QobWluUG9pbnQueCgpLCBtaW5Qb2ludC55KCks
IG1heFBvaW50LngoKSAtIG1pblBvaW50LngoKSwgbWF4UG9pbnQueSgpIC0gbWluUG9pbnQueSgp
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LmJlZ2lu
U2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgaWYgKHNoYWRvd0Nv
bnRleHQpIHsKKyAgICAgICAgICAgIGlUeXBlID0gZm9udC0+cGxhdGZvcm1EYXRhKCkuc2NhbGVk
Rm9udChzaGFkb3dDb250ZXh0LT5nZXRDVE0oKS55U2NhbGUoKSk7CisgICAgICAgICAgICBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRkR2x5cGhzKGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGbG9hdFNpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksCisg
ICAgICAgICAgICAgICAgbnVtR2x5cGhzLCBhZGp1c3RlZFBvaW50LCBpVHlwZSwgMCwgMCk7Cisg
ICAgICAgICAgICBpVHlwZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoY29udGV4
dC0+Z2V0Q1RNKCkueVNjYWxlKCkpOworICAgICAgICAgICAgc2hhZG93LmVuZFNoYWRvd0xheWVy
KGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jbGVhclNoYWRvdygpOworICAgIH0KKworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5hZGRHbHlwaHMoZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLAorICAgICAgICByZWludGVycHJl
dF9jYXN0PGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFNpemUqPihnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSksCisgICAgICAgIG51bUdseXBocywgYWRqdXN0ZWRQb2ludCwgaVR5
cGUsCisgICAgICAgIGNvbnRleHQtPmZpbGxHcmFkaWVudCgpID8gY29udGV4dC0+ZmlsbEdyYWRp
ZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IChjb250ZXh0LT5maWxsUGF0dGVybigpID8gY29u
dGV4dC0+ZmlsbFBhdHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSA6
IHN0YXRpY19jYXN0PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6UGFpbnQqPigwKSks
CisgICAgICAgIGNvbnRleHQtPnN0cm9rZUdyYWRpZW50KCkgPyBjb250ZXh0LT5zdHJva2VHcmFk
aWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkgOiAoY29udGV4dC0+c3Ryb2tlUGF0dGVybigpID8g
Y29udGV4dC0+c3Ryb2tlUGF0dGVybigpLT5wbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpIDogc3RhdGljX2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYWludCo+
KDApKSk7CisKKyAgICBpZiAoc29mdHdhcmVCbHVyUmVxdWlyZWQpCisgICAgICAgIGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5zZXRTaGFkb3coY3VycmVudFNoYWRvd09mZnNldCwgY3VycmVu
dFNoYWRvd0JsdXIsIGN1cnJlbnRTaGFkb3dDb2xvci5pc1ZhbGlkKCkgPyBjdXJyZW50U2hhZG93
Q29sb3IucmdiKCkgOiBtYWtlUkdCQSgwLCAwLCAwLCAweEZGIC8gMyksIGNvbnRleHQtPnN0YXRl
KCkuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworfQorCitib29sIEZvbnQ6OmNhblJldHVybkZh
bGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgLy8gbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJsYWNrQmVycnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q2FjaGVCbGFj
a0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGQyZjExY2Q2MDIxZjVmOGZmY2M4N2ZiYTViMDkwNTRj
ZWYxNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9Gb250Q2FjaGVCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDI1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiSVR5cGVVdGlscy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25m
aWcuaD4KKyNpbmNsdWRlIDxmc19hcGkuaD4KKyNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgLy8gSXQncyBmaW5l
IHRvIGNhbGwgRmNJbml0IG11bHRpcGxlIHRpbWVzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KKyAg
ICBpZiAoIUZjSW5pdCgpKQorICAgICAgICBDUkFTSCgpOworfQorCitjb25zdCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgaWN1OjpMb2Nh
bGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKKyAgICBQbGF0Zm9ybVN1cHBv
cnQ6OkZvbnRGYW1pbHkgZmFtaWx5OworICAgIFBsYXRmb3JtU3VwcG9ydDo6Z2V0Rm9udEZhbWls
eUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwg
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgJmZhbWlseSk7CisgICAgaWYgKGZhbWlseS5uYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdG9taWNTdHJpbmcgYXRvbWljRmFt
aWx5KGZhbWlseS5uYW1lKTsKKyAgICAvLyBDaGFuZ2VzIHdlaWdodCBhbmQvb3IgaXRhbGljIG9m
IGdpdmVuIEZvbnREZXNjcmlwdGlvbiBkZXBlbmRzIG9uCisgICAgLy8gdGhlIHJlc3VsdCBvZiBm
b250Y29uZmlnIHNvIHRoYXQga2VlcGluZyB0aGUgY29ycmVjdCBmb250IG1hcHBpbmcKKyAgICAv
LyBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVycy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIxMDkgZm9y
IGRldGFpbHMuCisgICAgYm9vbCBzaG91bGRTZXRGYWtlQm9sZCA9IGZhbHNlOworICAgIGJvb2wg
c2hvdWxkU2V0RmFrZUl0YWxpYyA9IGZhbHNlOworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihmb250LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBpZiAoZmFtaWx5LmlzQm9sZCAmJiBk
ZXNjcmlwdGlvbi53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkKQorICAgICAgICBkZXNjcmlwdGlv
bi5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOworICAgIGlmICghZmFtaWx5LmlzQm9sZCAmJiBk
ZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkgeworICAgICAgICBzaG91bGRT
ZXRGYWtlQm9sZCA9IHRydWU7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2Vp
Z2h0Tm9ybWFsKTsKKyAgICB9CisgICAgaWYgKGZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlv
bi5pdGFsaWMoKSA9PSBGb250SXRhbGljT2ZmKQorICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFs
aWMoRm9udEl0YWxpY09uKTsKKyAgICBpZiAoIWZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlv
bi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pIHsKKyAgICAgICAgc2hvdWxkU2V0RmFrZUl0YWxp
YyA9IHRydWU7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT2ZmKTsK
KyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBzdWJzdGl0dXRlUGxhdGZvcm1EYXRhID0g
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgYXRvbWljRmFtaWx5LCBEb05v
dFJldGFpbik7CisgICAgaWYgKCFzdWJzdGl0dXRlUGxhdGZvcm1EYXRhKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURh
dGEoKnN1YnN0aXR1dGVQbGF0Zm9ybURhdGEpOworICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtlQm9s
ZChzaG91bGRTZXRGYWtlQm9sZCk7CisgICAgcGxhdGZvcm1EYXRhLnNldEZha2VJdGFsaWMoc2hv
dWxkU2V0RmFrZUl0YWxpYyk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9y
bURhdGEsIERvTm90UmV0YWluKTsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4pCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNhbnNTdHIsICgi
U2FucyIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2Vy
aWZTdHIsICgiU2VyaWYiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIG1vbm9zcGFjZVN0ciwgKCJNb25vc3BhY2UiKSk7CisKKyAgICBGb250UGxhdGZvcm1E
YXRhKiBmb250UGxhdGZvcm1EYXRhID0gMDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmdlbmVy
aWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKKyAg
ICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3Jp
cHRpb24sIHNlcmlmU3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIG1vbm9zcGFjZVN0cik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoZGVzY3JpcHRpb24sIHNhbnNTdHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoIWZvbnRQbGF0Zm9ybURhdGEpIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGFyaWFsU3RyLCAoIkFyaWFsIikpOworICAgICAgICBmb250UGxhdGZv
cm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgYXJpYWxTdHIp
OworICAgIH0KKworICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gZ2V0
Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3JtRGF0YSk7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpn
ZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1
bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0
YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25BbmRGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KQoreworICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9u
dCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCisgICAg
Ly8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1
bmRlcnN0YW5kcy4KKyAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0
aCgiLXdlYmtpdC0iKSkKKyAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKworICAgIHN3
aXRjaCAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Vy
aWZGYW1pbHk6CisgICAgICAgIHJldHVybiAic2VyaWYiOworICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAgICAgcmV0dXJuICJt
b25vc3BhY2UiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5OgorICAg
ICAgICByZXR1cm4gImN1cnNpdmUiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5
RmFtaWx5OgorICAgICAgICByZXR1cm4gImZhbnRhc3kiOworICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpOb0ZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIiI7CisgICAgfQor
fQorCitpbnQgZm9udFdlaWdodFRvRm9udGNvbmZpZ1dlaWdodChGb250V2VpZ2h0IHdlaWdodCkK
K3sKKyAgICBzd2l0Y2ggKHdlaWdodCkgeworICAgIGNhc2UgRm9udFdlaWdodDEwMDoKKyAgICAg
ICAgcmV0dXJuIEZDX1dFSUdIVF9USElOOworICAgIGNhc2UgRm9udFdlaWdodDIwMDoKKyAgICAg
ICAgcmV0dXJuIEZDX1dFSUdIVF9VTFRSQUxJR0hUOworICAgIGNhc2UgRm9udFdlaWdodDMwMDoK
KyAgICAgICAgcmV0dXJuIEZDX1dFSUdIVF9MSUdIVDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6
CisgICAgICAgIHJldHVybiBGQ19XRUlHSFRfUkVHVUxBUjsKKyAgICBjYXNlIEZvbnRXZWlnaHQ1
MDA6CisgICAgICAgIHJldHVybiBGQ19XRUlHSFRfTUVESVVNOworICAgIGNhc2UgRm9udFdlaWdo
dDYwMDoKKyAgICAgICAgcmV0dXJuIEZDX1dFSUdIVF9TRU1JQk9MRDsKKyAgICBjYXNlIEZvbnRX
ZWlnaHQ3MDA6CisgICAgICAgIHJldHVybiBGQ19XRUlHSFRfQk9MRDsKKyAgICBjYXNlIEZvbnRX
ZWlnaHQ4MDA6CisgICAgICAgIHJldHVybiBGQ19XRUlHSFRfRVhUUkFCT0xEOworICAgIGNhc2Ug
Rm9udFdlaWdodDkwMDoKKyAgICAgICAgcmV0dXJuIEZDX1dFSUdIVF9VTFRSQUJMQUNLOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
RkNfV0VJR0hUX1JFR1VMQVI7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIC8vIFRoZSBDU1Mg
Zm9udCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMv
I2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtKQorICAgIC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQg
YW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUg
Y2FuIGJlIHVzZWQpCisgICAgLy8gYW5kIGZvbnQgd2VpZ2h0ICh3ZSBvbmx5IG1hdGNoIGJvbGQv
bm9uLWJvbGQgaGVyZSkuCisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRl
KCk7CisgICAgU3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21G
b250RGVzY3JpcHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsKKyAgICBp
ZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVTdHJpbmcudXRmOCgpLmRhdGEoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgaXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxp
YygpOworICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19TTEFOVCwgaXRh
bGljID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU4pKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJR0hULCBmb250
V2VpZ2h0VG9Gb250Y29uZmlnV2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLCBGQ19Q
SVhFTF9TSVpFLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gVGhlIHN0cmF0ZWd5IGlzIG9yaWdpbmFsbHkgZnJvbSBTa2lh
IChzcmMvcG9ydHMvU2tGb250SG9zdF9mb250Y29uZmlnLmNwcCk6CisKKyAgICAvLyBBbGxvdyBG
b250Y29uZmlnIHRvIGRvIHByZS1tYXRjaCBzdWJzdGl0dXRpb24uIFVubGVzcyB3ZSBhcmUgYWNj
ZXNzaW5nIGEgImZhbGxiYWNrIgorICAgIC8vIGZhbWlseSBsaWtlICJzYW5zLCIgdGhpcyBpcyB0
aGUgb25seSB0aW1lIHdlIGFsbG93IEZvbnRjb25maWcgdG8gc3Vic3RpdHV0ZSBvbmUKKyAgICAv
LyBmYW1pbHkgbmFtZSBmb3IgYW5vdGhlciAoaS5lLiBpZiB0aGUgZm9udHMgYXJlIGFsaWFzZWQg
dG8gZWFjaCBvdGhlcikuCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0
Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworCisgICAgRmND
aGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb247CisgICAgRmNQYXR0
ZXJuR2V0U3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlOYW1l
QWZ0ZXJDb25maWd1cmF0aW9uKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJh
dGlvbiA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZm9udENvbmZp
Z0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKKworICAgIEZjUmVzdWx0IGZvbnRDb25m
aWdSZXN1bHQ7CisgICAgRmNQYXR0ZXJuKiByZXN1bHRQYXR0ZXJuID0gRmNGb250TWF0Y2goMCwg
cGF0dGVybiwgJmZvbnRDb25maWdSZXN1bHQpOworICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVy
bik7CisgICAgaWYgKCFyZXN1bHRQYXR0ZXJuKSAvLyBObyBtYXRjaC4KKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBGY0NoYXI4KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Cisg
ICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHJlc3VsdFBhdHRlcm4sIEZDX0ZBTUlMWSwgMCwgJmZvbnRD
b25maWdGYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyk7CisgICAgU3RyaW5nIGZhbWlseU5hbWVBZnRl
ck1hdGNoaW5nID0gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250
Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKTsKKworICAgIC8vIElmIEZvbnRjb25maWcg
Z2F2ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmYW1pbHkgdGhhbiB0aGUgb25lIHdlIHJlcXVlc3Rl
ZCwgd2Ugc2hvdWxkIGlnbm9yZSBpdAorICAgIC8vIGFuZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUg
dXMgdGhlIG5leHQgZm9udCBvbiB0aGUgQ1NTIGZhbGxiYWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2Vw
dGlvbiBpcyBpZgorICAgIC8vIHRoaXMgZmFtaWx5IG5hbWUgaXMgYSBjb21tb25seSB1c2VkIGdl
bmVyaWMgZmFtaWx5LgorICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZUFmdGVy
Q29uZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpCisgICAgICAgICYmICEoZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNhbnMiKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2Fucy1zZXJpZiIpCisgICAgICAgICAgICB8fCBlcXVh
bElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2VyaWYiKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHlOYW1lU3RyaW5nLCAibW9ub3NwYWNlIikKKyAgICAgICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJmYW50YXN5IikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKSkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaW50IGZvbnRXZWlnaHQ7CisgICAgRmNQYXR0ZXJuR2V0SW50ZWdlcihyZXN1bHRQYXR0
ZXJuLCBGQ19XRUlHSFQsIDAsICZmb250V2VpZ2h0KTsKKyAgICBib29sIHNob3VsZEZha2VCb2xk
ID0gZm9udFdlaWdodCA8IEZDX1dFSUdIVF9CT0xEICYmIGZvbnREZXNjcmlwdGlvbi53ZWlnaHQo
KSA+PSBGb250V2VpZ2h0Qm9sZDsKKworICAgIGludCBmb250U2xhbnQ7CisgICAgRmNQYXR0ZXJu
R2V0SW50ZWdlcihyZXN1bHRQYXR0ZXJuLCBGQ19TTEFOVCwgMCwgJmZvbnRTbGFudCk7CisgICAg
Ym9vbCBzaG91bGRGYWtlSXRhbGljID0gZm9udFNsYW50ID09IEZDX1NMQU5UX1JPTUFOICYmIGZv
bnREZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT247CisKKyAgICBGY0NoYXI4KiBm
b250RmlsZU5hbWU7CisgICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHJlc3VsdFBhdHRlcm4sIEZDX0ZJ
TEUsIDAsICZmb250RmlsZU5hbWUpOworICAgIC8vIGZwcmludGYoc3RkZXJyLCAiTG9va2luZyBm
b3IgJXMgZm91bmQgJXM6IGk6JWQgYjolZFxuIiwgZmFtaWx5LnN0cmluZygpLmxhdGluMSgpLmRh
dGEoKSwgZm9udEZpbGVOYW1lLCBzaG91bGRGYWtlSXRhbGljLCBzaG91bGRGYWtlQm9sZCk7Cisg
ICAgRmNQYXR0ZXJuRGVzdHJveShyZXN1bHRQYXR0ZXJuKTsKKworICAgIEZJTEVDSEFSIG5hbWVb
TUFYX0ZPTlRfTkFNRV9MRU4rMV07CisgICAgbWVtc2V0KG5hbWUsIDAsIE1BWF9GT05UX05BTUVf
TEVOKzEpOworICAgIC8vIGZwcmludGYoc3RkZXJyLCAiRlNfbG9hZF9mb250ICVzOiAiLCBmb250
RmlsZU5hbWUpOworICAgIGlmIChGU19sb2FkX2ZvbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpnZXRJVHlwZSgpLCByZWludGVycHJldF9jYXN0PEZJTEVDSEFSKj4oZm9udEZpbGVO
YW1lKSwgMCwgMCwgTUFYX0ZPTlRfTkFNRV9MRU4sIG5hbWUpICE9IFNVQ0NFU1MpCisgICAgICAg
IHJldHVybiAwOworICAgIC8vIGZwcmludGYoc3RkZXJyLCAiICVzXG4iLCBuYW1lKTsKKworICAg
IHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShuYW1lLCBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCksIHNob3VsZEZha2VCb2xkLCBzaG91bGRGYWtlSXRhbGljLCBmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250Q2FjaGVCbGFja2JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udENhY2hlQmxhY2tiZXJy
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOTg5NmFkNjNjYjAxYzVkODIx
NGEzM2FhZmZiYjVkYzJjMmQ5OGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9G
b250Q2FjaGVCbGFja2JlcnJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJGb250Q2FjaGUu
aCIKLQotI2luY2x1ZGUgIkZvbnRSZW5kZXJTdHlsZS5oIgotCi0jaW5jbHVkZSA8Zm9udGNvbmZp
Zy9mb250Y29uZmlnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91
dGYxNi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIEZvbnRDYWNoZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzLCBjb25zdCBjaGFyKiwgRm9u
dENhY2hlOjpTaW1wbGVGb250RmFtaWx5KiBmYW1pbHkpCi17Ci0gICAgRmNDaGFyU2V0KiBjc2V0
ID0gRmNDaGFyU2V0Q3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGFy
YWN0ZXJzOyArK2kpIHsKLSAgICAgICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hhcmFjdGVyc1tp
XSkKLSAgICAgICAgICAgICYmIFUxNl9JU19TVVJST0dBVEVfTEVBRChjaGFyYWN0ZXJzW2ldKQot
ICAgICAgICAgICAgJiYgaSAhPSBudW1DaGFyYWN0ZXJzIC0gMQotICAgICAgICAgICAgJiYgVTE2
X0lTX1RSQUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgRmNDaGFyU2V0QWRk
Q2hhcihjc2V0LCBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tpXSwgY2hhcmFjdGVy
c1tpKzFdKSk7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICBGY0NoYXJTZXRBZGRDaGFyKGNzZXQsIGNoYXJhY3RlcnNbaV0pOwotICAgIH0KLSAgICBGY1Bh
dHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKLQotICAgIEZjVmFsdWUgZmN2YWx1
ZTsKLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVDaGFyU2V0OwotICAgIGZjdmFsdWUudS5jID0g
Y3NldDsKLSAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfQ0hBUlNFVCwgZmN2YWx1ZSwgRmNG
YWxzZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVCb29sOwotICAgIGZjdmFsdWUudS5i
ID0gRmNUcnVlOwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TQ0FMQUJMRSwgZmN2YWx1
ZSwgRmNGYWxzZSk7Ci0KLSAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRj
aFBhdHRlcm4pOwotICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7Ci0KLSAgICBGY1Jl
c3VsdCByZXN1bHQ7Ci0gICAgRmNGb250U2V0KiBmb250U2V0ID0gRmNGb250U29ydCgwLCBwYXR0
ZXJuLCAwLCAwLCAmcmVzdWx0KTsKLSAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOwotICAg
IEZjQ2hhclNldERlc3Ryb3koY3NldCk7Ci0KLSAgICBpZiAoIWZvbnRTZXQpIHsKLSAgICAgICAg
ZmFtaWx5LT5uYW1lID0gU3RyaW5nKCk7Ci0gICAgICAgIGZhbWlseS0+aXNCb2xkID0gZmFsc2U7
Ci0gICAgICAgIGZhbWlseS0+aXNJdGFsaWMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIGZvbnRjb25maWcgaGF2ZSBhIGJ1ZyB3aGVy
ZSB0aGV5IGNhbm5vdCBzZWxlY3QKLSAgICAvLyBvbmx5IHNjYWxhYmxlIGZvbnRzIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgZmlsdGVyIHRoZSByZXN1bHRzLgotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZm9udFNldC0+bmZvbnQ7ICsraSkgewotICAgICAgICBGY1BhdHRlcm4qIGN1cnJlbnQgPSBm
b250U2V0LT5mb250c1tpXTsKLSAgICAgICAgRmNCb29sIGlzU2NhbGFibGU7Ci0KLSAgICAgICAg
aWYgKEZjUGF0dGVybkdldEJvb2woY3VycmVudCwgRkNfU0NBTEFCTEUsIDAsICZpc1NjYWxhYmxl
KSAhPSBGY1Jlc3VsdE1hdGNoCi0gICAgICAgICAgICB8fCAhaXNTY2FsYWJsZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIGZvbnRjb25maWcgY2FuIGFsc28gcmV0dXJuIGZv
bnRzIHdoaWNoIGFyZSB1bnJlYWRhYmxlCi0gICAgICAgIEZjQ2hhcjgqIGNGaWxlbmFtZTsKLSAg
ICAgICAgaWYgKEZjUGF0dGVybkdldFN0cmluZyhjdXJyZW50LCBGQ19GSUxFLCAwLCAmY0ZpbGVu
YW1lKSAhPSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKGFjY2VzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPihjRmlsZW5hbWUpLCBSX09LKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEZjQ2hhcjgqIGZhbWlseU5hbWU7Ci0gICAg
ICAgIGlmIChGY1BhdHRlcm5HZXRTdHJpbmcoY3VycmVudCwgRkNfRkFNSUxZLCAwLCAmZmFtaWx5
TmFtZSkgPT0gRmNSZXN1bHRNYXRjaCkgewotICAgICAgICAgICAgY29uc3QgY2hhciogY2hhckZh
bWlseSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhbWlseU5hbWUpOwotICAgICAgICAgICAg
ZmFtaWx5LT5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChjaGFyRmFtaWx5LCBzdHJsZW4oY2hhckZh
bWlseSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHdlaWdodDsKLSAgICAgICAgaWYgKEZj
UGF0dGVybkdldEludGVnZXIoY3VycmVudCwgRkNfV0VJR0hULCAwLCAmd2VpZ2h0KSA9PSBGY1Jl
c3VsdE1hdGNoKQotICAgICAgICAgICAgZmFtaWx5LT5pc0JvbGQgPSB3ZWlnaHQgPj0gRkNfV0VJ
R0hUX0JPTEQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhbWlseS0+aXNCb2xkID0gZmFs
c2U7Ci0KLSAgICAgICAgaW50IHNsYW50OwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdl
cihjdXJyZW50LCBGQ19TTEFOVCwgMCwgJnNsYW50KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAg
ICAgICAgZmFtaWx5LT5pc0l0YWxpYyA9IHNsYW50ICE9IEZDX1NMQU5UX1JPTUFOOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmYW1pbHktPmlzSXRhbGljID0gZmFsc2U7Ci0KLSAgICAgICAg
RmNGb250U2V0RGVzdHJveShmb250U2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEZjRm9udFNldERlc3Ryb3koZm9udFNldCk7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhMmRh
YjAxNjkxYmZjNGM3MjZjM2UxNDhlOWU2NDkwN2Y5YzQxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAorI2RlZmluZSBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5o
IgorI2luY2x1ZGUgIlRleHRPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIGNoYXIgRklM
RUNIQVI7CitzdHJ1Y3QgRlNfU1RBVEU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIE1vbm90eXBlRm9udDsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKworc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOworcHVibGljOgorICAgIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEoRklMRUNIQVIqIGZvbnROYW1lLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4p
OworICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRh
IGZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIFRleHRPcmllbnRhdGlv
biA9IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQsCisgICAgICAgIEZvbnRXaWR0aFZhcmlh
bnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9k
ZSk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmKTsKKwor
ICAgIEZJTEVDSEFSKiBtX2ZvbnROYW1lOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fYnVm
ZmVyOworfTsKKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRm
b3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFCbGFj
a0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyMmMxOTJl
YjE0OGJhZjVhMTZjMDdhZmMzMmE1ODA1ZDExNDY3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRh
LmgiCisjaW5jbHVkZSAiSVR5cGVVdGlscy5oIgorI2luY2x1ZGUgIk9wZW5UeXBlU2FuaXRpemVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxmc19hcGkuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1E
YXRhKEZJTEVDSEFSKiBmb250TmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikK
KyAgICA6IG1fZm9udE5hbWUoc3RyZHVwKGZvbnROYW1lKSkKKyAgICAsIG1fYnVmZmVyKGJ1ZmZl
cikKK3sKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoKQoreworICAgIEZTX0xPTkcgcmV0ID0gRlNfZGVsZXRlX2ZvbnQoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpnZXRJVHlwZSgpLCBjb25zdF9jYXN0PEZJTEVDSEFSKj4obV9mb250
TmFtZSkpOworICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0gU1VDQ0VTUyk7CisgICAgZnJl
ZShtX2ZvbnROYW1lKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFRleHRPcmllbnRh
dGlvbiB0ZXh0T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBGb250
UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnROYW1l
LCBzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIG9yaWVudGF0aW9uLCB0ZXh0
T3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCk7Cit9CisKK2Jvb2wgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQpCit7CisgICAgcmV0dXJu
IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZm9ybWF0LCAib3BlbnR5cGUiKQorI2lmIFVTRShPUEVOVFlQRV9TQU5JVElaRVIpCisgICAg
ICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgIndvZmYiKQorI2VuZGlmCisgICAgOwor
fQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIp
OworCisjaWYgVVNFKE9QRU5UWVBFX1NBTklUSVpFUikKKyAgICBPcGVuVHlwZVNhbml0aXplciBz
YW5pdGl6ZXIoYnVmZmVyKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0cmFuc2NvZGVCdWZm
ZXIgPSBzYW5pdGl6ZXIuc2FuaXRpemUoKTsKKyAgICBpZiAoIXRyYW5zY29kZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIDA7IC8vIHZhbGlkYXRpb24gZmFpbGVkLgorICAgIGJ1ZmZlciA9IHRyYW5z
Y29kZUJ1ZmZlci5nZXQoKTsKKyNlbmRpZgorCisgICAgRklMRUNIQVIgbmFtZVtNQVhfRk9OVF9O
QU1FX0xFTisxXTsKKyAgICBtZW1zZXQobmFtZSwgMCwgTUFYX0ZPTlRfTkFNRV9MRU4rMSk7Cisg
ICAgaWYgKEZTX2xvYWRfZm9udChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmdldElU
eXBlKCksIDAsIGNvbnN0X2Nhc3Q8RlNfQllURSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRlNf
QllURSo+KGJ1ZmZlci0+ZGF0YSgpKSksIDAsIE1BWF9GT05UX05BTUVfTEVOLCBuYW1lKSAhPSBT
VUNDRVNTKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShuYW1lLCBidWZmZXIpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRQbGF0Zm9ybURhdGFCbGFja0Jl
cnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9u
dFBsYXRmb3JtRGF0YUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MGE3OTk0ODU1YzFhZjFk
YTFmMTk3MTUzMGE5MTMwYzE0N2FjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRQbGF0Zm9ybURhdGFCbGFja0JlcnJ5
LmNwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgorCisjaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKKyNpbmNsdWRlICJJVHlwZVV0
aWxzLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4K
KyNpbmNsdWRlIDxmc19hcGkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KEZJTEVDSEFSKiBuYW1lLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRp
b24gdGV4dE9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAg
ICwgbV90ZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKQorICAgICwgbV9zaXplKHNpemUp
CisgICAgLCBtX3dpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnQpCisgICAgLCBtX2ZvbnQoMCkKKyAg
ICAsIG1fbmFtZShmYXN0U3RyRHVwKG5hbWUpKQorICAgICwgbV9zY2FsZWRGb250KDApCisgICAg
LCBtX2hhcmZidXp6RmFjZSgpCisgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQorewor
ICAgIEFTU0VSVChuYW1lKTsKKyAgICBtX2ZvbnQgPSBGU19uZXdfY2xpZW50KEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6Z2V0SVR5cGUoKSwgMCk7CisgICAgQVNTRVJUKG1fZm9udCk7
CisgICAgYXBwbHlTdGF0ZShtX2ZvbnQpOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBs
YXRmb3JtRGF0YSgpCit7CisgICAgaWYgKG1fc2NhbGVkRm9udCkgeworICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNsZWFyR2x5cGhDYWNoZUZvckZvbnQobV9zY2FsZWRG
b250KTsKKyAgICAgICAgRlNfZW5kX2NsaWVudChtX3NjYWxlZEZvbnQpOworICAgIH0KKyAgICBp
ZiAobV9mb250ICYmIG1fZm9udCAhPSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCisgICAg
ICAgIEZTX2VuZF9jbGllbnQobV9mb250KTsKKyAgICBmYXN0RnJlZShtX25hbWUpOworfQorCitj
b25zdCBjaGFyKiBGb250UGxhdGZvcm1EYXRhOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9uYW1lOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmFwcGx5U3RhdGUoRlNfU1RBVEUq
IGZvbnQsIGZsb2F0IHNjYWxlKSBjb25zdAoreworICAgIEFTU0VSVChmb250KTsKKyAgICBBU1NF
UlQobV9uYW1lKTsKKyAgICBpZiAoRlNfc2V0X2ZvbnQoZm9udCwgbV9uYW1lKSAhPSBTVUNDRVNT
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoRlNfc2V0X2NtYXAoZm9udCwgMywg
MTApICE9IFNVQ0NFU1MpIC8vIEZpcnN0IHRyeSBXaW5kb3dzIFVuaWNvZGUgd2l0aCBzdXJyb2dh
dGVzLi4uCisgICAgICAgIGlmIChGU19zZXRfY21hcChmb250LCAzLCAxKSAhPSBTVUNDRVNTKSAv
LyB0cnkgbm9ybWFsIFdpbmRvd3MgVW5pY29kZQorICAgICAgICAgICAgaWYgKEZTX3NldF9jbWFw
KGZvbnQsIDEsIDApICE9IFNVQ0NFU1MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fc3ludGhldGljQm9sZCkgeworICAgICAgICBpZiAoRlNfc2V0X2JvbGRfcGN0
KGZvbnQsIGZsb2F0VG9JVHlwZUZpeGVkKDAuMDYpKSAhPSBTVUNDRVNTKSAvLyA2JSBwc2V1ZG8g
Ym9sZAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChGU19zZXRfYm9sZF9wY3QoZm9udCwgMCkgIT0gU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBGU19GSVhFRCBza2V3ID0gMDsKKyAgICBpZiAobV9zeW50
aGV0aWNPYmxpcXVlKQorICAgICAgICBza2V3ID0gMTM5MzA7IC8vIDEyIGRlZ3JlZXMKKworICAg
IEZTX0ZJWEVEIGZpeGVkU2NhbGUgPSBzdGQ6Om1pbihGaXhNdWwoZmxvYXRUb0lUeXBlRml4ZWQo
c2NhbGUpLCBmbG9hdFRvSVR5cGVGaXhlZChtX3NpemUpKSwgTUFYSVRZUEVGT05UU0NBTEUpOwor
ICAgIGlmIChGU19zZXRfc2NhbGUoZm9udCwgZml4ZWRTY2FsZSwgRml4TXVsKGZpeGVkU2NhbGUs
IHNrZXcpLCAwLCBmaXhlZFNjYWxlKSAhPSBTVUNDRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoRlNfc2V0X2ZsYWdzKGZvbnQsIEZMQUdTX0NNQVBfT0ZGKSAhPSBTVUNDRVNT
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoRlNfc2V0X2ZsYWdzKGZvbnQsIEZM
QUdTX0hJTlRTX09GRikgIT0gU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKEZTX3NldF9mbGFncyhmb250LCBGTEFHU19ERUZBVUxUX0NTTV9PRkYpICE9IFNVQ0NFU1Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29yaWVudGF0aW9uID09IFZlcnRp
Y2FsKSB7CisgICAgICAgIGlmIChGU19zZXRfZmxhZ3MoZm9udCwgKG1fdGV4dE9yaWVudGF0aW9u
ID09IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpID8gRkxBR1NfVkVSVElDQUxfUk9UQVRF
X0xFRlRfT04gOiBGTEFHU19WRVJUSUNBTF9PTikgIT0gU1VDQ0VTUykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2Up
Cit7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBzb3VyY2UubV9oYXJmYnV6ekZhY2U7CisgICAgbV9z
Y2FsZWRGb250ID0gMDsKKyAgICBpZiAoc291cmNlLm1fZm9udCAmJiBzb3VyY2UubV9mb250ICE9
IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkgeworICAgICAgICBtX2ZvbnQgPSBGU19uZXdf
Y2xpZW50KHNvdXJjZS5tX2ZvbnQsIDApOworICAgICAgICBtX25hbWUgPSBmYXN0U3RyRHVwKHNv
dXJjZS5uYW1lKCkpOworICAgICAgICBib29sIHJldCA9IGFwcGx5U3RhdGUobV9mb250KTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZm9u
dCA9IHNvdXJjZS5tX2ZvbnQ7Cit9CisKK2NvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0
Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFzc2lnbihjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhl
cikKK3sKKyAgICBtX2hhcmZidXp6RmFjZSA9IG90aGVyLm1faGFyZmJ1enpGYWNlOworICAgIG1f
c2NhbGVkRm9udCA9IDA7CisgICAgaWYgKG90aGVyLm1fZm9udCAmJiBvdGhlci5tX2ZvbnQgIT0g
aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKSB7CisgICAgICAgIG1fZm9udCA9IEZTX25ld19j
bGllbnQob3RoZXIubV9mb250LCAwKTsKKyAgICAgICAgZmFzdEZyZWUobV9uYW1lKTsKKyAgICAg
ICAgbV9uYW1lID0gZmFzdFN0ckR1cChvdGhlci5uYW1lKCkpOworICAgICAgICBib29sIHJldCA9
IGFwcGx5U3RhdGUobV9mb250KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXQsIHJldCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fZm9udCA9IG90aGVyLm1fZm9udDsKKworICAgIHJldHVybiAq
dGhpczsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFtX2ZvbnQgfHwgbV9m
b250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB8fCAhb3RoZXIubV9mb250IHx8IG90
aGVyLm1fZm9udCA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX2ZvbnQtPmN1cl9zZm50ID09IG90aGVyLm1fZm9udC0+
Y3VyX3NmbnQ7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6
ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiAiaVR5cGUgRm9udCBEYXRhIjsKK30K
KyNlbmRpZgorCitIYXJmQnV6ek5HRmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNl
KCkKK3sKKyAgICBpZiAoIW1faGFyZmJ1enpGYWNlKSB7CisgICAgICAgIHVpbnQ2NF90IHVuaXF1
ZUlEID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fZm9udCk7CisgICAgICAgIG1faGFy
ZmJ1enpGYWNlID0gSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPih0aGlzKSwgdW5pcXVlSUQpOworICAgIH0KKworICAgIHJldHVybiBtX2hhcmZidXp6
RmFjZS5nZXQoKTsKK30KKworRlNfU1RBVEUqIEZvbnRQbGF0Zm9ybURhdGE6OnNjYWxlZEZvbnQo
ZmxvYXQgc2NhbGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNjYWxlID4gMC4wKTsKKyAgICBpZiAo
bV9zY2FsZSA9PSBzY2FsZSAmJiBtX3NjYWxlZEZvbnQpCisgICAgICAgIHJldHVybiBtX3NjYWxl
ZEZvbnQ7CisKKyAgICAvLyBUaGlzIG11c3QgYmUgYW4gU1ZHIEZvbnQuIEl0IHNlZW1zIGxpa2Ug
dGhlcmUgaXMgYW4gdXBzdHJlYW0gYnVnIHdoZXJlIHdlYiBhbmQgU1ZHIGZvbnRzCisgICAgLy8g
YXJlIHVzZWQgaW4gb25lIFRleHRSdW4uIE90aGVyIHBvcnRzIHNlZW0gdG8gYmUgYWJsZSB0byBk
ZWFsIHdpdGggaGF2aW5nIGFuIFNWRyBGb250IGluCisgICAgLy8gdGhpcyBwYXRoIHNvIGJhaWwg
b3V0IGluc3RlYWQgb2YgY3Jhc2guCisgICAgaWYgKCFtX2ZvbnQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKG1fc2NhbGVkRm9udCkgeworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OmNsZWFyR2x5cGhDYWNoZUZvckZvbnQobV9zY2FsZWRGb250KTsKKyAgICAg
ICAgaWYgKEZTX2VuZF9jbGllbnQobV9zY2FsZWRGb250KSAhPSBTVUNDRVNTKQorICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBtX3NjYWxlZEZvbnQgPSBGU19uZXdfY2xpZW50KG1f
Zm9udCwgMCk7CisgICAgaWYgKCFhcHBseVN0YXRlKG1fc2NhbGVkRm9udCwgc2NhbGUpKSB7Cisg
ICAgICAgIGlmIChGU19lbmRfY2xpZW50KG1fc2NhbGVkRm9udCkgIT0gU1VDQ0VTUykKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIG1fc2NhbGVkRm9udCA9IDA7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIG1fc2NhbGUgPSBzY2FsZTsKKworICAgIHJldHVybiBtX3NjYWxl
ZEZvbnQ7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0RmFrZUJvbGQoYm9vbCBmYWtl
Qm9sZCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBmYWtlQm9sZDsKKyAgICBhcHBseVN0YXRl
KG1fZm9udCk7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0RmFrZUl0YWxpYyhib29s
IGZha2VJdGFsaWMpCit7CisgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gZmFrZUl0YWxpYzsKKyAg
ICBhcHBseVN0YXRlKG1fZm9udCk7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKCkgY29uc3QKK3sKKyAgICBUVEZfUE9TVCBwb3N0OworICAgIGlmIChtX2ZvbnQgJiYg
RlNfZ2V0X3RhYmxlX3N0cnVjdHVyZShtX2ZvbnQsIFRBR19wb3N0LCAmcG9zdCkgPT0gU1VDQ0VT
UykKKyAgICAgICAgcmV0dXJuIHBvc3QuaXNGaXhlZFBpdGNoOworICAgIHJldHVybiBmYWxzZTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9HbHlwaFBhZ2VUcmVlTm9kZUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HbHlwaFBhZ2VUcmVlTm9kZUJsYWNrQmVycnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQwNjAwM2FiNjdkYzAwMzk1YmRiYjBmN2NhOTcyOGNkNDVhMzJiMjIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0dseXBoUGFnZVRyZWVOb2RlQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisjaW5jbHVkZSA8ZnNfYXBpLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFdvcmxkVHlwZVNjb3BlZFB0ciB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiB2b2lkICgqRGVzdHJveUZ1bmN0aW9uKShUKik7CisKKyAgICBXb3JsZFR5
cGVTY29wZWRQdHIoVCogcHRyLCBEZXN0cm95RnVuY3Rpb24gZGVzdHJveSkKKyAgICAgICAgOiBt
X3B0cihwdHIpCisgICAgICAgICwgbV9kZXN0cm95KGRlc3Ryb3kpCisgICAgeworICAgICAgICBB
U1NFUlQobV9kZXN0cm95KTsKKyAgICB9CisgICAgfldvcmxkVHlwZVNjb3BlZFB0cigpCisgICAg
eworICAgICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICAoKm1fZGVzdHJveSkobV9wdHIpOwor
ICAgIH0KKworICAgIFQqIGdldCgpIHsgcmV0dXJuIG1fcHRyOyB9Citwcml2YXRlOgorICAgIFQq
IG1fcHRyOworICAgIERlc3Ryb3lGdW5jdGlvbiBtX2Rlc3Ryb3k7Cit9OworCitib29sIEdseXBo
UGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEp
Cit7CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgdW5zaWduZWQgcG9zaXRpb24g
PSAwOworICAgIGludCBpID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBidWZmZXJMZW5ndGgp
IHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIHVuc2lnbmVkIG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOworICAgICAgICBVMTZfTkVYVChidWZmZXIsIG5leHRQb3NpdGlvbiwg
YnVmZmVyTGVuZ3RoLCBjaGFyYWN0ZXIpOworCisgICAgICAgIEZTX1VTSE9SVCBnbHlwaCA9IEZT
X21hcF9jaGFyKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5mb250KCksIHN0YXRpY19jYXN0PEZT
X1VMT05HPihjaGFyYWN0ZXIpKTsKKyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgfQorCisgICAgICAg
IGkrKzsKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247CisgICAgfQorCisgICAgcmV0
dXJuIGhhdmVHbHlwaHM7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhZGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhZGllbnRCbGFja0JlcnJ5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMzg0OGYwZjk0YzlkYzE4Y2FhNzE4ZDZkZDMyMTU3ZmExNDhhZDY5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9HcmFkaWVudEJsYWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBEZXRlcm1pbmUgdGhlIHRvdGFsIG51bWJlciBvZiBzdG9wcyBuZWVkZWQsIGluY2x1ZGlu
ZyBwc2V1ZG8tc3RvcHMgYXQgdGhlCisvLyBlbmRzIGFzIG5lY2Vzc2FyeS4KK3N0YXRpYyBzaXpl
X3QgdG90YWxTdG9wc05lZWRlZChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9wRGF0YSwg
c2l6ZV90IGNvdW50KQoreworICAgIC8vIE4uQi46IFRoZSB0ZXN0cyBpbiB0aGlzIGZ1bmN0aW9u
IHNob3VsZCBrZXB0IGluIHN5bmMgd2l0aCB0aGUgb25lcyBpbgorICAgIC8vIGZpbGxTdG9wcygp
LCBvciBiYWRuZXNzIGhhcHBlbnMuCisgICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCogc3Rv
cCA9IHN0b3BEYXRhOworICAgIHNpemVfdCBjb3VudFVzZWQgPSBjb3VudDsKKyAgICBpZiAoY291
bnQgPCAxIHx8IHN0b3AtPnN0b3AgPiAwLjApCisgICAgICAgIGNvdW50VXNlZCsrOworICAgIHN0
b3AgKz0gY291bnQgLSAxOworICAgIGlmIChjb3VudCA8IDEgfHwgc3RvcC0+c3RvcCA8IDEuMCkK
KyAgICAgICAgY291bnRVc2VkKys7CisgICAgcmV0dXJuIGNvdW50VXNlZDsKK30KKworLy8gQ29s
bGVjdCBzb3J0ZWQgc3RvcCBwb3NpdGlvbiBhbmQgY29sb3IgaW5mb3JtYXRpb24gaW50byB0aGUg
cG9zIGFuZCBjb2xvcnMKKy8vIGJ1ZmZlcnMsIGVuc3VyaW5nIHN0b3BzIGF0IGJvdGggMC4wIGFu
ZCAxLjAuIFRoZSBidWZmZXJzIG11c3QgYmUgbGFyZ2UKKy8vIGVub3VnaCB0byBob2xkIGluZm9y
bWF0aW9uIGZvciBhbGwgc3RvcHMsIGluY2x1ZGluZyB0aGUgbmV3IGVuZHBvaW50cyBpZgorLy8g
c3RvcHMgYXQgMC4wIGFuZCAxLjAgYXJlbid0IGFscmVhZHkgaW5jbHVkZWQuCitzdGF0aWMgdm9p
ZCBmaWxsU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCogc3RvcERhdGEsIHNpemVfdCBj
b3VudCwgZmxvYXQqIHBvcywgdW5zaWduZWQqIGNvbG9ycykKK3sKKyAgICBjb25zdCBHcmFkaWVu
dDo6Q29sb3JTdG9wKiBzdG9wID0gc3RvcERhdGE7CisgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAg
ICBpZiAoY291bnQgPCAxKSB7CisgICAgICAgIC8vIEEgZ3JhZGllbnQgd2l0aCBubyBzdG9wcyBt
dXN0IGJlIHRyYW5zcGFyZW50IGJsYWNrLgorICAgICAgICBwb3NbMF0gPSAwLjA7CisgICAgICAg
IGNvbG9yc1swXSA9IDA7CisgICAgICAgIHN0YXJ0ID0gMTsKKyAgICB9IGVsc2UgaWYgKHN0b3At
PnN0b3AgPiAwLjApIHsKKyAgICAgICAgLy8gQ29weSB0aGUgZmlyc3Qgc3RvcCB0byAwLjAuIFRo
ZSBmaXJzdCBzdG9wIHBvc2l0aW9uIG1heSBoYXZlIGEgc2xpZ2h0CisgICAgICAgIC8vIHJvdW5k
aW5nIGVycm9yLCBidXQgd2UgZG9uJ3QgY2FyZSBpbiB0aGlzIGZsb2F0IGNvbXBhcmlzb24sIHNp
bmNlCisgICAgICAgIC8vIDAuMCBjb21lcyB0aHJvdWdoIGNsZWFubHkgYW5kIHBlb3BsZSBhcmVu
J3QgbGlrZWx5IHRvIHdhbnQgYSBncmFkaWVudAorICAgICAgICAvLyB3aXRoIGEgc3RvcCBhdCAo
MCArIGVwc2lsb24pLgorICAgICAgICBwb3NbMF0gPSAwLjA7CisgICAgICAgIGNvbG9yc1swXSA9
IENvbG9yKHN0b3AtPnJlZCwgc3RvcC0+Z3JlZW4sIHN0b3AtPmJsdWUsIHN0b3AtPmFscGhhKS5y
Z2IoKTsKKyAgICAgICAgc3RhcnQgPSAxOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKykgeworICAgICAgICBwb3NbaV0gPSBzdG9wLT5z
dG9wOworICAgICAgICBjb2xvcnNbaV0gPSBDb2xvcihzdG9wLT5yZWQsIHN0b3AtPmdyZWVuLCBz
dG9wLT5ibHVlLCBzdG9wLT5hbHBoYSkucmdiKCk7CisgICAgICAgICsrc3RvcDsKKyAgICB9CisK
KyAgICAvLyBDb3B5IHRoZSBsYXN0IHN0b3AgdG8gMS4wIGlmIG5lZWRlZC4gU2VlIGNvbW1lbnQg
YWJvdmUgYWJvdXQgdGhpcyBmbG9hdAorICAgIC8vIGNvbXBhcmlzb24uCisgICAgaWYgKGNvdW50
IDwgMSB8fCAoLS1zdG9wKS0+c3RvcCA8IDEuMCkgeworICAgICAgICBwb3Nbc3RhcnQgKyBjb3Vu
dF0gPSAxLjA7CisgICAgICAgIGNvbG9yc1tzdGFydCArIGNvdW50XSA9IGNvbG9yc1tzdGFydCAr
IGNvdW50IC0gMV07CisgICAgfQorfQorCisKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6R3JhZGllbnQqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3sKKyAgICBpZiAobV9n
cmFkaWVudCkKKyAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisKKyAgICBpZiAobV9yYWRpYWwp
CisgICAgICAgIG1fZ3JhZGllbnQgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Okdy
YWRpZW50OjpjcmVhdGVSYWRpYWxHcmFkaWVudChtX3AwLCBtX3AxLCBtX3IwLCBtX3IxLCBtX2Fz
cGVjdFJhdGlvLCAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHcmFkaWVudDo6U3By
ZWFkTWV0aG9kKW1fc3ByZWFkTWV0aG9kKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3JhZGllbnQg
PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdyYWRpZW50OjpjcmVhdGVMaW5lYXJH
cmFkaWVudChtX3AwLCBtX3AxLCAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHcmFk
aWVudDo6U3ByZWFkTWV0aG9kKW1fc3ByZWFkTWV0aG9kKTsKKworICAgIHNvcnRTdG9wc0lmTmVj
ZXNzYXJ5KCk7CisgICAgQVNTRVJUKG1fc3RvcHNTb3J0ZWQpOworCisgICAgc2l6ZV90IGNvdW50
VXNlZCA9IHRvdGFsU3RvcHNOZWVkZWQobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpKTsK
KyAgICBBU1NFUlQoY291bnRVc2VkID49IDIpOworICAgIEFTU0VSVChjb3VudFVzZWQgPj0gbV9z
dG9wcy5zaXplKCkpOworCisgICAgVmVjdG9yPGZsb2F0PiBwb3MoY291bnRVc2VkKTsKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IGNvbG9ycyhjb3VudFVzZWQpOworICAgIGZpbGxTdG9wcyhtX3N0b3Bz
LmRhdGEoKSwgbV9zdG9wcy5zaXplKCksIHBvcy5kYXRhKCksIGNvbG9ycy5kYXRhKCkpOworICAg
IG1fZ3JhZGllbnQtPnNldENvbG9yU3RvcHMocG9zLmRhdGEoKSwgY29sb3JzLmRhdGEoKSwgY291
bnRVc2VkKTsKKworICAgIGlmICghbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24uaXNJZGVu
dGl0eSgpKQorICAgICAgICBtX2dyYWRpZW50LT5zZXRMb2NhbE1hdHJpeChyZWludGVycHJldF9j
YXN0PGNvbnN0IGRvdWJsZSo+KCZtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikpOworCisg
ICAgcmV0dXJuIG1fZ3JhZGllbnQ7Cit9CisKK3ZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJv
eSgpCit7CisgICAgZGVsZXRlIG1fZ3JhZGllbnQ7CisgICAgbV9ncmFkaWVudCA9IDA7Cit9CisK
K3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgcGxhdGZvcm1HcmFkaWVudCgpLT5maWxsKGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KKwordm9pZCBHcmFkaWVudDo6c2V0UGxhdGZvcm1H
cmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKQoreworICAgIHBsYXRmb3JtR3JhZGllbnQoKS0+c2V0TG9jYWxNYXRy
aXgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBkb3VibGUqPigmZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RC
bGFja0JlcnJ5LmNwcAppbmRleCBlYTQ4MGFmMGU5OTgzNDBlYzlmN2U0NTJmYmJiMzcwZDRmZmJk
MTA5Li43NTA1MzJkODk0M2ZlMmE4MTU5OGVhZDE0NzhhOGI4ZDU2MDU2YzQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29u
dGV4dDNEQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCkBAIC0zMCwxNCAr
MzAsMTUgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TEVTLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiT3BlbkdMRVNT
aGltcy5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaCIKIAogI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+
CisjaW5jbHVkZSA8VGlsZWRJbWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEx
Miw2ICsxMTMsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CiAKICAgICBBTkdMRVJlc291cmNlcy5N
YXhEcmF3QnVmZmVycyA9IDE7IC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAg
IEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IG1fZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9F
R0xfaW1hZ2VfZXh0ZXJuYWwiKTsKKyAgICBBTkdMRVJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0
YW5nbGUgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUi
KTsKICAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CiAKICAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKQEAgLTM0MiwxNiArMzQ2LDYgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJv
ckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3RleHR1cmU7CkBAIC0zNzIsMzAgKzM2Niwx
NSBAQCBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNv
bnN0CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQg
Y2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsCiAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQogewotICAgIHVuc2lnbmVkIGNoYXIqIHRlbXBQaXhlbHMgPSBuZXcgdW5zaWduZWQg
Y2hhcltpbWFnZVdpZHRoICogaW1hZ2VIZWlnaHQgKiA0XTsKLQotICAgIC8vIDNEIGltYWdlcyBo
YXZlIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gQkdSQS4gRG9uJ3QgZG8gaXQgdHdpY2UhIQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VIZWlnaHQ7IHkrKykgewotICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzcmNSb3cgPSBpbWFnZVBpeGVscyArIChpbWFnZVdpZHRoICogNCAq
IHkpOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0Um93ID0gdGVtcFBpeGVscyArIChpbWFn
ZVdpZHRoICogNCAqIChpbWFnZUhlaWdodCAtIHkgLSAxKSk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaW1hZ2VXaWR0aCAqIDQ7IGkgKz0gNCkKLSAgICAgICAgICAgIG1lbWNweShkZXN0
Um93ICsgaSwgc3JjUm93ICsgaSwgNCk7Ci0gICAgfQotCi0gICAgU2tCaXRtYXAgY2FudmFzQml0
bWFwOwotCi0gICAgY2FudmFzQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOwotICAgIGNhbnZhc0JpdG1hcC5hbGxv
Y1BpeGVscygwLCAwKTsKLSAgICBjYW52YXNCaXRtYXAubG9ja1BpeGVscygpOwotICAgIG1lbWNw
eShjYW52YXNCaXRtYXAuZ2V0UGl4ZWxzKCksIHRlbXBQaXhlbHMsIGltYWdlV2lkdGggKiBpbWFn
ZUhlaWdodCAqIDQpOwotICAgIGNhbnZhc0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKLSAgICBkZWxl
dGUgW10gdGVtcFBpeGVsczsKLQogICAgIEZsb2F0UmVjdCBzcmMoMCwgMCwgY2FudmFzV2lkdGgs
IGNhbnZhc0hlaWdodCk7CiAgICAgRmxvYXRSZWN0IGRzdCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFn
ZUhlaWdodCk7Ci0KLSAgICBSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGJpdG1h
cEltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZShjYW52YXNCaXRtYXAs
IGZhbHNlKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoYml0bWFwSW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRzdCwgc3JjLCBDb21wb3NpdGVDb3B5LCBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbiwgZmFsc2UpOworICAgIGRvdWJsZSBvbGRUcmFuc2Zvcm1bNl07CisgICAgZG91Ymxl
IGZsaXBZVHJhbnNmb3JtWzZdID0geyAxLjBmLCAwLjBmLCAwLjBmLCAtMS4wZiwgMC4wZiwgaW1h
Z2VIZWlnaHQgLSAxIH07CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRyYW5z
Zm9ybShvbGRUcmFuc2Zvcm0pOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRU
cmFuc2Zvcm0oZmxpcFlUcmFuc2Zvcm0pOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6VGlsZWRJbWFnZSBpbWFnZShJbnRTaXplKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSwg
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdW5zaWduZWQqPihpbWFnZVBpeGVscykpOworICAg
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGRJbWFnZShkc3QsIHNyYywgJmltYWdlKTsK
KyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0VHJhbnNmb3JtKG9sZFRyYW5zZm9y
bSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2so
UGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPiBjYWxsYmFjaykKQEAgLTQwNyw2ICszODYs
MzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFz
c093blB0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4KIHsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQoreworICAgIGlmICghaW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
ID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFuYXRpdmVJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgaW1hZ2VTaXplID0g
bmF0aXZlSW1hZ2UtPnNpemUoKS53aWR0aCgpICogbmF0aXZlSW1hZ2UtPnNpemUoKS5oZWlnaHQo
KTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGltYWdlRGF0YShpbWFnZVNpemUpOworICAgIGlmICgh
bmF0aXZlSW1hZ2UtPnJlYWRQaXhlbHMoaW1hZ2VEYXRhLmRhdGEoKSwgaW1hZ2VTaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmF3IGltYWdlIGRhdGEgaXMgcHJlbXVsdGlw
bGllZAorICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOworICAgIGlm
ICghcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11
bHRpcGx5OworCisgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShpbWFnZVNpemUgKiA0KTsKKyAgICBy
ZXR1cm4gcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbWFnZURh
dGEuZGF0YSgpKSwKKyAgICAgICAgU291cmNlRm9ybWF0QkdSQTgsCisgICAgICAgIG5hdGl2ZUlt
YWdlLT5zaXplKCkud2lkdGgoKSwgbmF0aXZlSW1hZ2UtPnNpemUoKS5oZWlnaHQoKSwgMCwKKyAg
ICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9HcmFwaGljc0NvbnRleHRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0QmxhY2tCZXJyeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzI5Zjg2ZDRkNGU4MDVlZGU3MDA5Nzc5ZTExY2ZmODI1Y2Y4Y2RlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3Jh
cGhpY3NDb250ZXh0QmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSw0NzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0
Zm9ybUNvbnRleHQpCisgICAgICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0
KQorICAgICAgICAsIG1faXNDb21wb3NpdGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgYm9vbCBtX2lz
Q29tcG9zaXRlZDsKK307CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCkKK3sKKyAgICBtX2RhdGEgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHBsYXRmb3JtQ29udGV4dCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGRlbGV0ZSBt
X2RhdGE7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+bV9wbGF0Zm9ybUNv
bnRleHQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxh
dGZvcm1Db250ZXh0KCktPnNhdmUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IucmdiKCkpOworICAg
IGlmIChoYXNTaGFkb3coKSkKKyAgICAgICAgc2V0UGxhdGZvcm1TaGFkb3cobV9zdGF0ZS5zaGFk
b3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0
ZS5zaGFkb3dDb2xvclNwYWNlKTsKKyAgICBlbHNlCisgICAgICAgIGNsZWFyUGxhdGZvcm1TaGFk
b3coKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlQ29sb3IobV9zdGF0ZS5zdHJv
a2VDb2xvci5yZ2IoKSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVN0eWxlKHN0
YXRpY19jYXN0PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U3Ryb2tlU3R5bGU+KG1f
c3RhdGUuc3Ryb2tlU3R5bGUpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlVGhp
Y2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0VGV4dERyYXdpbmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgYWNjZWxlcmF0ZWQp
Cit7CisgICAgbV9kYXRhLT5tX2lzQ29tcG9zaXRlZCA9IGFjY2VsZXJhdGVkOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RhdGEtPm1faXNDb21wb3NpdGVkOworfQorCitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25zdAoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKKwor
ICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmdldFRy
YW5zZm9ybSgoZG91YmxlKikmcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtYXRpb24pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnQ7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmdldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7CisgICAgY3VycmVudCAqPSB0cmFuc2Zv
cm1hdGlvbjsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VHJhbnNmb3JtKChkb3VibGUqKSZj
dXJyZW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRUcmFuc2Zvcm0o
KGNvbnN0IGRvdWJsZSopJnRyYW5zZm9ybWF0aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3JzKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFmZmluZVRyYW5zZm9ybSBj
dXJyZW50OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5nZXRUcmFuc2Zvcm0oKGRvdWJsZSopJmN1
cnJlbnQpOworICAgIGN1cnJlbnQuc2NhbGVOb25Vbmlmb3JtKHNjYWxlRmFjdG9ycy53aWR0aCgp
LCBzY2FsZUZhY3RvcnMuaGVpZ2h0KCkpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRUcmFu
c2Zvcm0oKGRvdWJsZSopJmN1cnJlbnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90
YXRlKGZsb2F0IHJhZGlhbnMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnQ7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmdldFRyYW5zZm9ybSgoZG91YmxlKikmY3VycmVudCk7CisgICAgY3VycmVudC5y
b3RhdGUocmFkMmRlZyhyYWRpYW5zKSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFRyYW5z
Zm9ybSgoZG91YmxlKikmY3VycmVudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFu
c2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50OworICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5nZXRUcmFuc2Zvcm0oKGRvdWJsZSopJmN1cnJlbnQpOworICAgIGN1
cnJlbnQudHJhbnNsYXRlKGR4LCBkeSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFRyYW5z
Zm9ybSgoZG91YmxlKikmY3VycmVudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGRFbGxpcHNl
KEZsb2F0UmVjdChyZWN0KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZv
cm1Db250ZXh0KCktPmFkZEFyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywg
Y29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+YWRkQ29udmV4UG9seWdvbihudW1Qb2ludHMsIChjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6RmxvYXRQb2ludCopcG9pbnRzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZERyYXdS
ZWN0KEZsb2F0UmVjdChyZWN0KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpH
cmFkaWVudCogcGxhdGZvcm1HcmFkaWVudCA9IGZpbGxHcmFkaWVudCgpID8gZmlsbEdyYWRpZW50
KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IDA7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpQYXR0ZXJuKiBwbGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0dGVybigpID8gZmlsbFBh
dHRlcm4oKS0+cGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSA6IDA7CisgICAgcGxh
dGZvcm1Db250ZXh0KCktPmFkZEZpbGxSZWN0KHJlY3QsIHBsYXRmb3JtR3JhZGllbnQsIHBsYXRm
b3JtUGF0dGVybik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29sb3IucmdiKCkpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5hZGRGaWxsUmVjdChyZWN0KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0RmlsbENvbG9yKG1fc3RhdGUuZmlsbENvbG9yLnJnYigpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0
KCktPmFkZENsZWFyUmVjdChyZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0cm9rZUdy
YWRpZW50KCkgfHwgc3Ryb2tlUGF0dGVybigpKSB7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAg
ICAgcGF0aC5hZGRSZWN0KHJlY3QpOworICAgICAgICBmbG9hdCBvbGRMaW5lV2lkdGggPSBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzczsKKyAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
bGluZVdpZHRoKTsKKyAgICAgICAgc3Ryb2tlUGF0aChwYXRoKTsKKyAgICAgICAgc2V0UGxhdGZv
cm1TdHJva2VUaGlja25lc3Mob2xkTGluZVdpZHRoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmFkZFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9h
dFJvdW5kZWRSZWN0IHIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVjdChG
bG9hdFJlY3QocmVjdCksIEZsb2F0U2l6ZSh0b3BMZWZ0KSwgRmxvYXRTaXplKHRvcFJpZ2h0KSwg
RmxvYXRTaXplKGJvdHRvbUxlZnQpLCBGbG9hdFNpemUoYm90dG9tUmlnaHQpKTsKKyAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+YWRkUm91bmRlZFJlY3Qocik7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZp
bGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvci5yZ2IoKSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3Vu
ZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAgIHJldHVybiByZWN0OworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZs
b2F0U2l6ZSBhZGp1c3RlZE9mZnNldCA9IG9mZnNldDsKKworICAgIGlmIChtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAor
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICBhZGp1c3RlZE9mZnNldC5zZXRIZWlnaHQoLW9m
ZnNldC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgLy8gaWYgdGhlcmUgaXMgYW4gaW52YWxpZCBz
aGFkb3cgY29sb3IsIHdlJ3JlIHN1cHBvc2VkIHRvIHVzZSBBcHBsZSdzIENHIGRlZmF1bHQKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U2hhZG93KGFkanVzdGVkT2Zmc2V0LCBibHVyLCBjb2xv
ci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2IoKSA6IG1ha2VSR0JBKDAsIDAsIDAsIDB4RkYgLyAzKSwg
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xlYXJTaGFkb3co
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpblBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIob3BhY2l0eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZW5kUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcigpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRMaW5l
Q2FwKChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkxpbmVDYXApbGMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMs
IGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldExpbmVEYXNoKGRhc2hlcy5k
YXRhKCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldExpbmVK
b2luKChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkxpbmVKb2luKWxqKTsgLy8gbmFt
aW5nIGNvaW5jaWRlcworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBsaW1pdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBvcGFjaXR5KQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRBbHBoYShvcGFjaXR5KTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXAocmVjdCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNsaXBPdXQoRmxvYXRSZWN0KHJlY3QpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNs
aXBDb252ZXhQb2x5Z29uKG51bVBvaW50cywgKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFBvaW50Kilwb2ludHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRl
ZFJlY3RDbGlwKGNvbnN0IFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFJvdW5kZWRSZWN0IHIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSb3VuZGVkUmVj
dCgKKyAgICAgICAgRmxvYXRSZWN0KHJlY3QucmVjdCgpKSwKKyAgICAgICAgRmxvYXRTaXplKHJl
Y3QucmFkaWkoKS50b3BMZWZ0KCkpLAorICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLnRv
cFJpZ2h0KCkpLAorICAgICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLmJvdHRvbUxlZnQoKSks
CisgICAgICAgIEZsb2F0U2l6ZShyZWN0LnJhZGlpKCkuYm90dG9tUmlnaHQoKSkpOworICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jbGlwUm91bmRlZFJlY3Qocik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkZsb2F0Um91bmRlZFJlY3QgciA9IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpGbG9hdFJvdW5kZWRSZWN0KAorICAgICAgICBGbG9hdFJlY3QocmVjdC5yZWN0KCkpLAorICAg
ICAgICBGbG9hdFNpemUocmVjdC5yYWRpaSgpLnRvcExlZnQoKSksCisgICAgICAgIEZsb2F0U2l6
ZShyZWN0LnJhZGlpKCkudG9wUmlnaHQoKSksCisgICAgICAgIEZsb2F0U2l6ZShyZWN0LnJhZGlp
KCkuYm90dG9tTGVmdCgpKSwKKyAgICAgICAgRmxvYXRTaXplKHJlY3QucmFkaWkoKS5ib3R0b21S
aWdodCgpKSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBPdXRSb3VuZGVkUmVjdChyKTsK
K30KKworSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiByZXR1cm4gdGhlIG1heCBJbnRSZWN0IGZvciBub3cKKyAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludChJTlRfTUlOIC8gMiwgSU5UX01JTiAvIDIpLCBJbnRTaXplKElOVF9NQVgs
IElOVF9NQVgpKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVk
UmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgImNsaXAgcm91bmRlZCByZWN0ICVkLCVkLCVkLCVkIC0gJWRcbiIsIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCB0aGlja25lc3MpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldFRleHREcmF3aW5nTW9kZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZUNvbG9yKGNvbG9yLnJnYigp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3Ryb2tlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VTdHlsZSgoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTdHJva2VTdHlsZSlzdHJva2UpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tu
ZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxs
Q29sb3IoY29sb3IucmdiKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldENvbXBvc2l0ZU9wZXJhdGlvbihzdGF0aWNfY2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkNvbXBvc2l0ZU9wZXJhdG9yPihvcCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1D
b250ZXh0KCktPnNldFVzZUFudGlhbGlhc2luZyhlbmFibGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0SGln
aFF1YWxpdHlGaWx0ZXIoaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gSW50ZXJwb2xhdGlvbk5vbmUp
OworfQorCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+
aGlnaFF1YWxpdHlGaWx0ZXIoKSA/IEludGVycG9sYXRpb25EZWZhdWx0IDogSW50ZXJwb2xhdGlv
bk5vbmU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5j
cHAKaW5kZXggNzRlYTJiZjg2YTE3MzMyN2MyZmJiNGIyOTk4OTIwOWI4M2MzNGNkNS4uYjVmNGNj
MmJlNTBjNjc4NGEyZGRkNzY3YzBlN2ZhNjc2MWYzZTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJy
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9H
cmFwaGljc0xheWVyQmxhY2tCZXJyeS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKIAogI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMYXll
ckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCkBAIC04MCwxNCAr
NzksNiBAQCBzdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKExheWVyV2ViS2l0
VGhyZWFkJiBsYXllcikKICAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50KTsKIH0KIAotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpj
cmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKLXsKLSAgICBpZiAoIWZhY3RvcnkpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgR3JhcGhpY3NMYXllckJsYWNrQmVycnkoY2xpZW50KSk7Ci0KLSAgICByZXR1cm4gZmFjdG9y
eS0+Y3JlYXRlR3JhcGhpY3NMYXllcihjbGllbnQpOwotfQotCiBQYXNzT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyQmxhY2tCZXJyeShjbGll
bnQpKTsKQEAgLTk3LDYgKzg4LDcgQEAgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OkdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBo
aWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9zdXNwZW5kVGltZSgwKQogICAgICwgbV9jb250ZW50
c0xheWVyUHVycG9zZShOb0NvbnRlbnRzTGF5ZXIpCisgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNC
YWNrZ3JvdW5kQ29sb3IoZmFsc2UpCiB7CiAgICAgbV9sYXllciA9IExheWVyV2ViS2l0VGhyZWFk
OjpjcmVhdGUoTGF5ZXJEYXRhOjpMYXllciwgdGhpcyk7CiAKQEAgLTI4MCwxNSArMjcyLDYgQEAg
dm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCiAgICAgcHJpbWFyeUxheWVyKCktPnNldFJlcGxpY2FMYXllcihyZXBs
aWNhTGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRGaXhlZFBv
c2l0aW9uKGJvb2wgZml4ZWQpCi17Ci0gICAgaWYgKGZpeGVkID09IG1fZml4ZWRQb3NpdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRQb3NpdGlvbihm
aXhlZCk7Ci0gICAgdXBkYXRlRml4ZWRQb3NpdGlvbigpOwotfQotCiB2b2lkIEdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5OjpzZXRIYXNGaXhlZENvbnRhaW5lcihib29sIGhhc0ZpeGVkQ29udGFpbmVy
KQogewogICAgIGlmIChoYXNGaXhlZENvbnRhaW5lciA9PSBtX2hhc0ZpeGVkQ29udGFpbmVyKQpA
QCAtMzI5LDEzICszMTIsMjQgQEAgYm9vbCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Rmls
dGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogCiB2b2lkIEdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChjb2xvciA9PSBtX2JhY2tncm91bmRDb2xvcikKKyAgICBpZiAobV9iYWNrZ3JvdW5k
Q29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb2xvci5yZ2IoKSk7Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKworICAgIG1fY29u
dGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvciA9IHRydWU7CiAgICAgdXBkYXRlTGF5ZXJCYWNr
Z3JvdW5kQ29sb3IoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6Y2xlYXJC
YWNrZ3JvdW5kQ29sb3IoKQoreworICAgIGlmICghbV9iYWNrZ3JvdW5kQ29sb3JTZXQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OmNsZWFyQmFja2dyb3VuZENvbG9yKCk7
CisgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyKTsKK30KKwog
dm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFx
dWUpCiB7CiAgICAgaWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3BhcXVlKQpAQCAtMzY3LDI2ICsz
NjEsMjAgQEAgdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXRDb250ZW50c05lZWRz
RGlzcGxheSgpCiB7Ci0gICAgaWYgKG1fY29udGVudHNMYXllcikgeworICAgIGlmIChtX2NvbnRl
bnRzTGF5ZXIpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKLSAgICB9CiB9CiAKIHZvaWQg
R3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYgKGRy
YXdzQ29udGVudCgpKSB7CisgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAgICBtX2xheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgYWRkUmVwYWludFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgbV9zaXplKSk7Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChkcmF3c0NvbnRlbnQoKSkgeworICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKICAgICAg
ICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICBhZGRSZXBh
aW50UmVjdChyZWN0KTsKLSAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODA2LDExICs3OTQsNiBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVMYXllcklzRHJhd2FibGUoKQog
ICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5Ojp1cGRhdGVGaXhlZFBvc2l0aW9uKCkKLXsKLSAgICBtX2xheWVyLT5zZXRGaXhlZFBv
c2l0aW9uKG1fZml4ZWRQb3NpdGlvbik7Ci19Ci0KIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVy
cnk6OnVwZGF0ZUhhc0ZpeGVkQ29udGFpbmVyKCkKIHsKICAgICBtX2xheWVyLT5zZXRIYXNGaXhl
ZENvbnRhaW5lcihtX2hhc0ZpeGVkQ29udGFpbmVyKTsKQEAgLTgyMywxMCArODA2LDE0IEBAIHZv
aWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnVwZGF0ZUhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRy
ZWUoKQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVMYXllckJhY2tncm91
bmRDb2xvcigpCiB7Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIG1fYmFja2dyb3VuZENvbG9yKTsK
KyAgICBpZiAoIW1fY29udGVudHNMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ug
bmV2ZXIgY3JlYXRlIHRoZSBjb250ZW50cyBsYXllciBqdXN0IGZvciBiYWNrZ3JvdW5kIGNvbG9y
IHlldC4KKyAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3JTZXQpCisgICAgICAgIHNldExheWVyQmFj
a2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIsIG1fYmFja2dyb3VuZENvbG9yKTsKICAgICBl
bHNlCi0gICAgICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIpOworICAgICAg
ICBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOwogfQogCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQpAQCAtOTAxLDcgKzg4OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OnNldHVwQ29udGVudHNMYXllcihMYXllcldlYktpdFRocmVhZCogY29udGVu
dHNMYXllCiAKICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAKLSAgICAgICAgaWYgKGlz
U2hvd2luZ0RlYnVnQm9yZGVyKCkpIHsKKyAgICAgICAgaWYgKHNob3dEZWJ1Z0JvcmRlcnMoKSkg
ewogICAgICAgICAgICAgc2V0TGF5ZXJCb3JkZXJDb2xvcigqbV9jb250ZW50c0xheWVyLCBDb2xv
cigwLCAwLCAxMjgsIDE4MCkpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3Jk
ZXJXaWR0aCgxKTsKICAgICAgICAgfQpAQCAtOTE1LDE0ICs5MDIsNiBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVPcGFjaXR5T25MYXllcigpCiAgICAgcHJpbWFyeUxheWVy
KCktPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKIH0KIAotYm9vbCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeTo6Y29udGVudHNWaXNpYmxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAot
ewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBtX2NsaWVudC0+Y29udGVudHNWaXNpYmxlKHRoaXMsIGNvbnRlbnRSZWN0KTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tCZXJyeS5oCmluZGV4IGUyZGQ5
MGMxNDg5OGJjNmQ0ZTM1ODk0YjlkN2ZlNWE0YzFkY2Q5OTIuLjA4OWEzZjBkNGQ1OTcxYjIwYmFl
MTkzOGNlNGM3YzdjNzU3Y2NhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5LmgKQEAgLTI5LDggKzI5LDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1
ZGUgIlBsYXRmb3JtLmgiCi0KICNpZm5kZWYgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogI2Rl
ZmluZSBHcmFwaGljc0xheWVyQmxhY2tCZXJyeV9oCiAKQEAgLTc1LDcgKzczLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rml4ZWRQb3NpdGlvbihib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzRml4ZWRDb250YWlu
ZXIoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUo
Ym9vbCk7CiAKQEAgLTg2LDYgKzgzLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyQmFja2dyb3VuZENvbG9yKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNP
cGFxdWUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29s
KTsKQEAgLTExNSwxMCArMTEzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVi
dWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVi
dWdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCk7CiAKLSAgICB2b2lkIG5v
dGlmeUZsdXNoUmVxdWlyZWQoKQorICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkKICAgICB7
CiAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlGbHVz
aFJlcXVpcmVkKHRoaXMpOworICAgICAgICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNSZXF1aXJl
ZCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91Ymxl
IHRpbWUpCkBAIC0xMjcsOCArMTI1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jbGllbnQt
Pm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgdGltZSk7CiAgICAgfQogCi0gICAgYm9vbCBj
b250ZW50c1Zpc2libGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIApAQCAtMTQ5LDcgKzE0
NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKICAg
ICB2b2lkIHVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVySXNE
cmF3YWJsZSgpOwotICAgIHZvaWQgdXBkYXRlRml4ZWRQb3NpdGlvbigpOwogICAgIHZvaWQgdXBk
YXRlSGFzRml4ZWRDb250YWluZXIoKTsKICAgICB2b2lkIHVwZGF0ZUhhc0ZpeGVkQW5jZXN0b3JJ
bkRPTVRyZWUoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7CkBAIC0x
ODUsNiArMTgwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1cnBv
c2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKKyAgICBib29sIG1fY29udGVudHNMYXllckhhc0Jh
Y2tncm91bmRDb2xvciA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0lUeXBlVXRp
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSVR5cGVV
dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY2MTRmMjJkYmE5M2VmMjgyNmNhNTRiMzhlYzNjOTkxYTVhMjc3
NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0lUeXBlVXRpbHMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSVR5cGVVdGlsc19oCisjZGVmaW5lIElUeXBlVXRpbHNfaAor
CisjaW5jbHVkZSA8ZnNfYXBpLmg+CisKK3N0YXRpYyBpbmxpbmUgRlNfRklYRUQgZmxvYXRUb0lU
eXBlRml4ZWQoZmxvYXQgZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KGYgKiA2NTUz
Ni4wKTsgfQorc3RhdGljIGlubGluZSBGU19GSVhFRCBpbnRUb0lUeXBlRml4ZWQoaW50IGkpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZTX0ZJWEVEPihpIDw8IDE2KTsgfQorCitzdGF0aWMgaW5saW5l
IGZsb2F0IGlUeXBlRml4ZWRUb0Zsb2F0KEZTX0ZJWEVEIG4pIHsgcmV0dXJuIG4gLyA2NTUzNi4w
OyB9CisKK3N0YXRpYyBjb25zdCBGU19GSVhFRCBNQVhJVFlQRUZPTlRTQ0FMRSA9IGludFRvSVR5
cGVGaXhlZCgxMDAwMCkgLSAxOworCisjZW5kaWYgLy8gSVR5cGVVdGlsc19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tC
ZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0lt
YWdlQmxhY2tCZXJyeS5jcHAKaW5kZXggMDdkYTk5MTVlODIyYTczZDc4OWQwNTI1ZjA1OTcwMTE2
MzA4MGYzNS4uN2QxMGNhYjJiZjYxZjYyODBlYWVmOWJhYjdjMTA3YzA3MWNmOTc2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbWFnZUJs
YWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvSW1hZ2VCbGFja0JlcnJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMTksMTEgKzE5LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1SZXNv
dXJjZVN0b3JlLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlJlc291cmNlRGF0YTsKIHVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpSZXNvdXJjZVN0b3JlOwpAQCAtNDUsNCArNTUsMTM1IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQogICAgIHJldHVybiBp
bWcucmVsZWFzZSgpOwogfQogCitOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2
ZUltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6VGlsZWRJbWFnZShtX3NpemUsIG1fYnl0ZXMpOworfQorCitib29sIEZyYW1lRGF0
YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQoreworICAgIGlmIChjbGVhck1ldGFkYXRhKQor
ICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgaWYgKG1fZnJhbWUpIHsKKyAg
ICAgICAgZGVsZXRlIG1fZnJhbWU7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitCaXRtYXBJbWFnZTo6Qml0
bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQorICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQorICAg
ICwgbV9mcmFtZXMoMCkKKyAgICAsIG1fZnJhbWVUaW1lcigwKQorICAgICwgbV9yZXBldGl0aW9u
Q291bnQoY0FuaW1hdGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtu
b3duKQorICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCisgICAgLCBtX2RlY29kZWRTaXpl
KDApCisgICAgLCBtX2ZyYW1lQ291bnQoMSkKKyAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQor
ICAgICwgbV9jaGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkKKyAgICAsIG1fYW5pbWF0aW9uRmlu
aXNoZWQodHJ1ZSkKKyAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKHRydWUpCisgICAgLCBtX2hhdmVT
aXplKHRydWUpCisgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKKyAgICAsIG1faGF2ZUZyYW1l
Q291bnQodHJ1ZSkKK3sKKyAgICBpbnQgd2lkdGggPSBuYXRpdmVJbWFnZS0+c2l6ZSgpLndpZHRo
KCk7CisgICAgaW50IGhlaWdodCA9IG5hdGl2ZUltYWdlLT5zaXplKCkuaGVpZ2h0KCk7CisgICAg
bV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBtX3NpemUgPSBJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpOworCisgICAgbV9mcmFtZXMuZ3JvdygxKTsKKyAgICBtX2ZyYW1lc1sw
XS5tX2ZyYW1lID0gbmF0aXZlSW1hZ2U7CisgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IG5h
dGl2ZUltYWdlLT5oYXNBbHBoYSgpOworICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0g
dHJ1ZTsKKyAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICBtX2lzU29saWRDb2xvciA9IHNpemUoKS53aWR0
aCgpID09IDEgJiYgc2l6ZSgpLmhlaWdodCgpID09IDEgJiYgZnJhbWVDb3VudCgpID09IDE7Cisg
ICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CisgICAgaWYgKG1faXNTb2xpZENvbG9y
KSB7CisgICAgICAgIHVuc2lnbmVkIGJ1ZmZlcjsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgaW1h
Z2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpbWFnZS0+cmVhZFBp
eGVscygmYnVmZmVyLCAxKTsKKyAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoYnVmZmVyKTsK
KyAgICB9Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQor
eworfQorCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBzdGFy
dEFuaW1hdGlvbigpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IGRzdFJlY3Qubm9ybWFsaXplZCgpOworICAgIEZsb2F0
UmVjdCBub3JtU3JjUmVjdCA9IHNyY1JlY3Qubm9ybWFsaXplZCgpOworCisgICAgaWYgKG5vcm1T
cmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsgLy8gTm90aGluZyB0byBkcmF3LgorCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKKyAgICBub3JtU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcobm9ybVNyY1JlY3QsIGltYWdlLT5zaXplKCkpOworI2VuZGlmCisKKyAgICBDb21wb3NpdGVP
cGVyYXRvciBvbGRPcGVyYXRvciA9IGNvbnRleHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAg
IGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisgICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmFkZEltYWdlKG5vcm1Ec3RSZWN0LCBub3JtU3JjUmVjdCwgaW1hZ2UpOwor
ICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvbGRPcGVyYXRvcik7CisKKyAgICBp
ZiAoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIG9i
c2VydmVyLT5kaWREcmF3KHRoaXMpOworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gcGF0dGVyblRyYW5zZm9ybWF0aW9uIGNvbnRhaW5zIHRoZSB0aWxlIHNj
YWxlIGZhY3RvciByZWxhdGl2ZSB0bworICAgIC8vIGRvY3VtZW50IGNvb3JkaW5hdGVzLiBwaGFz
ZSBpcyBnaXZlbiBpbiBkb2N1bWVudCBjb29yZGluYXRlcyBhbmQKKyAgICAvLyBjb3JyZXNwb25k
cyB0byBhIHRleHR1cmUgZHJhd24gd2l0aCBzcmMgc3RhcnRpbmcgYXQgKDAsIDApLgorICAgIC8v
IFRodXMsIGRzdFJlY3Qgc3RhcnRzIGF0IHBoYXNlICsgcGF0dGVyblRyYW5zZm9ybWF0aW9uLm1h
cFBvaW50KHNyY1JlY3QubG9jYXRpb24oKSkuCisgICAgQWZmaW5lVHJhbnNmb3JtIHNyY1RyYW5z
Zm9ybTsKKyAgICBzcmNUcmFuc2Zvcm0udHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKTsK
KyAgICBzcmNUcmFuc2Zvcm0ubXVsdGlwbHkocGF0dGVyblRyYW5zZm9ybWF0aW9uKTsKKyNpZiBF
TkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEZsb2F0UmVjdCBzcmNSZWN0
TG9jYWwoc3JjUmVjdCk7CisgICAgY29uc3QgSW50U2l6ZSB1bnNjYWxlZFNpemUgPSBzaXplKCk7
CisgICAgY29uc3QgSW50U2l6ZSBzY2FsZWRTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICBpZiAo
dW5zY2FsZWRTaXplICE9IHNjYWxlZFNpemUpIHsKKyAgICAgICAgc3JjUmVjdExvY2FsID0gYWRq
dXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGhhcyBiZWVuIGRvd24gc2FtcGxlZCwgdGhlIHRyYW5zZm9ybWF0
aW9uIHNob3VsZCB0YWtlIHRoZSBzY2FsZSBpbnRvIGFjY291bnQuCisgICAgICAgIGZsb2F0IHhz
Y2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih1bnNjYWxlZFNpemUud2lkdGgoKSkgLyBzY2FsZWRT
aXplLndpZHRoKCk7CisgICAgICAgIGZsb2F0IHlzY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih1
bnNjYWxlZFNpemUuaGVpZ2h0KCkpIC8gc2NhbGVkU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgc3Jj
VHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybSh4c2NhbGUsIHlzY2FsZSk7CisgICAgfQorI2Vsc2UK
KyAgICBGbG9hdFJlY3Qgc3JjUmVjdExvY2FsKHNyY1JlY3QpOworI2VuZGlmCisgICAgc3JjVHJh
bnNmb3JtLnRyYW5zbGF0ZShzcmNSZWN0TG9jYWwueCgpLCBzcmNSZWN0TG9jYWwueSgpKTsKKyAg
ICBkb3VibGUgc3JjVHJhbnNmb3JtQXJyYXlbNl0gPSB7CisgICAgICAgIHNyY1RyYW5zZm9ybS5h
KCksIHNyY1RyYW5zZm9ybS5iKCksCisgICAgICAgIHNyY1RyYW5zZm9ybS5jKCksIHNyY1RyYW5z
Zm9ybS5kKCksCisgICAgICAgIHNyY1RyYW5zZm9ybS5lKCksIHNyY1RyYW5zZm9ybS5mKCkKKyAg
ICB9OworCisgICAgQ29tcG9zaXRlT3BlcmF0b3Igb2xkT3BlcmF0b3IgPSBjb250ZXh0LT5jb21w
b3NpdGVPcGVyYXRpb24oKTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3Ap
OworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGRQYXR0ZXJuKGRzdFJlY3QsIHNy
Y1JlY3RMb2NhbCwgc3JjVHJhbnNmb3JtQXJyYXksIGltYWdlKTsKKyAgICBjb250ZXh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24ob2xkT3BlcmF0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0ltYWdlQnVmZmVyQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQnVmZmVyQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGEwOWI1OGY5MGI1NTM1ZWE4NDcyNzM1MzExMDcwMDNiZmQ1ZjQ2ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCdWZm
ZXJCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJN
ZXNzYWdlLmgiCisjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiVGlsZWRJ
bWFnZS5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJDb250ZXh0U3RhdGUu
aD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVNldHRpbmdzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtV2luZG93Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgbWFrZUJ1ZmZlckN1cnJlbnQo
SG9zdFdpbmRvdyogd2luZG93KQoreworICAgIEFTU0VSVChpc0NvbXBvc2l0aW5nVGhyZWFkKCkp
OworCisgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7Cisg
ICAgICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogcGxhdGZv
cm1XaW5kb3cgPSB3aW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdpbmRvdygp
KSB7CisgICAgICAgICAgICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjptYWtl
QnVmZmVyQ3VycmVudChwbGF0Zm9ybVdpbmRvdy0+YnVmZmVyKCksIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6R0xFUzIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHdpbmRvdyBidXQgdGhl
IGFwcGxpY2F0aW9uIHN0YXRlIHNhdmVyIGlzIGVuYWJsZWQsCisgICAgLy8gd2UncmUgdXNpbmcg
YSBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yIGZvciByZW5kZXJpbmcsCisg
ICAgLy8gdGhhdCBtYWtlcyBzdXJlIGEgY29udGV4dCBpcyBhbHdheXMgY3VycmVudCBvbiB0aGUg
Y29tcG9zaXRpbmcgdGhyZWFkLgorICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGlu
Z3M6OmlzR0xFUzJBcHBTdGF0ZVNhdmVyRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgaGF2ZSB0byB0cnkgYW5kIGZhbGwgYmFjayB0byBv
dXIgbGFzdCBob3BlLgorICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
Om1ha2VTaGFyZWRSZXNvdXJjZUNvbnRleHRDdXJyZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6R0xFUzIpOworfQorCitzdGF0aWMgYm9vbCBnZXRJbWFnZURhdGFJbnRlcm5hbChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJl
Y3QmIHNpemUsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCwgYm9vbCB1bm11bHRpcGx5LCBIb3N0V2lu
ZG93KiB3aW5kb3cpCit7CisgICAgaWYgKCFtYWtlQnVmZmVyQ3VycmVudCh3aW5kb3cpKSB7Cisg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkxvZ0xldmVsV2FybiwKKyAgICAgICAgICAgICJJbWFnZUJ1ZmZlckJsYWNrQmVycnkgZ2V0
SW1hZ2VEYXRhSW50ZXJuYWwoKSBlcnJvcjogY2Fubm90IG1ha2UgYnVmZmVyIGN1cnJlbnQsIHJl
dHVybmluZyB6ZXJvZWQtb3V0IHBpeGVscy4iKTsKKyAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwg
cmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gcmVhZFBpeGVscyBjYW4gY2FsbCB1cGRhdGVCYWNraW5nIHdoaWNo
IGRyYXdzIHRoZSBkaXNwbGF5IGxpc3QuIFRoaXMgaXMgb3V0LW9mLWJhbmQgcmVuZGVyaW5nIGFu
ZCB3ZSBuZWVkCisgICAgLy8gdG8gcHJvdGVjdCB0aGUgZW1iZWRkZXIgZnJvbSBzdGF0ZSBtdXRh
dGlvbnMuCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHRT
dGF0ZTo6QXBwU3RhdGVTYXZlciBhcHBTdGF0ZVNhdmVyOworCisgICAgLy8gQW55IHBpeGVscyBv
dXRzaWRlIHRoZSBjYW52YXMgYXJlIHJldHVybmVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGluIHRo
ZSByZXN1bHRpbmcgSW1hZ2VEYXRhIG9iamVjdC4KKyAgICBpZiAocmVjdC54KCkgPCAwCisgICAg
ICAgIHx8IHJlY3QueSgpIDwgMAorICAgICAgICB8fCByZWN0Lm1heFgoKSA+IHNpemUud2lkdGgo
KQorICAgICAgICB8fCByZWN0Lm1heFkoKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNl
dChyZXN1bHQsIDAsIHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKKworICAgIElu
dFJlY3Qgc3VicmVjdCA9IHJlY3Q7CisgICAgc3VicmVjdC5pbnRlcnNlY3Qoc2l6ZSk7CisgICAg
Ly8gbm90aGluZyB0byBkbyBpZiByZWN0IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSBvZiB0aGUgaW1h
Z2UgYXJlYQorICAgIGlmIChzdWJyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgLy8gYWRqdXN0IGZvciBuZWdhdGl2ZSB4IGFuZCB5IGluZGV4CisgICAgaWYgKHJlY3Qu
eCgpIDwgMCkKKyAgICAgICAgcmVzdWx0ICs9ICgtcmVjdC54KCkgKiA0KTsKKyAgICBpZiAocmVj
dC55KCkgPCAwKQorICAgICAgICByZXN1bHQgKz0gKC1yZWN0LnkoKSAqIHJlY3Qud2lkdGgoKSAq
IDQpOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IGEgdGlsZWQgYnVmZmVy
LgorICAgIGNvbnN0IGludCBtYXhUaWxlU2l6ZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6VGlsZWRJbWFnZTo6ZGVmYXVsdFRpbGVTaXplKCk7CisgICAgSW50UmVjdCByID0gc3Vi
cmVjdDsKKyAgICBJbnRSZWN0IHRpbGVSZWN0KDAsIDAsIG1heFRpbGVTaXplLCBtYXhUaWxlU2l6
ZSk7CisgICAgci5pbnRlcnNlY3QodGlsZVJlY3QpOworICAgIGlmICghci5pc0VtcHR5KCkpCisg
ICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5yZWFkUGl4ZWxzKHIsIHJlc3VsdCwg
dW5tdWx0aXBseSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRh
OjpnZXRJbWFnZURhdGEoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRSZWN0JiBzaXplLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQsIGJvb2wgdW5t
dWx0aXBseSkgY29uc3QKK3sKKyAgICBpZiAoIWlzQ29tcG9zaXRpbmdUaHJlYWQoKSkgeworICAg
ICAgICAvLyBVc2UgY3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZSBpbnN0ZWFkIG9mIGNyZWF0ZU1l
dGhvZENhbGxNZXNzYWdlIHRvIGF2b2lkIGRlYWRsb2NrCisgICAgICAgIC8vIHdpdGggR3VhcmRl
ZCBwb2ludGVycy4KKyAgICAgICAgZGlzcGF0Y2hTeW5jQ29tcG9zaXRpbmdNZXNzYWdlKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxNZXNzYWdlKAorICAgICAgICAgICAg
JmdldEltYWdlRGF0YUludGVybmFsLCBjb250ZXh0LCByZWN0LCBzaXplLCByZXN1bHQsIHVubXVs
dGlwbHksIG1fd2luZG93KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnZXRJbWFn
ZURhdGFJbnRlcm5hbChjb250ZXh0LCByZWN0LCBzaXplLCByZXN1bHQsIHVubXVsdGlwbHksIG1f
d2luZG93KTsKK30KKworc3RhdGljIGJvb2wgZmx1c2hBbmREcmF3KGNvbnN0IEltYWdlQnVmZmVy
RGF0YSogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sK
KyAgICBpZiAoIW1ha2VCdWZmZXJDdXJyZW50KG9iamVjdC0+bV93aW5kb3cpKSB7CisgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okxv
Z0xldmVsV2FybiwKKyAgICAgICAgICAgICJJbWFnZUJ1ZmZlckJsYWNrQmVycnkgZmx1c2hBbmRE
cmF3KCkgZXJyb3I6IGNhbm5vdCBtYWtlIGJ1ZmZlciBjdXJyZW50LCBpZ25vcmluZyBjYWxsLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdXNpbmcgbmFtZXNwYWNlIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKKworICAgIC8vIGZsdXNoQW5kRHJhd0J1ZmZl
ciBjYWxscyB1cGRhdGVCYWNraW5nIHdoaWNoIGRyYXdzIHRoZSBkaXNwbGF5IGxpc3QuIFRoaXMg
aXMgb3V0LW9mLWJhbmQgcmVuZGVyaW5nIGFuZCB3ZSBuZWVkCisgICAgLy8gdG8gcHJvdGVjdCB0
aGUgZW1iZWRkZXIgZnJvbSBzdGF0ZSBtdXRhdGlvbnMuCisgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHRTdGF0ZTo6QXBwU3RhdGVTYXZlciBhcHBTdGF0ZVNh
dmVyOworCisgICAgQ29tcG9zaXRlT3BlcmF0b3Igb2xkT3BlcmF0b3IgPSBjb250ZXh0LT5jb21w
b3NpdGVPcGVyYXRpb24oKTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3Ap
OworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5mbHVzaEFuZERyYXdCdWZmZXIob2Jq
ZWN0LT5tX2J1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIGNvbnRleHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvbGRPcGVyYXRvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogdGhpc0NvbnRleHQsIEdyYXBo
aWNzQ29udGV4dCogb3RoZXJDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpIGNvbnN0Cit7CisgICAgY29u
c3QgRmxvYXRSZWN0IG5vcm1EZXN0UmVjdCA9IGRlc3RSZWN0Lm5vcm1hbGl6ZWQoKTsKKyAgICBj
b25zdCBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBzcmNSZWN0Lm5vcm1hbGl6ZWQoKTsKKworICAg
IGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURlc3RSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRyYXcuCisKKyAgICBpZiAodGhpc0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5pc0VtcHR5KCkgJiYgcGxhdGZvcm1CdWZmZXJIYW5kbGUobV9i
dWZmZXIpKSB7CisgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9sZE9wZXJhdG9yID0gb3RoZXJD
b250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICAgICAgb3RoZXJDb250ZXh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgICAgICBvdGhlckNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3QnVmZmVyKG1fYnVmZmVyLCBub3JtRGVzdFJlY3QsIG5vcm1TcmNSZWN0KTsK
KyAgICAgICAgb3RoZXJDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkT3BlcmF0b3Ip
OworICAgIH0gZWxzZSB7CisgICAgICAgIGRpc3BhdGNoU3luY0NvbXBvc2l0aW5nTWVzc2FnZShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZSgKKyAgICAgICAg
ICAgICZmbHVzaEFuZERyYXcsIHRoaXMsIG90aGVyQ29udGV4dCwgc3R5bGVDb2xvclNwYWNlLCBu
b3JtRGVzdFJlY3QsIG5vcm1TcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKSk7CisgICAg
fQorfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgSG9zdFdpbmRvdyogd2lu
ZG93LCBib29sJiBzdWNjZXNzKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX2xvZ2ljYWxT
aXplKHNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZSgxKQoreworICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKworICAgIC8vIFRoZXJlIGlzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBkZWZhdWx0IGN0
b3IgZm9yIEltYWdlQnVmZmVyRGF0YTo6bV9kYXRhLAorICAgIC8vIG9uIHB1cnBvc2UgLSBwcmVj
YXV0aW9uLiBIZW5jZSB1cG9uIGNyZWF0aW9uIG1fZGF0YSB3aWxsIGNvbnRhaW4gZ2FyYmFnZQor
ICAgIC8vIGxlYWRpbmcgdG8gY3Jhc2ggdXAgZHRvci4gVG8gYXZvaWQgdGhlIGNhc2UsIGluaXRp
bGl6ZSBpdCBleHBsaWNpdGx5LgorICAgIG1fZGF0YS5tX2J1ZmZlciA9IDA7CisgICAgbV9kYXRh
Lm1fcGxhdGZvcm1MYXllciA9IG51bGxwdHI7CisgICAgbV9kYXRhLm1fd2luZG93ID0gMDsKKwor
ICAgIC8vIGFueXRoaW5nIGJpZ2dlciB0aGVuIGRlZmF1bHRUaWxlU2l6ZSBpcyBqdXN0IGEgcHJv
YmxlbSBmb3IgdGhlIEhXLgorICAgIGNvbnN0IGludCBtYXhUaWxlU2l6ZSA9IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6VGlsZWRJbWFnZTo6ZGVmYXVsdFRpbGVTaXplKCk7CisgICAg
aWYgKG1heFRpbGVTaXplIDw9IHNpemUud2lkdGgoKSB8fCBtYXhUaWxlU2l6ZSA8PSBzaXplLmhl
aWdodCgpKSB7CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsV2FybiwgIlJlcXVlc3RlZCBJbWFnZUJ1ZmZlciBzaXpl
IFslZCAlZF0gaXMgdG9vIGJpZy4gSFcgYWxsb3dzIHVwIHRvIFslZCAlZF0uIiwKKyAgICAgICAg
ICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgbWF4VGlsZVNpemUsIG1heFRpbGVTaXpl
KTsKKyAgICB9CisKKyAgICBtX2RhdGEubV9idWZmZXIgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OmNyZWF0ZUJ1ZmZlcihtX3NpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QWx3YXlzQmFja2VkKTsKKyAgICBtX2RhdGEubV9wbGF0Zm9ybUxheWVyID0gQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShtX2RhdGEubV9idWZmZXIsIG1fc2l6ZSk7CisgICAg
bV9kYXRhLm1fd2luZG93ID0gd2luZG93OworICAgIG1fY29udGV4dCA9IGFkb3B0UHRyKG5ldyBH
cmFwaGljc0NvbnRleHQobG9ja0J1ZmZlckRyYXdhYmxlKG1fZGF0YS5tX2J1ZmZlcikpKTsKKyAg
ICBtX2NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0
aW9uU2NhbGUpKTsKKyAgICBtX2NvbnRleHQtPnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KHJlbmRl
cmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQpOworICAgIHN1Y2Nlc3MgPSB0cnVlOworfQorCitJbWFn
ZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKK3sKKyAgICBtX2NvbnRleHQuY2xlYXIoKTsKKworICAg
IC8vIEVuc3VyZSB0aGF0IHdlIGNsZWFyIHRoZSBidWZmZXIgaW4gdGhlIGNvbXBvc2l0aW5nIHRo
cmVhZCBiZWZvcmUgdGhlIGJ1ZmZlciBpcyBkZXN0cm95ZWQuCisgICAgaWYgKG1fZGF0YS5tX3Bs
YXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgZGlzcGF0Y2hTeW5jQ29tcG9zaXRpbmdNZXNzYWdlKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxNZXNzYWdlKAorICAgICAgICAg
ICAgJkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpjbGVhckJ1ZmZlciwgbV9kYXRhLm1fcGxhdGZv
cm1MYXllci5nZXQoKSkpOworICAgIH0KKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6ZGVzdHJveUJ1ZmZlcihtX2RhdGEubV9idWZmZXIpOworICAgIG1fZGF0YS5tX2J1ZmZl
ciA9IDA7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLm1f
cGxhdGZvcm1MYXllci5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICAv
LyBGSVhNRSByZXNwZWN0IGNvcHlCZWhhdmlvdXIgZW51bS4KKyAgICB1bnNpZ25lZCogaW1hZ2VE
YXRhID0gbmV3IHVuc2lnbmVkW21fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpXTsKKyAg
ICBtX2RhdGEuZ2V0SW1hZ2VEYXRhKG1fY29udGV4dC5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV9zaXplKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwgKHVuc2lnbmVk
IGNoYXIqKWltYWdlRGF0YSwgZmFsc2UgLyogdW5tdWx0aXBseSAqLyk7CisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlKiBuYXRpdmVJbWFnZSA9IG5ldyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVkSW1hZ2UobV9zaXplLCBpbWFnZURhdGEs
IGZhbHNlIC8qIGRhdGFJc0JHUkEgKi8pOworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KG5hdGl2ZUltYWdlKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBXVEZfQUxJ
R05FRCh1bnNpZ25lZCBjaGFyKiwgaW1hZ2VEYXRhLCA0KSA9IG5ldyB1bnNpZ25lZCBjaGFyW21f
c2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNF07CisgICAgbV9kYXRhLmdldEltYWdl
RGF0YShtX2NvbnRleHQuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSksIElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSksIGltYWdlRGF0YSwgZmFsc2UgLyogdW5tdWx0
aXBseSAqLyk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdl
KiBuYXRpdmVJbWFnZSA9IG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVk
SW1hZ2UobV9zaXplLCByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGltYWdlRGF0YSks
IGZhbHNlIC8qIGRhdGFJc0JHUkEgKi8pOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5hZGRNYXNrTGF5ZXIocmVjdCwgbmF0aXZlSW1hZ2UpOworfQorCit2b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQoreworICAgIG1f
ZGF0YS5kcmF3KG1fY29udGV4dC5nZXQoKSwgY29udGV4dCwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit7CisgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaW1h
Z2UtPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6
OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1VwVGFi
bGUpCit7Cit9CisKK1Bhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKK3sKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHJlY3Qud2lkdGgoKSAqIHJlY3Qu
aGVpZ2h0KCkgKiA0KTsKKyAgICBtX2RhdGEuZ2V0SW1hZ2VEYXRhKG1fY29udGV4dC5nZXQoKSwg
cmVjdCwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9zaXplKSwgcmVzdWx0LT5kYXRhKCksIHRy
dWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChy
ZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7CisgICAgbV9kYXRhLmdldEltYWdlRGF0
YShtX2NvbnRleHQuZ2V0KCksIHJlY3QsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSks
IHJlc3VsdC0+ZGF0YSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
Cit7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlIGltYWdl
KHNvdXJjZVNpemUsIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oc291cmNlLT5kYXRh
KCkpLCBmYWxzZSAvKiB0aGlzIGRhdGEgaXMgUkdCQSwgbm90IEJHUkEgKi8sIG11bHRpcGxpZWQg
PT0gUHJlbXVsdGlwbGllZCk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2F2
ZSgpOworICAgIGNvbnN0IGRvdWJsZSBtYXRyaXhbXSA9IHsgMS4sIDAuLCAwLiwgMS4sIDAuLCAw
LiB9OworICAgIG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldFRyYW5zZm9ybShtYXRy
aXgpOworICAgIG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldEFscGhhKDEuMCk7Cisg
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVzZXRDbGlwKCk7CisgICAgbV9jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6Q29tcG9zaXRlQ29weSk7CisgICAgbV9jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+YWRkSW1hZ2UoRmxvYXRSZWN0KGRlc3RQb2ludCArIHNvdXJjZVJlY3Qu
bG9jYXRpb24oKSwgc291cmNlUmVjdC5zaXplKCkpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksICZp
bWFnZSk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOworfQor
CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHksIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgaWYg
KG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIGVudW0g
eworICAgICAgICBFbmNvZGVKUEVHLAorICAgICAgICBFbmNvZGVQTkcsCisgICAgfSBlbmNvZGVU
eXBlID0gbWltZVR5cGUubG93ZXIoKSA9PSAiaW1hZ2UvcG5nIiA/IEVuY29kZVBORyA6IEVuY29k
ZUpQRUc7CisKKyAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUv
dGhlLWNhbnZhcy1lbGVtZW50Lmh0bWwsCisgICAgLy8gIkZvciBpbWFnZSB0eXBlcyB0aGF0IGRv
IG5vdCBzdXBwb3J0IGFuIGFscGhhIGNoYW5uZWwsIHRoZSBpbWFnZSBtdXN0IGJlIgorICAgIC8v
ICJjb21wb3NpdGVkIG9udG8gYSBzb2xpZCBibGFjayBiYWNrZ3JvdW5kIHVzaW5nIHRoZSBzb3Vy
Y2Utb3ZlciBvcGVyYXRvciwiCisgICAgLy8gImFuZCB0aGUgcmVzdWx0aW5nIGltYWdlIG11c3Qg
YmUgdGhlIG9uZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZGF0YTogVVJMLiIKKyAgICAvLyBKUEVHIGRv
ZXNuJ3QgaGF2ZSBhbHBoYSBjaGFubmVsLCBzbyB3ZSBuZWVkIHByZW11bHRpcGxpZWQgZGF0YS4K
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGltYWdlRGF0YSA9IGVuY29kZVR5cGUgPT0g
RW5jb2RlUE5HCisgICAgICAgID8gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoMCwgMCksIG1fc2l6ZSkpCisgICAgICAgIDogZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3NpemUpKTsKKworICAgIFZlY3RvcjxjaGFyPiBv
dXRwdXQ7CisgICAgY29uc3QgY2hhciogaGVhZGVyOworICAgIGlmIChlbmNvZGVUeXBlID09IEVu
Y29kZVBORykgeworICAgICAgICBpZiAoIWNvbXByZXNzUkdCQUJpZ0VuZGlhblRvUE5HKGltYWdl
RGF0YS0+ZGF0YSgpLCBtX3NpemUsIG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gImRhdGE6
LCI7CisgICAgICAgIGhlYWRlciA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsIjsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoIWNvbXByZXNzUkdCQUJpZ0VuZGlhblRvSlBFRyhpbWFnZURhdGEt
PmRhdGEoKSwgbV9zaXplLCBvdXRwdXQsIHF1YWxpdHkpKQorICAgICAgICAgICAgcmV0dXJuICJk
YXRhOiwiOworICAgICAgICBoZWFkZXIgPSAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwiOworICAg
IH0KKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjQ7CisgICAgYmFzZTY0RW5jb2RlKG91dHB1dCwg
YmFzZTY0KTsKKworICAgIG91dHB1dC5jbGVhcigpOworCisgICAgVmVjdG9yPGNoYXI+IHVybDsK
KyAgICB1cmwuYXBwZW5kKGhlYWRlciwgc3RybGVuKGhlYWRlcikpOworICAgIHVybC5hcHBlbmQo
YmFzZTY0KTsKKworICAgIHJldHVybiBTdHJpbmcodXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCdWZmZXJEYXRhQmxhY2tCZXJyeS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbWFnZUJ1ZmZlckRh
dGFCbGFja0JlcnJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRhMzMwZTkzMDIwNzRlNjNkM2FmODRhMjRmMTNh
ZDVkZTUwNDIyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvSW1hZ2VCdWZmZXJEYXRhQmxhY2tCZXJyeS5oCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBJ
bWFnZUJ1ZmZlckRhdGFCbGFja0JlcnJ5X2gKKyNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQmxhY2tC
ZXJyeV9oCisKKyNpbmNsdWRlICJDYW52YXNMYXllcldlYktpdFRocmVhZC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhp
Y3MuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HdWFyZGVkUG9pbnRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBIb3N0V2luZG93
OworCitjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgeworcHVibGljOgorICAgIHZvaWQgZ2V0SW1hZ2VE
YXRhKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgdW5z
aWduZWQgY2hhciogcmVzdWx0LCBib29sIHVubXVsdGlwbHkpIGNvbnN0OworICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQqIHRoaXNDb250ZXh0LCBHcmFwaGljc0NvbnRleHQqIG90aGVyQ29u
dGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlKSBjb25zdDsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8Q2FudmFzTGF5ZXJXZWJLaXRUaHJl
YWQ+IG1fcGxhdGZvcm1MYXllcjsKKyAgICBIb3N0V2luZG93KiBtX3dpbmRvdzsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0YUJsYWNrQmVy
cnlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9JbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGExNmNiYzlkZDk5YTFlNDI3MDg0MWQ4YTdlNmUx
MzM3OGQ4ZmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW5zdHJ1bWVudGVk
UGxhdGZvcm1DYW52YXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgSW5zdHJ1bWVudGVkUGxh
dGZvcm1DYW52YXNfaAotI2RlZmluZSBJbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhc19oCi0KLSNp
bmNsdWRlIDxza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaD4KLQotI2RlZmluZSBERUJVR19TS0lB
X0RSQVdJTkcgMAotI2lmIERFQlVHX1NLSUFfRFJBV0lORwotI2RlZmluZSBXUkFQQ0FOVkFTX0xP
R19FTlRSWSguLi4pIGRvIHsgXAotICAgIGZwcmludGYoc3RkZXJyLCAiJXMgIiwgX19GVU5DVElP
Tl9fKTsgXAotICAgIGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7IFwKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIlxuIik7IFwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBXUkFQQ0FOVkFT
X0xPR19FTlRSWSguLi4pICgodm9pZCkwKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSW5zdHJ1bWVudGVkUGxhdGZvcm1DYW52YXMgOiBwdWJsaWMgU2tDYW52YXMgewot
cHVibGljOgotICAgIEluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXApCi0gICAgICAgIDogbV9zaXplKGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkp
Ci0gICAgICAgICwgbV9pc1NvbGlkQ29sb3IodHJ1ZSkKLSAgICAgICAgLCBtX3NvbGlkQ29sb3Io
MCwgMCwgMCwgMCkKLSAgICB7Ci0gICAgICAgIHNldERldmljZShuZXcgU2tEZXZpY2UoYml0bWFw
KSktPnVucmVmKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+SW5zdHJ1bWVudGVkUGxhdGZvcm1D
YW52YXMoKSB7IH0KLQotICAgIGJvb2wgaXNTb2xpZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NvbGlkQ29sb3I7IH0KLSAgICBDb2xvciBzb2xpZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9z
b2xpZENvbG9yOyB9Ci0KLSAgICAvLyBvdmVycmlkZXMgZnJvbSBTa0NhbnZhcwotICAgIHZpcnR1
YWwgaW50IHNhdmUoU2F2ZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoIiIpOwotICAgICAgICByZXR1cm4gU2tDYW52YXM6OnNhdmUoZmxhZ3MpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgaW50IHNhdmVMYXllcihjb25zdCBTa1JlY3QqIGJvdW5kcywgY29u
c3QgU2tQYWludCogcGFpbnQsIFNhdmVGbGFncyBmbGFncykKLSAgICB7Ci0gICAgICAgIFdSQVBD
QU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIFNrQ2FudmFzOjpzYXZlTGF5ZXIoYm91bmRzLCBwYWludCwgZmxhZ3MpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIFdSQVBD
QU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgU2tDYW52YXM6OnJlc3RvcmUoKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdHJhbnNsYXRlKFNrU2NhbGFyIGR4LCBTa1NjYWxhciBkeSkK
LSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgcmV0dXJu
IFNrQ2FudmFzOjp0cmFuc2xhdGUoZHgsIGR5KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c2NhbGUoU2tTY2FsYXIgc3gsIFNrU2NhbGFyIHN5KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZB
U19MT0dfRU5UUlkoIiIpOwotICAgICAgICByZXR1cm4gU2tDYW52YXM6OnNjYWxlKHN4LCBzeSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHJvdGF0ZShTa1NjYWxhciBkZWdyZWVzKQotICAg
IHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICByZXR1cm4gU2tD
YW52YXM6OnJvdGF0ZShkZWdyZWVzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2tldyhT
a1NjYWxhciBzeCwgU2tTY2FsYXIgc3kpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19F
TlRSWSgiIik7Ci0gICAgICAgIHJldHVybiBTa0NhbnZhczo6c2tldyhzeCwgc3kpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgYm9vbCBjb25jYXQoY29uc3QgU2tNYXRyaXgmIG1hdHJpeCkKLSAgICB7
Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgcmV0dXJuIFNrQ2Fu
dmFzOjpjb25jYXQobWF0cml4KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWF0cml4
KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19F
TlRSWSgiIik7Ci0gICAgICAgIFNrQ2FudmFzOjpzZXRNYXRyaXgobWF0cml4KTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBTa1JlZ2lvbjo6
T3Agb3ApCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAg
IHJldHVybiBTa0NhbnZhczo6Y2xpcFJlY3QocmVjdCwgb3ApOwotICAgIH0KLQotICAgIHZpcnR1
YWwgYm9vbCBjbGlwUGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCkgCi0g
ICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xp
ZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBTa0NhbnZhczo6Y2xpcFBhdGgocGF0aCwg
b3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjbGlwUmVnaW9uKGNvbnN0IFNrUmVnaW9u
JiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9H
X0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIFNrQ2FudmFzOjpjbGlwUmVnaW9uKHJlZ2lvbiwgb3ApOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCBjbGVhcihTa0NvbG9yIGNvbG9yKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7Ci0gICAgICAgIG1f
c29saWRDb2xvciA9IENvbG9yKGNvbG9yKTsKLSAgICAgICAgU2tDYW52YXM6OmNsZWFyKGNvbG9y
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhaW50KGNvbnN0IFNrUGFpbnQmIHBh
aW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBt
X2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6ZHJhd1BhaW50KHBhaW50
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BvaW50cyhQb2ludE1vZGUgbW9kZSwg
c2l6ZV90IGNvdW50LCBjb25zdCBTa1BvaW50IHB0c1tdLAotICAgICAgICAgICAgY29uc3QgU2tQ
YWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0g
ICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3UG9p
bnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKLSAgICB7
Ci0gICAgICAgIEludFJlY3QgcmVjdFRvRHJhdyhyZWN0KTsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoInJlY3QgPSAoeD0lZCx5PSVkLHdpZHRoPSVkLGhlaWdodD0lZCkiLCByZWN0VG9E
cmF3LngoKSwgcmVjdFRvRHJhdy55KCksIHJlY3RUb0RyYXcud2lkdGgoKSwgcmVjdFRvRHJhdy5o
ZWlnaHQoKSk7Ci0gICAgICAgIEludFJlY3QgY2FudmFzUmVjdChJbnRQb2ludCgpLCBtX3NpemUp
OwotICAgICAgICBpZiAobV9pc1NvbGlkQ29sb3IgJiYgZ2V0VG90YWxNYXRyaXgoKS5yZWN0U3Rh
eXNSZWN0KCkgJiYgZ2V0VG90YWxDbGlwKCkuY29udGFpbnMoY2FudmFzUmVjdCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFNrTWF0cml4JiBtYXRyaXggPSBnZXRUb3RhbE1hdHJpeCgpOwotICAgICAg
ICAgICAgU2tSZWN0IG1hcHBlZDsKLSAgICAgICAgICAgIG1hdHJpeC5tYXBSZWN0KCZtYXBwZWQs
IHJlY3QpOwotICAgICAgICAgICAgaWYgKG1hcHBlZC5jb250YWlucyhjYW52YXNSZWN0KSkgewot
ICAgICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gc29saWRDb2xvcihwYWludCk7Ci0gICAgICAg
ICAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBjb2xvci5pc1ZhbGlkKCk7Ci0gICAgICAgICAgICAg
ICAgbV9zb2xpZENvbG9yID0gY29sb3I7Ci0gICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdSZWN0KHJl
Y3QsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgU2tQ
YXRoJiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5W
QVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAg
ICAgU2tDYW52YXM6OmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTa1NjYWxhciBsZWZ0LAot
ICAgICAgICAgICAgU2tTY2FsYXIgdG9wLCBjb25zdCBTa1BhaW50KiBwYWludCkKLSAgICB7Ci0g
ICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3Ig
PSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdCaXRtYXAoYml0bWFwLCBsZWZ0LCB0b3As
IHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0JpdG1hcFJlY3QoY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCogc3JjLAotICAgICAgICAgICAgY29uc3Qg
U2tSZWN0JiBkc3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENB
TlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAg
ICAgICBTa0NhbnZhczo6ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCBzcmMsIGRzdCwgcGFpbnQpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qml0bWFwTWF0cml4KGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAsCi0gICAgICAgICAgICBjb25zdCBTa01hdHJpeCYgbWF0cml4LCBjb25zdCBTa1Bh
aW50KiBwYWludCkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAg
ICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdCaXRt
YXBNYXRyaXgoYml0bWFwLCBtYXRyaXgsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0JpdG1hcE5pbmUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCYg
Y2VudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1JlY3QmIGRz
dCwgY29uc3QgU2tQYWludCogcGFpbnQgPSAwKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBT
a0NhbnZhczo6ZHJhd0JpdG1hcE5pbmUoYml0bWFwLCBjZW50ZXIsIGRzdCwgcGFpbnQpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3U3ByaXRlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAs
IGludCBsZWZ0LCBpbnQgdG9wLAotICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpCi0g
ICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xp
ZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3U3ByaXRlKGJpdG1hcCwgbGVm
dCwgdG9wLCBwYWludCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KGNvbnN0
IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBTa1NjYWxhciB4LAotICAgICAgICAgICAg
U2tTY2FsYXIgeSwgY29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FO
VkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAg
ICAgIFNrQ2FudmFzOjpkcmF3VGV4dCh0ZXh0LCBieXRlTGVuZ3RoLCB4LCB5LCBwYWludCk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQb3NUZXh0KGNvbnN0IHZvaWQqIHRleHQsIHNp
emVfdCBieXRlTGVuZ3RoLAotICAgICAgICAgICAgY29uc3QgU2tQb2ludCBwb3NbXSwgY29uc3Qg
U2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7
Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3
UG9zVGV4dCh0ZXh0LCBieXRlTGVuZ3RoLCBwb3MsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd1Bvc1RleHRIKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3Ro
LAotICAgICAgICAgICAgY29uc3QgU2tTY2FsYXIgeHBvc1tdLCBTa1NjYWxhciBjb25zdFksIGNv
bnN0IFNrUGFpbnQmIHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlko
IiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6
ZHJhd1Bvc1RleHRIKHRleHQsIGJ5dGVMZW5ndGgsIHhwb3MsIGNvbnN0WSwgcGFpbnQpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dE9uUGF0aChjb25zdCB2b2lkKiB0ZXh0LCBz
aXplX3QgYnl0ZUxlbmd0aCwKLSAgICAgICAgICAgIGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3Qg
U2tNYXRyaXgqIG1hdHJpeCwgY29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBX
UkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7
Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3VGV4dE9uUGF0aCh0ZXh0LCBieXRlTGVuZ3RoLCBwYXRo
LCBtYXRyaXgsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BpY3R1cmUo
U2tQaWN0dXJlJiBwaWN0dXJlKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlko
IiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6
ZHJhd1BpY3R1cmUocGljdHVyZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdWZXJ0
aWNlcyhWZXJ0ZXhNb2RlIG1vZGUsIGludCB2ZXJ0ZXhDb3VudCwKLSAgICAgICAgICAgIGNvbnN0
IFNrUG9pbnQgdmVydGljZXNbXSwgY29uc3QgU2tQb2ludCB0ZXhzW10sCi0gICAgICAgICAgICBj
b25zdCBTa0NvbG9yIGNvbG9yc1tdLCBTa1hmZXJtb2RlKiB4ZmVybW9kZSwKLSAgICAgICAgICAg
IGNvbnN0IHVpbnQxNl90IGluZGljZXNbXSwgaW50IGluZGV4Q291bnQsIGNvbnN0IFNrUGFpbnQm
IHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAg
ICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6ZHJhd1ZlcnRpY2Vz
KG1vZGUsIHZlcnRleENvdW50LCB2ZXJ0aWNlcywgdGV4cywgY29sb3JzLCB4ZmVybW9kZSwgaW5k
aWNlcywgaW5kZXhDb3VudCwgcGFpbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIFdSQVBD
QU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAg
ICAgICAgU2tDYW52YXM6OmRyYXdEYXRhKGRhdGEsIHNpemUpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBDb2xvciBzb2xpZENvbG9yKGNvbnN0IFNrUGFpbnQmIHBhaW50KQotICAgIHsKLSAgICAg
ICAgaWYgKHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgaWYgKHBhaW50LmdldExvb3BlcigpIHx8IHBh
aW50LmdldFNoYWRlcigpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICAgICAg
U2tYZmVybW9kZTo6TW9kZSBtb2RlOwotICAgICAgICBTa1hmZXJtb2RlOjpBc01vZGUocGFpbnQu
Z2V0WGZlcm1vZGUoKSwgJm1vZGUpOwotICAgICAgICBpZiAobW9kZSA9PSBTa1hmZXJtb2RlOjpr
Q2xlYXJfTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAg
ICAgICBpZiAoKG1vZGUgPT0gU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSAmJiBwYWludC5nZXRB
bHBoYSgpID09IDI1NSkgfHwgbW9kZSA9PSBTa1hmZXJtb2RlOjprU3JjX01vZGUpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgIH0KLQotICAgIEludFNpemUgbV9zaXplOwotICAgIGJvb2wgbV9pc1NvbGlkQ29s
b3I7Ci0gICAgQ29sb3IgbV9zb2xpZENvbG9yOwotICAgIFNrUGFpbnQgbV9zb2xpZFBhaW50Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSW5zdHJ1bWVudGVkUGxh
dGZvcm1DYW52YXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAK
aW5kZXggNDU0YWYxYTBjYjQ1ZTQwY2RjNmQ4NmZkOGU5ODNhNGZiOWY0OGU1My4uY2NkMDQ3MGRj
ZTZmNzQ4YzM3MDE2N2VjNjA5NTFhYWRjMzc2ZjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
Q29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC00NywxMiArNDcsMTUgQEAKICNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKIAor
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyQ29udGV4dFN0YXRlLmg+CiAjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1Mb2cuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiAjZGVmaW5lIERFQlVH
X1ZJREVPX0NMSVBQSU5HIDAKIAordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpHTEVTMlByb2dyYW07CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBMYXllck92ZXJy
aWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMjA3LDcgKzIxMCw3
IEBAIEZsb2F0UXVhZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpnZXRUcmFuc2Zvcm1lZEhvbGVQ
dW5jaFJlY3QoKSBjb25zdAogICAgIHJldHVybiBnZXRUcmFuc2Zvcm1lZFJlY3QobV9ib3VuZHMs
IGRyYXdSZWN0LCBtX2RyYXdUcmFuc2Zvcm0pOwogfQogCi12b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmRyYXdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBp
bnQgdGV4Q29vcmRMb2NhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3ZvaWQg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwgY29uc3Qg
R0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KQogewog
ICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEs
ICAxLCAwIH07CiAKQEAgLTIyNiw4ICsyMjksMTMgQEAgdm9pZCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkOjpkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBpbnQgcG9zaXRpb25Mb2NhdGlvbiwgaW4K
IAogICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5hZGRMYXllclRvUmVsZWFzZVRleHR1cmVS
ZXNvdXJjZXNMaXN0KHRoaXMpOwogCi0gICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIo
cG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbV90cmFuc2Zvcm1l
ZEJvdW5kcyk7Ci0gICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29vcmRMb2Nh
dGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgICAgICAgICAg
Z2xFbmFibGUoR0xfQkxFTkQpOworICAgICAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9P
TkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCkpOworICAgICAgICAgICAgZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSk7CisgICAgICAgICAgICBn
bFVuaWZvcm0xZihwcm9ncmFtLm9wYWNpdHlMb2NhdGlvbigpLCBkcmF3T3BhY2l0eSgpKTsKKyAg
ICAgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24o
KSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbV90cmFuc2Zvcm1lZEJvdW5kcyk7CisgICAg
ICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKICAgICAgICAgICAgIGdsRHJh
d0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKQEAgLTI0NCw1MyArMjUyLDcwIEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJh
d1RleHR1cmVzKGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGluCiAgICAgICAg
ICAgICBmbG9hdCB5ID0gLW1fdHJhbnNmb3JtZWRCb3VuZHMucDEoKS55KCkgKiB2cmgyICsgdnJo
MiArIHZpc2libGVSZWN0LnkoKTsKICAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhaW50KDAs
IEludFJlY3QoKGludCkoeCArIDAuNSksIChpbnQpKHkgKyAwLjUpLCBtX2JvdW5kcy53aWR0aCgp
LCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBt
cHAgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihtX21lZGlhUGxheWVyLT5wbGF0
Zm9ybU1lZGlhKCkubWVkaWEucW54TWVkaWFQbGF5ZXIpOwotICAgICAgICAgICAgbXBwLT5kcmF3
QnVmZmVyaW5nQW5pbWF0aW9uKG1fZHJhd1RyYW5zZm9ybSwgcG9zaXRpb25Mb2NhdGlvbiwgdGV4
Q29vcmRMb2NhdGlvbik7CisgICAgICAgICAgICBtcHAtPmRyYXdCdWZmZXJpbmdBbmltYXRpb24o
bV9kcmF3VHJhbnNmb3JtLCBwcm9ncmFtKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCiAKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kcmF3
VGV4dHVyZXModGhpcywgc2NhbGUsIHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3JkTG9jYXRpb24p
OworICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRoaXMsIHNjYWxlLCBwcm9ncmFtKTsK
IH0KIAotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3U3VyZmFjZShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bWFzaywgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKQordm9pZCBM
YXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3U3VyZmFjZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZHJhd1RyYW5zZm9ybSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzaywgY29uc3Qg
R0xFUzJQcm9ncmFtJiBwcm9ncmFtKQogeworICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M7CisKICAgICBpZiAobV9sYXllclJlbmRlcmVyLT5sYXllckFs
cmVhZHlPblN1cmZhY2UodGhpcykpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4SUQgPSBsYXllclJl
bmRlcmVyU3VyZmFjZSgpLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpOwotICAgICAgICBpZiAoIXRl
eElEKSB7CisgICAgICAgIFRleHR1cmUqIHN1cmZhY2VUZXh0dXJlID0gbGF5ZXJSZW5kZXJlclN1
cmZhY2UoKS0+dGV4dHVyZSgpOworICAgICAgICBpZiAoIXN1cmZhY2VUZXh0dXJlKSB7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNj
ZXNzZWQobGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+dGV4dHVyZSgpKTsKLSAgICAgICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXhJRCk7CisgICAgICAgIEdMdWludCBzdXJmYWNlVGV4
SUQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUoc3VyZmFj
ZVRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgaWYgKCFzdXJmYWNlVGV4SUQpIHsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAgIGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBtYXNrLT5iaW5kQ29udGVudHNUZXh0dXJl
KCk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAgICAg
ICAgVGV4dHVyZSogbWFza1RleHR1cmUgPSBtYXNrLT5jb250ZW50c1RleHR1cmUoKTsKKyAgICAg
ICAgICAgIGlmIChtYXNrVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIEdMdWludCBtYXNrVGV4
SUQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUobWFza1Rl
eHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGb3JjZSBjcmVhdGlv
biBpZiBpdCdzIDAKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2tUZXhJRCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGNhbGwgd2lsbCBjYXVzZSBkaXNwbGF5IGxpc3QgdG8gcmVuZGVy
IHRvIGJhY2tpbmcsIHdoaWNoIGNhbiBtdXRhdGUgYSBsb3Qgb2YgR0wgc3RhdGUuCisgICAgICAg
ICAgICAgICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpQcm9ncmFtU3RhdGVTYXZlciBwcm9ncmFt
U2F2ZXI7CisgICAgICAgICAgICAgICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpUZXh0dXJlQW5k
RkJPU3RhdGVTYXZlciB0ZXh0dXJlU2F2ZXI7CisgICAgICAgICAgICAgICAgICAgIGxvY2tBbmRC
aW5kQnVmZmVyR0xUZXh0dXJlKG1hc2tUZXh0dXJlLT50ZXh0dXJlSWQoKSwgR0xfVEVYVFVSRV8y
RCk7CisgICAgICAgICAgICAgICAgICAgIG1hc2tUZXhJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtYXNrVGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTEpOworICAgICAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFz
a1RleElEKTsKKyAgICAgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwor
ICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAg
ICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2VUZXhJRCk7CisKICAgICAg
ICAgRmxvYXRRdWFkIHN1cmZhY2VRdWFkID0gZ2V0VHJhbnNmb3JtZWRSZWN0KG1fYm91bmRzLCBJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYm91bmRzKSwgZHJhd1RyYW5zZm9ybSk7Ci0gICAg
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsICZzdXJmYWNlUXVhZCk7CisgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCkpOworICAgICAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0udGV4Q29vcmRMb2NhdGlvbigpKTsKKyAgICAgICAgZ2xVbmlm
b3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+
ZHJhd09wYWNpdHkoKSk7CisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBv
c2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmc3VyZmFjZVF1YWQp
OwogCiAgICAgICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwg
MSwgIDEsIDEsICAxLCAwIH07Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29y
ZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CisgICAgICAg
IGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOwogICAgICAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KTsKICAgICB9CiB9CiAKLWJvb2wgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6aGFzTWlzc2luZ1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jbGllbnQg
PyBtX2NsaWVudC0+aGFzTWlzc2luZ1RleHR1cmVzKHRoaXMpIDogZmFsc2U7Ci19Ci0KLXZvaWQg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd01pc3NpbmdUZXh0dXJlcyhkb3VibGUgc2NhbGUs
IGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiAvKnZpc2libGVSZWN0Ki8pCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+ZHJhd01pc3NpbmdUZXh0dXJlcyh0aGlzLCBzY2FsZSwgcG9zaXRpb25Mb2NhdGlvbiwg
dGV4Q29vcmRMb2NhdGlvbik7Ci19Ci0KIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6cmVs
ZWFzZVRleHR1cmVSZXNvdXJjZXMoKQogewogICAgIGlmIChtX3BsdWdpblZpZXcgJiYgbV9wbHVn
aW5CdWZmZXIpIHsKQEAgLTM5NywxMCArNDIyLDEyIEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQogICAgICAgICBtX2NsaWVudC0+
dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCh0aGlzKTsKIH0KIAotdm9pZCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKK1RleHR1cmUqIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmNvbnRlbnRzVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBt
X2NsaWVudC0+YmluZENvbnRlbnRzVGV4dHVyZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LT5jb250ZW50c1RleHR1cmUodGhpcyk7CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBM
YXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTQ0MCw2
ICs0NjcsMTIgQEAgdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzY2hlZHVsZUNvbW1pdCgp
CiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDb21wb3Np
dGluZ1RocmVhZDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKK3sKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHModGhp
cyk7Cit9CisKIGJvb2wgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6dXBkYXRlQW5pbWF0aW9ucyhk
b3VibGUgY3VycmVudFRpbWUpCiB7CiAgICAgLy8gVGhlIGNvbW1pdCBtZWNoYW5pc20gYWx3YXlz
IG92ZXJ3cml0ZXMgb3VyIHN0YXRlIHdpdGggc3RhdGUgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllckNvbXBvc2l0aW5nVGhyZWFkLmgKaW5kZXggODUzODVlZDJjNWU2NjhhMDE3ODY1MGQ4YjE2
YmNiYjg0NGIwMTg4NS4uNTc1ZmYzODMzODZiNGY1OGVlOWU1N2I4YjIzNzA2ZmFmZjZmY2E0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllckNvbXBvc2l0aW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKQEAgLTUwLDYgKzUwLDcg
QEAgbmFtZXNwYWNlIEJsYWNrQmVycnkgewogbmFtZXNwYWNlIFBsYXRmb3JtIHsKIG5hbWVzcGFj
ZSBHcmFwaGljcyB7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBHTEVTMlByb2dyYW07CiB9CiB9CiB9
CkBAIC0xNDIsMTAgKzE0MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJs
YXllcigpOwogICAgIHZvaWQgc2V0TmVlZHNUZXh0dXJlKGJvb2wgbmVlZHNUZXh0dXJlKSB7IG1f
bmVlZHNUZXh0dXJlID0gbmVlZHNUZXh0dXJlOyB9CiAKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdU
ZXh0dXJlVXBsb2FkcygpOworCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgYW4gYW5p
bWF0aW9uCiAgICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBjdXJyZW50VGltZSk7CiAg
ICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpOwotICAgIHZvaWQgYmluZENv
bnRlbnRzVGV4dHVyZSgpOworICAgIFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpOwogCiAgICAg
Y29uc3QgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcm9vdExheWVyKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFk
PiA+Jik7CkBAIC0xNzgsMTAgKzE4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGVsZXRlVGV4
dHVyZXMoKTsKIAotICAgIHZvaWQgZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0
aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHZpc2li
bGVSZWN0KTsKLSAgICBib29sIGhhc01pc3NpbmdUZXh0dXJlcygpIGNvbnN0OwotICAgIHZvaWQg
ZHJhd01pc3NpbmdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBp
bnQgdGV4Q29vcmRMb2NhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCk7Ci0gICAg
dm9pZCBkcmF3U3VyZmFjZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIG1hc2ssIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2Nh
dGlvbik7CisgICAgdm9pZCBkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGNvbnN0IEZsb2F0UmVjdCYg
dmlzaWJsZVJlY3QpOworICAgIHZvaWQgZHJhd1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBtYXNrLCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwogCiAgICAgdm9pZCByZWxlYXNlVGV4
dHVyZVJlc291cmNlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudC5oCmluZGV4IDc0NmFkZWE0OTdhMDViMzgyMTYyY2VmNTE5N2Q5NWE3OWRiZWUw
ZWQuLmNjN2JmM2JiZWI4ZjM5MWU3ZDNlM2E0ODA5MDk3YWQ2MjNkODQxMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCkBAIC0yMSw5ICsyMSwx
NyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCituYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworbmFtZXNwYWNlIEdyYXBoaWNzIHsKK2Ns
YXNzIEdMRVMyUHJvZ3JhbTsKK30KK30KK30KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDsKK2NsYXNzIFRleHR1cmU7CiAKIGNsYXNzIExheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQgewogcHVibGljOgpAQCAtMzQsMTUgKzQyLDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2Fk
VGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2Fs
ZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3Jh
bSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCopID0gMDsKIAogICAgIC8vIE9wdGlvbmFsLiBBbGxvd3MgbGF5ZXJzIHRvIHNlcnZl
IGFzIGEgbWFzayBmb3Igb3RoZXIgbGF5ZXJzCi0gICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50
c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIHsgfQorICAgIHZpcnR1YWwgVGV4dHVy
ZSogY29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IHJldHVybiAwOyB9
CiAKLSAgICAvLyBPcHRpb25hbC4gQWxsb3dzIGxheWVycyB0byBoYXZlIHVuY2FjaGVkIHJlZ2lv
bnMsIHR5cGljYWxseSBkcmF3biBhcyBjaGVja2VyYm9hcmQKLSAgICB2aXJ0dWFsIGJvb2wgaGFz
TWlzc2luZ1RleHR1cmVzKGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWlzc2luZ1RleHR1cmVzKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBp
bnQgdGV4Q29vcmRMb2NhdGlvbikgeyB9CisgICAgLy8gT3B0aW9uYWwuIEFsbG93IHRoZSBsYXll
ciB0byBjb21taXQgdGhyZWFkIHNlbnNpdGl2ZSBjb250ZW50IGR1cmluZyBhIHN5bmMgcG9pbnQK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqKSB7IH0KIAogICAgIC8vIFVubGlrZSB0aGUgb3RoZXIgbWV0aG9kcyBoZXJl
LCB0aGlzIG9uZSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgV2ViS2l0IHRocmVhZAogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbW1pdCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKaW5kZXggNTBiZTA4YWY1
NmVjMmRiNjE4ZDFhOTUzNDY0Y2I3NWQ3NWFlMWQ4ZC4uNWMyNTllM2Q1YjcyMzBiMWE3YTI4NmMz
YWI4Mzk5MmVhNjY3NjQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCkBAIC01NiwyNyArNTYsMzEgQEAgY2xh
c3MgTGF5ZXJEYXRhIHsKIHB1YmxpYzoKICAgICBlbnVtIExheWVyVHlwZSB7IExheWVyLCBUcmFu
c2Zvcm1MYXllciwgV2ViR0xMYXllciwgQ2FudmFzTGF5ZXIsIEN1c3RvbUxheWVyIH07CiAgICAg
ZW51bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIsIExhbmN6b3MgfTsK
LSAgICBlbnVtIExheWVyUHJvZ3JhbVNoYWRlciB7IExheWVyUHJvZ3JhbVNoYWRlclJHQkEgPSAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJQcm9ncmFtU2hhZGVyQkdSQSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVy
cyB9OworICAgIGVudW0gTGF5ZXJQcm9ncmFtIHsKKyAgICAgICAgTGF5ZXJQcm9ncmFtUkdCQSA9
IDAsCisgICAgICAgIExheWVyUHJvZ3JhbUJHUkEsCisgICAgICAgIE51bWJlck9mTGF5ZXJQcm9n
cmFtcworICAgIH07CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgZW51bSBDU1NGaWx0
ZXJTaGFkZXJzIHsgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTRmlsdGVyU2hhZGVySW52ZXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U0ZpbHRlclNoYWRlckJyaWdodG5lc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
RmlsdGVyU2hhZGVyQ29udHJhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmls
dGVyU2hhZGVyT3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJT
aGFkZXJCbHVyWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJC
bHVyWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTaGFkb3cs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyUGFzc3Rocm91Z2gs
CisgICAgZW51bSBDU1NGaWx0ZXJTaGFkZXJzIHsKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyR3Jh
eXNjYWxlID0gMCwKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2VwaWEsCisgICAgICAgIENTU0Zp
bHRlclNoYWRlclNhdHVyYXRlLAorICAgICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCisg
ICAgICAgIENTU0ZpbHRlclNoYWRlckludmVydCwKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQnJp
Z2h0bmVzcywKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQ29udHJhc3QsCisgICAgICAgIENTU0Zp
bHRlclNoYWRlck9wYWNpdHksCisgICAgICAgIENTU0ZpbHRlclNoYWRlckJsdXJZLAorICAgICAg
ICBDU1NGaWx0ZXJTaGFkZXJCbHVyWCwKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2hhZG93LAor
ICAgICAgICBDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCwKICNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQ3VzdG9tLAor
ICAgICAgICBDU1NGaWx0ZXJTaGFkZXJDdXN0b20sCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnMgfTsKKyAgICAgICAgTnVtYmVyT2ZD
U1NGaWx0ZXJTaGFkZXJzCisgICAgfTsKICNlbmRpZgogCiAgICAgTGF5ZXJEYXRhKExheWVyVHlw
ZSB0eXBlKQpAQCAtODcsMTIgKzkxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX29wYWNpdHko
MS4wKQogICAgICAgICAsIG1fYW5jaG9yUG9pbnRaKDAuMCkKICAgICAgICAgLCBtX2JvcmRlcldp
ZHRoKDAuMCkKLSAgICAgICAgLCBtX2xheWVyUHJvZ3JhbVNoYWRlcihMYXllclByb2dyYW1TaGFk
ZXJCR1JBKQorICAgICAgICAsIG1fbGF5ZXJQcm9ncmFtKExheWVyUHJvZ3JhbUJHUkEpCiAgICAg
ICAgICwgbV9wbHVnaW5WaWV3KDApCiAjaWYgRU5BQkxFKFZJREVPKQogICAgICAgICAsIG1fbWVk
aWFQbGF5ZXIoMCkKICNlbmRpZgogICAgICAgICAsIG1fc3VzcGVuZFRpbWUoMCkKKyAgICAgICAg
LCBtX2NvbnRlbnRzU2NhbGUoMS4wKQogICAgICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKICAg
ICAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgICAgICwgbV9pc09wYXF1ZShmYWxz
ZSkKQEAgLTEwMiw4ICsxMDcsMTAgQEAgcHVibGljOgogICAgICAgICAsIG1faXNGaXhlZFBvc2l0
aW9uKGZhbHNlKQogICAgICAgICAsIG1faGFzRml4ZWRDb250YWluZXIoZmFsc2UpCiAgICAgICAg
ICwgbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGZhbHNlKQotICAgICAgICAsIG1faXNWaXNp
YmxlKHRydWUpCisgICAgICAgICwgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMo
ZmFsc2UpCiAgICAgICAgICwgbV9zaXplSXNTY2FsZUludmFyaWFudChmYWxzZSkKKyAgICAgICAg
LCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KGZhbHNlKQorICAgICAgICAsIG1faXNW
aXNpYmxlKHRydWUpCiAgICAgewogICAgIH0KIApAQCAtMTI1LDYgKzEzMiw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgc2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX3NpemVJ
c1NjYWxlSW52YXJpYW50OyB9CiAKKyAgICBib29sIGNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5k
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudDsgfQor
CiAgICAgYm9vbCBkb3VibGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0K
IAogICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KQEAgLTE1
MCwxNyArMTU5LDI1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmVlZHNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclR5cGUgPT0gV2ViR0xMYXllciB8fCBtX2xheWVyVHlwZSA9PSBDYW52
YXNMYXllciB8fCBtX25lZWRzVGV4dHVyZTsgfQogCi0gICAgTGF5ZXJQcm9ncmFtU2hhZGVyIGxh
eWVyUHJvZ3JhbVNoYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9ncmFtU2hhZGVyOyB9
CisgICAgTGF5ZXJQcm9ncmFtIGxheWVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQ
cm9ncmFtOyB9CiAKICAgICBib29sIGlzRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNGaXhlZFBvc2l0aW9uOyB9CiAgICAgYm9vbCBoYXNGaXhlZENvbnRhaW5lcigpIGNvbnN0IHsg
cmV0dXJuIG1faGFzRml4ZWRDb250YWluZXI7IH0KICAgICBib29sIGhhc0ZpeGVkQW5jZXN0b3JJ
bkRPTVRyZWUoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWU7IH0K
KyAgICBib29sIGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOyB9CisgICAgYm9vbCBpc0Zp
eGVkVG9Ub3AoKSBjb25zdCB7IHJldHVybiBtX2lzRml4ZWRUb1RvcDsgfQorICAgIGJvb2wgaXNG
aXhlZFRvTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXhlZFRvTGVmdDsgfQorCisgICAgSW50
UmVjdCBmcmFtZVZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpc2libGVSZWN0
OyB9CisgICAgSW50U2l6ZSBmcmFtZUNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVDb250ZW50c1NpemU7IH0KIAogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3BsdWdpblZpZXc7IH0KIAogICAgIEludFJlY3QgaG9sZVB1bmNoUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1faG9sZVB1bmNoUmVjdDsgfQogICAgIGJvb2wgaGFzSG9sZVB1bmNoUmVj
dCgpIGNvbnN0IHsgcmV0dXJuICFtX2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpOyB9CiAKKyAgICBk
b3VibGUgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQor
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXI7IH0KICNlbmRpZgpAQCAtMjAyLDcgKzIxOSw3IEBAIHBy
b3RlY3RlZDoKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKICAgICBmbG9hdCBtX2JvcmRlcldp
ZHRoOwogCi0gICAgTGF5ZXJQcm9ncmFtU2hhZGVyIG1fbGF5ZXJQcm9ncmFtU2hhZGVyOworICAg
IExheWVyUHJvZ3JhbSBtX2xheWVyUHJvZ3JhbTsKIAogICAgIFBsdWdpblZpZXcqIG1fcGx1Z2lu
VmlldzsKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMTEsNyArMjI4LDExIEBAIHByb3RlY3RlZDoK
ICNlbmRpZgogICAgIEludFJlY3QgbV9ob2xlUHVuY2hSZWN0OwogCisgICAgSW50UmVjdCBtX2Zy
YW1lVmlzaWJsZVJlY3Q7CisgICAgSW50U2l6ZSBtX2ZyYW1lQ29udGVudHNTaXplOworCiAgICAg
ZG91YmxlIG1fc3VzcGVuZFRpbWU7CisgICAgZG91YmxlIG1fY29udGVudHNTY2FsZTsKIAogICAg
IHVuc2lnbmVkIG1fZG91YmxlU2lkZWQgOiAxOwogICAgIHVuc2lnbmVkIG1fbWFza3NUb0JvdW5k
cyA6IDE7CkBAIC0yMjMsMTAgKzI0NCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9p
c0ZpeGVkUG9zaXRpb24gOiAxOwogICAgIHVuc2lnbmVkIG1faGFzRml4ZWRDb250YWluZXIgOiAx
OwogICAgIHVuc2lnbmVkIG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSA6IDE7CisgICAgdW5z
aWduZWQgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0ZpeGVkVG9Ub3AgOiAxOworICAgIHVuc2lnbmVkIG1faXNGaXhlZFRvTGVmdCA6IDE7
CisKKyAgICB1bnNpZ25lZCBtX3NpemVJc1NjYWxlSW52YXJpYW50IDogMTsKKyAgICB1bnNpZ25l
ZCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50IDogMTsKIAogICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgb25seSBhdmFpbGFibGUgZm9yIG1lZGlhICh2aWRlbykgYW5kIHBsdWdpbiBsYXll
cnMuCiAgICAgdW5zaWduZWQgbV9pc1Zpc2libGUgOiAxOwotICAgIHVuc2lnbmVkIG1fc2l6ZUlz
U2NhbGVJbnZhcmlhbnQgOiAxOwogCiAgICAgLy8gQ0FVVElPTjogYWxsIHRoZSBkYXRhIG1lbWJl
cnMgYXJlIGNvcGllZCBmcm9tIG9uZSBpbnN0YW5jZSB0byBhbm90aGVyCiAgICAgLy8gaS5lLiBm
cm9tIG9uZSB0aHJlYWQgdG8gYW5vdGhlciBpbiB0aGUgcmVwbGljYXRlIG1ldGhvZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJG
aWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCmluZGV4IDgwZmMxZWE0ZGY2YTAyYzhkMzFl
YTYyZWI3YjgxOTg5ZDBiYmFmMWQuLmIyYzI5MTg5YjU2ODc2ZDRiNTllMzE1NTU5MzA3NjIwMmNh
ZDA1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
R3JhcGhpY3MuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8VmVjdG9yLmg+CiAKICNpbmNsdWRlIDxjc3RyaW5n
PgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTI0Miw3ICsyNDIsNiBAQCBQYXNzUmVmUHRyPExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24+IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShp
bnQgcHJvZwogCiBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpMYXllckZpbHRlclJlbmRlcmVy
QWN0aW9uKGludCBjX3Byb2dyYW1JZCkKICAgICA6IG1fcHJvZ3JhbUlkKGNfcHJvZ3JhbUlkKQot
ICAgICwgbV9jdXN0b21JZCgtMSkKICAgICAsIG1fcHVzaFNuYXBzaG90KGZhbHNlKQogICAgICwg
bV9wb3BTbmFwc2hvdChmYWxzZSkKICAgICAsIG1fZHJhd2luZ01vZGUoRHJhd1RyaWFuZ2xlRmFu
QXJyYXlzKQpAQCAtMzAyLDcgKzMwMSw3IEBAIGJvb2wgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aW5p
dGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiB7CiAgICAgLy8gU2VlIGFsc28gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCiAKLSAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAg
ICBjaGFyIHN0YW5kYXJkVmVydGV4U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAiYXR0cmlidXRl
IHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKICAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29v
cmQ7ICAgXG4iCiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgpAQCAt
MzEyLDYgKzMxMSwxNyBAQCBib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMoKQogICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIK
ICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCisgICAgY2hhciBv
ZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bv
c2l0aW9uOyAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENv
b3JkOyAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgdmVjMiB1X29m
ZnNldDsgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsgICAgICAgICAg
ICAgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkIC0gdV9vZmZzZXQ7ICAg
XG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
OworCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCiAgICAgICAgICJwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsgXG4iXAogICAgICAgICAiXG4iXApAQCAtMzIxLDE2ICszMzEsNiBAQCBi
b29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAg
ICAgICAjeFwKICAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hh
ZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgogCi0jZGVmaW5lIE9GRlNF
VF9GSUxURVIoeC4uLikgXAotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIlwK
LSAgICAgICAgIlxuIlwKLSAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7
XG4iXAotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX3RleHR1cmU7XG4iXAotICAg
ICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAgICJ1bmlmb3Jt
IG1lZGl1bXAgdmVjMiB1X29mZnNldDtcbiJcCi0gICAgICAgICN4XAotICAgICAgICAidm9pZCBt
YWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc190ZXh0dXJlLCB2
X3RleENvb3JkIC0gdV9vZmZzZXQpKTsgfSIKLQogI2RlZmluZSBCTFVSX0ZJTFRFUih4Li4uKSBc
CiAgICAgICAgICJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7IFxuIlwKICAgICAgICAgIlxuIlwKQEAg
LTM1NCw3ICszNTQsNyBAQCBib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMoKQogICAgICAgICAiY29lZmZpY2llbnRTdW0gKz0gaW5jci54O1xuIlwKICAg
ICAgICAgImluY3IueHkgKj0gaW5jci55ejtcbiJcCiAgICAgICAgICJcbiJcCi0gICAgICAgICJm
b3IgKGZsb2F0IGkgPSAxLjA7IGkgPD0gbnVtQmx1clBpeGVsc1BlclNpZGU7IGkrKykge1xuIlwK
KyAgICAgICAgImZvciAoZmxvYXQgaSA9IDEuMDsgaSA8PSB1X2Ftb3VudDsgaSsrKSB7XG4iXAog
ICAgICAgICAiICAgIGF2ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkLnh5IC0g
aSAqIHVfYmx1clNpemUgKiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwKICAgICAgICAg
IiAgICBhdmcgKz0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSArIGkgKiB1X2Js
dXJTaXplICogYmx1ck11bHRpcGx5VmVjKSAqIGluY3IueDtcbiJcCiAgICAgICAgICIgICAgY29l
ZmZpY2llbnRTdW0gKz0gMi4wICogaW5jci54O1xuIlwKQEAgLTQ0MiwxNiArNDQyLDE0IEBAIGJv
b2wgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAg
KTsKIAogICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0gPSBC
TFVSX0ZJTFRFUigKLSAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1BlclNpZGUgPSAy
LjA7CiAgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0gdmVjMigxLjAs
IDAuMCk7CiAgICAgKTsKIAogICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFk
ZXJCbHVyWV0gPSBCTFVSX0ZJTFRFUigKLSAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVs
c1BlclNpZGUgPSAyLjA7CiAgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAg
ID0gdmVjMigwLjAsIDEuMCk7CiAgICAgKTsKIAotICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpD
U1NGaWx0ZXJTaGFkZXJTaGFkb3ddID0gT0ZGU0VUX0ZJTFRFUigKKyAgICBzaGFkZXJTdHJzW0xh
eWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSA9IFNUQU5EQVJEX0ZJTFRFUigKICAgICAg
ICAgdW5pZm9ybSBsb3dwIHZlYzMgdV9jb2xvcjsKICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKICAgICAgICAgewpAQCAtNDY5LDcgKzQ2NywxMCBAQCBib29sIExheWVy
RmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICk7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJz
OyBpKyspIHsKLSAgICAgICAgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldID0gTGF5ZXJSZW5k
ZXJlcjo6bG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBzaGFkZXJTdHJzW2ld
KTsKKyAgICAgICAgaWYgKGkgPT0gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3cpCisg
ICAgICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBMYXllclJlbmRlcmVyOjps
b2FkU2hhZGVyUHJvZ3JhbShvZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmcsIHNoYWRlclN0cnNbaV0p
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0g
PSBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShzdGFuZGFyZFZlcnRleFNoYWRlclN0
cmluZywgc2hhZGVyU3Ryc1tpXSk7CiAgICAgICAgIGlmICghbV9jc3NGaWx0ZXJQcm9ncmFtT2Jq
ZWN0W2ldKSB7CiAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nQWx3YXlzKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDb3VsZCBub3QgbG9hZCBDU1MgRmls
dGVyIFNoYWRlciAlaSIsIGkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDk5LDE5
ICs1MDAsNTUgQEAgYm9vbCBMYXllckZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xP
YmplY3RzKCkKIAogdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwaW5nKExheWVyUmVuZGVyZXJT
dXJmYWNlKiBzdXJmYWNlKQogewotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUtPnRl
eHR1cmVJZCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2Ut
PnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIEdMdWludCB0ZXhpZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3RleHR1cmUtPnRleHR1cmVJZCgp
KSk7CisgICAgaWYgKCF0ZXhpZCkgeworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OmxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKG1fdGV4dHVyZS0+dGV4dHVyZUlkKCks
IEdMX1RFWFRVUkVfMkQpOworICAgICAgICB0ZXhpZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgfQor
CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCgKKyAgICAgICAgR0xfRlJBTUVCVUZGRVIsCisg
ICAgICAgIEdMX0NPTE9SX0FUVEFDSE1FTlQwLAorICAgICAgICBHTF9URVhUVVJFXzJELAorICAg
ICAgICB0ZXhpZCwKKyAgICAgICAgMAorICAgICk7CisgICAgZ2xCaW5kVGV4dHVyZSgKKyAgICAg
ICAgR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KHBsYXRm
b3JtQnVmZmVySGFuZGxlKHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpKQorICAgICk7
CiB9CiAKIHZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cG9uZyhMYXllclJlbmRlcmVyU3VyZmFj
ZSogc3VyZmFjZSkKIHsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+dGV4dHVyZSgp
LT50ZXh0dXJlSWQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKAorICAgICAg
ICBHTF9GUkFNRUJVRkZFUiwKKyAgICAgICAgR0xfQ09MT1JfQVRUQUNITUVOVDAsCisgICAgICAg
IEdMX1RFWFRVUkVfMkQsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihwbGF0Zm9y
bUJ1ZmZlckhhbmRsZShzdXJmYWNlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKSksCisgICAgICAg
IDAKKyAgICApOworICAgIGdsQmluZFRleHR1cmUoCisgICAgICAgIEdMX1RFWFRVUkVfMkQsCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKSkKKyAgICApOwogfQogCiB2b2lkIExheWVyRmlsdGVyUmVuZGVy
ZXI6OnB1c2hTbmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSwgaW50IHNvdXJj
ZUlkKQogewotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3NuYXBzaG90VGV4dHVyZS0+dGV4dHVy
ZUlkKCksIDApOworICAgIEdMdWludCB0ZXhpZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50Pihw
bGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3NuYXBzaG90VGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAg
ICBpZiAoIXRleGlkKSB7CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
bG9ja0FuZEJpbmRCdWZmZXJHTFRleHR1cmUobV9zbmFwc2hvdFRleHR1cmUtPnRleHR1cmVJZCgp
LCBHTF9URVhUVVJFXzJEKTsKKyAgICAgICAgdGV4aWQgPSByZWludGVycHJldF9jYXN0PEdMdWlu
dD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUobV9zbmFwc2hvdFRleHR1cmUtPnRleHR1cmVJZCgpKSk7
CisgICAgfQorCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCgKKyAgICAgICAgR0xfRlJBTUVC
VUZGRVIsCisgICAgICAgIEdMX0NPTE9SX0FUVEFDSE1FTlQwLAorICAgICAgICBHTF9URVhUVVJF
XzJELAorICAgICAgICB0ZXhpZCwKKyAgICAgICAgMAorICAgICk7CiAKICAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZUlkKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZF
Ul9CSVQpOyAvLyB0byB0cmFuc3BhcmVuY3kKQEAgLTUyOSw3ICs1NjYsMTAgQEAgdm9pZCBMYXll
ckZpbHRlclJlbmRlcmVyOjpwb3BTbmFwc2hvdCgpCiAgICAgLy8gdG8gdGhlIHNuYXBzaG90IHRl
eHR1cmUuIE5leHQgdGltZSBnbERyYXdBcnJheXMgaXMgY2FsbGVkLCB0aGUgc25hcHNob3Qgd2ls
bCBiZSBkcmF3bi4KIAogICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwot
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zbmFwc2hvdFRleHR1cmUtPnRleHR1
cmVJZCgpKTsKKyAgICBnbEJpbmRUZXh0dXJlKAorICAgICAgICBHTF9URVhUVVJFXzJELAorICAg
ICAgICByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUobV9zbmFw
c2hvdFRleHR1cmUtPnRleHR1cmVJZCgpKSkKKyAgICApOwogfQogCiBWZWN0b3I8UmVmUHRyPExh
eWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0aW9uc0Zv
ck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBvcHMpCkBAIC02NTksOSArNjk5LDkgQEAgdm9pZCBM
YXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbGEKICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkgKTsKICAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHRleGNvb3Jkcyk7CiAKLSAgICBtX3RleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+
dGV4dHVyZSgpLT5zaXplKCkpOworICAgIG1fdGV4dHVyZS0+cHJvdGVjdChzdXJmYWNlLT50ZXh0
dXJlKCktPnNpemUoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNr
ZWQpOwogICAgIGlmIChyZXF1aXJlU25hcHNob3QpCi0gICAgICAgIG1fc25hcHNob3RUZXh0dXJl
LT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6ZSgpKTsKKyAgICAgICAgbV9zbmFwc2hv
dFRleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCksIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6QWx3YXlzQmFja2VkKTsKIAogICAgIGlmICghZmJvKQogICAg
ICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKQEAgLTY3OCw5ICs3MTgsMTYgQEAgdm9p
ZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGEKICAgICAgICAgLy8gQmVjYXVzZSB3ZSBldmVudHVhbGx5IGhh
dmUgdG8gZW5kIG9uIHRoZSBwYXJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhbiBldmVuIG51bWJlciBv
ZiBhY3Rpb25zLgogICAgICAgICAvLyBhY3Rpb25zRm9yT3BlcmF0aW9ucyB0YWtlcyBjYXJlIG9m
IHRoYXQuCiAKLSAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFB1c2hTbmFwc2hvdCgpKQot
ICAgICAgICAgICAgcHVzaFNuYXBzaG90KHN1cmZhY2UsICghKGkgJSAyKSA/IHN1cmZhY2UtPnRl
eHR1cmUoKS0+dGV4dHVyZUlkKCkgOiBtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgICAg
IGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkgeworICAgICAgICAgICAgUmVm
UHRyPFRleHR1cmU+IGN1cnJlbnRUZXh0dXJlID0gKCEoaSAlIDIpID8gc3VyZmFjZS0+dGV4dHVy
ZSgpIDogbV90ZXh0dXJlKTsKKyAgICAgICAgICAgIEdMdWludCB0ZXhpZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShjdXJyZW50VGV4dHVyZS0+dGV4dHVy
ZUlkKCkpKTsKKyAgICAgICAgICAgIGlmICghdGV4aWQpIHsKKyAgICAgICAgICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKGN1
cnJlbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgR0xfVEVYVFVSRV8yRCk7CisgICAgICAgICAgICAg
ICAgdGV4aWQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUo
Y3VycmVudFRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgIHB1c2hTbmFwc2hvdChzdXJmYWNlLCB0ZXhpZCk7CisgICAgICAgIH0KICAgICAgICAgaWYg
KCEoaSAlIDIpKQogICAgICAgICAgICAgcGluZyhzdXJmYWNlKTsgLy8gU2V0IGZyYW1lYnVmZmVy
IHRvIG91cnMsIGFuZCB0ZXh0dXJlIHRvIHBhcmVudAogICAgICAgICBlbHNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVy
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clJlbmRlcmVyLmNwcAppbmRleCA4YWQzNDFjYWM4NTM0OWU4MjFmMmRmNTI0MTE2NjU4NDU1OWYy
NjYyLi5mNjk2Y2FjYjNhMDBkMTFlNmViOTJkZGE0M2Y5Y2JmZjU2ODI4MmFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVy
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJSZW5kZXJlci5jcHAKQEAgLTUxLDE3ICs1MSwyMCBAQAogI2RlZmluZSBERUJVR19DTElQ
UElORyAwCiAKIHVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJDb250
ZXh0OwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2
b2lkIGNoZWNrR0xFcnJvcigpCi17CiAjaWZuZGVmIE5ERUJVRwotICAgIGlmIChHTGVudW0gZXJy
b3IgPSBnbEdldEVycm9yKCkpCi0gICAgICAgIExPR19FUlJPUigiR0wgRXJyb3I6IDB4JXggIiAs
IGVycm9yKTsKLSNlbmRpZgorI2RlZmluZSBjaGVja0dMRXJyb3IoKSBcCit7IFwKKyAgICBpZiAo
R0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpKSBcCisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsICIl
czolZCBHTCBFcnJvcjogMHgleCAiLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm9yKTsgXAogfQor
I2Vsc2UKKyNkZWZpbmUgY2hlY2tHTEVycm9yKCkKKyNlbmRpZgogCiBHTHVpbnQgTGF5ZXJSZW5k
ZXJlcjo6bG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVyU291cmNlKQog
ewpAQCAtMTQ1LDExICsxNDgsNyBAQCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXI+IExheWVyUmVu
ZGVyZXI6OmNyZWF0ZShHTEVTMkNvbnRleHQqIGNvbnRleHQpCiB9CiAKIExheWVyUmVuZGVyZXI6
OkxheWVyUmVuZGVyZXIoR0xFUzJDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb2xvclByb2dy
YW1PYmplY3QoMCkKLSAgICAsIG1fY2hlY2tlclByb2dyYW1PYmplY3QoMCkKLSAgICAsIG1fcG9z
aXRpb25Mb2NhdGlvbigwKQotICAgICwgbV90ZXhDb29yZExvY2F0aW9uKDEpCi0gICAgLCBtX3Nj
YWxlKDEuMCkKKyAgICA6IG1fc2NhbGUoMS4wKQogICAgICwgbV9hbmltYXRpb25UaW1lKC1udW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1f
Y3VycmVudExheWVyUmVuZGVyZXJTdXJmYWNlKDApCkBAIC0xNTksMTYgKzE1OCwxNCBAQCBMYXll
clJlbmRlcmVyOjpMYXllclJlbmRlcmVyKEdMRVMyQ29udGV4dCogY29udGV4dCkKICAgICAsIG1f
bmVlZHNDb21taXQoZmFsc2UpCiAgICAgLCBtX3N0ZW5jaWxDbGVhcmVkKGZhbHNlKQogewotICAg
IGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgIC8vIFdlJ3JlIG5vdyBpbml0aWFsaXpp
bmcgbGF6aWx5LCBzbyBhIGNoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRlIGN1cnJlbnQK
KyAgICAvLyB3aWxsIGhhdmUgdG8gc3VmZmljZSB0byBkZXRlcm1pbmUgaWYgaGFyZHdhcmUgY29t
cG9zaXRpbmcgaXMgcG9zc2libGUuCisgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1faGFyZHdhcmVDb21wb3NpdGluZykgewogICAgICAg
ICBtX2lzUm9idXN0bmVzc1N1cHBvcnRlZCA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSkuY29udGFpbnMoIkdMX0VYVF9y
b2J1c3RuZXNzIik7CiAgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc1N1cHBvcnRlZCkKICAgICAg
ICAgICAgIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xH
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIikpOwogICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnM7ICsraSkKLSAgICAg
ICAgbV9sYXllclByb2dyYW1PYmplY3RbaV0gPSAwOwotCi0gICAgbV9oYXJkd2FyZUNvbXBvc2l0
aW5nID0gaW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpOwogfQogCiBMYXllclJlbmRlcmVyOjp+
TGF5ZXJSZW5kZXJlcigpCkBAIC0xNzcsMTAgKzE3NCw5IEBAIExheWVyUmVuZGVyZXI6On5MYXll
clJlbmRlcmVyKCkKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIGlmICht
X2ZibykKICAgICAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAg
ICAgIGdsRGVsZXRlUHJvZ3JhbShtX2NvbG9yUHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIGdsRGVs
ZXRlUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVyczsgKytpKQotICAg
ICAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE51bWJlck9mUHJvZ3JhbXM7ICsraSkKKyAgICAg
ICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3Byb2dyYW1zW2ldLm1fcHJvZ3JhbSk7CiAKICAgICAg
ICAgLy8gRnJlZSB1cCBhbGwgR0wgdGV4dHVyZXMuCiAgICAgICAgIHdoaWxlIChtX2xheWVycy5i
ZWdpbigpICE9IG1fbGF5ZXJzLmVuZCgpKSB7CkBAIC0yNzMsOCArMjY5LDYgQEAgdm9pZCBMYXll
clJlbmRlcmVyOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmUKICAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKTsKICAg
ICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOwogCi0gICAgZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotICAgIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV90ZXhDb29yZExvY2F0aW9uKTsKICAgICBnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApOwogICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKICAgICBnbERpc2Fi
bGUoR0xfQ1VMTF9GQUNFKTsKQEAgLTI4MiwxOCArMjc2LDkgQEAgdm9pZCBMYXllclJlbmRlcmVy
OjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmUKIAogICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdlIHdpbGwgY3VsbCB0
aGUgYmFja2ZhY2UuCiAgICAgZ2xDdWxsRmFjZShHTF9CQUNLKTsKLSAgICAvLyBUaGUgb3J0aG9n
cmFwaGljIHByb2plY3Rpb24gaXMgc2V0dXAgc3VjaCB0aGF0IFkgc3RhcnRzIGF0IHplcm8gYW5k
Ci0gICAgLy8gaW5jcmVhc2VzIGdvaW5nIGRvd24gdGhlIHBhZ2Ugd2hpY2ggZmxpcHMgdGhlIHdp
bmRpbmcgb3JkZXIgb2YgdHJpYW5nbGVzLgotICAgIC8vIFRoZSBsYXllciBxdWFkcyBhcmUgZHJh
d24gaW4gY2xvY2std2lzZSBvcmRlciBzbyB0aGUgZnJvbnQgZmFjZSBpcyBDQ1cuCi0gICAgZ2xG
cm9udEZhY2UoR0xfQ0NXKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhl
IGNoZWNrZXJib2FyZCBkcmF3aW5nLgotICAgIGdsVXNlUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFt
T2JqZWN0KTsKLSAgICBmbG9hdCBiaXRtYXBTY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2xh
eW91dFJlY3Qud2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV92aXNpYmxlUmVjdC53aWR0
aCgpKTsKLSAgICBnbFVuaWZvcm0xZihtX2NoZWNrZXJTY2FsZUxvY2F0aW9uLCBiaXRtYXBTY2Fs
ZSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV92aWV3cG9ydC53aWR0
aCgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Zpc2libGVSZWN0LndpZHRoKCkpOwotICAgIGds
VW5pZm9ybTJmKG1fY2hlY2tlck9yaWdpbkxvY2F0aW9uLCBtX3Zpc2libGVSZWN0LngoKSpzY2Fs
ZSwgbV92aXNpYmxlUmVjdC55KCkqc2NhbGUpOwotICAgIGdsVW5pZm9ybTFmKG1fY2hlY2tlclN1
cmZhY2VIZWlnaHRMb2NhdGlvbiwgbV9jb250ZXh0LT5zdXJmYWNlU2l6ZSgpLmhlaWdodCgpKTsK
KworICAgIC8vIFRoZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHVzZXMg
T3BlbkdMIGNvbnZlbnRpb25zLCBzbyBldmVyeXRoaW5nIGlzIHVwc2lkZSBkb3duCisgICAgZ2xG
cm9udEZhY2UoR0xfQ1cpOwogCiAgICAgY2hlY2tHTEVycm9yKCk7CiAKQEAgLTM1MSwxMSArMzM2
LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnMoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgTGF5ZXJDb20KICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVy
IGxheWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwotICAgIC8vIHNvIHdl
IG5lZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgotICAgIGdsRW5h
YmxlKEdMX0JMRU5EKTsKLSAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNf
QUxQSEEpOwotCiAgICAgLy8gSWYgc29tZSBsYXllcnMgc2hvdWxkIGJlIGRyYXdlZCBvbiB0ZW1w
b3Jhcnkgc3VyZmFjZXMsIHdlIHNob3VsZCBkbyBpdCBmaXJzdC4KICAgICBkcmF3TGF5ZXJzT25T
dXJmYWNlcyhzdXJmYWNlTGF5ZXJzKTsKIApAQCAtMzgzLDkgKzM2Myw2IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgsIExheWVyQ29tCiAgICAgLy8gZHJpdmVyIGJ5IHVuYmluZGluZyBlYXJseSAod2hlbiB0aGUg
cGl4bWFwIGlzIGhvcGVmdWxseSBzdGlsbCBhcm91bmQpLgogICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgMCk7CiAKLSAgICAvLyBUdXJuIG9mZiBibGVuZGluZyBhZ2FpbgotICAgIGds
RGlzYWJsZShHTF9CTEVORCk7Ci0KICAgICBMYXllclNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5
ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXRlciAhPSBt
X2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgICgq
aXRlciktPnJlbGVhc2VUZXh0dXJlUmVzb3VyY2VzKCk7CkBAIC00MTUsMjggKzM5MiwyOCBAQCB2
b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUJ1ZmZlcihjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBjb25zdAogICAgIGlmICghdmVydGljZXMuYm91bmRpbmdCb3goKS5p
bnRlcnNlY3RzKG1fY2xpcFJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGJsZW5k
aW5nID0gIWNvbnRlbnRzT3BhcXVlIHx8IG9wYWNpdHkgPCAxLjBmOwotICAgIGlmIChibGVuZGlu
ZykgeworICAgIGlmICghY29udGVudHNPcGFxdWUgfHwgb3BhY2l0eSA8IDEuMGYpIHsKICAgICAg
ICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09O
RV9NSU5VU19TUkNfQUxQSEEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdsRGlzYWJsZShHTF9C
TEVORCk7CiAgICAgfQogCi0gICAgZ2xVc2VQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W0xh
eWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyUkdCQV0pOwotICAgIGdsVW5pZm9ybTFmKG1fYWxw
aGFMb2NhdGlvbltMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkFdLCBvcGFjaXR5KTsK
KyAgICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQW5kQmluZEJ1ZmZl
ckdMVGV4dHVyZShidWZmZXIsIEdMX1RFWFRVUkVfMkQpKSB7CisgICAgICAgIGNvbnN0IEdMRVMy
UHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oTGF5ZXJQcm9ncmFtUkdCQSk7CisgICAgICAg
IGdsVW5pZm9ybTFmKHByb2dyYW0ub3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCi0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCAmdmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENv
b3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKKyAgICAg
ICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSk7
CisgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS50ZXhDb29yZExvY2F0
aW9uKCkpOworICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxv
Y2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsKKyAgICAgICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHTF9G
TE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CiAKLSAgICBpZiAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpsb2NrQW5kQmluZEJ1ZmZlckdMVGV4dHVyZShidWZmZXIsIEdMX1RF
WFRVUkVfMkQpKSB7CiAgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQp
OwogICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlbGVhc2VCdWZmZXJH
TFRleHR1cmUoYnVmZmVyKTsKICAgICB9Ci0KLSAgICBpZiAoYmxlbmRpbmcpCi0gICAgICAgIGds
RGlzYWJsZShHTF9CTEVORCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0NoZWNrZXJi
b2FyZFBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRSZWN0JiBjb250ZW50cykKK3ZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0NvbG9yKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY29udGVu
dHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBGbG9hdFF1YWQgdmVydGljZXModHJhbnNm
b3JtLm1hcFBvaW50KGNvbnRlbnRzLm1pblhNaW5ZQ29ybmVyKCkpLAogICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWluWE1heFlDb3JuZXIoKSksCkBA
IC00NDYsMTAgKzQyMywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdDaGVja2VyYm9hcmRQ
YXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2ZvcgogICAgIGlmICghdmVy
dGljZXMuYm91bmRpbmdCb3goKS5pbnRlcnNlY3RzKG1fY2xpcFJlY3QpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBnbFVzZVByb2dyYW0obV9jaGVja2VyUHJvZ3JhbU9iamVjdCk7CisgICAgY29u
c3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJvZ3JhbShDb2xvclByb2dyYW0pOwogCi0g
ICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQs
IEdMX0ZBTFNFLCAwLCAmdmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3Rl
eENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKKyAg
ICBpZiAoY29sb3IuYWxwaGEoKSA8IDI1NSkgeworICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7
CisgICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CisKKyAgICBnbEVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpKTsKKyAgICBnbFVuaWZv
cm00ZihtX2NvbG9yQ29sb3JMb2NhdGlvbiwgY29sb3IucmVkKCkgLyAyNTUuMCwgY29sb3IuZ3Jl
ZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVlKCkgLyAyNTUuMCwgY29sb3IuYWxwaGEoKSAvIDI1NS4w
KTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsKIAogICAgIGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogfQpAQCAtNDY4LDEwICs0NTIsMTcgQEAgYm9vbCBM
YXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKExheWVyUmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQog
CiAgICAgc3VyZmFjZS0+ZW5zdXJlVGV4dHVyZSgpOwogCisgICAgR0x1aW50IHRleGlkID0gcmVp
bnRlcnByZXRfY2FzdDxHTHVpbnQ+KHBsYXRmb3JtQnVmZmVySGFuZGxlKHN1cmZhY2UtPnRleHR1
cmUoKS0+dGV4dHVyZUlkKCkpKTsKKyAgICBpZiAoIXRleGlkKSB7CisgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6bG9ja0FuZEJpbmRCdWZmZXJHTFRleHR1cmUoc3VyZmFj
ZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgR0xfVEVYVFVSRV8yRCk7CisgICAgICAgIHRleGlk
ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KHBsYXRmb3JtQnVmZmVySGFuZGxlKHN1cmZhY2Ut
PnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpKTsKKyAgICB9CisKICAgICBpZiAoIW1fZmJvKQogICAg
ICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgMCk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+dGV4dHVyZSgpLT50ZXh0dXJl
SWQoKSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleGlkLCAwKTsKIAogI2lmbmRlZiBO
REVCVUcKICAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZS
QU1FQlVGRkVSKTsKQEAgLTUwMyw3ICs0OTQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdM
YXllcnNPblN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1Rocgog
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIp
Ci0gICAgICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6Y3Jl
YXRlKG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29yZExvY2F0aW9uKTsKKyAgICAgICAgICAg
IG1fZmlsdGVyUmVuZGVyZXIgPSBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUoR0xFUzJQcm9n
cmFtOjpQb3NpdGlvbkF0dHJpYnV0ZUluZGV4LCBHTEVTMlByb2dyYW06OlRleENvb3JkQXR0cmli
dXRlSW5kZXgpOwogICAgICAgICBpZiAobGF5ZXItPmZpbHRlck9wZXJhdGlvbnNDaGFuZ2VkKCkp
IHsKICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdlZChmYWxzZSk7
CiAgICAgICAgICAgICBsYXllci0+c2V0RmlsdGVyQWN0aW9ucyhtX2ZpbHRlclJlbmRlcmVyLT5h
Y3Rpb25zRm9yT3BlcmF0aW9ucyhzdXJmYWNlLCBsYXllci0+ZmlsdGVycygpLm9wZXJhdGlvbnMo
KSkpOwpAQCAtNTQxLDYgKzUzMiwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmFkZExheWVyVG9S
ZWxlYXNlVGV4dHVyZVJlc291cmNlc0xpc3QoTGF5ZXJDb21wb3NpdGluZ1RocmVhZAogICAgIG1f
bGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuYWRkKGxheWVyKTsKIH0KIAorc3RhdGljIGlu
dCBnbFJvdW5kKGZsb2F0IGYpCit7CisgICAgcmV0dXJuIGZsb29yZihmICsgMC41Zik7Cit9CisK
IC8vIFRyYW5zZm9ybSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byB3aW5kb3cgY29v
cmRpbmF0ZXMKIC8vIGFzIHNwZWNpZmllZCBpbiB0aGUgT3BlbkdMIEVTIDIuMCBzcGVjIHNlY3Rp
b24gMi4xMi4xLgogSW50UmVjdCBMYXllclJlbmRlcmVyOjp0b09wZW5HTFdpbmRvd0Nvb3JkaW5h
dGVzKGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKQEAgLTU0OSw3ICs1NDUsNyBAQCBJbnRSZWN0
IExheWVyUmVuZGVyZXI6OnRvT3BlbkdMV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0
JiByKSBjb25zdAogICAgIGZsb2F0IHZoMiA9IG1fdmlld3BvcnQuaGVpZ2h0KCkgLyAyLjA7CiAg
ICAgZmxvYXQgb3ggPSBtX3ZpZXdwb3J0LngoKSArIHZ3MjsKICAgICBmbG9hdCBveSA9IG1fdmll
d3BvcnQueSgpICsgdmgyOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChy
LngoKSAqIHZ3MiArIG94LCByLnkoKSAqIHZoMiArIG95LCByLndpZHRoKCkgKiB2dzIsIHIuaGVp
Z2h0KCkgKiB2aDIpKTsKKyAgICByZXR1cm4gSW50UmVjdChnbFJvdW5kKHIueCgpICogdncyICsg
b3gpLCBnbFJvdW5kKHIueSgpICogdmgyICsgb3kpLCBnbFJvdW5kKHIud2lkdGgoKSAqIHZ3Miks
IGdsUm91bmQoci5oZWlnaHQoKSAqIHZoMikpOwogfQogCiAvLyBUcmFuc2Zvcm0gbm9ybWFsaXpl
ZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gd2luZG93IGNvb3JkaW5hdGVzIGFzIFdlYktpdCB1bmRl
cnN0YW5kcyB0aGVtLgpAQCAtNTkyLDI2ICs1ODgsMzIgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpk
cmF3RGVidWdCb3JkZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiAgICAgaWYgKCFi
b3JkZXJDb2xvci5hbHBoYSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBnbFVzZVByb2dyYW0o
bV9jb2xvclByb2dyYW1PYmplY3QpOworICAgIGlmIChib3JkZXJDb2xvci5hbHBoYSgpIDwgMjU1
KSB7CisgICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2xEaXNh
YmxlKEdMX0JMRU5EKTsKKworICAgIHVzZVByb2dyYW0oQ29sb3JQcm9ncmFtKTsKICAgICBnbFZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdl
dFRyYW5zZm9ybWVkQm91bmRzKCkpOwogICAgIGdsVW5pZm9ybTRmKG1fY29sb3JDb2xvckxvY2F0
aW9uLCBib3JkZXJDb2xvci5yZWQoKSAvIDI1NS4wLCBib3JkZXJDb2xvci5ncmVlbigpIC8gMjU1
LjAsIGJvcmRlckNvbG9yLmJsdWUoKSAvIDI1NS4wLCAxKTsKIAotICAgIGdsTGluZVdpZHRoKGxh
eWVyLT5ib3JkZXJXaWR0aCgpKTsKKyAgICBnbExpbmVXaWR0aChzdGQ6Om1heCgxLjBmLCBsYXll
ci0+Ym9yZGVyV2lkdGgoKSkpOwogICAgIGdsRHJhd0FycmF5cyhHTF9MSU5FX0xPT1AsIDAsIDQp
OwogfQogCiAvLyBDbGVhcnMgYSByZWN0YW5nbGUgaW5zaWRlIHRoZSBsYXllcidzIGJvdW5kcy4K
IHZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0hvbGVQdW5jaFJlY3QoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogbGF5ZXIpCiB7Ci0gICAgZ2xVc2VQcm9ncmFtKG1fY29sb3JQcm9ncmFtT2JqZWN0KTsK
KyAgICB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7CiAgICAgZ2xVbmlmb3JtNGYobV9jb2xvckNv
bG9yTG9jYXRpb24sIDAsIDAsIDAsIDApOwogCisgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogICAg
IGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfWkVSTyk7CiAgICAgRmxvYXRRdWFkIGhvbGUgPSBsYXll
ci0+Z2V0VHJhbnNmb3JtZWRIb2xlUHVuY2hSZWN0KCk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2lu
dGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmhvbGUpOwogICAgIGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgIGNoZWNrR0xFcnJvcigpOwotICAgIGdsQmxl
bmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlcjo6cHJlcGFyZUZyYW1lUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxh
eWVyLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBpc0NvbnRleHRDdXJyZW50KQpAQCAtNjgx
LDI4ICs2ODMsNTMgQEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKICAgICAvLyBMYXllciB3aG9z
ZSBoYXNGaXhlZENvbnRhaW5lciBpcyB0cnVlIHdpbGwgZ2V0IHNjcm9sbGVkIHJlbGF0aXZlIHRv
CiAgICAgLy8gdGhlIGZpeGVkIHBvc2l0aW9uZWQgcGFyZW50LgogICAgIGlmICghbGF5ZXItPmhh
c0ZpeGVkQ29udGFpbmVyKCkgJiYgKGxheWVyLT5pc0ZpeGVkUG9zaXRpb24oKSB8fCBsYXllci0+
aGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpKSkgewotICAgICAgICAvLyBUaGUgYmFzaWMgaWRl
YSBoZXJlIGlzIHRvIHNldCB2aXNpYmxlIHkgdG8gdGhlIHZhbHVlIHdlIHdhbnQsIGFuZAotICAg
ICAgICAvLyBsYXlvdXQgeSB0byB0aGUgdmFsdWUgV2ViQ29yZSBsYXlvdXRlZCB0aGUgZml4ZWQg
ZWxlbWVudCB0by4KLSAgICAgICAgZmxvYXQgbWF4aW11bVNjcm9sbFkgPSBtX2NvbnRlbnRzU2l6
ZS5oZWlnaHQoKSAtIG1fdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGZsb2F0IHZpc2li
bGVZID0gbWF4KDAuMGYsIG1fdmlzaWJsZVJlY3QueSgpKTsKLSAgICAgICAgZmxvYXQgbGF5b3V0
WSA9IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFksIChmbG9hdCltX2xheW91dFJlY3QueSgp
KSk7Ci0KLSAgICAgICAgLy8gRm9yIHN0dWZmIGxvY2F0ZWQgb24gdGhlIGxvd2VyIGhhbGYgb2Yg
dGhlIHNjcmVlbiwgd2Ugem9vbSByZWxhdGl2ZSB0byBib3R0b20uCi0gICAgICAgIC8vIFRoaXMg
dHJpY2sgYWxsb3dzIHVzIHRvIGRpc3BsYXkgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBhbGln
bmVkIHRvIHRvcCBvcgotICAgICAgICAvLyBib3R0b20gY29ycmVjdGx5IHdoZW4gcGFubmluZyBh
bmQgem9vbWluZywgd2l0aG91dCBhY3R1YWxseSBrbm93aW5nIHRoZQotICAgICAgICAvLyBudW1l
cmljIHZhbHVlcyBvZiB0aGUgdG9wIGFuZCBib3R0b20gQ1NTIGF0dHJpYnV0ZXMuCi0gICAgICAg
IC8vIEluIGZhY3QsIHRoZSBwb3NpdGlvbiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGFuY2hvciwg
c28gdG8gZmluZCB0aGUgbWlkLXBvaW50Ci0gICAgICAgIC8vIHdlIGhhdmUgdG8gc3VidHJhY3Qg
dGhlIGFuY2hvciBvZmZzZXQgZnJvbSB0aGUgbWlkZGxlICgwLjUpIHRpbWVzIHRoZSBib3VuZHMu
Ci0gICAgICAgIC8vIFRoZSBhbmNob3IgZGVmYXVsdHMgdG8gKDAuNSwgMC41KSBmb3IgbW9zdCBs
YXllcnMuCi0gICAgICAgIGlmIChwb3NpdGlvbi55KCkgKyAoMC41IC0gYW5jaG9yUG9pbnQueSgp
KSAqIGJvdW5kcy5oZWlnaHQoKSA+IGxheW91dFkgKyBtX2xheW91dFJlY3QuaGVpZ2h0KCkgLyAy
KSB7Ci0gICAgICAgICAgICB2aXNpYmxlWSA9IG1pbjxmbG9hdD4obV9jb250ZW50c1NpemUuaGVp
Z2h0KCksIG1fdmlzaWJsZVJlY3QueSgpICsgbV92aXNpYmxlUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICBsYXlvdXRZID0gbWluKG1fY29udGVudHNTaXplLmhlaWdodCgpLCBtYXgoMCwgbV9s
YXlvdXRSZWN0LnkoKSkgKyBtX2xheW91dFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBGbG9hdFJl
Y3QgbGF5b3V0UmVjdCA9IG1fbGF5b3V0UmVjdDsKKyAgICAgICAgRmxvYXRTaXplIGNvbnRlbnRz
U2l6ZSA9IG1fY29udGVudHNTaXplOworICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBt
X3Zpc2libGVSZWN0OworICAgICAgICBmb3IgKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGN1cnIg
PSBsYXllci0+c3VwZXJsYXllcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+c3VwZXJsYXllcigpKSB7
CisKKyAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoIGEgY29udGFpbmVyIGZvciBmaXhlZCBwb3Np
dGlvbiBsYXllcnMsIGFuZCBpdCBoYXMgaXRzIG92ZXJyaWRlJ3MgcG9zaXRpb24gc2V0LCBpdCBt
ZWFucyBpdCBpcyBhIHNjcm9sbGFibGUgaWZyYW1lCisgICAgICAgICAgICBpZiAoY3Vyci0+aXND
b250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgJiYgY3Vyci0+b3ZlcnJpZGUoKS0+aXNQ
b3NpdGlvblNldCgpKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0UmVjdCA9IGN1cnItPmZyYW1l
VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgICAgICAgICBjb250ZW50c1NpemUgPSBjdXJyLT5mcmFt
ZUNvbnRlbnRzU2l6ZSgpOworCisgICAgICAgICAgICAgICAgLy8gSW52ZXJ0ZWQgbG9naWMgb2YK
KyAgICAgICAgICAgICAgICAvLyBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oLXNjcm9sbFBvc2l0
aW9uLngoKSArIGFuY2hvci54KCkgKiBib3VuZHMud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgLXNjcm9sbFBvc2l0aW9uLnkoKSArIGFuY2hvci55
KCkgKiBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xs
UG9zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIC0oY3Vyci0+b3ZlcnJpZGUoKS0+cG9zaXRp
b24oKS54KCkgLSAoY3Vyci0+YW5jaG9yUG9pbnQoKS54KCkgKiBjdXJyLT5ib3VuZHMoKS53aWR0
aCgpKSksCisgICAgICAgICAgICAgICAgICAgIC0oY3Vyci0+b3ZlcnJpZGUoKS0+cG9zaXRpb24o
KS55KCkgLSAoY3Vyci0+YW5jaG9yUG9pbnQoKS55KCkgKiBjdXJyLT5ib3VuZHMoKS5oZWlnaHQo
KSkpKTsKKyAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChzY3JvbGxQb3Np
dGlvbiwgbGF5b3V0UmVjdC5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgRmxvYXRQb2ludCBtYXhpbXVtU2Nyb2xsUG9z
aXRpb24gPSBGbG9hdFBvaW50KDAsIDApICsgKGNvbnRlbnRzU2l6ZSAtIHZpc2libGVSZWN0LnNp
emUoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgbWF4aW11bUxheW91dFNjcm9sbFBvc2l0aW9uID0g
RmxvYXRQb2ludCgwLCAwKSArIChjb250ZW50c1NpemUgLSBsYXlvdXRSZWN0LnNpemUoKSk7CisK
KyAgICAgICAgLy8gVGhlIGJhc2ljIGlkZWEgaGVyZSBpcyB0byBzZXQgdmlzaWJsZSB4L3kgdG8g
dGhlIHZhbHVlIHdlIHdhbnQsIGFuZAorICAgICAgICAvLyBsYXlvdXQgeC95IHRvIHRoZSB2YWx1
ZSBXZWJDb3JlIGxheW91dGVkIHRoZSBmaXhlZCBlbGVtZW50IHRvLgorICAgICAgICBmbG9hdCB2
aXNpYmxlWTsKKyAgICAgICAgZmxvYXQgbGF5b3V0WTsKKyAgICAgICAgaWYgKGxheWVyLT5pc0Zp
eGVkVG9Ub3AoKSkgeworICAgICAgICAgICAgdmlzaWJsZVkgPSBtYXgoMC4wZiwgbWluKG1heGlt
dW1TY3JvbGxQb3NpdGlvbi55KCksIHZpc2libGVSZWN0LnkoKSkpOworICAgICAgICAgICAgbGF5
b3V0WSA9IG1heCgwLjBmLCBtaW4obWF4aW11bUxheW91dFNjcm9sbFBvc2l0aW9uLnkoKSwgbGF5
b3V0UmVjdC55KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZpc2libGVZID0g
bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVJlY3QueSgpICsgdmlzaWJsZVJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgbGF5b3V0WSA9IG1pbihjb250ZW50c1NpemUuaGVpZ2h0
KCksIG1heCgwLjBmLCBsYXlvdXRSZWN0LnkoKSkgKyBsYXlvdXRSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgfQogICAgICAgICBwb3NpdGlvbi5zZXRZKHBvc2l0aW9uLnkoKSArICh2aXNpYmxlWSAt
IGxheW91dFkpKTsKIAotICAgICAgICBmbG9hdCB2aXNpYmxlWCA9IG1heCgwLjBmLCB2aXNpYmxl
UmVjdC54KCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLngoKSArIHZpc2libGVY
KTsKKyAgICAgICAgZmxvYXQgdmlzaWJsZVg7CisgICAgICAgIGZsb2F0IGxheW91dFg7CisgICAg
ICAgIGlmIChsYXllci0+aXNGaXhlZFRvTGVmdCgpKSB7CisgICAgICAgICAgICB2aXNpYmxlWCA9
IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSwgdmlzaWJsZVJlY3QueCgp
KSk7CisgICAgICAgICAgICBsYXlvdXRYID0gbWF4KDAuMGYsIG1pbihtYXhpbXVtTGF5b3V0U2Ny
b2xsUG9zaXRpb24ueCgpLCBsYXlvdXRSZWN0LngoKSkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdmlzaWJsZVggPSBtaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVSZWN0
LngoKSArIHZpc2libGVSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgbGF5b3V0WCA9IG1pbihj
b250ZW50c1NpemUud2lkdGgoKSwgbWF4KDAuMGYsIGxheW91dFJlY3QueCgpKSArIGxheW91dFJl
Y3Qud2lkdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb24uc2V0WChwb3NpdGlvbi54
KCkgKyAodmlzaWJsZVggLSBsYXlvdXRYKSk7CiAgICAgfQogCiAgICAgLy8gT2Zmc2V0IGJldHdl
ZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgpAQCAtODY2LDEyICs4
OTMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAvLyBEcmF3IHRoZSBzdXJm
YWNlIG9udG8gYW5vdGhlciBzdXJmYWNlIG9yIHNjcmVlbi4KICAgICAgICAgYm9vbCBkcmF3U3Vy
ZmFjZSA9IGxheWVyQWxyZWFkeU9uU3VyZmFjZShsYXllcik7CiAgICAgICAgIC8vIFRoZSB0ZXh0
dXJlIGZvcm1hdCBmb3IgdGhlIHN1cmZhY2UgaXMgUkdCQS4KLSAgICAgICAgTGF5ZXJEYXRhOjpM
YXllclByb2dyYW1TaGFkZXIgc2hhZGVyID0gZHJhd1N1cmZhY2UgPyBMYXllckRhdGE6OkxheWVy
UHJvZ3JhbVNoYWRlclJHQkEgOiBsYXllci0+bGF5ZXJQcm9ncmFtU2hhZGVyKCk7CisgICAgICAg
IExheWVyRGF0YTo6TGF5ZXJQcm9ncmFtIGxheWVyUHJvZ3JhbSA9IGRyYXdTdXJmYWNlID8gTGF5
ZXJEYXRhOjpMYXllclByb2dyYW1SR0JBIDogbGF5ZXItPmxheWVyUHJvZ3JhbSgpOwogCiAgICAg
ICAgIGlmICghZHJhd1N1cmZhY2UpIHsKLSAgICAgICAgICAgIGdsVXNlUHJvZ3JhbShtX2xheWVy
UHJvZ3JhbU9iamVjdFtzaGFkZXJdKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fYWxwaGFM
b2NhdGlvbltzaGFkZXJdLCBsYXllci0+ZHJhd09wYWNpdHkoKSk7Ci0gICAgICAgICAgICBsYXll
ci0+ZHJhd1RleHR1cmVzKG1fc2NhbGUsIG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29yZExv
Y2F0aW9uLCBtX3Zpc2libGVSZWN0KTsKKyAgICAgICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYg
cHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0pOworICAgICAgICAgICAgbGF5
ZXItPmRyYXdUZXh0dXJlcyhtX3NjYWxlLCBwcm9ncmFtLCBtX3Zpc2libGVSZWN0KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZmxlY3Rpb24gaWYgaXQgZXhp
c3RzLgogICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtODgyLDIy
ICs5MDgsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAgICAgICAgIGlmICgh
bWFzayAmJiBsYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgICAgICAgICAgICAgIG1hc2sg
PSBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwogCi0gICAgICAgICAgICAgICAg
Z2xVc2VQcm9ncmFtKG1hc2sgPyBtX2xheWVyTWFza1Byb2dyYW1PYmplY3Rbc2hhZGVyXSA6IG1f
bGF5ZXJQcm9ncmFtT2JqZWN0W3NoYWRlcl0pOwotICAgICAgICAgICAgICAgIGdsVW5pZm9ybTFm
KG1hc2sgPyBtX21hc2tBbHBoYUxvY2F0aW9uW3NoYWRlcl0gOiBtX2FscGhhTG9jYXRpb25bc2hh
ZGVyXSwgbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOwotICAg
ICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZh
Y2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgbV9wb3NpdGlvbkxvY2F0aW9uLCBt
X3RleENvb3JkTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYg
cHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0sIG1hc2spOworICAgICAgICAg
ICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+
cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgcHJvZ3JhbSk7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGdsVXNlUHJvZ3JhbShsYXllci0+bWFza0xheWVyKCkgPyBtX2xheWVyTWFz
a1Byb2dyYW1PYmplY3Rbc2hhZGVyXSA6IG1fbGF5ZXJQcm9ncmFtT2JqZWN0W3NoYWRlcl0pOwot
ICAgICAgICAgICAgZ2xVbmlmb3JtMWYobGF5ZXItPm1hc2tMYXllcigpID8gbV9tYXNrQWxwaGFM
b2NhdGlvbltzaGFkZXJdIDogbV9hbHBoYUxvY2F0aW9uW3NoYWRlcl0sIGxheWVyLT5sYXllclJl
bmRlcmVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3
U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpLCBs
YXllci0+bWFza0xheWVyKCksIG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29yZExvY2F0aW9u
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllci0+aGFzTWlzc2luZ1RleHR1cmVzKCkp
IHsKLSAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7Ci0gICAgICAgICAgICBnbFVzZVBy
b2dyYW0obV9jaGVja2VyUHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgICAgICBsYXllci0+ZHJhd01p
c3NpbmdUZXh0dXJlcyhtX3NjYWxlLCBtX3Bvc2l0aW9uTG9jYXRpb24sIG1fdGV4Q29vcmRMb2Nh
dGlvbiwgbV92aXNpYmxlUmVjdCk7Ci0gICAgICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0g
ICAgICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwor
ICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlTGF5ZXJQcm9ncmFt
KGxheWVyUHJvZ3JhbSwgbGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICAgICAgICAgIGxheWVyLT5k
cmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgp
LCBsYXllci0+bWFza0xheWVyKCksIHByb2dyYW0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC05
MTYsNiArOTMyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNp
dmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogCiAgICAgaWYgKHN0ZW5jaWxD
bGlwKSB7CiAgICAgICAgIGlmICghbV9zdGVuY2lsQ2xlYXJlZCkgeworICAgICAgICAgICAgZ2xT
dGVuY2lsTWFzaygweGZmZmZmZmZmKTsKICAgICAgICAgICAgIGdsQ2xlYXJTdGVuY2lsKDApOwog
ICAgICAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgICAgICAgICAg
bV9zdGVuY2lsQ2xlYXJlZCA9IHRydWU7CkBAIC05MjYsNyArOTQzLDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIsIGludAogICAgICAgICBnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9JTkNSLCBHTF9JTkNS
KTsKIAogICAgICAgICB1cGRhdGVTY2lzc29ySWZOZWVkZWQoY2xpcFJlY3QpOwotICAgICAgICBn
bFVzZVByb2dyYW0obV9jb2xvclByb2dyYW1PYmplY3QpOworICAgICAgICB1c2VQcm9ncmFtKENv
bG9yUHJvZ3JhbSk7CiAgICAgICAgIGdsQ29sb3JNYXNrKEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xf
RkFMU0UsIEdMX0ZBTFNFKTsKICAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdM
X0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5kcygpKTsKICAg
ICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CkBAIC05NjksNyArOTg2
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICBnbFN0ZW5jaWxPcChHTF9LRUVQ
LCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKTsKIAogICAgICAgICB1cGRhdGVTY2lzc29ySWZOZWVk
ZWQoY2xpcFJlY3QpOwotICAgICAgICBnbFVzZVByb2dyYW0obV9jb2xvclByb2dyYW1PYmplY3Qp
OworICAgICAgICB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7CiAgICAgICAgIGdsQ29sb3JNYXNr
KEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UsIEdMX0ZBTFNFKTsKICAgICAgICAgZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRU
cmFuc2Zvcm1lZEJvdW5kcygpKTsKICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZB
TiwgMCwgNCk7CkBAIC0xMDEwLDI0ICsxMDI3LDEwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gcmV0OwogfQogCi0vLyBCaW5kcyB0aGUgZ2l2
ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFsbCBwcm9ncmFt
cwotLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmlu
ZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9uY2UKLS8vIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgYmV0d2Vl
biBwcm9ncmFtcy4KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJpYkxvY2F0aW9u
KGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSkKLXsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzOyArK2kpIHsK
LSAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9sYXllclByb2dyYW1PYmplY3RbaV0sIGxv
Y2F0aW9uLCBhdHRyaWJOYW1lKTsKLSAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9sYXll
ck1hc2tQcm9ncmFtT2JqZWN0W2ldLCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Ci0gICAgfQotCi0g
ICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9jb2xvclByb2dyYW1PYmplY3QsIGxvY2F0aW9uLCBh
dHRyaWJOYW1lKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX2NoZWNrZXJQcm9ncmFtT2Jq
ZWN0LCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5p
dGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCitib29sIExheWVyUmVuZGVyZXI6OmNyZWF0ZVByb2dy
YW0oUHJvZ3JhbUluZGV4IHByb2dyYW0pCiB7CiAgICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0
aGUgbGF5ZXIgY29udGVudHMuCi0gICAgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU3RyaW5nID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0
IGFfcG9zaXRpb247ICAgXG4iCiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAg
IFxuIgogICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIKQEAgLTEwMzcs
NyArMTA0MCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0
cygpCiAgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgIFxuIgogICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICBjaGFyIGZyYWdtZW50U2hh
ZGVyU3RyaW5nUkdCQVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ1JH
QkEgPQogICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190
ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIGxv
d3AgZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgpAQCAt
MTA0Niw3ICsxMDQ5LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyOjppbml0aWFsaXplU2hhcmVkR0xP
YmplY3RzKCkKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwg
dl90ZXhDb29yZCkgKiBhbHBoYTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIGNoYXIgZnJh
Z21lbnRTaGFkZXJTdHJpbmdCR1JBW10gPQorICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U3RyaW5nQkdSQSA9CiAgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3RleENvb3JkOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIGxvd3Ag
c2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAg
ICAgICAgICJ1bmlmb3JtIGxvd3AgZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCkBAIC0xMDU1LDcgKzEwNTgsNyBAQCBib29sIExheWVyUmVuZGVy
ZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAiICBnbF9GcmFnQ29sb3Ig
PSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKS5iZ3JhICogYWxwaGE7IFxuIgogICAg
ICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIjsKIAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdNYXNrUkdC
QVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ01hc2tSR0JBID0KICAg
ICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBs
ZXIyRCBzX21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKQEAgLTEwNjcsNyAr
MTA3MCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygp
CiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwg
dGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYSAqIG1hc2tDb2xvci53OyAgICAgICAgICAg
XG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdNYXNr
QkdSQVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ01hc2tCR1JBID0K
ICAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc190
ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInVuaWZv
cm0gbG93cCBzYW1wbGVyMkQgc19tYXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKQEAgLTEwODAsMTE5ICsxMDgzLDEyOSBAQCBib29sIExheWVyUmVuZGVyZXI6OmluaXRp
YWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAogICAgIC8vIFNo
YWRlcnMgZm9yIGRyYXdpbmcgdGhlIGRlYnVnIGJvcmRlcnMgYXJvdW5kIHRoZSBsYXllcnMuCi0g
ICAgY2hhciBjb2xvclZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAgICBjb25zdCBjaGFyKiBjb2xv
clZlcnRleFNoYWRlclN0cmluZyA9CiAgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9u
OyAgIFxuIgogICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKICAgICAg
ICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICIgICBnbF9Qb3Np
dGlvbiA9IGFfcG9zaXRpb247IFxuIgogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiI7CiAKLSAgICBjaGFyIGNvbG9yRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAg
Y29uc3QgY2hhciogY29sb3JGcmFnbWVudFNoYWRlclN0cmluZyA9CiAgICAgICAgICJ1bmlmb3Jt
IGxvd3AgdmVjNCBjb2xvcjsgICAgIFxuIgogICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAg
ICAgICAgICBcbiIKICAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAg
ICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOyAgICAgIFxuIgogICAgICAgICAifSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICAvLyBGSVhNRTogZ2V0IHNjcmVlbiBz
aXplLCBnZXQgbGlnaHQvZGFyayBjb2xvciwgdXNlCi0gICAgLy8gc3RyaW5nIG1hbmlwdWxhdGlv
biBtZXRob2RzIHRvIGluc2VydCB0aG9zZSBjb25zdGFudHMgaW50bwotICAgIC8vIHRoZSBzaGFk
ZXIgc291cmNlLgotICAgIHN0YXRpYyBDb2xvciBsaWdodENvbG9yKDB4ZmIsIDB4ZmQsIDB4ZmYp
OwotICAgIC8vIGNoZWNrZXJib2FyZENvbG9yRGFyaygpCi0gICAgc3RhdGljIENvbG9yIGRhcmtD
b2xvcigweGU4LCAweGVlLCAweGY3KTsKLSAgICBpbnQgY2hlY2tlclNpemUgPSAyMDsKLSAgICBT
dHJpbmcgdG1wKAotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIGZsb2F0IHNjYWxlOyAgICAgICAg
ICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgb3JpZ2luOyAgICAg
ICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIGZsb2F0IHN1cmZhY2VI
ZWlnaHQ7ICAgICAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBjb25zdCBtZWRpdW1wIGZsb2F0
IGdyaWQgPSBHUklEOyAgICAgICAgICAgIFxuIgotICAgICAgICAiICBjb25zdCBsb3dwIHZlYzQg
bGlnaHRDb2xvciA9IExJR0hUX0NPTE9SOyAgIFxuIgotICAgICAgICAiICBjb25zdCBsb3dwIHZl
YzQgZGFya0NvbG9yID0gREFSS19DT0xPUjsgICAgIFxuIgotICAgICAgICAiICBtZWRpdW1wIGZs
b2F0IHRtcCA9IGdyaWQgKiBzY2FsZTsgICAgICAgICAgIFxuIgotICAgICAgICAiICBnbF9GcmFn
Q29sb3IgPSBtb2QoZmxvb3IoKGdsX0ZyYWdDb29yZC54ICsgb3JpZ2luLngpIC8gdG1wKSArIGZs
b29yKChzdXJmYWNlSGVpZ2h0IC0gZ2xfRnJhZ0Nvb3JkLnkgKyBvcmlnaW4ueSkgLyB0bXApLCAy
LjApID4gMC45OSBcbiIKLSAgICAgICAgIiAgICA/IGxpZ2h0Q29sb3IgOiBkYXJrQ29sb3I7ICAg
ICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIpOwotCi0gICAgLy8gTGV0IFdURjo6U3RyaW5nIGJlIG91ciBw
cmVwcm9jZXNzb3IKLSAgICB0bXAucmVwbGFjZSgiTElHSFRfQ09MT1IiLCBTdHJpbmc6OmZvcm1h
dCgidmVjNCglLjRmLCAlLjRmLCAlLjRmLCAxLjApIiwgbGlnaHRDb2xvci5yZWQoKSAvIDI1NS4w
LCBsaWdodENvbG9yLmdyZWVuKCkgLyAyNTUuMCwgbGlnaHRDb2xvci5ibHVlKCkgLyAyNTUuMCkp
OwotICAgIHRtcC5yZXBsYWNlKCJEQVJLX0NPTE9SIiwgU3RyaW5nOjpmb3JtYXQoInZlYzQoJS40
ZiwgJS40ZiwgJS40ZiwgMS4wKSIsIGRhcmtDb2xvci5yZWQoKSAvIDI1NS4wLCBkYXJrQ29sb3Iu
Z3JlZW4oKSAvIDI1NS4wLCBkYXJrQ29sb3IuYmx1ZSgpIC8gMjU1LjApKTsKLSAgICB0bXAucmVw
bGFjZSgiR1JJRCIsIFN0cmluZzo6Zm9ybWF0KCIlLjNmIiwgKGZsb2F0KWNoZWNrZXJTaXplKSk7
Ci0gICAgQ1N0cmluZyBjaGVja2VyRnJhZ21lbnRTaGFkZXJTdHJpbmcgPSB0bXAubGF0aW4xKCk7
Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgIGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlciA9IDA7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXIgPSAwOworCisgICAg
c3dpdGNoIChwcm9ncmFtKSB7CisgICAgY2FzZSBMYXllclByb2dyYW1SR0JBOgorICAgIGNhc2Ug
TGF5ZXJQcm9ncmFtQkdSQToKKyAgICBjYXNlIExheWVyTWFza1Byb2dyYW1SR0JBOgorICAgIGNh
c2UgTGF5ZXJNYXNrUHJvZ3JhbUJHUkE6CisgICAgICAgIHZlcnRleFNoYWRlciA9IHZlcnRleFNo
YWRlclN0cmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvclByb2dyYW06CisgICAg
ICAgIHZlcnRleFNoYWRlciA9IGNvbG9yVmVydGV4U2hhZGVyU3RyaW5nOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE51bWJlck9mUHJvZ3JhbXM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKLSAgICBtX2xheWVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNo
YWRlclJHQkFdID0KLSAgICAgICAgbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5n
LCBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkEpOwotICAgIGlmICghbV9sYXllclByb2dyYW1PYmpl
Y3RbTGF5ZXJEYXRhOjpMYXllclByb2dyYW1TaGFkZXJSR0JBXSkKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBSR0JBIGxheWVycyIpOwotCi0g
ICAgbV9sYXllclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpMYXllclByb2dyYW1TaGFkZXJCR1JB
XSA9Ci0gICAgICAgIGxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21l
bnRTaGFkZXJTdHJpbmdCR1JBKTsKLSAgICBpZiAoIW1fbGF5ZXJQcm9ncmFtT2JqZWN0W0xheWVy
RGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyQkdSQV0pCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgQkdSQSBsYXllcnMiKTsKLQotICAgIG1fbGF5
ZXJNYXNrUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkFdID0K
LSAgICAgICAgbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNo
YWRlclN0cmluZ01hc2tSR0JBKTsKLSAgICBpZiAoIW1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtM
YXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkFdKQotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjcmVhdGUgc2hhZGVyIG1hc2sgcHJvZ3JhbSBmb3IgUkdCQSBsYXllcnMiKTsKKyAg
ICBzd2l0Y2ggKHByb2dyYW0pIHsKKyAgICBjYXNlIExheWVyUHJvZ3JhbVJHQkE6CisgICAgICAg
IGZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJTdHJpbmdSR0JBOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExheWVyUHJvZ3JhbUJHUkE6CisgICAgICAgIGZyYWdtZW50U2hhZGVyID0g
ZnJhZ21lbnRTaGFkZXJTdHJpbmdCR1JBOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExheWVy
TWFza1Byb2dyYW1SR0JBOgorICAgICAgICBmcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVy
U3RyaW5nTWFza1JHQkE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJNYXNrUHJvZ3Jh
bUJHUkE6CisgICAgICAgIGZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJTdHJpbmdNYXNr
QkdSQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvclByb2dyYW06CisgICAgICAgIGZy
YWdtZW50U2hhZGVyID0gY29sb3JGcmFnbWVudFNoYWRlclN0cmluZzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOdW1iZXJPZlByb2dyYW1zOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogCi0gICAgbV9sYXllck1hc2tQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFt
U2hhZGVyQkdSQV0gPQotICAgICAgICBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJp
bmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nTWFza0JHUkEpOwotICAgIGlmICghbV9sYXllck1hc2tQ
cm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyQkdSQV0pCi0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgbWFzayBwcm9ncmFtIGZvciBCR1JB
IGxheWVycyIpOworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb2xvclByb2dyYW1PYmplY3QgPSBsb2FkU2hh
ZGVyUHJvZ3JhbShjb2xvclZlcnRleFNoYWRlclN0cmluZywgY29sb3JGcmFnbWVudFNoYWRlclN0
cmluZyk7Ci0gICAgaWYgKCFtX2NvbG9yUHJvZ3JhbU9iamVjdCkKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBkZWJ1ZyBib3JkZXJzIik7Cisg
ICAgR0x1aW50IHByb2dyYW1PYmplY3QgPSBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXIs
IGZyYWdtZW50U2hhZGVyKTsKKyAgICBpZiAoIXByb2dyYW1PYmplY3QpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHByb2dyYW0gJXUiLCBwcm9ncmFtKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIG1fY2hlY2tlclByb2dyYW1PYmplY3QgPSBsb2Fk
U2hhZGVyUHJvZ3JhbShjb2xvclZlcnRleFNoYWRlclN0cmluZywgY2hlY2tlckZyYWdtZW50U2hh
ZGVyU3RyaW5nLmRhdGEoKSk7Ci0gICAgaWYgKCFtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KQotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIGNoZWNr
ZXJib2FyZCBwYXR0ZXJuIik7CisgICAgbV9wcm9ncmFtc1twcm9ncmFtXS5tX3Byb2dyYW0gPSBw
cm9ncmFtT2JqZWN0OwogCi0gICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0
aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwotICAg
IC8vIGF2b2lkIGJpbmRpbmcgcmUtYmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCi0gICAg
YmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25Mb2NhdGlvbiwgImFfcG9zaXRpb24i
KTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV90ZXhDb29yZExvY2F0aW9uLCAiYV90
ZXhDb29yZCIpOworICAgIC8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSB0byBhIGNv
bW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHByb2dyYW1zCisgICAgLy8gdXNlZCBieSB0aGUgY29t
cG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5
IG9uY2UKKyAgICAvLyBldmVuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gcHJvZ3JhbXMuCisgICAg
Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgR0xFUzJQcm9ncmFtOjpQb3NpdGlv
bkF0dHJpYnV0ZUluZGV4LCAiYV9wb3NpdGlvbiIpOworICAgIGdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1PYmplY3QsIEdMRVMyUHJvZ3JhbTo6VGV4Q29vcmRBdHRyaWJ1dGVJbmRleCwgImFf
dGV4Q29vcmQiKTsKIAogICAgIGNoZWNrR0xFcnJvcigpOwogCi0gICAgLy8gUmUtbGluayB0aGUg
c2hhZGVycyB0byBnZXQgdGhlIG5ldyBhdHRyaWIgbG9jYXRpb24gdG8gdGFrZSBlZmZlY3QuCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hh
ZGVyczsgKytpKSB7Ci0gICAgICAgIGdsTGlua1Byb2dyYW0obV9sYXllclByb2dyYW1PYmplY3Rb
aV0pOwotICAgICAgICBnbExpbmtQcm9ncmFtKG1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtpXSk7
Ci0gICAgfQotCi0gICAgZ2xMaW5rUHJvZ3JhbShtX2NvbG9yUHJvZ3JhbU9iamVjdCk7Ci0gICAg
Z2xMaW5rUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KTsKKyAgICAvLyBSZS1saW5rIHRo
ZSBzaGFkZXIgdG8gZ2V0IHRoZSBuZXcgYXR0cmliIGxvY2F0aW9uIHRvIHRha2UgZWZmZWN0Lgor
ICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbU9iamVjdCk7CiAKICAgICBjaGVja0dMRXJyb3IoKTsK
IAogICAgIC8vIEdldCBsb2NhdGlvbnMgb2YgdW5pZm9ybXMgZm9yIHRoZSBsYXllciBjb250ZW50
IHNoYWRlciBwcm9ncmFtLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1i
ZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnM7ICsraSkgewotICAgICAgICBtX3NhbXBsZXJMb2NhdGlv
bltpXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldLCAic190
ZXh0dXJlIik7Ci0gICAgICAgIG1fYWxwaGFMb2NhdGlvbltpXSA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldLCAiYWxwaGEiKTsKLSAgICAgICAgZ2xVc2VQcm9n
cmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldKTsKLSAgICAgICAgZ2xVbmlmb3JtMWkobV9zYW1w
bGVyTG9jYXRpb25baV0sIDApOwotICAgICAgICBtX21hc2tTYW1wbGVyTG9jYXRpb25baV0gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX2xheWVyTWFza1Byb2dyYW1PYmplY3RbaV0sICJzX3RleHR1
cmUiKTsKLSAgICAgICAgbV9tYXNrU2FtcGxlckxvY2F0aW9uTWFza1tpXSA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKG1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtpXSwgInNfbWFzayIpOwotICAgICAg
ICBtX21hc2tBbHBoYUxvY2F0aW9uW2ldID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9sYXllck1h
c2tQcm9ncmFtT2JqZWN0W2ldLCAiYWxwaGEiKTsKLSAgICAgICAgZ2xVc2VQcm9ncmFtKG1fbGF5
ZXJNYXNrUHJvZ3JhbU9iamVjdFtpXSk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1fbWFza1NhbXBs
ZXJMb2NhdGlvbltpXSwgMCk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1fbWFza1NhbXBsZXJMb2Nh
dGlvbk1hc2tbaV0sIDEpOworICAgIG1fcHJvZ3JhbXNbcHJvZ3JhbV0ubV9sb2NhdGlvbnNbR0xF
UzJQcm9ncmFtOjpPcGFjaXR5VW5pZm9ybV0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
T2JqZWN0LCAiYWxwaGEiKTsKKyAgICBzd2l0Y2ggKHByb2dyYW0pIHsKKyAgICBjYXNlIExheWVy
UHJvZ3JhbVJHQkE6CisgICAgY2FzZSBMYXllclByb2dyYW1CR1JBOiB7CisgICAgICAgIEdMaW50
IHNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1PYmplY3QsICJz
X3RleHR1cmUiKTsKKyAgICAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW1PYmplY3QpOworICAgICAg
ICBnbFVuaWZvcm0xaShzYW1wbGVyTG9jYXRpb24sIDApOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBMYXllck1hc2tQcm9ncmFtUkdCQToKKyAgICBjYXNlIExheWVyTWFza1Byb2dy
YW1CR1JBOiB7CisgICAgICAgIEdMaW50IG1hc2tTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0LCAic190ZXh0dXJlIik7CisgICAgICAgIEdMaW50IG1h
c2tTYW1wbGVyTG9jYXRpb25NYXNrID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbU9iamVj
dCwgInNfbWFzayIpOworICAgICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbU9iamVjdCk7CisgICAg
ICAgIGdsVW5pZm9ybTFpKG1hc2tTYW1wbGVyTG9jYXRpb24sIDApOworICAgICAgICBnbFVuaWZv
cm0xaShtYXNrU2FtcGxlckxvY2F0aW9uTWFzaywgMSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIENvbG9yUHJvZ3JhbToKKyAgICAgICAgLy8gR2V0IGxvY2F0aW9ucyBvZiB1bmlm
b3JtcyBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KKyAgICAgICAgbV9jb2xv
ckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0LCAiY29s
b3IiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJPZlByb2dyYW1zOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gR2V0IGxvY2F0aW9ucyBvZiB1bmlmb3Jt
cyBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KLSAgICBtX2NvbG9yQ29sb3JM
b2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JQcm9ncmFtT2JqZWN0LCAiY29s
b3IiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIC8vIEdldCBsb2NhdGlvbnMgb2YgdW5p
Zm9ybXMgZm9yIHRoZSBjaGVja2VyYm9hcmQgc2hhZGVyIHByb2dyYW0uCi0gICAgbV9jaGVja2Vy
U2NhbGVMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY2hlY2tlclByb2dyYW1PYmpl
Y3QsICJzY2FsZSIpOwotICAgIG1fY2hlY2tlck9yaWdpbkxvY2F0aW9uID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24obV9jaGVja2VyUHJvZ3JhbU9iamVjdCwgIm9yaWdpbiIpOwotICAgIG1fY2hlY2tl
clN1cmZhY2VIZWlnaHRMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY2hlY2tlclBy
b2dyYW1PYmplY3QsICJzdXJmYWNlSGVpZ2h0Iik7Citjb25zdCBHTEVTMlByb2dyYW0mIExheWVy
UmVuZGVyZXI6OnVzZVByb2dyYW0oUHJvZ3JhbUluZGV4IGluZGV4KQoreworICAgIEFTU0VSVChp
bmRleCA8IE51bWJlck9mUHJvZ3JhbXMpOworICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3Jh
bSA9IG1fcHJvZ3JhbXNbaW5kZXhdOworICAgIGlmICghcHJvZ3JhbS5pc1ZhbGlkKCkgJiYgIWNy
ZWF0ZVByb2dyYW0oaW5kZXgpKQorICAgICAgICByZXR1cm4gcHJvZ3JhbTsKIAotICAgIHJldHVy
biB0cnVlOworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLm1fcHJvZ3JhbSk7CisKKyAgICByZXR1
cm4gcHJvZ3JhbTsKK30KKworY29uc3QgR0xFUzJQcm9ncmFtJiBMYXllclJlbmRlcmVyOjp1c2VM
YXllclByb2dyYW0oTGF5ZXJEYXRhOjpMYXllclByb2dyYW0gbGF5ZXJQcm9ncmFtLCBib29sIGlz
TWFzayAvKiA9IGZhbHNlICovKQoreworICAgIGludCBwcm9ncmFtID0gbGF5ZXJQcm9ncmFtOwor
ICAgIGlmIChpc01hc2spCisgICAgICAgIHByb2dyYW0gKz0gTWFza1Byb2dyYW1zOworICAgIHJl
dHVybiB1c2VQcm9ncmFtKHN0YXRpY19jYXN0PFByb2dyYW1JbmRleD4ocHJvZ3JhbSkpOwogfQog
CiB2b2lkIExheWVyUmVuZGVyaW5nUmVzdWx0czo6YWRkRGlydHlSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCmluZGV4IDI0ZTc1NGRjMDEwMmM1ZGM5OWYwZjAy
N2ZhOTZkZDNiODY5ZDlkODUuLmYyZDA2MzRhNDU5MmJjNjEzZTUzN2VmNTg3ZGM0MzgxZGQ0Mzk3
YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdM
RVMyQ29udGV4dC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyUHJvZ3JhbS5o
PgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdpb24uaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMTAzLDcg
KzEwNCw3IEBAIHB1YmxpYzoKICAgICAvLyB0cmFuc2Zvcm0gaXMgdGhlIG1vZGVsLXZpZXctcHJv
amVjdCBtYXRyaXggdGhhdCBnb2VzIGFsbCB0aGUgd2F5IGZyb20gY29udGVudHMgdG8gbm9ybWFs
aXplZCBkZXZpY2UgY29vcmRpbmF0ZXMuCiAgICAgdm9pZCBjb21wb3NpdGVMYXllcnMoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiByb290TGF5ZXIp
OwogICAgIHZvaWQgY29tcG9zaXRlQnVmZmVyKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0JiBjb250ZW50cywgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpCdWZmZXIqLCBib29sIGNvbnRlbnRzT3BhcXVlLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lk
IGRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29u
c3QgRmxvYXRSZWN0JiBjb250ZW50cyk7CisgICAgdm9pZCBkcmF3Q29sb3IoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBjb25zdCBDb2xvciYp
OwogCiAgICAgLy8gS2VlcCB0cmFjayBvZiBsYXllcnMgdGhhdCBuZWVkIGNsZWFudXAgd2hlbiB0
aGUgTGF5ZXJSZW5kZXJlciBpcyBkZXN0cm95ZWQKICAgICB2b2lkIGFkZExheWVyKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqKTsKQEAgLTE0OCwzNSArMTQ5LDM0IEBAIHByaXZhdGU6CiAgICAgSW50
UmVjdCB0b09wZW5HTFdpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Owog
ICAgIEludFJlY3QgdG9XZWJLaXRXaW5kb3dDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKIAotICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBsb2NhdGlvbiwg
Y29uc3QgY2hhciogYXR0cmliTmFtZSk7Ci0KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCi0gICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7CisgICAgZW51bSBQcm9n
cmFtSW5kZXggeworICAgICAgICBMYXllclByb2dyYW1SR0JBID0gTGF5ZXJEYXRhOjpMYXllclBy
b2dyYW1SR0JBLAorICAgICAgICBMYXllclByb2dyYW1CR1JBID0gTGF5ZXJEYXRhOjpMYXllclBy
b2dyYW1CR1JBLAorCisgICAgICAgIE1hc2tQcm9ncmFtcywKKyAgICAgICAgTGF5ZXJNYXNrUHJv
Z3JhbVJHQkEgPSBNYXNrUHJvZ3JhbXMgKyBMYXllckRhdGE6OkxheWVyUHJvZ3JhbVJHQkEsCisg
ICAgICAgIExheWVyTWFza1Byb2dyYW1CR1JBID0gTWFza1Byb2dyYW1zICsgTGF5ZXJEYXRhOjpM
YXllclByb2dyYW1CR1JBLAorCisgICAgICAgIEludGVybmFsUHJvZ3JhbXMsCisgICAgICAgIENv
bG9yUHJvZ3JhbSA9IEludGVybmFsUHJvZ3JhbXMsCiAKLSAgICAvLyBHTCBzaGFkZXIgcHJvZ3Jh
bSBvYmplY3QgSURzLgotICAgIHVuc2lnbmVkIG1fbGF5ZXJQcm9ncmFtT2JqZWN0W0xheWVyRGF0
YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKLSAgICB1bnNpZ25lZCBtX2xheWVyTWFz
a1Byb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwot
ICAgIHVuc2lnbmVkIG1fY29sb3JQcm9ncmFtT2JqZWN0OwotICAgIHVuc2lnbmVkIG1fY2hlY2tl
clByb2dyYW1PYmplY3Q7CisgICAgICAgIE51bWJlck9mUHJvZ3JhbXMKKyAgICB9OworCisgICAg
Ym9vbCBjcmVhdGVQcm9ncmFtKFByb2dyYW1JbmRleCk7CisgICAgY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mIHVzZVByb2dyYW0oUHJvZ3JhbUluZGV4
KTsKKyAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3Jh
bSYgdXNlTGF5ZXJQcm9ncmFtKExheWVyRGF0YTo6TGF5ZXJQcm9ncmFtLCBib29sIGlzTWFzayA9
IGZhbHNlKTsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9n
cmFtIG1fcHJvZ3JhbXNbTnVtYmVyT2ZQcm9ncmFtc107CiAKICAgICAvLyBTaGFkZXIgdW5pZm9y
bSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBjb25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0
aW9uOwotICAgIGNvbnN0IGludCBtX3RleENvb3JkTG9jYXRpb247CiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIE93blB0cjxMYXllckZpbHRlclJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVy
OwogI2VuZGlmCiAKLSAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJP
ZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwotICAgIGludCBtX2FscGhhTG9jYXRpb25bTGF5ZXJEYXRh
OjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwotICAgIGludCBtX21hc2tTYW1wbGVyTG9j
YXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwotICAgIGludCBt
X21hc2tTYW1wbGVyTG9jYXRpb25NYXNrW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1T
aGFkZXJzXTsKLSAgICBpbnQgbV9tYXNrQWxwaGFMb2NhdGlvbltMYXllckRhdGE6Ok51bWJlck9m
TGF5ZXJQcm9ncmFtU2hhZGVyc107Ci0KICAgICBpbnQgbV9jb2xvckNvbG9yTG9jYXRpb247Ci0g
ICAgaW50IG1fY2hlY2tlclNjYWxlTG9jYXRpb247Ci0gICAgaW50IG1fY2hlY2tlck9yaWdpbkxv
Y2F0aW9uOwotICAgIGludCBtX2NoZWNrZXJTdXJmYWNlSGVpZ2h0TG9jYXRpb247CiAKICAgICAv
LyBDdXJyZW50IGRyYXcgY29uZmlndXJhdGlvbi4KICAgICBkb3VibGUgbV9zY2FsZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAKaW5kZXggZGVhMWRkMDAyZGFhNTY2NGIw
ZGJlNjhhMDJkZGRjMzAyOTgyZmM4ZC4uOTEyY2JiYWM1ZTgyNGMxZmRmMDIxZDkzOGU4NWFiYzdk
MGFlZmNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAKQEAgLTc1
LDcgKzc1LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyU3VyZmFjZTo6ZW5zdXJlVGV4dHVyZSgpCiAg
ICAgaWYgKCFtX3RleHR1cmUpCiAgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkKCktPmNyZWF0ZVRleHR1cmUoKTsKIAotICAgIHJldHVybiBtX3RleHR1cmUt
PnByb3RlY3QobV9zaXplKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlLT5wcm90ZWN0KG1fc2l6ZSwg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQpOwogfQogCiB2b2lk
IExheWVyUmVuZGVyZXJTdXJmYWNlOjpyZWxlYXNlVGV4dHVyZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAK
aW5kZXggOWViNmY4MzZiMzhhNGQ3NzZhMTg0MGYxNzNkNjhjMjQ3NmQ5ZTA4Yy4uOTJiNDRmZDUx
MWU0ZjA1NDk5MzYyMzc5NWE2ZWJhYTJiMDU5MmVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmNwcApAQCAt
MjksNiArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBMYXllclRpbGU6OkxheWVyVGlsZSgp
CiAgICAgOiBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCisg
ICAgLCBtX25lZWRzUmVuZGVyKGZhbHNlKQogewogfQogCkBAIC0zOCw3ICszOSw3IEBAIExheWVy
VGlsZTo6fkxheWVyVGlsZSgpCiAgICAgc2V0VmlzaWJsZShmYWxzZSk7CiB9CiAKLXZvaWQgTGF5
ZXJUaWxlOjpzZXRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBib29sIGlzT3BhcXVlKQordm9p
ZCBMYXllclRpbGU6OnNldENvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RUeXBlJiBjb250ZW50
cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wg
aXNPcGFxdWUpCiB7CiAgICAgc2V0VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZCgpLT50ZXh0dXJlRm9yVGlsZWRDb250ZW50cyhjb250ZW50cywgdGlsZVJlY3QsIGluZGV4LCBp
c09wYXF1ZSkpOwogfQpAQCAtNDgsNyArNDksNyBAQCB2b2lkIExheWVyVGlsZTo6c2V0Q29udGVu
dHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNo
ZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVGb3JDb2xvcihjb2xvcikpOwogfQogCi12b2lk
IExheWVyVGlsZTo6dXBkYXRlQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBib29sIGlzT3Bh
cXVlKQordm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RU
eXBlJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgYm9vbCBpc09wYXF1ZSkKIHsKICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkKCktPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZSwgY29udGVudHMsIGRp
cnR5UmVjdCwgdGlsZVJlY3QsIGlzT3BhcXVlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaAppbmRleCBjZTk3
ZDIxZTllMmEwZTZiZGNmZWY3NTllYzZkYWY2NmYzZTVhNWI5Li5jOGI3OGY4MWE0ZjRjYTdhMzcx
NGUyOTI5N2UwZDUxZTYyODJlODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKQEAgLTI1LDggKzI1LDYgQEAK
IAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotY2xhc3MgU2tCaXRtYXA7Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CkBAIC00OCw5ICs0Niw5IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAmJiBtX3RleHR1
cmUtPmhhc1RleHR1cmUoKTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50cyhjb25zdCBTa0JpdG1h
cCYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUaWxlSW5kZXgmLCBi
b29sIGlzT3BhcXVlKTsKKyAgICB2b2lkIHNldENvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RU
eXBlJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYs
IGJvb2wgaXNPcGFxdWUpOwogICAgIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGJvb2wgaXNP
cGFxdWUpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgVGV4dHVyZTo6SG9zdFR5cGUm
IGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVS
ZWN0LCBib29sIGlzT3BhcXVlKTsKICAgICB2b2lkIGRpc2NhcmRDb250ZW50cygpOwogCiAgICAg
Ly8gVGhlIGN1cnJlbnQgdGV4dHVyZSBpcyBhbiBhY2N1cmF0ZSBwcmV2aWV3IG9mIHRoaXMgbGF5
ZXIsIGJ1dCBhIG1vcmUKQEAgLTU4LDYgKzU2LDEzIEBAIHB1YmxpYzoKICAgICAvLyB6b29tIGxl
dmVsIGNoYW5nZXMuCiAgICAgdm9pZCBzZXRDb250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGly
dHkgPSB0cnVlOyB9CiAKKyAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9lc05vdE5lZWRSZW5kZXIg
PSAwLCBOZWVkc1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07CisgICAgUmVuZGVyU3Rh
dGUgcmVuZGVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTdGF0ZT4o
bV9uZWVkc1JlbmRlcik7IH0KKyAgICBib29sIG5lZWRzUmVuZGVyKCkgeyByZXR1cm4gbV9uZWVk
c1JlbmRlciA9PSBOZWVkc1JlbmRlcjsgfQorICAgIHZvaWQgc2V0TmVlZHNSZW5kZXIoYm9vbCBu
ZWVkc1JlbmRlcikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7IH0KKyAgICB2b2lkIHNl
dFJlbmRlclBlbmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQZW5kaW5nOyB9CisgICAg
dm9pZCBzZXRSZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9lc05vdE5lZWRSZW5kZXI7
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHNldFRleHR1cmUoUGFzc1JlZlB0cjxUZXh0dXJlPik7
CiAKQEAgLTY1LDYgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VGV4dHVyZT4gbV90ZXh0
dXJlOwogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5IDogMTsKICAgICBib29sIG1fdmlzaWJsZSA6
IDE7CisgICAgdW5zaWduZWQgbV9uZWVkc1JlbmRlciA6IDI7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZUlu
ZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZUluZGV4LmgKaW5kZXggNTc0ZTM3MmQzNzA3NDc5OWY2M2JmNGQ5MmQzYTIwM2M0ODI5MmFl
OC4uNGRmMDA4NzI4NWJkY2QxZjgxN2ExYzgzMmQyNjM0OWIxY2E1ZTQwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVJbmRl
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJUaWxlSW5kZXguaApAQCAtNjYsNyArNjYsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRpbGVJbmRleCYgYSwgY29uc3QgVGlsZUluZGV4JiBiKQogbmFtZXNwYWNlIFdURiB7CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8V2ViQ29yZTo6VGlsZUluZGV4PiB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6VGlsZUluZGV4JiBrZXkpIHsgcmV0dXJu
IHBhaXJJbnRIYXNoKGtleS5pKCksIGtleS5qKCkpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgV2ViQ29yZTo6VGlsZUluZGV4JiBrZXkpIHsgcmV0dXJuIGludEhhc2goKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihrZXkuaSgpKSA8PCAzMiB8IGtleS5qKCkpKTsgfQogICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlRpbGVJbmRleCYgYSwgY29uc3QgV2ViQ29yZTo6
VGlsZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5j
cHAKaW5kZXggMmJkOTc3Mzg0ZDU4N2FjMTA0YjZmMTEwMjZiNDYyODIzZmI4ZGM5Mi4uZmQxMjEw
OWJmM2E1Y2M1MzRjMzQ5MzRkYzk2YTk0YjY0NGIzMDgxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiwyOCArMjYsMjggQEAKICNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJNZXNzYWdlLmgi
CiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgogCisjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+CiAjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtU2NyZWVuLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGlu
Z3MuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3Vz
aW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHRoZSB2aWV3cG9ydCBh
cyB1c2VkIGluIHRleHR1cmUgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMKIC8vIHNsaWdodGx5IGxh
cmdlciBzbyB0ZXh0dXJlcyBhcmUgdXBsb2FkZWQgYmVmb3JlIGJlY29taW5nIHJlYWxseSB2aXNp
YmxlLgotY29uc3QgZmxvYXQgdmlld3BvcnRJbmZsYXRpb25GYWN0b3IgPSAxLjFmOwotCi0vLyBU
aGUgdGlsZU11bHRpcGxpZXIgaW5kaWNhdGVzIGhvdyBtYW55IHRpbGVzIHdpbGwgZml0IGluIHRo
ZSBsYXJnZXN0IGRpbWVuc2lvbgotLy8gb2YgdGhlIHNjcmVlbiwgaWYgZHJhd24gdXNpbmcgaWRl
bnRpdHkgdHJhbnNmb3JtLgotLy8gV2UgdXNlIGhhbGYgdGhlIHNjcmVlbiBzaXplIGFzIHRpbGUg
c2l6ZSwgdG8gcmVkdWNlIHRoZSB0ZXh0dXJlIHVwbG9hZCB0aW1lCi0vLyBmb3Igc21hbGwgcmVw
YWludCByZWN0cy4gQ29tcGFyZWQgdG8gdXNpbmcgc2NyZWVuIHNpemUgZGlyZWN0bHksIHRoaXMg
c2hvdWxkCi0vLyBtYWtlIG1vc3Qgc21hbGwgaW52YWxpZGF0aW9ucyAxNnggZmFzdGVyLCB1bmxl
c3MgdGhleSdyZSB1bmZvcnR1bmF0ZSBlbm91Z2gKLS8vIHRvIGludGVyc2VjdCB0d28gb3IgbW9y
ZSB0aWxlcywgd2hlcmUgaXQgd291bGQgYmUgOHgtMXggZmFzdGVyLgotY29uc3QgaW50IHRpbGVN
dWx0aXBsaWVyID0gNDsKKy8vIEluZmxhdGlvbiBpcyBncmVhdGVyIGluIFkgZGlyZWN0aW9uIChv
bmUgc2NyZWVuZnVsIGluIGVpdGhlciBkaXJlY3Rpb24pIHNpbmNlCisvLyBzY3JvbGxpbmcgdmVy
dGljYWxseSBpcyBtb3JlIGNvbW1vbiwgYW5kIGVhc2lseSByZWFjaGVzIGhpZ2hlciB2ZWxvY2l0
eSwgdGhhbgorLy8gc2Nyb2xsaW5nIGhvcml6b250YWxseS4KKy8vIFRoZSB2aWV3cG9ydEluZmxh
dGlvbiBpcyBleHByZXNzZWQgYXMgYSBmcmFjdGlvbiB0byBtdWx0aXBseSB0aGUgdmlld3BvcnQg
YnksIGFuZAorLy8gaXQgaXMgY2VudGVyZWQuCisvLyBBIGhlaWdodCBvZiAzIG1lYW5zIHRvIGNv
bnNpZGVyIG9uZSBzY3JlZW5mdWwgYWJvdmUgYW5kIG9uZSBzY3JlZW5mdWwgYmVsb3cgdGhlCisv
LyBjdXJyZW50IHZpZXdwb3J0IGFzIHZpc2libGUuCitjb25zdCBGbG9hdFNpemUgdmlld3BvcnRJ
bmZsYXRpb24oMS4yZiwgMy4wZik7CiAKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybVBvaW50KGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9hdCogcmVzdWx0
KQogewpAQCAtNjIsMTggKzYyLDE3IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybVBvaW50KGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9hCiAKIHN0YXRp
YyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiB7Ci0gICAgc3RhdGljIEludFNpemUgc2NyZWVu
U2l6ZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U2NyZWVuOjpwcmltYXJ5U2Ny
ZWVuKCktPm5hdGl2ZVNpemUoKTsKLSAgICBzdGF0aWMgaW50IGRpbSA9IG1heChzY3JlZW5TaXpl
LndpZHRoKCksIHNjcmVlblNpemUuaGVpZ2h0KCkpIC8gdGlsZU11bHRpcGxpZXI7Ci0gICAgcmV0
dXJuIEludFNpemUoZGltLCBkaW0pOworICAgIHN0YXRpYyBJbnRTaXplIHNpemUoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT50aWxlU2l6ZSgpKTsKKyAgICByZXR1
cm4gc2l6ZTsKIH0KIAogTGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCog
bGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQotICAgICwgbV90aWxpbmdEaXNhYmxlZChmYWxz
ZSkKKyAgICAsIG1fbmVlZHNSZW5kZXJDb3VudCgwKQorICAgICwgbV9uZWVkc0JhY2tpbmcoZmFs
c2UpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1
bHRUaWxlU2l6ZSgpKQogICAgICwgbV9jbGVhclRleHR1cmVKb2JzKGZhbHNlKQotICAgICwgbV9o
YXNNaXNzaW5nVGV4dHVyZXMoZmFsc2UpCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMC4wKQogewog
ICAgIHJlZigpOyAvLyBUaGlzIHJlZigpIGlzIG1hdGNoZWQgYnkgYSBkZXJlZiBpbiBsYXllckNv
bXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKCk7CkBAIC0xMTUsMTMgKzExNCw5IEBAIHZvaWQgTGF5
ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogewog
ICAgIHVwZGF0ZVRpbGVTaXplKCk7CiAKLSAgICBIYXNoU2V0PFRpbGVJbmRleD4gcmVuZGVySm9i
czsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlckpvYnNNdXRleCk7
Ci0gICAgICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmIG1fcmVuZGVySm9icy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlbmRlckpvYnMgPSBtX3JlbmRlckpvYnM7
Ci0gICAgfQorICAgIC8vIENoZWNrIGlmIHVwZGF0ZSBpcyBuZWVkZWQKKyAgICBpZiAoIW1fY29u
dGVudHNEaXJ0eSAmJiAhbmVlZHNSZW5kZXIoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
VGhlcmUncyBubyBwb2ludCBpbiBkcmF3aW5nIGNvbnRlbnRzIGF0IGEgaGlnaGVyIHJlc29sdXRp
b24gZm9yIHNjYWxlCiAgICAgLy8gaW52YXJpYW50IGxheWVycy4KQEAgLTE2OCw1OSArMTYzLDYg
QEAgdm9pZCBMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZChkb3VibGUg
c2NhbGUpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVx
dWlyZWRUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgLy8gSWYgdGhlIG5ldyBzaXplIGlzIGVt
cHR5LCBjbGVhciB0aGUgdmlzaWJpbGl0eSBqb2JzCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNp
emUuaXNFbXB0eSgpICYmIHJlbmRlckpvYnMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlbmRlckpvYnMu
Y2xlYXIoKTsKLQotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9yZW5kZXJKb2JzTXV0ZXgp
OwotICAgICAgICBtX3JlbmRlckpvYnMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBu
ZWVkIGRpc3BsYXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1
ZSB0byB0ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2UncmUgcmUt
cmVuZGVyaW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMu
Ci0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAgICAgICBj
bGVhclRleHR1cmVKb2JzKCk7Ci0KLSAgICBIYXNoU2V0PFRpbGVJbmRleD4gZmluaXNoZWRKb2Jz
OwotICAgIGlmICghcmVuZGVySm9icy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKEltYWdlKiBp
bWFnZSA9IG1fbGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNPcGFxdWUg
PSBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCk7Ci0gICAgICAgICAgICBpZiAo
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSkgewotICAgICAgICAgICAgICAgIFNrQml0bWFwIGJpdG1hcCA9IFNrQml0bWFwKG5h
dGl2ZUltYWdlLT5iaXRtYXAoKSk7Ci0gICAgICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0
dXJlSm9iOjpzZXRDb250ZW50cyhiaXRtYXAsIGlzT3BhcXVlKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBzdGlsbCBiZSBzb21l
IHBlbmRpbmcgcmVuZGVyIGpvYnMgZHVlIHRvIHZpc2liaWxpdHkgY2hhbmdlcy4KLSAgICAgICAg
ICAgIGZvciAoSGFzaFNldDxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHJlbmRlckpvYnMuYmVn
aW4oKTsgaXQgIT0gcmVuZGVySm9icy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGpvYiBoYXMgYmVlbiBjYW5jZWxs
ZWQuCi0gICAgICAgICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlckpvYnNN
dXRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9yZW5kZXJKb2JzLmNvbnRhaW5zKCpp
dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9yZW5kZXJKb2JzLnJlbW92ZSgqaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZSgqaXQsIHJlcXVpcmVkVGV4
dHVyZVNpemUpOwotICAgICAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYm9vbCBpc1NvbGlk
Q29sb3IgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAg
ICAgICBTa0JpdG1hcCBiaXRtYXAgPSBtX2xheWVyLT5wYWludENvbnRlbnRzKHRpbGVSZWN0LCBz
Y2FsZSwgJmlzU29saWRDb2xvciwgJmNvbG9yKTsKLSAgICAgICAgICAgICAgICAvLyBiaXRtYXAg
Y2FuIGJlIG51bGwgaGVyZS4gTWFrZSByZXF1aXJlZFRleHR1cmVTaXplIGVtcHR5IHNvIHRoYXQg
d2UKLSAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCB0cnkgdG8gdXBkYXRlIGFuZCBkcmF3IHRo
ZSBsYXllci4KLSAgICAgICAgICAgICAgICBpZiAoIWJpdG1hcC5pc051bGwoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNTb2xpZENvbG9yKQotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50c1RvQ29sb3IoY29sb3IsICppdCkp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRU
ZXh0dXJlSm9iKFRleHR1cmVKb2I6OnVwZGF0ZUNvbnRlbnRzKGJpdG1hcCwgdGlsZVJlY3QsIG1f
bGF5ZXItPmlzT3BhcXVlKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBmaW5pc2hlZEpvYnMuYWRkKCppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KICAgICBib29sIGRpZFJlc2l6ZSA9IGZhbHNlOwogICAgIEludFJlY3QgcHJldmlvdXNUZXh0
dXJlUmVjdChJbnRQb2ludDo6emVybygpLCBtX3BlbmRpbmdUZXh0dXJlU2l6ZSk7CiAgICAgaWYg
KG1fcGVuZGluZ1RleHR1cmVTaXplICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpIHsKQEAgLTIyOCw1
MCArMTcwLDU3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVk
ZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9IHJlcXVpcmVk
VGV4dHVyZVNpemU7CiAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6cmVzaXplQ29u
dGVudHMobV9wZW5kaW5nVGV4dHVyZVNpemUpKTsKICAgICB9Ci0gICAgbV9jb250ZW50c0RpcnR5
ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIAotICAgIGlmIChkaXJ0
eVJlY3QuaXNFbXB0eSgpIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47CisgICAgSW50UmVjdCByZWN0Rm9yT25lVGlsZShJbnRQb2ludDo6emVybygpLCB0
aWxlU2l6ZSgpKTsKKyAgICBib29sIHdhc09uZVRpbGUgPSByZWN0Rm9yT25lVGlsZS5jb250YWlu
cyhwcmV2aW91c1RleHR1cmVSZWN0KTsKKyAgICBib29sIGlzT25lVGlsZSA9IHJlY3RGb3JPbmVU
aWxlLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9wZW5kaW5nVGV4dHVyZVNp
emUpKTsKIAotICAgIGlmIChJbWFnZSogaW1hZ2UgPSBtX2xheWVyLT5jb250ZW50cygpKSB7Ci0g
ICAgICAgIGJvb2wgaXNPcGFxdWUgPSBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVl
KCk7Ci0gICAgICAgIC8vIE5vIHBvaW50IGluIHRpbGluZyBhbiBpbWFnZSBsYXllciwgdGhlIGlt
YWdlIGlzIGFscmVhZHkgc3RvcmVkIGFzIGFuIFNrQml0bWFwCi0gICAgICAgIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlID0gbV9sYXllci0+Y29udGVudHMoKS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKG5hdGl2ZUltYWdlKSB7Ci0gICAgICAgICAgICBTa0Jp
dG1hcCBiaXRtYXAgPSBTa0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCkpOwotICAgICAgICAg
ICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhiaXRtYXAsIGlzT3BhcXVl
KSk7CisgICAgSGFzaFNldDxUaWxlSW5kZXg+IHJlbmRlckpvYnM7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKKworICAgICAgICAvLyBBZGQgcHJlZmls
bCBqb2JzCisgICAgICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
SW50UmVjdCByZWN0ID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgp
LT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKTsKKyAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRp
cnR5UmVjdCk7CisgICAgICAgICAgICBUaWxlSW5kZXggYmVnaW4gPSBpbmRleE9mVGlsZShyZWN0
Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICAgICAgVGlsZUluZGV4IGVuZCA9IGluZGV4T2ZU
aWxlKHJlY3QubWF4WE1heFlDb3JuZXIoKSArIHRpbGVTaXplKCkgLSBJbnRTaXplKDEsIDEpKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luLmkoKTsgaSA8IGVuZC5pKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJlZ2luLmooKTsgaiA8IGVu
ZC5qKCk7ICsraikKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoVGlsZUluZGV4
KGksIGopKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgSW50UG9pbnQgdG9wTGVmdCA9IGRpcnR5UmVjdC5taW5YTWluWUNvcm5lcigpOwot
ICAgIEludFBvaW50IGJvdHRvbVJpZ2h0ID0gZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCk7IC8v
IFRoaXMgaXMgYWN0dWFsbHkgYSBwaXhlbCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBk
aXJ0eVJlY3QuCiAKLSAgICBJbnRTaXplIHRpbGVNYXhpbXVtU2l6ZSh0aWxlU2l6ZSgpKTsKLSAg
ICBJbnRSZWN0IHJlY3RGb3JPbmVUaWxlKEludFBvaW50Ojp6ZXJvKCksIHRpbGVNYXhpbXVtU2l6
ZSk7Ci0gICAgYm9vbCB3YXNPbmVUaWxlID0gcmVjdEZvck9uZVRpbGUuY29udGFpbnMocHJldmlv
dXNUZXh0dXJlUmVjdCk7Ci0gICAgYm9vbCBpc09uZVRpbGUgPSByZWN0Rm9yT25lVGlsZS5jb250
YWlucyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fcGVuZGluZ1RleHR1cmVTaXplKSk7Ci0g
ICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKGluZGV4T2ZUaWxlKHRvcExlZnQpKTsK
LSAgICBJbnRSZWN0IHRpbGVSZWN0OwotICAgIGZvciAodGlsZVJlY3Quc2V0WChvcmlnaW4ueCgp
KTsgdGlsZVJlY3QueCgpIDwgYm90dG9tUmlnaHQueCgpOyB0aWxlUmVjdC5zZXRYKHRpbGVSZWN0
LngoKSArIHRpbGVNYXhpbXVtU2l6ZS53aWR0aCgpKSkgewotICAgICAgICBmb3IgKHRpbGVSZWN0
LnNldFkob3JpZ2luLnkoKSk7IHRpbGVSZWN0LnkoKSA8IGJvdHRvbVJpZ2h0LnkoKTsgdGlsZVJl
Y3Quc2V0WSh0aWxlUmVjdC55KCkgKyB0aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkpKSB7Ci0gICAg
ICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4ocmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgp
IC0gdGlsZVJlY3QueCgpLCB0aWxlTWF4aW11bVNpemUud2lkdGgoKSkpOwotICAgICAgICAgICAg
dGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihyZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gdGls
ZVJlY3QueSgpLCB0aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkpKTsKLQotICAgICAgICAgICAgSW50
UmVjdCBsb2NhbERpcnR5UmVjdChkaXJ0eVJlY3QpOwotICAgICAgICAgICAgbG9jYWxEaXJ0eVJl
Y3QuaW50ZXJzZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgIGlmIChsb2NhbERpcnR5UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIFRpbGVJbmRl
eCBpbmRleCA9ICgqaXQpLmtleTsKKyAgICAgICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQp
LnZhbHVlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlKGluZGV4
LCByZXF1aXJlZFRleHR1cmVTaXplKTsKKyAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFRpbGVJbmRleCBp
bmRleCA9IGluZGV4T2ZUaWxlKHRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICAgICAgaWYg
KHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKKyAgICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJQ
ZW5kaW5nKCk7CisgICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKKyAgICAgICAgICAgICAg
ICByZW5kZXJKb2JzLmFkZChpbmRleCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY29udGVu
dHNEaXJ0eSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgbG9jYWxEaXJ0eVJlY3QoZGlydHlS
ZWN0KTsKKyAgICAgICAgICAgICAgICBsb2NhbERpcnR5UmVjdC5pbnRlcnNlY3QodGlsZVJlY3Qp
OworICAgICAgICAgICAgICAgIGlmIChsb2NhbERpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGRp
ZCB0aGlzIGFzIHBhcnQgb2Ygb25lIG9mIHRoZSByZW5kZXIgam9icyBkdWUgdG8KLSAgICAgICAg
ICAgIC8vIHZpc2liaWxpdHkgY2hhbmdlcywgZG9uJ3QgcmVuZGVyIHRoYXQgdGlsZSBhZ2Fpbi4K
LSAgICAgICAgICAgIGlmIChmaW5pc2hlZEpvYnMuY29udGFpbnMoaW5kZXgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIC8vIFJlbmRlciBvbmx5IHZpc2libGUg
dGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB0aGV5J3JlIG5l
dmVyIGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAvLyB2aXNpYmxlLiBXb3JrYXJvdW5kIHRo
aXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZlcnkgZmFzdCBvcGVyYXRpb24gd2l0aCB0
aGUKKyAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250
ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4gcmVmJ2luZyB0aGUgbWFzayBpbWFnZSku
CisgICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlzaWJsZSgpIHx8IG1fbGF5ZXItPmlzTWFz
aygpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckpvYnMuYWRkKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUgdGlsZSBpZiBmb3Igc29tZSByZWFzb24g
KGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBhbHJlYWR5IGFkZGVkLgorICAgICAgICAg
ICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGluZGV4KSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICghc2hvdWxkUGVyZm9ybVJlbmRlckpvYihp
bmRleCwgIWlzWm9vbUpvYikpIHsKICAgICAgICAgICAgICAgICAvLyBBdm9pZCBjaGVja2VyYm9h
cmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVuCiAgICAgICAgICAgICAgICAg
Ly8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8gY2hhbmdlIGFwcGVhcmFuY2Us
IGZvcgogICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRvIGFzcGVjdCByYXRpbyBjaGFu
Z2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKQEAgLTI4NSw0NiArMjM0LDUwIEBAIHZvaWQgTGF5ZXJU
aWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAg
ICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRDb250ZW50cyh0
aWxlUmVjdCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWRk
VGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgICAgIC8vIEp1c3QgaW4gY2FzZSBhIG5ldyBqb2IgZm9yIHRoaXMgdGlsZSBoYXMganVz
dCBiZWVuIGluc2VydGVkIGJ5IGNvbXBvc2l0aW5nIHRocmVhZC4KLSAgICAgICAgICAgIHJlbW92
ZVJlbmRlckpvYihpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBhcmUgYWx3YXlz
IGRyYXdpbmcgd2hvbGUgdGlsZXMgYXQgdGhlIG1vbWVudCwgYmVjYXVzZQotICAgICAgICAgICAg
Ly8gd2UgY3VycmVudGx5IGNhbid0IGtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFydCBvZiBhIHRpbGUg
aXMKLSAgICAgICAgICAgIC8vIHJlbmRlcmVkIGFuZCB3aGljaCBpcyBub3QuIFNlbmRpbmcgb25s
eSBhIHN1YnJlY3RhbmdsZSBvZiBhIHRpbGUKLSAgICAgICAgICAgIC8vIHRvIHRoZSBjb21wb3Np
dGluZyB0aHJlYWQgbWlnaHQgY2F1c2UgaXQgdG8gYmUgdXBsb2FkZWQgdXNpbmcKLSAgICAgICAg
ICAgIC8vIGdsVGV4SW1hZ2UsIGlmIHRoZSB0ZXh0dXJlIHdhcyBwcmV2aW91c2x5IGV2aWN0ZWQg
ZnJvbSB0aGUgY2FjaGUuCi0gICAgICAgICAgICAvLyBUaGUgcmVzdWx0IHdvdWxkIGJlIHRoYXQg
YSBzdWJyZWN0YW5nbGUgb2YgdGhlIHRpbGUgd2FzIHN0cmV0Y2hlZAotICAgICAgICAgICAgLy8g
dG8gZml0IHRoZSB0aWxlIGdlb21ldHJ5LCBhcHBlYXJpbmcgYXMgYSBnbGFyaW5nIG1pc3JlbmRl
cmluZyBvZgotICAgICAgICAgICAgLy8gdGhlIHdlYiBwYWdlLgotICAgICAgICAgICAgYm9vbCBp
c1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAg
ICAgU2tCaXRtYXAgYml0bWFwID0gbV9sYXllci0+cGFpbnRDb250ZW50cyh0aWxlUmVjdCwgc2Nh
bGUsICZpc1NvbGlkQ29sb3IsICZjb2xvcik7Ci0gICAgICAgICAgICAvLyBiaXRtYXAgY2FuIGJl
IG51bGwgaGVyZS4gTWFrZSByZXF1aXJlZFRleHR1cmVTaXplIGVtcHR5IHNvIHRoYXQgd2UKLSAg
ICAgICAgICAgIC8vIHdpbGwgbm90IHRyeSB0byB1cGRhdGUgYW5kIGRyYXcgdGhlIGxheWVyLgot
ICAgICAgICAgICAgaWYgKCFiaXRtYXAuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTb2xpZENvbG9yKQotICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVK
b2I6OnNldENvbnRlbnRzVG9Db2xvcihjb2xvciwgaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6dXBkYXRl
Q29udGVudHMoYml0bWFwLCB0aWxlUmVjdCwgbV9sYXllci0+aXNPcGFxdWUoKSkpOworICAgIC8v
IElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGJlIGRpc3Bs
YXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNvbWluZyAwIHggMCwKKyAgICAvLyBvciBpZiB3
ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRoaW5nIGFueXdheSwgY2xlYXIgb2xkIHRleHR1
cmUgam9icy4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc0VtcHR5KCkgfHwgZGlydHlS
ZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSkpCisg
ICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKKworICAgIGlmIChyZW5kZXJKb2JzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1fbGF5ZXItPmNv
bnRlbnRzKCkpIHsKKyAgICAgICAgLy8gSWYgd2UgbmVlZCBiYWNraW5nLCB3ZSBoYXZlIG5vIGNo
b2ljZSBidXQgdG8gZW5mb3JjZSB0aGUgdGlsZSBzaXplLCB3aGljaCBjb3VsZCBjYXVzZSBjbGlw
cGluZy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBkb24ndCBjbGlwIC0gaW5jbHVkZSB0aGUgd2hv
bGUgaW1hZ2UuCisgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IG1fbmVlZHNCYWNraW5nID8g
dGlsZVNpemUoKSA6IGltYWdlLT5zaXplKCk7CisgICAgICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVmZmVyKGJ1ZmZlclNpemUp
KSB7CisgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdChJbnRQb2ludDo6emVybygpLCBp
bWFnZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnBhaW50Q29udGVudHMoYnVmZmVy
LCBjb250ZW50c1JlY3QsIHNjYWxlKTsKKworICAgICAgICAgICAgYm9vbCBpc09wYXF1ZSA9IGZh
bHNlOworICAgICAgICAgICAgaWYgKGltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisgICAgICAgICAg
ICAgICAgaXNPcGFxdWUgPSAhc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihpbWFnZSktPmN1cnJl
bnRGcmFtZUhhc0FscGhhKCk7CisgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6
OnNldENvbnRlbnRzKGJ1ZmZlciwgY29udGVudHNSZWN0LCBpc09wYXF1ZSkpOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBmb3Ig
KEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSByZW5kZXJKb2JzLmJlZ2luKCk7IGl0
ICE9IHJlbmRlckpvYnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVmZmVyKHRpbGVT
aXplKCkpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxl
KCppdCwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CisgICAgICAgICAgICAgICAgbV9sYXllci0+cGFp
bnRDb250ZW50cyhidWZmZXIsIHRpbGVSZWN0LCBzY2FsZSk7CisgICAgICAgICAgICAgICAgYWRk
VGV4dHVyZUpvYihUZXh0dXJlSm9iOjp1cGRhdGVDb250ZW50cyhidWZmZXIsIHRpbGVSZWN0LCBt
X2xheWVyLT5pc09wYXF1ZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisK
KyAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVj
dCgpOwogfQogCi1ib29sIExheWVyVGlsZXI6OnNob3VsZFBlcmZvcm1SZW5kZXJKb2IoY29uc3Qg
VGlsZUluZGV4JiBpbmRleCwgYm9vbCBhbGxvd1ByZWZpbGwpCitCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkJ1ZmZlciogTGF5ZXJUaWxlcjo6Y3JlYXRlQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUpCiB7Ci0gICAgLy8gVGlsZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSB2aXNpYmxl
IG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgbWF5IHN0aWxsCi0gICAgLy8gZGVzZXJ2ZSB0byBi
ZSByZW5kZXJlZCBpZiB0aGV5IHNob3VsZCBiZSBwcmVmaWxsZWQuLi4KLSAgICBpZiAoYWxsb3dQ
cmVmaWxsICYmIHNob3VsZFByZWZpbGxUaWxlKGluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBPciBpZiB0aGV5IGFyZSB2aXNpYmxlIGFjY29yZGluZyB0byB0aGUgc3RhdGUg
dGhhdCdzIGFib3V0IHRvIGJlCi0gICAgLy8gY29tbWl0dGVkLiBXZSBkbyBhIHZpc2liaWxpdHkg
dGVzdCB1c2luZyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gc3RhdGUuCi0gICAgSW50UmVjdCBjb250
ZW50UmVjdCA9IHJlY3RGb3JUaWxlKGluZGV4LCBtX3BlbmRpbmdUZXh0dXJlU2l6ZSk7Ci0gICAg
cmV0dXJuIG1fbGF5ZXItPmNvbnRlbnRzVmlzaWJsZShMYXllcldlYktpdFRocmVhZDo6bWFwRnJv
bVRyYW5zZm9ybWVkKGNvbnRlbnRSZWN0LCBtX2NvbnRlbnRzU2NhbGUpKTsKKyAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgYnVmZmVyVHlwZSA9IG1fbmVlZHNC
YWNraW5nID8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQgOiBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3Nhcnk7CisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKHNpemUsIGJ1ZmZlclR5cGUpOwor
ICAgIHJldHVybiBidWZmZXI7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6YWRkVGV4dHVyZUpvYihj
b25zdCBUZXh0dXJlSm9iJiBqb2IpCkBAIC0zNDAsMTUgKzI5MywzNCBAQCB2b2lkIExheWVyVGls
ZXI6OmNsZWFyVGV4dHVyZUpvYnMoKQogICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRzSm9icyhtX3Bl
bmRpbmdUZXh0dXJlSm9icyk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlcjo6Y29tbWl0UGVuZGluZ1Rl
eHR1cmVVcGxvYWRzKCkKK3N0YXRpYyBzaXplX3QgYmFja2luZ1NpemVJbkJ5dGVzID0gMDsKKwor
dm9pZCBMYXllclRpbGVyOjp3aWxsQ29tbWl0KCkKK3sKKyAgICBiYWNraW5nU2l6ZUluQnl0ZXMg
PSAwOworfQorCit2b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhM
YXllckNvbXBvc2l0aW5nVGhyZWFkKikKIHsKICAgICBpZiAobV9jbGVhclRleHR1cmVKb2JzKSB7
CiAgICAgICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRzSm9icyhtX3RleHR1cmVKb2JzKTsKICAgICAg
ICAgbV9jbGVhclRleHR1cmVKb2JzID0gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChWZWN0b3I8
VGV4dHVyZUpvYj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuYmVnaW4oKTsg
aXQgIT0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fdGV4dHVy
ZUpvYnMuYXBwZW5kKCppdCk7CisgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiByZW5kZXJpbmcg
bW9yZSB0aGFuIHRoZSBjYWNoZSBjYXBhY2l0eSBkdXJpbmcgb25lIGZyYW1lLgorICAgIGNvbnN0
IHNpemVfdCBtYXhCYWNraW5nUGVyRnJhbWUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZCgpLT5tZW1vcnlMaW1pdCgpOworCisgICAgZm9yIChWZWN0b3I8VGV4dHVyZUpvYj46Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nVGV4
dHVyZUpvYnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVGV4dHVyZUpvYiYgdGV4dHVyZUpvYiA9
ICppdDsKKworICAgICAgICAvLyBVcGRhdGUgYmFja2luZyBzdXJmYWNlIGZvciBiYWNrZWQgdGls
ZXMgbm93LCB0byBhdm9pZCBkcm9wcGluZyBmcmFtZXMgZHVyaW5nIGFuaW1hdGlvbi4KKyAgICAg
ICAgaWYgKHRleHR1cmVKb2IubV9jb250ZW50cyAmJiBiYWNraW5nU2l6ZUluQnl0ZXMgPCBtYXhC
YWNraW5nUGVyRnJhbWUpIHsKKyAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6dXBkYXRlQnVmZmVyQmFja2luZ1N1cmZhY2UodGV4dHVyZUpvYi5tX2NvbnRlbnRzKTsK
KyAgICAgICAgICAgIGJhY2tpbmdTaXplSW5CeXRlcyArPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OmJ1ZmZlclNpemVJbkJ5dGVzKHRleHR1cmVKb2IubV9jb250ZW50cyk7CisgICAg
ICAgIH0KKworICAgICAgICBtX3RleHR1cmVKb2JzLmFwcGVuZCh0ZXh0dXJlSm9iKTsKKyAgICB9
CiAgICAgbV9wZW5kaW5nVGV4dHVyZUpvYnMuY2xlYXIoKTsKIH0KIApAQCAtMzYxLDE0ICszMzMs
MTggQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAKICAgICB7CiAgICAgICAgIC8vIEFsbCB0aWxl
cyBhcmUgaW52aXNpYmxlIG5vdy4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVy
Sm9ic011dGV4KTsKLSAgICAgICAgbV9yZW5kZXJKb2JzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7Ci0g
ICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnZhbHVlOwotICAgICAgICB0aWxlLT5zZXRW
aXNpYmxlKGZhbHNlKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7
CisKKyAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4
ID0gKCppdCkua2V5OworICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7
CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgICAgIGlmICh0
aWxlLT5uZWVkc1JlbmRlcigpKSB7CisgICAgICAgICAgICAgICAgdGlsZS0+c2V0TmVlZHNSZW5k
ZXIoZmFsc2UpOworICAgICAgICAgICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OworICAgICAg
ICAgICAgICAgIEFTU0VSVChtX25lZWRzUmVuZGVyQ291bnQgPj0gMCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTM4Nyw2ICszNjMsOCBAQCB2b2lkIExheWVyVGls
ZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAg
ICAgIGlmICghdGlsZSkgewogICAgICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0gbV9yZXF1aXJl
ZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNp
emUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwogICAgICAgICAgICAgdGlsZSA9IG5ldyBM
YXllclRpbGUoKTsKICAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRlci0+a2V5LCB0
aWxlKTsKICAgICAgICAgfQpAQCAtNDE1LDE3ICszOTMsOSBAQCB2b2lkIExheWVyVGlsZXI6OnBy
b2Nlc3NUZXh0dXJlSm9iKGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUpvYnNNYXAmIHRpbGVK
b2JzTQogICAgIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6OlNldENvbnRlbnRzVG9Db2xv
cikgewogICAgICAgICBhZGRUaWxlSm9iKGpvYi5tX2luZGV4LCBqb2IsIHRpbGVKb2JzTWFwKTsK
ICAgICAgICAgcmV0dXJuOwotICAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVNYXhpbXVtU2l6ZSA9
IHRpbGVTaXplKCk7Ci0gICAgSW50UG9pbnQgdG9wTGVmdCA9IGpvYi5tX2RpcnR5UmVjdC5taW5Y
TWluWUNvcm5lcigpOwotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0ID0gam9iLm1fZGlydHlSZWN0
Lm1heFhNYXhZQ29ybmVyKCk7IC8vIFRoaXMgaXMgYWN0dWFsbHkgYSBwaXhlbCBiZWxvdyBhbmQg
dG8gdGhlIHJpZ2h0IG9mIHRoZSBkaXJ0eVJlY3QuCi0gICAgSW50UG9pbnQgb3JpZ2luID0gb3Jp
Z2luT2ZUaWxlKGluZGV4T2ZUaWxlKHRvcExlZnQpKTsKLSAgICBJbnRSZWN0IHRpbGVSZWN0Owot
ICAgIGZvciAodGlsZVJlY3Quc2V0WChvcmlnaW4ueCgpKTsgdGlsZVJlY3QueCgpIDwgYm90dG9t
UmlnaHQueCgpOyB0aWxlUmVjdC5zZXRYKHRpbGVSZWN0LngoKSArIHRpbGVNYXhpbXVtU2l6ZS53
aWR0aCgpKSkgewotICAgICAgICBmb3IgKHRpbGVSZWN0LnNldFkob3JpZ2luLnkoKSk7IHRpbGVS
ZWN0LnkoKSA8IGJvdHRvbVJpZ2h0LnkoKTsgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55KCkgKyB0
aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkpKQotICAgICAgICAgICAgYWRkVGlsZUpvYihpbmRleE9m
VGlsZSh0aWxlUmVjdC5sb2NhdGlvbigpKSwgam9iLCB0aWxlSm9ic01hcCk7CiAgICAgfQorCisg
ICAgYWRkVGlsZUpvYihpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIo
KSksIGpvYiwgdGlsZUpvYnNNYXApOwogfQogCiB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2Io
Y29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSm9ic01h
cCYgdGlsZUpvYnNNYXApCkBAIC00NDIsNiArNDEyLDkgQEAgdm9pZCBMYXllclRpbGVyOjphZGRU
aWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGls
ZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4K
KyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5tX2NvbnRlbnRzKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRl
c3Ryb3lCdWZmZXIocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV9jb250ZW50cyk7CisKICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKIH0KIApAQCAtNDUzLDkgKzQyNiwxOSBAQCB2
b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4
dHVyZUpvYiYgam9iLCBjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUZXh0dXJl
Sm9iOjpTZXRDb250ZW50czoKICAgICAgICAgdGlsZS0+c2V0Q29udGVudHMoam9iLm1fY29udGVu
dHMsIHRpbGVSZWN0LCBpbmRleE9mVGlsZSh0aWxlUmVjdC5sb2NhdGlvbigpKSwgam9iLm1faXNP
cGFxdWUpOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxl
c011dGV4KTsKKyAgICAgICAgICAgIGlmICh0aWxlLT5yZW5kZXJTdGF0ZSgpID09IExheWVyVGls
ZTo6UmVuZGVyUGVuZGluZykKKyAgICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJEb25lKCk7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4dHVyZUpvYjo6VXBkYXRl
Q29udGVudHM6CiAgICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRzLCBq
b2IubV9kaXJ0eVJlY3QsIHRpbGVSZWN0LCBqb2IubV9pc09wYXF1ZSk7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOworICAgICAgICAgICAg
aWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQZW5kaW5nKQorICAg
ICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKKyAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHM6CiAgICAgICAgIHRp
bGUtPmRpc2NhcmRDb250ZW50cygpOwpAQCAtNDcxLDE1NCArNDU0LDEyNSBAQCB2b2lkIExheWVy
VGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVyZUpvYiYg
am9iLCBjb25zdCBJbgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIExheWVy
VGlsZXI6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91Ymxl
IHNjYWxlLCBpbnQgcG9zLCBpbnQgdGV4Q29vcmQpCitib29sIExheWVyVGlsZXI6OmRyYXdUaWxl
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgc2NhbGUsIGNvbnN0IFRpbGVJ
bmRleCYgaW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBHTEVTMlByb2dyYW0mIHBy
b2dyYW0pCiB7Ci0gICAgZHJhd1RleHR1cmVzSW50ZXJuYWwobGF5ZXIsIHNjYWxlLCBwb3MsIHRl
eENvb3JkLCBmYWxzZSAvKiBkcmF3TWlzc2luZyAqLyk7Ci19CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggZHJhd1RyYW5zZm9ybSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgZmxvYXQg
dmVydGljZXNbNCAqIDRdOwogCi12b2lkIExheWVyVGlsZXI6OmRyYXdNaXNzaW5nVGV4dHVyZXMo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSBzY2FsZSwgaW50IHBvcywgaW50
IHRleENvb3JkKQotewotICAgIGRyYXdUZXh0dXJlc0ludGVybmFsKGxheWVyLCBzY2FsZSwgcG9z
LCB0ZXhDb29yZCwgdHJ1ZSAvKiBkcmF3TWlzc2luZyAqLyk7CisgICAgTGF5ZXJUaWxlKiB0aWxl
ID0gbV90aWxlcy5nZXQoaW5kZXgpOworICAgIGlmICghdGlsZSkgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKKyAgICAgICAgdGlsZSA9IG5ldyBMYXllclRpbGUo
KTsKKyAgICAgICAgbV90aWxlcy5hZGQoaW5kZXgsIHRpbGUpOworICAgIH0KKworICAgIC8vIFdl
IGFwcGx5IHRoZSB0cmFuc2Zvcm1hdGlvbiBieSBoYW5kLCBzaW5jZSB3ZSBuZWVkIHRoZSB6IGNv
b3JkaW5hdGUKKyAgICAvLyBhcyB3ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBjb3JyZWN0IHRleHR1
cmluZykgYW5kIHdlIGRvbid0IG5lZWQKKyAgICAvLyB0byBkaXZpZGUgYnkgdyBieSBoYW5kLCB0
aGUgR1BVIHdpbGwgZG8gdGhhdCBmb3IgdXMKKyAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgpLCBk
c3QueSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMF0pOworICAgIHRyYW5zZm9ybVBvaW50
KGRzdC54KCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s0XSk7CisgICAg
dHJhbnNmb3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0Lm1heFkoKSwgZHJhd1RyYW5zZm9ybSwgJnZl
cnRpY2VzWzhdKTsKKyAgICB0cmFuc2Zvcm1Qb2ludChkc3QubWF4WCgpLCBkc3QueSgpLCBkcmF3
VHJhbnNmb3JtLCAmdmVydGljZXNbMTJdKTsKKworICAgIC8vIEluZmxhdGUgdGhlIHJlY3Qgc29t
ZXdoYXQgdG8gYXR0ZW1wdCB0byBtYWtlIHRleHR1cmVzIHJlbmRlciBiZWZvcmUgdGhleSBzaG93
CisgICAgLy8gdXAgb24gc2NyZWVuLiBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlY3QgaXMgaW4gbm9y
bWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMuCisgICAgRmxvYXRSZWN0IHJlY3QoLXZpZXdwb3J0
SW5mbGF0aW9uLndpZHRoKCksIC12aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSwgMip2aWV3cG9y
dEluZmxhdGlvbi53aWR0aCgpLCAyKnZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpKTsKKyAgICBG
bG9hdFF1YWQgcXVhZCgKKyAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1swXSAvIHZlcnRpY2Vz
WzNdLCB2ZXJ0aWNlc1sxXSAvIHZlcnRpY2VzWzNdKSwKKyAgICAgICAgRmxvYXRQb2ludCh2ZXJ0
aWNlc1s0XSAvIHZlcnRpY2VzWzddLCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzddKSwKKyAgICAg
ICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1s4XSAvIHZlcnRpY2VzWzExXSwgdmVydGljZXNbOV0gLyB2
ZXJ0aWNlc1sxMV0pLAorICAgICAgICBGbG9hdFBvaW50KHZlcnRpY2VzWzEyXSAvIHZlcnRpY2Vz
WzE1XSwgdmVydGljZXNbMTNdIC8gdmVydGljZXNbMTVdKSk7CisgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcXVhZC5ib3VuZGluZ0JveCgpOworICAgIGJvb2wgdmlzaWJsZSA9IGJvdW5kaW5n
Qm94LmludGVyc2VjdHMocmVjdCk7CisgICAgRmxvYXRSZWN0IHZpZXdwb3J0KC0xLCAtMSwgMiwg
Mik7CisgICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1LjBmKTsKKyAgICBib29sIHNob3VsZERy
YXdUaWxlID0gYm91bmRpbmdCb3guaW50ZXJzZWN0cyh2aWV3cG9ydCkgJiYgZ2xvYmFsQWxwaGE7
CisKKyAgICBib29sIHdhc1Zpc2libGUgPSB0aWxlLT5pc1Zpc2libGUoKTsKKworICAgIGlmICh2
aXNpYmxlKSB7CisgICAgICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKKyAgICAgICAgICAg
IFRleHR1cmUqIHRleHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7CisgICAgICAgICAgICB0ZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7CisKKyAg
ICAgICAgICAgIGlmIChzaG91bGREcmF3VGlsZSkgeworICAgICAgICAgICAgICAgIGRyYXdUcmFu
c2Zvcm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOworICAgICAgICAgICAgICAgIGlmIChs
YXllci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZHJhd1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRy
YXdUcmFuc2Zvcm0uc2NhbGUoMS4wIC8gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKSk7CisgICAgICAg
ICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZShsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQo
KSA/IDEuMCAvIHNjYWxlIDogMS4wKTsKKyAgICAgICAgICAgICAgICBibGl0VG9CdWZmZXIoMCwg
dGV4dHVyZS0+dGV4dHVyZUlkKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZv
cm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCisgICAgICAgICAgICAg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlciwgZ2xvYmFs
QWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRpbGUtPmlz
RGlydHkoKSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7
CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgICAgICAgICAgaWYg
KHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpEb2VzTm90TmVlZFJlbmRlcikgewor
ICAgICAgICAgICAgICAgIHRpbGUtPnNldE5lZWRzUmVuZGVyKHRydWUpOworICAgICAgICAgICAg
ICAgICsrbV9uZWVkc1JlbmRlckNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdhc1Zpc2libGUpIHsKKyAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOworICAgICAgICAgICAgdGls
ZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAod2FzVmlz
aWJsZSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKKyAgICAg
ICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVu
ZGVyKCkpIHsKKyAgICAgICAgICAgIHRpbGUtPnNldE5lZWRzUmVuZGVyKGZhbHNlKTsKKyAgICAg
ICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OworICAgICAgICAgICAgQVNTRVJUKG1fbmVlZHNS
ZW5kZXJDb3VudCA+PSAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBMYXllclRpbGVyOjpkcmF3VGV4dHVyZXNJbnRlcm5hbChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNjYWxlLCBpbnQgcG9zaXRpb25Mb2NhdGlvbiwgaW50
IHRleENvb3JkTG9jYXRpb24sIGJvb2wgZHJhd01pc3NpbmcpCit2b2lkIExheWVyVGlsZXI6OmRy
YXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNjYWxlLCBj
b25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogICAgIEZsb2F0
U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAKICAgICBpZiAobGF5ZXItPnNpemVJc1Nj
YWxlSW52YXJpYW50KCkpIHsKICAgICAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy53aWR0aCgp
IC8gc2NhbGUpOwotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy53aWR0aCgpIC8gc2Nh
bGUpOworICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSAvIHNjYWxlKTsK
ICAgICB9CiAKLSAgICBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwgIDEs
IDEsICAxLCAwIH07Ci0gICAgZmxvYXQgdmVydGljZXNbNCAqIDRdOwotCi0gICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDQsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
dmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9uLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7Ci0KLSAgICBtX2hhc01pc3NpbmdU
ZXh0dXJlcyA9IGZhbHNlOwotCi0gICAgaW50IG1heHcgPSB0aWxlU2l6ZSgpLndpZHRoKCk7Ci0g
ICAgaW50IG1heGggPSB0aWxlU2l6ZSgpLmhlaWdodCgpOwotICAgIGZsb2F0IHN4ID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGJvdW5kcy53aWR0aCgpKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0
aCgpOwotICAgIGZsb2F0IHN5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5oZWlnaHQoKSkg
LyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7Ci0KICAgICBib29sIG5lZWRzRGlzcGxh
eSA9IGZhbHNlOwogCi0gICAgYm9vbCBibGVuZGluZyA9ICFkcmF3TWlzc2luZzsKKyAgICBpZiAo
bGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKKyAgICAgICAgLy8gUmVz
b2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBkYXRhIGluIHRo
ZSBmaXJzdCB0aWxlIGFuZCBhbGwgdGhlIG90aGVycyBhcmUgdXNlbGVzcy4KKyAgICAgICAgRmxv
YXRSZWN0IGRzdCgtYm91bmRzLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0KCkgLyAyLjAs
IGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICBuZWVkc0Rpc3BsYXkg
PSBkcmF3VGlsZShsYXllciwgc2NhbGUsIFRpbGVJbmRleCgwLCAwKSwgZHN0LCBwcm9ncmFtKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBzeCA9IHN0YXRpY19jYXN0PGZsb2F0Pihib3Vu
ZHMud2lkdGgoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKTsKKyAgICAgICAgZmxv
YXQgc3kgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLmhlaWdodCgpKSAvIG1fcmVxdWlyZWRU
ZXh0dXJlU2l6ZS5oZWlnaHQoKTsKIAotICAgIEludFJlY3QgdGlsZVJlY3Q7Ci0gICAgZm9yICh0
aWxlUmVjdC5zZXRYKDApOyB0aWxlUmVjdC54KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lk
dGgoKTsgdGlsZVJlY3Quc2V0WCh0aWxlUmVjdC54KCkgKyBtYXh3KSkgewotICAgICAgICBmb3Ig
KHRpbGVSZWN0LnNldFkoMCk7IHRpbGVSZWN0LnkoKSA8IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKTsgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55KCkgKyBtYXhoKSkgewotICAgICAgICAg
ICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUodGlsZVJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgp
OwotICAgICAgICAgICAgICAgIG1fdGlsZXMuYWRkKGluZGV4LCB0aWxlKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZmxvYXQgeCA9IGluZGV4LmkoKSAqIG1heHcgKiBzeDsKLSAgICAg
ICAgICAgIGZsb2F0IHkgPSBpbmRleC5qKCkgKiBtYXhoICogc3k7Ci0gICAgICAgICAgICBmbG9h
dCB3ID0gbWluKGJvdW5kcy53aWR0aCgpIC0geCwgbWF4dyAqIHN4KTsKLSAgICAgICAgICAgIGZs
b2F0IGggPSBtaW4oYm91bmRzLmhlaWdodCgpIC0geSwgbWF4aCAqIHN5KTsKLSAgICAgICAgICAg
IGZsb2F0IG94ID0geCAtIGJvdW5kcy53aWR0aCgpIC8gMi4wOwotICAgICAgICAgICAgZmxvYXQg
b3kgPSB5IC0gYm91bmRzLmhlaWdodCgpIC8gMi4wOwotCi0gICAgICAgICAgICAvLyBXZSBhcHBs
eSB0aGUgdHJhbnNmb3JtYXRpb24gYnkgaGFuZCwgc2luY2Ugd2UgbmVlZCB0aGUgeiBjb29yZGlu
YXRlCi0gICAgICAgICAgICAvLyBhcyB3ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBjb3JyZWN0IHRl
eHR1cmluZykgYW5kIHdlIGRvbid0IG5lZWQKLSAgICAgICAgICAgIC8vIHRvIGRpdmlkZSBieSB3
IGJ5IGhhbmQsIHRoZSBHUFUgd2lsbCBkbyB0aGF0IGZvciB1cwotICAgICAgICAgICAgdHJhbnNm
b3JtUG9pbnQob3gsIG95LCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMF0pOwotICAgICAgICAg
ICAgdHJhbnNmb3JtUG9pbnQob3gsIG95ICsgaCwgZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzRd
KTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVBvaW50KG94ICsgdywgb3kgKyBoLCBkcmF3VHJhbnNm
b3JtLCAmdmVydGljZXNbOF0pOwotICAgICAgICAgICAgdHJhbnNmb3JtUG9pbnQob3ggKyB3LCBv
eSwgZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzEyXSk7Ci0KLSAgICAgICAgICAgIC8vIEluZmxh
dGUgdGhlIHJlY3Qgc29tZXdoYXQgdG8gYXR0ZW1wdCB0byBtYWtlIHRleHR1cmVzIHJlbmRlciBi
ZWZvcmUgdGhleSBzaG93Ci0gICAgICAgICAgICAvLyB1cCBvbiBzY3JlZW4uCi0gICAgICAgICAg
ICBmbG9hdCBkID0gdmlld3BvcnRJbmZsYXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBGbG9hdFJl
Y3QgcmVjdCgtZCwgLWQsIDIgKiBkLCAyICogZCk7Ci0gICAgICAgICAgICBGbG9hdFF1YWQgcXVh
ZChGbG9hdFBvaW50KHZlcnRpY2VzWzBdIC8gdmVydGljZXNbM10sIHZlcnRpY2VzWzFdIC8gdmVy
dGljZXNbM10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNl
c1s0XSAvIHZlcnRpY2VzWzddLCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzddKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbOF0gLyB2ZXJ0aWNlc1sxMV0s
IHZlcnRpY2VzWzldIC8gdmVydGljZXNbMTFdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQodmVydGljZXNbMTJdIC8gdmVydGljZXNbMTVdLCB2ZXJ0aWNlc1sxM10gLyB2
ZXJ0aWNlc1sxNV0pKTsKLSAgICAgICAgICAgIGJvb2wgdmlzaWJsZSA9IHF1YWQuYm91bmRpbmdC
b3goKS5pbnRlcnNlY3RzKHJlY3QpOwotCi0gICAgICAgICAgICBib29sIHdhc1Zpc2libGUgPSB0
aWxlLT5pc1Zpc2libGUoKTsKLSAgICAgICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7
CisgICAgICAgIEludFJlY3Qgc3JjKEludFBvaW50Ojp6ZXJvKCksIHRpbGVTaXplKCkpOworICAg
ICAgICBmb3IgKHNyYy5zZXRYKDApOyBzcmMueCgpIDwgbV9yZXF1aXJlZFRleHR1cmVTaXplLndp
ZHRoKCk7IHNyYy5zZXRYKHNyYy54KCkgKyBzcmMud2lkdGgoKSkpIHsKKyAgICAgICAgICAgIGZv
ciAoc3JjLnNldFkoMCk7IHNyYy55KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7
IHNyYy5zZXRZKHNyYy55KCkgKyBzcmMuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgVGls
ZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUoc3JjLmxvY2F0aW9uKCkpOwogCi0gICAgICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdHdvIHBhc3Nlcy4gVGhlIGZpcnN0IHBhc3Mg
ZHJhd3MgYWxsCi0gICAgICAgICAgICAvLyB2aXNpYmxlIHRpbGVzIHdpdGggdGV4dHVyZXMuCi0g
ICAgICAgICAgICAvLyBJZiBhIHZpc2libGUgdGlsZSBoYXMgbm8gdGV4dHVyZSwgc2V0IHRoZSBt
X2hhc01pc3NpbmdUZXh0dXJlcwotICAgICAgICAgICAgLy8gZmxhZywgdG8gaW5kaWNhdGUgdGhh
dCB3ZSBuZWVkIGEgc2Vjb25kIHBhc3MuCi0gICAgICAgICAgICAvLyBUaGUgc2Vjb25kICJkcmF3
TWlzc2luZyIgcGFzcyBkcmF3cyBhbGwgdmlzaWJsZSB0aWxlcyB3aXRob3V0Ci0gICAgICAgICAg
ICAvLyB0ZXh0dXJlcyBhcyBjaGVja2VyYm9hcmQuCi0gICAgICAgICAgICAvLyBIb3dldmVyLCBk
b24ndCBkcmF3IGJyYW5kIG5ldyB0aWxlcyBhcyBjaGVja2VyYm9hcmQuIFRoZSBjaGVja2VyLQot
ICAgICAgICAgICAgLy8gYm9hcmQgaW5kaWNhdGVzIHRoYXQgYSB0aWxlIGhhcyBkaXJ0eSBjb250
ZW50cywgYnV0IHRoYXQncyBub3QKLSAgICAgICAgICAgIC8vIHRoZSBjYXNlIGlmIGl0J3MgYnJh
bmQgbmV3LgotICAgICAgICAgICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICBib29s
IGhhc1RleHR1cmUgPSB0aWxlLT5oYXNUZXh0dXJlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFo
YXNUZXh0dXJlKQotICAgICAgICAgICAgICAgICAgICBtX2hhc01pc3NpbmdUZXh0dXJlcyA9IHRy
dWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGFzVGV4dHVyZSAmJiAhZHJhd01pc3NpbmcpIHsK
LSAgICAgICAgICAgICAgICAgICAgVGV4dHVyZSogdGV4dHVyZSA9IHRpbGUtPnRleHR1cmUoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzT3BhcXVlKCkgJiYgbGF5ZXItPmRy
YXdPcGFjaXR5KCkgPT0gMS4wZiAmJiAhbGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxlbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsRGlzYWJs
ZShHTF9CTEVORCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWJsZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibGVu
ZGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5V
U19TUkNfQUxQSEEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZUFjY2Vzc2VkKHRleHR1
cmUpOwotICAgICAgICAgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZmxvYXQgeCA9IGluZGV4LmkoKSAqIHNyYy53aWR0aCgpICogc3g7CisgICAgICAgICAgICAgICAg
ZmxvYXQgeSA9IGluZGV4LmooKSAqIHNyYy5oZWlnaHQoKSAqIHN5OworICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCBkc3QoeCAtIGJvdW5kcy53aWR0aCgpIC8gMi4wLCB5IC0gYm91bmRzLmhlaWdo
dCgpIC8gMi4wLCBtaW4oYm91bmRzLndpZHRoKCkgLSB4LCBzcmMud2lkdGgoKSAqIHN4KSwgbWlu
KGJvdW5kcy5oZWlnaHQoKSAtIHksIHNyYy5oZWlnaHQoKSAqIHN5KSk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoaGFzVGV4dHVyZSAhPSBkcmF3TWlzc2luZykKLSAgICAgICAgICAgICAgICAgICAg
Z2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodGlsZS0+aXNEaXJ0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFJlbmRlckpvYihp
bmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNWaXNpYmxlKQotICAgICAgICAg
ICAgICAgIHJlbW92ZVJlbmRlckpvYihpbmRleCk7CisgICAgICAgICAgICAgICAgbmVlZHNEaXNw
bGF5IHw9IGRyYXdUaWxlKGxheWVyLCBzY2FsZSwgaW5kZXgsIGRzdCwgcHJvZ3JhbSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBSZXR1cm4gZWFybHkgZm9yIHRo
ZSBkcmF3TWlzc2luZyBjYXNlLCBkb24ndCBmbGFnIHVzIGFzIG5lZWRpbmcgY29tbWl0LgotICAg
IGlmIChkcmF3TWlzc2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dpdGNoIG9uIGJs
ZW5kaW5nIGFnYWluICh3ZSBrbm93IHRoYXQgZHJhd01pc3NpbmcgPT0gZmFsc2UpLgotICAgIGlm
ICghYmxlbmRpbmcpIHsKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgICAgICBnbEJs
ZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgIH0KLQogICAgIC8v
IElmIHdlIHNjaGVkdWxlIGEgY29tbWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBkYXRlZCwgYW5k
IGRpc3BsYXkgd2lsbAogICAgIC8vIGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZpc2libGUgYW5k
IGRpcnR5IHRleHR1cmVzLgogICAgIGlmIChuZWVkc0Rpc3BsYXkpCiAgICAgICAgIGxheWVyLT5z
ZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyVGlsZXI6OmFkZFJlbmRlckpvYihjb25z
dCBUaWxlSW5kZXgmIGluZGV4KQotewotICAgIEFTU0VSVChpc0NvbXBvc2l0aW5nVGhyZWFkKCkp
OwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVySm9ic011dGV4KTsKLSAgICBtX3Jl
bmRlckpvYnMuYWRkKGluZGV4KTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpyZW1vdmVSZW5kZXJK
b2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9y
ZW5kZXJKb2JzTXV0ZXgpOwotICAgIG1fcmVuZGVySm9icy5yZW1vdmUoaW5kZXgpOwotfQotCiB2
b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQog
ewogICAgIC8vIFNpbmNlIHRleHR1cmVzIGFyZSBkZWxldGVkIGJ5IGEgc3luY2hyb25vdXMgbWVz
c2FnZQpAQCAtNjUxLDE2ICs2MDUsMjAgQEAgdm9pZCBMYXllclRpbGVyOjpwcnVuZVRleHR1cmVz
KCkKICAgICAgICAgICAgIHRpbGVzVG9EZWxldGUuYXBwZW5kKGluZGV4KTsKICAgICB9CiAKLSAg
ICBmb3IgKFZlY3RvcjxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHRpbGVzVG9EZWxldGUuYmVn
aW4oKTsgaXQgIT0gdGlsZXNUb0RlbGV0ZS5lbmQoKTsgKytpdCkgewotICAgICAgICBMYXllclRp
bGUqIHRpbGUgPSBtX3RpbGVzLnRha2UoKml0KTsKLSAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRl
bnRzKCk7Ci0gICAgICAgIGRlbGV0ZSB0aWxlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdGlsZXNNdXRleCk7CisKKyAgICAgICAgZm9yIChWZWN0b3I8VGlsZUluZGV4Pjo6
aXRlcmF0b3IgaXQgPSB0aWxlc1RvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9EZWxldGUu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMudGFr
ZSgqaXQpOworICAgICAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAgICAg
ICBkZWxldGUgdGlsZTsKKyAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBMYXllclRpbGVyOjp1
cGRhdGVUaWxlU2l6ZSgpCiB7Ci0gICAgSW50U2l6ZSBzaXplID0gbV90aWxpbmdEaXNhYmxlZCA/
IG1fbGF5ZXItPmJvdW5kcygpIDogZGVmYXVsdFRpbGVTaXplKCk7CisgICAgSW50U2l6ZSBzaXpl
ID0gbV9sYXllci0+aXNNYXNrKCkgPyBtX2xheWVyLT5ib3VuZHMoKSA6IGRlZmF1bHRUaWxlU2l6
ZSgpOwogICAgIGNvbnN0IEludFNpemUgbWF4VGV4dHVyZVNpemUoMjA0OCwgMjA0OCk7CiAgICAg
c2l6ZSA9IHNpemUuc2hydW5rVG8obWF4VGV4dHVyZVNpemUpOwogCkBAIC02NzIsMTIgKzYzMCwx
MiBAQCB2b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRpbGVTaXplKCkKICAgICBtX3RpbGVTaXplID0g
c2l6ZTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpkaXNhYmxlVGlsaW5nKGJvb2wgZGlzYWJsZSkK
K3ZvaWQgTGF5ZXJUaWxlcjo6c2V0TmVlZHNCYWNraW5nKGJvb2wgbmVlZHNCYWNraW5nKQogewot
ICAgIGlmIChtX3RpbGluZ0Rpc2FibGVkID09IGRpc2FibGUpCisgICAgaWYgKG1fbmVlZHNCYWNr
aW5nID09IG5lZWRzQmFja2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aWxpbmdEaXNh
YmxlZCA9IGRpc2FibGU7CisgICAgbV9uZWVkc0JhY2tpbmcgPSBuZWVkc0JhY2tpbmc7CiAgICAg
dXBkYXRlVGlsZVNpemUoKTsKIH0KIApAQCAtNjg5LDEzICs2NDcsNiBAQCB2b2lkIExheWVyVGls
ZXI6OnNjaGVkdWxlQ29tbWl0KCkKICAgICAgICAgbV9sYXllci0+c2V0TmVlZHNDb21taXQoKTsK
IH0KIAotYm9vbCBMYXllclRpbGVyOjpzaG91bGRQcmVmaWxsVGlsZShjb25zdCBUaWxlSW5kZXgm
IGluZGV4KQotewotICAgIEludFJlY3QgcHJlZmlsbFRhcmdldFJlY3QgPSBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmxheWVyVGlsZXJQcmVmaWxsUmVjdCgpOwot
ICAgIEludFJlY3QgdGlsZVJlY3QgPSBJbnRSZWN0KG9yaWdpbk9mVGlsZShpbmRleCksIHRpbGVT
aXplKCkpOwotICAgIHJldHVybiBwcmVmaWxsVGFyZ2V0UmVjdC5pbnRlcnNlY3RzKHRpbGVSZWN0
KTsKLX0KLQogVGlsZUluZGV4IExheWVyVGlsZXI6OmluZGV4T2ZUaWxlKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBvcmlnaW4pCiB7CiAgICAgaW50IG9mZnNldFggPSBvcmlnaW4ueCgpOwpAQCAt
NzIwLDE5ICs2NzEsMTkgQEAgSW50UmVjdCBMYXllclRpbGVyOjpyZWN0Rm9yVGlsZShjb25zdCBU
aWxlSW5kZXgmIGluZGV4LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiAgICAgcmV0dXJuIEludFJl
Y3Qob3JpZ2luLCBzaXplKTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpiaW5kQ29udGVudHNUZXh0
dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQorVGV4dHVyZSogTGF5ZXJUaWxlcjo6Y29udGVu
dHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogewogICAgIEFTU0VSVChtX3RpbGVz
LnNpemUoKSA9PSAxKTsKICAgICBpZiAobV90aWxlcy5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIGNvbnN0IExheWVyVGlsZSogdGlsZSA9IG1f
dGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4dHVyZSgpKTsK
ICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGlsZS0+dGV4dHVy
ZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgcmV0dXJuIHRpbGUtPnRleHR1cmUoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaAppbmRleCAwNGU0MGVlNWYyMDU2N2Jj
ZmQ5OGUyYWFjYWJlY2U5NTY1YjUwYzMzLi5kZTI0ZjJkODQ0MDNkNDg5YTJmZDdkYjU0YjM1Njc2
ZmY1YzkxY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVGlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUg
IkxheWVyVGlsZS5oIgogI2luY2x1ZGUgIkxheWVyVGlsZUluZGV4LmgiCiAKLSNpbmNsdWRlIDxT
a0JpdG1hcC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyUHJvZ3JhbS5oPgog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTUyLDI5ICs1MiwyNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIH5MYXllclRpbGVyKCk7CiAKKyAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV90aWxlU2l6ZTsgfQorCiAgICAgLy8gV2ViS2l0IHRocmVhZAogICAgIExheWVyV2ViS2l0
VGhyZWFkKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICB2b2lkIGxheWVy
V2ViS2l0VGhyZWFkRGVzdHJveWVkKCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
RmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
dm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZChkb3VibGUgc2NhbGUpOwotICAgIHZv
aWQgZGlzYWJsZVRpbGluZyhib29sKTsKKyAgICB2b2lkIHNldE5lZWRzQmFja2luZyhib29sKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21taXQoKTsKIAogICAgIC8vIENvbXBvc2l0aW5n
IHRocmVhZAogICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVk
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmls
aXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2
aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFk
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCosIGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29y
ZExvY2F0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzTWlzc2luZ1RleHR1cmVzKGNvbnN0IExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBjb25zdCB7IHJldHVybiBtX2hhc01pc3NpbmdUZXh0dXJl
czsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWlzc2luZ1RleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29v
cmRMb2NhdGlvbik7CisgICAgdmlydHVhbCBUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4
dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZvaWQgY29tbWl0UGVuZGluZ1Rl
eHR1cmVVcGxvYWRzKCk7Ci0KLSAgICAvLyBUaHJlYWQgc2FmZQotICAgIHZvaWQgYWRkUmVuZGVy
Sm9iKGNvbnN0IFRpbGVJbmRleCYpOwotICAgIHZvaWQgcmVtb3ZlUmVuZGVySm9iKGNvbnN0IFRp
bGVJbmRleCYpOworICAgIHN0YXRpYyB2b2lkIHdpbGxDb21taXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsK
IAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4dHVyZUpvYiB7CkBAIC04MiwxMSArNzksMTMgQEAg
cHJpdmF0ZToKIAogICAgICAgICBUZXh0dXJlSm9iKCkKICAgICAgICAgICAgIDogbV90eXBlKFVu
a25vd24pCisgICAgICAgICAgICAsIG1fY29udGVudHMoMCkKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICAgICAgVGV4dHVyZUpvYihUeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIG5ld1NpemUp
CiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX2NvbnRlbnRzKDAp
CiAgICAgICAgICAgICAsIG1faXNPcGFxdWUoZmFsc2UpCiAgICAgICAgICAgICAsIG1fZGlydHlS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIG5ld1NpemUpCiAgICAgICAgIHsKQEAgLTk1LDI0ICs5NCwy
NiBAQCBwcml2YXRlOgogCiAgICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAgICAg
LCBtX2NvbnRlbnRzKDApCiAgICAgICAgICAgICAsIG1faXNPcGFxdWUoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1fZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250ZW50cyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgY29uc3QgU2tCaXRtYXAm
IGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNPcGFxdWUpCisgICAg
ICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBjb25zdCBUZXh0dXJlOjpIb3N0VHlwZSYgY29udGVu
dHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc09wYXF1ZSkKICAgICAgICAgICAg
IDogbV90eXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fY29udGVudHMoY29udGVudHMpCiAgICAg
ICAgICAgICAsIG1faXNPcGFxdWUoaXNPcGFxdWUpCiAgICAgICAgICAgICAsIG1fZGlydHlSZWN0
KGRpcnR5UmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVXBkYXRl
Q29udGVudHMgfHwgdHlwZSA9PSBTZXRDb250ZW50cyk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNv
bnRlbnRzLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjb250ZW50cyk7CiAgICAgICAg
IH0KIAogICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBUaWxlSW5kZXgmIGluZGV4KQogICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAg
ICAgICAgICwgbV9jb250ZW50cygwKQogICAgICAgICAgICAgLCBtX2lzT3BhcXVlKGZhbHNlKQog
ICAgICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQpAQCAtMTIwLDkgKzEyMSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gU2V0Q29udGVudHNUb0NvbG9yKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBUZXh0
dXJlSm9iIHNldENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgYm9vbCBpc09wYXF1
ZSkgeyByZXR1cm4gVGV4dHVyZUpvYihTZXRDb250ZW50cywgY29udGVudHMsIEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShjb250ZW50cy53aWR0aCgpLCBjb250ZW50cy5oZWlnaHQo
KSkpLCBpc09wYXF1ZSk7IH0KKyAgICAgICAgc3RhdGljIFRleHR1cmVKb2Igc2V0Q29udGVudHMo
Y29uc3QgVGV4dHVyZTo6SG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50
c1JlY3QsIGJvb2wgaXNPcGFxdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUZXh0
dXJlSm9iKFNldENvbnRlbnRzLCBjb250ZW50cywgY29udGVudHNSZWN0LCBpc09wYXF1ZSk7Cisg
ICAgICAgIH0KICAgICAgICAgc3RhdGljIFRleHR1cmVKb2Igc2V0Q29udGVudHNUb0NvbG9yKGNv
bnN0IENvbG9yJiBjb2xvciwgY29uc3QgVGlsZUluZGV4JiBpbmRleCkgeyByZXR1cm4gVGV4dHVy
ZUpvYihTZXRDb250ZW50c1RvQ29sb3IsIGNvbG9yLCBpbmRleCk7IH0KLSAgICAgICAgc3RhdGlj
IFRleHR1cmVKb2IgdXBkYXRlQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNPcGFxdWUpIHsgcmV0dXJuIFRleHR1cmVKb2Io
VXBkYXRlQ29udGVudHMsIGNvbnRlbnRzLCBkaXJ0eVJlY3QsIGlzT3BhcXVlKTsgfQorICAgICAg
ICBzdGF0aWMgVGV4dHVyZUpvYiB1cGRhdGVDb250ZW50cyhjb25zdCBUZXh0dXJlOjpIb3N0VHlw
ZSYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc09wYXF1ZSkgeyBy
ZXR1cm4gVGV4dHVyZUpvYihVcGRhdGVDb250ZW50cywgY29udGVudHMsIGRpcnR5UmVjdCwgaXNP
cGFxdWUpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIGRpc2NhcmRDb250ZW50cyhjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpIHsgcmV0dXJuIFRleHR1cmVKb2IoRGlzY2FyZENvbnRlbnRz
LCBkaXJ0eVJlY3QpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIHJlc2l6ZUNvbnRlbnRz
KGNvbnN0IEludFNpemUmIG5ld1NpemUpIHsgcmV0dXJuIFRleHR1cmVKb2IoUmVzaXplQ29udGVu
dHMsIG5ld1NpemUpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIGRpcnR5Q29udGVudHMo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKERpcnR5Q29udGVu
dHMsIGRpcnR5UmVjdCk7IH0KQEAgLTEzMCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGlzTnVsbCgpIHsgcmV0dXJuIG1fdHlwZSA9PSBVbmtub3duOyB9CiAKICAgICAgICAgVHlw
ZSBtX3R5cGU7Ci0gICAgICAgIFNrQml0bWFwIG1fY29udGVudHM7CisgICAgICAgIFRleHR1cmU6
Okhvc3RUeXBlIG1fY29udGVudHM7CiAgICAgICAgIGJvb2wgbV9pc09wYXF1ZTsKICAgICAgICAg
SW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTE0MCw3ICsx
NDQsNiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIExheWVyVGls
ZSo+IFRpbGVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgY29uc3QgVGV4dHVy
ZUpvYio+IFRpbGVKb2JzTWFwOwogCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGlsZVNpemU7IH0KICAgICB2b2lkIHVwZGF0ZVRpbGVTaXplKCk7CiAKICAgICBMYXll
clRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CkBAIC0xNDgsMTcgKzE1MSwxOSBAQCBwcml2YXRl
OgogICAgIC8vIFdlYktpdCB0aHJlYWQKICAgICB2b2lkIGFkZFRleHR1cmVKb2IoY29uc3QgVGV4
dHVyZUpvYiYpOwogICAgIHZvaWQgY2xlYXJUZXh0dXJlSm9icygpOwotICAgIGJvb2wgc2hvdWxk
UGVyZm9ybVJlbmRlckpvYihjb25zdCBUaWxlSW5kZXgmLCBib29sIGFsbG93UHJlZmlsbCk7Ci0g
ICAgYm9vbCBzaG91bGRQcmVmaWxsVGlsZShjb25zdCBUaWxlSW5kZXgmKTsKKyAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY3JlYXRlQnVmZmVyKGNvbnN0IEludFNp
emUmKTsKIAogICAgIC8vIENvbXBvc2l0aW5nIHRocmVhZAogICAgIHZvaWQgdXBkYXRlVGlsZUNv
bnRlbnRzKGNvbnN0IFRleHR1cmVKb2ImLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBhZGRU
aWxlSm9iKGNvbnN0IFRpbGVJbmRleCYsIGNvbnN0IFRleHR1cmVKb2ImLCBUaWxlSm9ic01hcCYp
OwogICAgIHZvaWQgcGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiwgY29uc3QgVGV4dHVyZUpvYiYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHByb2Nlc3NUZXh0dXJlSm9iKGNvbnN0IFRleHR1
cmVKb2ImLCBUaWxlSm9ic01hcCYpOwotICAgIHZvaWQgZHJhd1RleHR1cmVzSW50ZXJuYWwoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24s
IGludCB0ZXhDb29yZExvY2F0aW9uLCBib29sIG1pc3NpbmcpOwogICAgIHZvaWQgcHJ1bmVUZXh0
dXJlcygpOwogICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBuZWVkc0Rpc3BsYXkpOwor
ICAgIGJvb2wgZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwg
Y29uc3QgVGlsZUluZGV4JiwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJik7CisKKyAgICAvLyBUaHJlYWRzYWZl
CisgICAgaW50IG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50IGNv
bnN0IHZvbGF0aWxlICY+KG1fbmVlZHNSZW5kZXJDb3VudCk7IH0KIAogICAgIC8vIENsZWFyIGFs
bCBwZW5kaW5nIHVwZGF0ZSBjb250ZW50IHRleHR1cmUgam9icwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CkBAIC0xNjksMTUgKzE3NCwxOSBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKHR5cGVu
YW1lIFQ6Oml0ZXJhdG9yIGl0ID0gam9icy5iZWdpbigpOyBpdCAhPSBqb2JzLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgICAgICBpZiAoKCppdCkubV90eXBlICE9IFRleHR1cmVKb2I6OlVwZGF0ZUNv
bnRlbnRzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKCppdCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0
cm95QnVmZmVyKCgqaXQpLm1fY29udGVudHMpOwogICAgICAgICB9CiAgICAgICAgIGpvYnMgPSBs
aXN0OwogICAgIH0KIAogICAgIExheWVyV2ViS2l0VGhyZWFkKiBtX2xheWVyOwogCi0gICAgVGls
ZU1hcCBtX3RpbGVzOyAvLyBDb21wb3NpdGluZyB0aHJlYWQgb25seQorICAgIE11dGV4IG1fdGls
ZXNNdXRleDsKKyAgICBUaWxlTWFwIG1fdGlsZXM7IC8vIFByb3RlY3RlZCBieSBtX3RpbGVzTXV0
ZXgKKyAgICBpbnQgbV9uZWVkc1JlbmRlckNvdW50OyAvLyBhdG9taWMKIAotICAgIGJvb2wgbV90
aWxpbmdEaXNhYmxlZDsKKyAgICBib29sIG1fbmVlZHNCYWNraW5nOwogCiAgICAgYm9vbCBtX2Nv
bnRlbnRzRGlydHk7CiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwpAQCAtMTg5LDEwICsxOTgs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jbGVhclRleHR1cmVKb2JzOwogICAgIFZlY3RvcjxU
ZXh0dXJlSm9iPiBtX3BlbmRpbmdUZXh0dXJlSm9iczsgLy8gQWRkZWQsIGJ1dCBub3QgY29tbWl0
dGVkIHlldC4KICAgICBEZXF1ZTxUZXh0dXJlSm9iPiBtX3RleHR1cmVKb2JzOwotICAgIGJvb2wg
bV9oYXNNaXNzaW5nVGV4dHVyZXM7CiAKLSAgICBIYXNoU2V0PFRpbGVJbmRleD4gbV9yZW5kZXJK
b2JzOwotICAgIE11dGV4IG1fcmVuZGVySm9ic011dGV4OwogICAgIGRvdWJsZSBtX2NvbnRlbnRz
U2NhbGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmluZGV4IDQyOGIw
MGE2N2MzYjEyMjU4MWE4NGYyN2IwYTExNmUwNjM4NTllMWIuLmZlYWI4MjU3YzJmNDVmMGZjMWQ3
MTg4YjAyYzcxMjIzOGYyZjg3YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3Bw
CkBAIC0zNiwxMCArMzYsOCBAQAogI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnN0cnVtZW50ZWRQbGF0Zm9y
bUNhbnZhcy5oIgogI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKICNpbmNsdWRl
ICJMYXllck1lc3NhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKIApAQCAtNjAsNyArNTgsNiBAQCBMYXllcldlYktpdFRocmVhZDo6TGF5ZXJXZWJLaXRU
aHJlYWQoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBvdwogICAgICwg
bV9vd25lcihvd25lcikKICAgICAsIG1fc3VwZXJsYXllcigwKQogICAgICwgbV9jb250ZW50cygw
KQotICAgICwgbV9zY2FsZSgxLjApCiAgICAgLCBtX2lzRHJhd2FibGUoZmFsc2UpCiAgICAgLCBt
X2lzTWFzayhmYWxzZSkKICAgICAsIG1fYW5pbWF0aW9uc0NoYW5nZWQoZmFsc2UpCkBAIC02OCw2
ICs2NSw3IEBAIExheWVyV2ViS2l0VGhyZWFkOjpMYXllcldlYktpdFRocmVhZChMYXllclR5cGUg
dHlwZSwgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG93CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogICAgICwgbV9maWx0ZXJzQ2hhbmdlZChmYWxzZSkKICNlbmRpZgorICAgICwgbV9kaWRTdGFy
dEFuaW1hdGlvbnMoZmFsc2UpCiB7CiAgICAgaWYgKHR5cGUgPT0gTGF5ZXIpCiAgICAgICAgIG1f
dGlsZXIgPSBMYXllclRpbGVyOjpjcmVhdGUodGhpcyk7CkBAIC04NCw3NiArODIsNDYgQEAgTGF5
ZXJXZWJLaXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCgpCiAgICAgQVNTRVJUKCFzdXBlcmxh
eWVyKCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxheWVyIHJlZmVyZW5jZSBmcm9tIGFs
bCBzdWJsYXllcnMuCi0gICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgcmVtb3ZlQWxsKG1f
c3VibGF5ZXJzKTsKKyAgICByZW1vdmVBbGwobV9vdmVybGF5cyk7CiB9CiAKLVNrQml0bWFwIExh
eWVyV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVj
dCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29sb3IsIENvbG9yKiBjb2xvcikKK3ZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OnBhaW50Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0LCBkb3Vi
bGUgc2NhbGUpCiB7Ci0gICAgLy8gRG9uJ3QgdHJ5IHRvIGFsbG9jYXRlIGltYWdlIGRhdGEgYmln
Z2VyIHRoYW4gdGhpcy4gVGhpcyBzaG91bGQgYmUgYmlnCi0gICAgLy8gZW5vdWdoIHRvIGFjY29t
b2RhdGUgYSBodWdlIGlTY3JvbGwgdXNlIGNhc2UuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBo
YWNrIHRvIHdvcmsgYXJvdW5kIGEgY3Jhc2ggYnVnIG9uIG1hcHMuYmluZy5jb20gd2hlcmUKLSAg
ICAvLyBhICh2aXN1YWxseSBlbXB0eSkgbGF5ZXIgYmVjb21lcyB0b28gYmlnLgotICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4aW11bUJpdG1hcFNpemVJbkJ5dGVzID0gNDAgKiAxMDI0ICogMTAyNDsK
LSAgICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyUGl4ZWwgPSA0OwotCi0gICAgaWYgKGlzU29s
aWRDb2xvcikKLSAgICAgICAgKmlzU29saWRDb2xvciA9IGZhbHNlOwotCi0gICAgaWYgKGNvbnRl
bnRzUmVjdC53aWR0aCgpICogY29udGVudHNSZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQaXhlbCA+
IG1heGltdW1CaXRtYXBTaXplSW5CeXRlcykKLSAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7Ci0K
LSAgICBTa0JpdG1hcCBiaXRtYXA7Ci0KLSAgICAvLyBLZWVwIHRoZSBjYW52YXMgYWxpdmUgdW50
aWwgd2UncmUgZG9uZSBleHRyYWN0aW5nIGl0cyBwaXhlbHMKLSAgICBPd25QdHI8SW5zdHJ1bWVu
dGVkUGxhdGZvcm1DYW52YXM+IGNhbnZhczsKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpICYmICFj
b250ZW50cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZHJhd3NDb250ZW50KCkpIHsg
Ly8gTGF5ZXIgY29udGVudHMgbXVzdCBiZSBkcmF3biBpbnRvIGEgY2FudmFzLgotICAgICAgICBJ
bnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBtYXBGcm9tVHJhbnNmb3JtZWQoY29u
dGVudHNSZWN0LCBzY2FsZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBTa0JpdG1hcCBjYW52YXNCaXRtYXA7Ci0gICAgICAgIGNhbnZhc0JpdG1hcC5zZXRD
b25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBjb250ZW50c1JlY3Qud2lkdGgoKSwg
Y29udGVudHNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFjYW52YXNCaXRtYXAuYWxsb2NQ
aXhlbHMoKSkKLSAgICAgICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwotICAgICAgICBjYW52YXNC
aXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOwotICAgICAgICBjYW52YXNCaXRtYXAuZXJhc2VDb2xv
cigwKTsKKyAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBjb250ZW50c1Jl
Y3Q7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY29udGVudHNSZWN0OworICAgIGlmIChzY2Fs
ZSAhPSAxLjApIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgICAg
ICBtYXRyaXguc2NhbGUoMS4wIC8gc2NhbGUpOworICAgICAgICB1bnRyYW5zZm9ybWVkQ29udGVu
dHNSZWN0ID0gbWF0cml4Lm1hcFJlY3QoY29udGVudHNSZWN0KTsKKyAgICAgICAgY2xpcFJlY3Qg
PSBtYXRyaXgubWFwUmVjdChjbGlwUmVjdCk7CiAKLSAgICAgICAgY2FudmFzID0gYWRvcHRQdHIo
bmV3IEluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzKGNhbnZhc0JpdG1hcCkpOwotICAgICAgICBQ
bGF0Zm9ybUNvbnRleHRTa2lhIHNraWFDb250ZXh0KGNhbnZhcy5nZXQoKSk7CisgICAgICAgIC8v
IFdlIGV4dHJhY3QgZnJvbSB0aGUgY29udGVudHNSZWN0IGJ1dCBkcmF3IGEgc2xpZ2h0bHkgbGFy
Z2VyIHJlZ2lvbiB0aGFuCisgICAgICAgIC8vIHdlIHdlcmUgdG9sZCB0bywgaW4gb3JkZXIgdG8g
YXZvaWQgcGl4ZWxzIGJlaW5nIHJlbmRlcmVkIG9ubHkgcGFydGlhbGx5LgorICAgICAgICBjb25z
dCBpbnQgYXRMZWFzdE9uZURldmljZVBpeGVsID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZigxLjAg
LyBzY2FsZSkpOworICAgICAgICB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0LmluZmxhdGUoYXRM
ZWFzdE9uZURldmljZVBpeGVsKTsKKyAgICB9CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dCgmc2tpYUNvbnRleHQpOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQgPSBsb2NrQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKKyAgICBHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CisgICAgaWYgKGNv
bnRlbnRzKCkpIHsKKyAgICAgICAgLy8gSW1hZ2VzIG5lZWRzIHRvIGJlIGNlbnRlcmVkIGFuZCB3
aWxsIGJlIHNjYWxlZCB0byBmaXQgdGhlIGJvdW5kcyBvbiB0aGUgY29tcG9zaXRpbmcgdGhyZWFk
CisgICAgICAgIGlmICghY29udGVudHMoKS0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoY29udGVudHMoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgSW50UG9pbnQoMCwgMCkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC50cmFuc2xhdGUoLWNvbnRlbnRzUmVjdC54KCksIC1jb250ZW50c1JlY3QueSgpKTsKLQotICAg
ICAgICBpZiAoc2NhbGUgIT0gMS4wKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZShzY2FsZSwgc2NhbGUpKTsKLQotICAgICAgICAvLyBSZW5kZXJMYXllckJhY2tp
bmcgZG9lc24ndCBhbHdheXMgY2xpcCwgc28gd2UgbmVlZCB0byBkbyB0aGlzIGJ5IG91cnNlbHZl
cy4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAodW50cmFuc2Zvcm1lZENvbnRlbnRzUmVj
dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZShGbG9hdFNpemUoc2NhbGUsIHNjYWxl
KSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKICAgICAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCB1bnRyYW5z
Zm9ybWVkQ29udGVudHNSZWN0KTsKLQotICAgICAgICBiaXRtYXAgPSBjYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpZiAoaXNTb2xpZENvbG9yKSB7Ci0g
ICAgICAgICAgICAqaXNTb2xpZENvbG9yID0gY2FudmFzLT5pc1NvbGlkQ29sb3IoKTsKLSAgICAg
ICAgICAgIGlmIChjb2xvcikKLSAgICAgICAgICAgICAgICAqY29sb3IgPSBjYW52YXMtPnNvbGlk
Q29sb3IoKTsKLSAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVCghYml0bWFwLmlzTnVsbCgp
KTsKLQotICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25m
aWd1cmF0aW9ucz8KLSAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZyk7Ci0gICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwotCi0gICAgcmV0dXJu
IGJpdG1hcDsKLX0KLQotYm9vbCBMYXllcldlYktpdFRocmVhZDo6Y29udGVudHNWaXNpYmxlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3duZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX293bmVyLT5jb250ZW50c1Zpc2li
bGUoY29udGVudHNSZWN0KTsKKyAgICByZWxlYXNlQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsKIH0K
IAogdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQo
KQpAQCAtMTY0LDggKzEzMiw3IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1
cmVDb250ZW50c0lmTmVlZGVkKCkKIAogdm9pZCBMYXllcldlYktpdFRocmVhZDo6Y29tbWl0UGVu
ZGluZ1RleHR1cmVVcGxvYWRzKCkKIHsKLSAgICBpZiAobV90aWxlcikKLSAgICAgICAgbV90aWxl
ci0+Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7CisgICAgbGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCgpLT5jb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoKTsKIH0KIAogdm9pZCBMYXllcldl
YktpdFRocmVhZDo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQpAQCAtMTg0LDYgKzE1MSw5
IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykK
ICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgZWxzZQogICAgICAgICBzZXROZWVkc0Nv
bW1pdCgpOworCisgICAgLy8gSWYgdGhpcyBsYXllciBjb250YWlucyBhIGJpdG1hcCBpbWFnZSBp
dCBpc24ndCByZXJlbmRlcmVkIGF0IGRpZmZlcmVudCBzY2FsZSAoaXQgaXMgcmVzb2x1dGlvbiBp
bmRlcGVuZGVudCkKKyAgICBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50ID0gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9jb250ZW50cyk7CiB9CiAKIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNl
dERyYXdhYmxlKGJvb2wgaXNEcmF3YWJsZSkKQEAgLTE5OSw1MCArMTY5LDYxIEBAIHZvaWQgTGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldERyYXdhYmxlKGJvb2wgaXNEcmF3YWJsZSkKIAogdm9pZCBMYXll
cldlYktpdFRocmVhZDo6c2V0TmVlZHNDb21taXQoKQogewotICAgIC8vIENhbGwgbm90aWZ5Rmx1
c2hSZXF1aXJlZCgpLCB3aGljaCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHBsdW1icyB0aHJvdWdo
IHRvCisgICAgLy8gQ2FsbCBub3RpZnlTeW5jUmVxdWlyZWQoKSwgd2hpY2ggaW4gdGhpcyBpbXBs
ZW1lbnRhdGlvbiBwbHVtYnMgdGhyb3VnaCB0bwogICAgIC8vIGNhbGwgc2NoZWR1bGVSb290TGF5
ZXJDb21taXQoKSBvbiB0aGUgV2ViVmlldywgd2hpY2ggd2lsbCBjYXVzZSB1cyB0byBjb21taXQK
ICAgICAvLyBjaGFuZ2VzIGRvbmUgb24gdGhlIFdlYktpdCB0aHJlYWQgZm9yIGRpc3BsYXkgb24g
dGhlIENvbXBvc2l0aW5nIHRocmVhZC4KICAgICBpZiAobV9vd25lcikKLSAgICAgICAgbV9vd25l
ci0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOworICAgICAgICBtX293bmVyLT5ub3RpZnlTeW5jUmVx
dWlyZWQoKTsKIH0KIAotdm9pZCBMYXllcldlYktpdFRocmVhZDo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChkb3VibGUgdGltZSkKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Om5vdGlmeUFuaW1hdGlv
bnNTdGFydGVkKGRvdWJsZSB0aW1lKQogewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293
bmVyLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRpbWUpOworICAgIGlmIChtX2RpZFN0YXJ0QW5p
bWF0aW9ucykgeworICAgICAgICBtX2RpZFN0YXJ0QW5pbWF0aW9ucyA9IGZhbHNlOworICAgICAg
ICBpZiAobV9vd25lcikKKyAgICAgICAgICAgIG1fb3duZXItPm5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQodGltZSk7CisgICAgfQorCisgICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKKyAgICAgICAg
bV9zdWJsYXllcnNbaV0tPm5vdGlmeUFuaW1hdGlvbnNTdGFydGVkKHRpbWUpOworCisgICAgbGlz
dFNpemUgPSBtX292ZXJsYXlzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpCisgICAgICAgIG1fb3ZlcmxheXNbaV0tPm5vdGlmeUFuaW1hdGlvbnNTdGFy
dGVkKHRpbWUpOwogfQogCiB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpjb21taXRPbldlYktpdFRo
cmVhZChkb3VibGUgc2NhbGUpCiB7CiAgICAgLy8gVXBkYXRpbmcgdGV4dHVyZSBjb250ZW50cyBy
ZXF1aXJlIHRoZSBsYXRlc3QgdmlzaWJpbGl0eSBpbmZvLgogICAgIHVwZGF0ZVRleHR1cmVDb250
ZW50cyhzY2FsZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYWxsIGFuaW1hdGlvbnMgYXJlIHN0YXJ0
ZWQgYXQgdGhlIHNhbWUgdGltZQotICAgIC8vIHRvIGF2b2lkIHNob3dpbmcgYW5pbWF0aW9ucyBv
dXQtb2Ytc3luYy4KLSAgICAvLyBEbyB0aGlzIGFmdGVyIHVwZGF0aW5nIHRleHR1cmUgY29udGVu
dHMsIGJlY2F1c2UgdGhhdCBjYW4gYmUgYSBzbG93Ci0gICAgLy8gb3BlcmF0aW9uLgotICAgIHN0
YXJ0QW5pbWF0aW9ucyhjdXJyZW50VGltZSgpKTsKIH0KIAotdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6c3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQorYm9vbCBMYXllcldlYktpdFRocmVhZDo6
c3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogeworICAgIGJvb2wgZGlkU3RhcnRBbmltYXRp
b25zID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3J1bm5pbmdBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS0+
c3RhcnRUaW1lKCkpIHsKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uc0NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKHRpbWUpOwot
ICAgICAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKKyAgICAgICAgICAgIG1f
ZGlkU3RhcnRBbmltYXRpb25zID0gZGlkU3RhcnRBbmltYXRpb25zID0gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCi0gICAgICAgIG1fc3VibGF5
ZXJzW2ldLT5zdGFydEFuaW1hdGlvbnModGltZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0U2l6ZTsgKytpKQorICAgICAgICBkaWRTdGFydEFuaW1hdGlvbnMgfD0gbV9zdWJsYXll
cnNbaV0tPnN0YXJ0QW5pbWF0aW9ucyh0aW1lKTsKKworICAgIGxpc3RTaXplID0gbV9vdmVybGF5
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQorICAg
ICAgICBkaWRTdGFydEFuaW1hdGlvbnMgfD0gbV9vdmVybGF5c1tpXS0+c3RhcnRBbmltYXRpb25z
KHRpbWUpOworCisgICAgcmV0dXJuIGRpZFN0YXJ0QW5pbWF0aW9uczsKIH0KIAogdm9pZCBMYXll
cldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKGRvdWJsZSBzY2FsZSkKIHsKLSAg
ICBpZiAobV9zY2FsZSAhPSBzY2FsZSkgewotICAgICAgICBtX3NjYWxlID0gc2NhbGU7CisgICAg
aWYgKG1fY29udGVudHNTY2FsZSAhPSBzY2FsZSkgeworICAgICAgICBtX2NvbnRlbnRzU2NhbGUg
PSBzY2FsZTsKIAogICAgICAgICAvLyBPbmx5IHdlYiBjb250ZW50IGNhbiByZWRyYXcgYXQgdGhl
IG5ldyBzY2FsZS4KICAgICAgICAgLy8gQ2FudmFzLCBpbWFnZXMsIHZpZGVvIGV0YyBjYW4ndC4K
QEAgLTI2NSw5ICsyNDYsMTMgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKGRvdWJsZSBzY2FsZSkKICAgICB9CiAKICAgICBzaXplX3QgbGlzdFNpemUgPSBt
X3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsg
aSsrKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKICAgICAgICAg
bV9zdWJsYXllcnNbaV0tPnVwZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7CiAKKyAgICBsaXN0
U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlz
dFNpemU7ICsraSkKKyAgICAgICAgbV9vdmVybGF5c1tpXS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRz
KHNjYWxlKTsKKwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnVw
ZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7CiAKQEAgLTI5OCwxMiArMjgzLDE3IEBAIHZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKQogICAgIH0KICAg
ICBtX3Bvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgdXBkYXRlTGF5ZXJIaWVyYXJjaHkoKTsK
KwogICAgIGNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpOwogCiAgICAgc2l6ZV90IGxpc3RT
aXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlz
dFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpCiAg
ICAgICAgIG1fc3VibGF5ZXJzW2ldLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7CiAKKyAg
ICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7ICsraSkKKyAgICAgICAgbV9vdmVybGF5c1tpXS0+Y29tbWl0T25Db21wb3Np
dGluZ1RocmVhZCgpOworCiAgICAgaWYgKG1hc2tMYXllcigpKSB7CiAgICAgICAgIG1hc2tMYXll
cigpLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7CiAgICAgICAgIGxheWVyQ29tcG9zaXRp
bmdUaHJlYWQoKS0+c2V0TWFza0xheWVyKG1hc2tMYXllcigpLT5sYXllckNvbXBvc2l0aW5nVGhy
ZWFkKCkpOwpAQCAtMzE5LDE1ICszMDksMjAgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6Y29t
bWl0T25Db21wb3NpdGluZ1RocmVhZCgpCiAKIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OmFkZFN1
YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyKQogewotICAgIGlu
c2VydFN1YmxheWVyKHN1YmxheWVyLCBudW1TdWJsYXllcnMoKSk7CisgICAgaW5zZXJ0KG1fc3Vi
bGF5ZXJzLCBzdWJsYXllciwgbV9zdWJsYXllcnMuc2l6ZSgpKTsKK30KKwordm9pZCBMYXllcldl
YktpdFRocmVhZDo6YWRkT3ZlcmxheShQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBvdmVy
bGF5KQoreworICAgIGluc2VydChtX292ZXJsYXlzLCBvdmVybGF5LCBtX292ZXJsYXlzLnNpemUo
KSk7CiB9CiAKLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Omluc2VydFN1YmxheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgpCit2b2lkIExheWVy
V2ViS2l0VGhyZWFkOjppbnNlcnQoVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYg
bGlzdCwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gc3VibGF5ZXIsIHNpemVfdCBpbmRl
eCkKIHsKICAgICBzdWJsYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICBpbmRleCA9
IG1pbihpbmRleCwgbV9zdWJsYXllcnMuc2l6ZSgpKTsKKyAgICBpbmRleCA9IG1pbihpbmRleCwg
bGlzdC5zaXplKCkpOwogICAgIHN1YmxheWVyLT5zZXRTdXBlcmxheWVyKHRoaXMpOwotICAgIG1f
c3VibGF5ZXJzLmluc2VydChpbmRleCwgc3VibGF5ZXIpOworICAgIGxpc3QuaW5zZXJ0KGluZGV4
LCBzdWJsYXllcik7CiAKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpAQCAtMzM1LDE3ICszMzAs
MjMgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxM
YXllcldlYktpdFRocmVhZD4gc3VibGF5ZXIsIHMKIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJl
bW92ZUZyb21TdXBlcmxheWVyKCkKIHsKICAgICBpZiAobV9zdXBlcmxheWVyKQotICAgICAgICBt
X3N1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyKHRoaXMpOworICAgICAgICBtX3N1cGVybGF5ZXIt
PnJlbW92ZVN1YmxheWVyT3JPdmVybGF5KHRoaXMpOwogfQogCi12b2lkIExheWVyV2ViS2l0VGhy
ZWFkOjpyZW1vdmVTdWJsYXllcihMYXllcldlYktpdFRocmVhZCogc3VibGF5ZXIpCit2b2lkIExh
eWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVTdWJsYXllck9yT3ZlcmxheShMYXllcldlYktpdFRocmVh
ZCogc3VibGF5ZXIpCiB7Ci0gICAgaW50IGZvdW5kSW5kZXggPSBpbmRleE9mU3VibGF5ZXIoc3Vi
bGF5ZXIpOwotICAgIGlmIChmb3VuZEluZGV4ID09IC0xKQorICAgIHJlbW92ZShtX3N1YmxheWVy
cywgc3VibGF5ZXIpOworICAgIHJlbW92ZShtX292ZXJsYXlzLCBzdWJsYXllcik7Cit9CisKK3Zv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZShWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhy
ZWFkPiA+JiB2ZWN0b3IsIExheWVyV2ViS2l0VGhyZWFkKiBzdWJsYXllcikKK3sKKyAgICBpbnQg
Zm91bmRJbmRleCA9IHZlY3Rvci5maW5kKHN1YmxheWVyKTsKKyAgICBpZiAoZm91bmRJbmRleCA9
PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3VibGF5ZXItPnNldFN1cGVybGF5
ZXIoMCk7Ci0gICAgbV9zdWJsYXllcnMucmVtb3ZlKGZvdW5kSW5kZXgpOworICAgIHZlY3Rvci5y
ZW1vdmUoZm91bmRJbmRleCk7CiAKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpAQCAtMzU4LDgg
KzM1OSw4IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlcGxhY2VTdWJsYXllcihMYXllcldl
YktpdFRocmVhZCogcmVmZXJlbmNlLCBQYXNzUmVmUHRyCiAgICAgaWYgKHJlZmVyZW5jZSA9PSBu
ZXdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHJlZmVyZW5jZUluZGV4ID0gaW5k
ZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7Ci0gICAgaWYgKHJlZmVyZW5jZUluZGV4ID09IC0xKSB7
CisgICAgaW50IHJlZmVyZW5jZUluZGV4ID0gbV9zdWJsYXllcnMuZmluZChyZWZlcmVuY2UpOwor
ICAgIGlmIChyZWZlcmVuY2VJbmRleCA9PSBub3RGb3VuZCkgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MiwxNSArMzczLDYgQEAg
dm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVyKExheWVyV2ViS2l0VGhyZWFk
KiByZWZlcmVuY2UsIFBhc3NSZWZQdHIKICAgICB9CiB9CiAKLWludCBMYXllcldlYktpdFRocmVh
ZDo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiByZWZlcmVuY2UpCi17
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N1YmxheWVycy5zaXplKCk7IGkrKykgewot
ICAgICAgICBpZiAobV9zdWJsYXllcnNbaV0gPT0gcmVmZXJlbmNlKQotICAgICAgICAgICAgcmV0
dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQogdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1fYm91bmRzID09
IHNpemUpCkBAIC00MjEsNyArNDEzLDYgQEAgYm9vbCBMYXllcldlYktpdFRocmVhZDo6ZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgogI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT006CiAjZW5kaWYKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ0NSwxMyArNDM2LDE3IEBAIGNvbnN0
IExheWVyV2ViS2l0VGhyZWFkKiBMYXllcldlYktpdFRocmVhZDo6cm9vdExheWVyKCkgY29uc3QK
ICAgICByZXR1cm4gbGF5ZXI7CiB9CiAKLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZUFs
bFN1YmxheWVycygpCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVBbGwoVmVjdG9yPFJl
ZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYgdmVjdG9yKQogewotICAgIHdoaWxlIChtX3N1Ymxh
eWVycy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBsYXllciA9
IG1fc3VibGF5ZXJzWzBdLmdldCgpOwotICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIo
KSk7CisgICAgaWYgKCF2ZWN0b3Iuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGls
ZSAodmVjdG9yLnNpemUoKSkgeworICAgICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IGxh
eWVyID0gdmVjdG9yWzBdLmdldCgpOworICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIo
KSA9PSB0aGlzKTsKICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAg
fQorCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAtNDYyLDcgKzQ1Nyw3IEBAIHZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
V2ViS2l0VGhyZWFkPiA+JiBzCiAKICAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsKICAgICBzaXpl
X3QgbGlzdFNpemUgPSBzdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyAr
K2kpCiAgICAgICAgIGFkZFN1YmxheWVyKHN1YmxheWVyc1tpXSk7CiB9CiAKQEAgLTQ4NSw4ICs0
ODAsMTEgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVyYXJjaHkoKQog
ICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U3VwZXJsYXllcihzdXBlcmxheWVyKCkg
PyBzdXBlcmxheWVyKCktPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSA6IDApOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+IHN1YmxheWVyczsKLSAg
ICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fb3Zlcmxh
eXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKKyAg
ICAgICAgc3VibGF5ZXJzLmFwcGVuZChtX292ZXJsYXlzW2ldLT5tX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWQuZ2V0KCkpOworICAgIGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKICAgICAgICAgc3VibGF5ZXJzLmFw
cGVuZChtX3N1YmxheWVyc1tpXS0+bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpKTsKICAg
ICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFN1YmxheWVycyhzdWJsYXllcnMpOwogfQpA
QCAtNDk1LDcgKzQ5Myw3IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldElzTWFzayhib29s
IGlzTWFzaykKIHsKICAgICBtX2lzTWFzayA9IGlzTWFzazsKICAgICBpZiAoaXNNYXNrICYmIG1f
dGlsZXIpCi0gICAgICAgIG1fdGlsZXItPmRpc2FibGVUaWxpbmcodHJ1ZSk7CisgICAgICAgIG1f
dGlsZXItPnNldE5lZWRzQmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBMYXllcldlYktpdFRocmVh
ZDo6c2V0UnVubmluZ0FuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckFuaW1hdGlv
bj4gPiYgYW5pbWF0aW9ucykKQEAgLTUxNyw5ICs1MTUsMTMgQEAgdm9pZCBMYXllcldlYktpdFRo
cmVhZDo6cmVsZWFzZUxheWVyUmVzb3VyY2VzKCkKICAgICBkZWxldGVUZXh0dXJlcygpOwogCiAg
ICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpCiAgICAgICAgIG1fc3VibGF5ZXJzW2ldLT5yZWxlYXNlTGF5ZXJSZXNvdXJj
ZXMoKTsKIAorICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQorICAgICAgICBtX292ZXJsYXlzW2ldLT5yZWxl
YXNlTGF5ZXJSZXNvdXJjZXMoKTsKKwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFz
a0xheWVyKCktPnJlbGVhc2VMYXllclJlc291cmNlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0
VGhyZWFkLmgKaW5kZXggYjgzNGQ4OGMxODc1OTUxZmY3NDRjNTYxNzFhMmU1YjVhNGU3ZGQ5MC4u
M2ZjNWNlNTA3NjBkZmNhOTFhODRkYTE3OTlmOWYwYWViNzYzNGE2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldlYktpdFRocmVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJXZWJLaXRUaHJlYWQuaApAQCAtNDUsOCArNDUsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1jbGFzcyBTa0JpdG1hcDsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwpAQCAtNTgs
MTAgKzU2LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5MYXllcldlYktpdFRocmVhZCgpOwog
CiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPik7Ci0g
ICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiwgc2l6
ZV90IGluZGV4KTsKKyAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJL
aXRUaHJlYWQ+IGxheWVyLCBzaXplX3QgaW5kZXgpIHsgaW5zZXJ0KG1fc3VibGF5ZXJzLCBsYXll
ciwgaW5kZXgpOyB9CiAgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQq
IHJlZmVyZW5jZSwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbmV3TGF5ZXIpOwogICAg
IHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKIAorICAgIHZvaWQgYWRkT3ZlcmxheShQYXNz
UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPik7CisKICAgICB2b2lkIHNldEFuY2hvclBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2lu
dDsgc2V0TmVlZHNDb21taXQoKTsgfQogCiAgICAgdm9pZCBzZXRBbmNob3JQb2ludFooZmxvYXQg
YW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CkBAIC04NCw2ICs4NCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TWFza0xh
eWVyKExheWVyV2ViS2l0VGhyZWFkKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5
ZXI7IH0KICAgICBMYXllcldlYktpdFRocmVhZCogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKworICAgIGJvb2wgaXNNYXNrKCkgY29uc3QgeyByZXR1cm4g
bV9pc01hc2s7IH0KICAgICB2b2lkIHNldElzTWFzayhib29sKTsKIAogICAgIHZvaWQgc2V0UmVw
bGljYUxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikgeyBtX3JlcGxpY2FMYXllciA9IGxh
eWVyOyB9CkBAIC0xMDksNyArMTExLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgTGF5ZXJXZWJL
aXRUaHJlYWQqIHJvb3RMYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVBbGxTdWJsYXll
cnMoKTsKKyAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpIHsgcmVtb3ZlQWxsKG1fc3VibGF5
ZXJzKTsgfQogCiAgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
cldlYktpdFRocmVhZD4gPiYpOwogCkBAIC0xMjMsMTAgKzEyNSw0NCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpIHsgbV9wcmVzZXJ2ZXMzRCA9
IHByZXNlcnZlczNEOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKLSAgICB2b2lkIHNldEZpeGVkUG9z
aXRpb24oYm9vbCBmaXhlZCkgeyBtX2lzRml4ZWRQb3NpdGlvbiA9IGZpeGVkOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CisgICAgdm9pZCBzZXRGaXhlZFBvc2l0aW9uKGJvb2wgZml4ZWQpCisgICAgewor
ICAgICAgICBpZiAobV9pc0ZpeGVkUG9zaXRpb24gPT0gZml4ZWQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1faXNGaXhlZFBvc2l0aW9uID0gZml4ZWQ7CisgICAgICAgIHNldE5lZWRz
Q29tbWl0KCk7CisgICAgfQorCiAgICAgdm9pZCBzZXRIYXNGaXhlZENvbnRhaW5lcihib29sIGZp
eGVkKSB7IG1faGFzRml4ZWRDb250YWluZXIgPSBmaXhlZDsgc2V0TmVlZHNDb21taXQoKTsgfQog
ICAgIHZvaWQgc2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShib29sIGZpeGVkKSB7IG1faGFz
Rml4ZWRBbmNlc3RvckluRE9NVHJlZSA9IGZpeGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKKyAg
ICB2b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhib29sIGZpeGVkKQor
ICAgIHsKKyAgICAgICAgaWYgKG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzID09
IGZpeGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2lzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyA9IGZpeGVkOworICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAg
IH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb1RvcChib29sIGZpeGVkVG9Ub3ApCisgICAgeworICAg
ICAgICBpZiAobV9pc0ZpeGVkVG9Ub3AgPT0gZml4ZWRUb1RvcCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9pc0ZpeGVkVG9Ub3AgPSBmaXhlZFRvVG9wOworICAgICAgICBzZXROZWVk
c0NvbW1pdCgpOworICAgIH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0xlZnQoYm9vbCBmaXhlZFRv
TGVmdCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzRml4ZWRUb0xlZnQgPT0gZml4ZWRUb0xlZnQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faXNGaXhlZFRvTGVmdCA9IGZpeGVkVG9M
ZWZ0OworICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAgIH0KKworICAgIHZvaWQgc2V0RnJh
bWVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZnJhbWVWaXNpYmxlUmVjdCA9
IHJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lkIHNldEZyYW1lQ29udGVudHNTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9mcmFtZUNvbnRlbnRzU2l6ZSA9IHNpemU7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KKwogICAgIHZvaWQgc2V0Q29udGVudHMoSW1hZ2UqKTsKICAgICBJbWFn
ZSogY29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzLmdldCgpOyB9CiAKQEAgLTEz
NywyMCArMTczLDI0IEBAIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCk7IH0KICAgICB2b2lkIHNl
dERyYXdhYmxlKGJvb2wpOwogCisgICAgLy8gMS4gQ29tbWl0IG9uIFdlYktpdCB0aHJlYWQKICAg
ICB2b2lkIGNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSk7CisKKyAgICAvLyAyLiBD
b21taXQgb24gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9pZCBjb21taXRPbkNvbXBvc2l0aW5n
VGhyZWFkKCk7CisgICAgYm9vbCBzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworCisgICAg
Ly8gMy4gTm90aWZ5IHdoZW4gcmV0dXJuaW5nIHRvIFdlYktpdCB0aHJlYWQKKyAgICB2b2lkIG5v
dGlmeUFuaW1hdGlvbnNTdGFydGVkKGRvdWJsZSB0aW1lKTsKKwogICAgIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQuZ2V0KCk7IH0KIAogICAgIC8vIE9ubHkgdXNlZCB3aGVuIHRoaXMg
bGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIgb2YgYSBmcmFtZS4KICAgICB2b2lkIHNldEFic29sdXRl
T2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KSB7IG1fYWJzb2x1dGVPZmZzZXQgPSBvZmZz
ZXQ7IH0KIAotICAgIGRvdWJsZSBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2Fs
ZTsgfQotCi0gICAgU2tCaXRtYXAgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiB0cmFuc2Zv
cm1lZENvbnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29sb3IgPSAwLCBD
b2xvciogPSAwKTsKLSAgICBib29sIGNvbnRlbnRzVmlzaWJsZShjb25zdCBJbnRSZWN0JiBjb250
ZW50c1JlY3QpIGNvbnN0OworICAgIHZvaWQgcGFpbnRDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIGNvbnN0IEludFJlY3QmIHRyYW5zZm9ybWVkQ29udGVu
dHNSZWN0LCBkb3VibGUgc2NhbGUpOwogCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwotICAg
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSk7CiAKICAgICB2b2lkIHNl
dFJ1bm5pbmdBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4m
KTsKICAgICB2b2lkIHNldFN1c3BlbmRlZEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllckFuaW1hdGlvbj4gPiYpOwpAQCAtMTY2LDEwICsyMDYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
TGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3du
ZXIpOwogCiAgICAgdm9pZCBzZXROZWVkc1RleHR1cmUoYm9vbCBuZWVkc1RleHR1cmUpIHsgbV9u
ZWVkc1RleHR1cmUgPSBuZWVkc1RleHR1cmU7IH0KLSAgICB2b2lkIHNldExheWVyUHJvZ3JhbVNo
YWRlcihMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlciBzaGFkZXIpIHsgbV9sYXllclByb2dy
YW1TaGFkZXIgPSBzaGFkZXI7IH0KKyAgICB2b2lkIHNldExheWVyUHJvZ3JhbShMYXllckRhdGE6
OkxheWVyUHJvZ3JhbSBsYXllclByb2dyYW0pIHsgbV9sYXllclByb2dyYW0gPSBsYXllclByb2dy
YW07IH0KICAgICBib29sIGlzRHJhd2FibGUoKSBjb25zdCB7IHJldHVybiBtX2lzRHJhd2FibGU7
IH0KIAotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKICAgICB2b2lkIHVw
ZGF0ZVZpc2liaWxpdHkoKTsKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyhkb3VibGUg
c2NhbGUpOwogCkBAIC0xODMsMTYgKzIyMiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
dXBlcmxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBzdXBlcmxheWVyKSB7IG1fc3VwZXJsYXllciA9
IHN1cGVybGF5ZXI7IH0KIAotICAgIHNpemVfdCBudW1TdWJsYXllcnMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiB0aGUgc3VibGF5ZXIgb3IgLTEgaWYgbm90IGZvdW5kLgotICAgIGlu
dCBpbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqKTsKLQogICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5ZXIuCi0gICAg
dm9pZCByZW1vdmVTdWJsYXllcihMYXllcldlYktpdFRocmVhZCopOworICAgIHZvaWQgcmVtb3Zl
U3VibGF5ZXJPck92ZXJsYXkoTGF5ZXJXZWJLaXRUaHJlYWQqKTsKKyAgICB2b2lkIHJlbW92ZShW
ZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiwgTGF5ZXJXZWJLaXRUaHJlYWQqKTsK
KyAgICB2b2lkIHJlbW92ZUFsbChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+Jik7
CisgICAgdm9pZCBpbnNlcnQoVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYsIFBh
c3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+LCBzaXplX3QgaW5kZXgpOwogCiAgICAgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnkqIG1fb3duZXI7CiAKQEAgLTIwMCw2ICsyMzQsNyBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmltYXRp
b25zOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiBtX3N1YmxheWVy
czsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+IG1fb3ZlcmxheXM7CiAg
ICAgTGF5ZXJXZWJLaXRUaHJlYWQqIG1fc3VwZXJsYXllcjsKICAgICBSZWZQdHI8TGF5ZXJXZWJL
aXRUaHJlYWQ+IG1fbWFza0xheWVyOwogICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbV9y
ZXBsaWNhTGF5ZXI7CkBAIC0yMDksNyArMjQ0LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGF5
ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkOwogICAgIFJlZlB0
cjxMYXllclRpbGVyPiBtX3RpbGVyOwogICAgIEZsb2F0U2l6ZSBtX2Fic29sdXRlT2Zmc2V0Owot
ICAgIGRvdWJsZSBtX3NjYWxlOyAvLyBTY2FsZSBhcHBsaWVzIG9ubHkgdG8gY29udGVudCBsYXll
cnMKICAgICB1bnNpZ25lZCBtX2lzRHJhd2FibGUgOiAxOwogICAgIHVuc2lnbmVkIG1faXNNYXNr
IDogMTsKICAgICB1bnNpZ25lZCBtX2FuaW1hdGlvbnNDaGFuZ2VkIDogMTsKQEAgLTIxNyw2ICsy
NTEsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB1bnNpZ25lZCBt
X2ZpbHRlcnNDaGFuZ2VkIDogMTsKICNlbmRpZgorICAgIHVuc2lnbmVkIG1fZGlkU3RhcnRBbmlt
YXRpb25zIDogMTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJp
dmF0ZUJsYWNrQmVycnkuY3BwCmluZGV4IDdlZjNlMWM5YTVlZjE0NjM2ZjNhNDI3ODgzODkyNzFk
MTMzNjA2MTEuLmVlNjJlY2VmMWY1NWJiOWM5OTZjMGQ3ZTY0Zjc2YmFjOGU5NGI0NTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQ
bGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNwcApAQCAt
MjEsMzkgKzIxLDI1IEBACiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
TWFuYWdlci5oIgogI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1SZWdp
c3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5oIgotI2luY2x1ZGUgIlJl
bmRlckJveC5oIgotI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlQ2xp
ZW50LmgiCiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1EZXZpY2VJbmZvLmg+CiAjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybVNldHRpbmdzLmg+CiAjaW5jbHVkZSA8RnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5Lmg+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAj
ZW5kaWYKIAorI2luY2x1ZGUgPFRpbGVkSW1hZ2UuaD4KKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IHVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsKIApAQCAtMTE1LDcgKzEwMSw2
IEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9idWZmZXJp
bmdUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKQog
ICAgICwgbV9zaG93QnVmZmVyaW5nSW1hZ2UoZmFsc2UpCi0gICAgLCBtX21lZGlhSXNCdWZmZXJp
bmcoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fdXNlckRyaXZlblNlZWtUaW1lcih0aGlzLCAmTWVk
aWFQbGF5ZXJQcml2YXRlOjp1c2VyRHJpdmVuU2Vla1RpbWVyRmlyZWQpCiAgICAgLCBtX2xhc3RT
ZWVrVGltZSgwKQpAQCAtMjAyLDggKzE4Nyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpw
bGF5KCkKIHsKICAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikgewogICAgICAgICBtX3BsYXRmb3Jt
UGxheWVyLT5wbGF5KCk7Ci0gICAgICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5pc01ldGFkYXRh
UmVhZHkoKSkKLSAgICAgICAgICAgIGNvbmRpdGlvbmFsbHlHb0Z1bGxzY3JlZW5BZnRlclBsYXko
KTsKICAgICB9CiB9CiAKQEAgLTIxNSw3ICsxOTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cGF1c2UoKQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGFzVmlkZW8oKTsKIH0K
IAogSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKQEAgLTQw
NywxMyArMzkwLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvCiAgICAgaWYgKCFoYXNWaWRl
bygpIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhbV93ZWJDb3JlUGxheWVyLT52
aXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChncmFw
aGljcyk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpEcmF3YWJsZSogZHN0
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdCBwbGF0Zm9ybVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgY2xpcHBlZFJlY3QgPSBtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyV2luZG93Q2xpcFJlY3QoKTsKICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVdpbmRvd0NsaXBSZWN0KGNs
aXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QueSgpLCBjbGlwcGVkUmVjdC53aWR0aCgpLCBjbGlw
cGVkUmVjdC5oZWlnaHQoKSk7Ci0gICAgbV9wbGF0Zm9ybVBsYXllci0+cGFpbnQoZ3JhcGhpY3Mt
PmNhbnZhcygpLCBwbGF0Zm9ybVJlY3QsIHBsYXRmb3JtV2luZG93Q2xpcFJlY3QpOworICAgIG1f
cGxhdGZvcm1QbGF5ZXItPnBhaW50KGRzdCwgcGxhdGZvcm1SZWN0LCBwbGF0Zm9ybVdpbmRvd0Ns
aXBSZWN0KTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoKSBjb25zdApAQCAtNDM1LDYgKzQxNywxMiBAQCBNZWRpYVBsYXllcjo6TW92aWVMb2Fk
VHlwZSBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFR5cGUoKSBjb25zdAogICAgIHJldHVy
biBNZWRpYVBsYXllcjo6VW5rbm93bjsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBy
ZXBhcmVGb3JSZW5kZXJpbmcoKQoreworICAgIGlmIChtX3BsYXRmb3JtUGxheWVyKQorICAgICAg
ICBtX3BsYXRmb3JtUGxheWVyLT5wcmVwYXJlRm9yUmVuZGVyaW5nKCk7Cit9CisKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKCkKIHsKICAgICBpZiAoIW1f
d2ViQ29yZVBsYXllcikKQEAgLTQ0MywyMiArNDMxLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKCkKICAgICBpZiAoIW1fd2ViQ29yZVBsYXllci0+
bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc1ZpZGVvKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIElmIHdlIGhhdmUgYW4gSFRNTFZpZGVvRWxlbWVudCBidXQgdGhlIHNvdXJj
ZSBoYXMgbm8gdmlkZW8sIHRoZW4gd2UgbmVlZCB0byByZXNpemUgdGhlIG1lZGlhIGVsZW1lbnQu
Ci0gICAgaWYgKCFoYXNWaWRlbygpICYmIFBsYXRmb3JtUGxheWVyOjpNZWRpYU9LID09IG1fcGxh
dGZvcm1QbGF5ZXItPmVycm9yKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV93ZWJD
b3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckNvbnRlbnRCb3hSZWN0
KCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwbGF5Ym9va01pbkF1ZGlvRWxlbWVudFdp
ZHRoID0gMzAwOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBsYXlib29rTWluQXVkaW9FbGVt
ZW50SGVpZ2h0ID0gMzI7Ci0gICAgICAgIC8vIElmIHRoZSByZWN0IGRpbWVuc2lvbnMgYXJlIGxl
c3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtLCB1c2UgdGhlIG1pbmltdW0gaW5zdGVhZC4KLSAg
ICAgICAgaW50IG5ld1dpZHRoID0gbWF4KHJlY3Qud2lkdGgoKS50b0ludCgpLCBwbGF5Ym9va01p
bkF1ZGlvRWxlbWVudFdpZHRoKTsKLSAgICAgICAgaW50IG5ld0hlaWdodCA9IG1heChyZWN0Lmhl
aWdodCgpLnRvSW50KCksIHBsYXlib29rTWluQXVkaW9FbGVtZW50SGVpZ2h0KTsKLQotICAgICAg
ICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyU2V0U2l6
ZShJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpKTsKLSAgICB9Ci0KICAgICAvLyBJZiB3ZSBk
b24ndCBrbm93IHdoYXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZpZGVvIHNvdXJjZSBp
cywgdGhlbiB3ZSBuZWVkIHRvIHNldCBpdCB0byBzb21ldGhpbmcgc2FuZS4KICAgICBpZiAobV9w
bGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKSAmJiBtX3BsYXRmb3JtUGxheWVyLT5zb3VyY2VI
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV93ZWJD
b3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckNvbnRlbnRCb3hSZWN0
KCk7CiAgICAgbV9wbGF0Zm9ybVBsYXllci0+c2V0U291cmNlRGltZW5zaW9uKHJlY3Qud2lkdGgo
KS50b1Vuc2lnbmVkKCksIHJlY3QuaGVpZ2h0KCkudG9VbnNpZ25lZCgpKTsKIH0KQEAgLTUwOSw4
ICs0ODUsOSBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OnBlcmNlbnRMb2FkZWQoKQogICAg
IGZsb2F0IGJ1ZmZlcmVkID0gMDsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IHRoaXMtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5n
ZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5z
dGFydChpLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgZmxvYXQgZW5kID0gdGltZVJhbmdl
cy0+ZW5kKGksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWRFeGNlcHRpb247CisgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaSwg
aWdub3JlZEV4Y2VwdGlvbik7CisgICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChp
LCBpZ25vcmVkRXhjZXB0aW9uKTsKICAgICAgICAgYnVmZmVyZWQgKz0gZW5kIC0gc3RhcnQ7CiAg
ICAgfQogCkBAIC01NjcsMjYgKzU0NCwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBk
YXRlU3RhdGVzKCkKIAogICAgICAgICBzd2l0Y2ggKG1fcGxhdGZvcm1QbGF5ZXItPnN0YXRlKCkp
IHsKICAgICAgICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TVBfU1RBVEVfSURMRToKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICBzZXRCdWZmZXJpbmcoZmFsc2Up
OwotICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAv
LyBSZW1vdmUgbWVkaWEgcGxheWVyIGZyb20gcGxhdGZvcm0gbGF5ZXIgKHJlbW92ZSBob2xlIHB1
bmNoIHJlY3QpLgotICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikgewotICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3BsYXRmb3JtTGF5
ZXIuZ2V0KCkpLT5zZXRNZWRpYVBsYXllcigwKTsKLSAgICAgICAgICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgaWYgKGlz
RnVsbHNjcmVlbigpKQogICAgICAgICAgICAgICAgIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5
ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJFeGl0RnVsbHNjcmVlbigpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1QX1NUQVRFX0FDVElWRToKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICBtX3Nob3dCdWZmZXJpbmdJ
bWFnZSA9IGZhbHNlOwotICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICAvLyBDcmVhdGUgcGxhdGZvcm0gbGF5ZXIgZm9yIHZpZGVvIChjcmVhdGUgaG9s
ZSBwdW5jaCByZWN0KS4KLSAgICAgICAgICAgIGlmICghbV9wbGF0Zm9ybUxheWVyICYmIHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKLSAgICAgICAgICAgICAgICBtX3BsYXRmb3JtTGF5
ZXIgPSBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUobV93ZWJDb3JlUGxheWVyKTsKLSNl
bmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1Q
X1NUQVRFX1VOU1VQUE9SVEVEOgogICAgICAgICAgICAgYnJlYWs7CkBAIC02OTksNyArNjYwLDYg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uV2FpdE1ldGFkYXRhTm90aWZpZWQoYm9vbCBo
YXNGaW5pc2hlZCwgaW50IHRpbWVXYWl0ZWQKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp3YWl0
TWV0YWRhdGFUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQogewogICAgIGlm
IChtX3BsYXRmb3JtUGxheWVyLT5pc01ldGFkYXRhUmVhZHkoKSkgewotICAgICAgICBjb25kaXRp
b25hbGx5R29GdWxsc2NyZWVuQWZ0ZXJQbGF5KCk7CiAgICAgICAgIG1fd2FpdE1ldGFkYXRhUG9w
RGlhbG9nQ291bnRlciA9IDA7CiAgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBsYXlXaXRoTWV0
YWRhdGFSZWFkeSgpOwogICAgICAgICByZXR1cm47CkBAIC03MjEsNyArNjgxLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlPiopCiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5p
c01ldGFkYXRhUmVhZHkoKSkgewogICAgICAgICAgICAgbV9wbGF0Zm9ybVBsYXllci0+cGxheVdp
dGhNZXRhZGF0YVJlYWR5KCk7Ci0gICAgICAgICAgICBjb25kaXRpb25hbGx5R29GdWxsc2NyZWVu
QWZ0ZXJQbGF5KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV93YWl0TWV0YWRhdGFU
aW1lci5zdGFydE9uZVNob3QoY2hlY2tNZXRhZGF0YVJlYWR5SW50ZXJ2YWwpOwogICAgIH0KQEAg
LTc1OCwxMiArNzE3LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQXV0aGVudGljYXRp
b25OZWVkZWQoTU1SQXV0aENoYWxsZW5nZSYgYXV0aENoYWxsZW5nZSkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghZnJhbWVWaWV3KCkgfHwgIWZyYW1lVmlldygpLT5ob3N0V2lu
ZG93KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1faXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
aW5nID0gdHJ1ZTsKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3RhbmNl
KCktPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVybCwgcHJvdGVjdGlvblNwYWNlLCBjcmVkZW50
aWFsLAotICAgICAgICB0aGlzLCBmcmFtZVZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKSk7CisgICAgICAgIHRoaXMsIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJD
bGllbnQoKS0+bWVkaWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUNoYWxsZW5nZVJlc3VsdChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVJlc3VsdCByZXN1bHQsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRl
bnRpYWwpCkBAIC03NzMsOCArNzI5LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5vdGlm
eUNoYWxsZW5nZVJlc3VsdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFByb3RlY3Rpb24KICAgICBp
ZiAocmVzdWx0ICE9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU3VjY2VzcyB8fCAhdXJsLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wbGF0Zm9ybVBsYXllci0+cmVsb2FkV2l0
aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCkudXRmOChTdHJpbmc6OlN0cmljdENvbnZlcnNp
b24pLmRhdGEoKSwKLSAgICAgICAgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoU3RyaW5nOjpT
dHJpY3RDb252ZXJzaW9uKS5kYXRhKCksCisgICAgbV9wbGF0Zm9ybVBsYXllci0+cmVsb2FkV2l0
aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCkudXRmOCh0cnVlKS5kYXRhKCksCisgICAgICAg
IGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KHRydWUpLmRhdGEoKSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8TU1SQXV0aENoYWxsZW5nZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihjcmVkZW50aWFs
LnBlcnNpc3RlbmNlKCkpKTsKIH0KIApAQCAtODU5LDYgKzgxNSwxMSBAQCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdp
bmRvdygpCiAgICAgcmV0dXJuIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+
bWVkaWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdp
bmRvdygpOwogfQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVy
Q2xpZW50KCktPm1lZGlhUGxheWVySXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKK30KKwogYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7CkBAIC04ODMsNyArODQ0LDcgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogc3RhdGljIGNvbnN0IGRvdWJsZSBCdWZm
ZXJpbmdBbmltYXRpb25EZWxheSA9IDEuMCAvIDI0Owotc3RhdGljIGNoYXIqIHNfYnVmZmVyaW5n
SW1hZ2VEYXRhID0gMDsKK3N0YXRpYyB1bnNpZ25lZCogc19idWZmZXJpbmdJbWFnZURhdGEgPSAw
Owogc3RhdGljIGludCBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggPSAwOwogc3RhdGljIGludCBzX2J1
ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gMDsKIApAQCAtOTA3LDIzICs4NjgsMTkgQEAgc3RhdGljIHZv
aWQgbG9hZEJ1ZmZlcmluZ0ltYWdlRGF0YSgpCiAgICAgc3RhdGljIGJvb2wgbG9hZGVkID0gZmFs
c2U7CiAgICAgaWYgKCFsb2FkZWQpIHsKICAgICAgICAgc3RhdGljIEltYWdlKiBidWZmZXJpbmdJ
Y29uID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ2aWRidWZmZXIiKS5sZWFrUmVmKCk7
Ci0gICAgICAgIE5hdGl2ZUltYWdlU2tpYSogbmF0aXZlSW1hZ2UgPSBidWZmZXJpbmdJY29uLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQot
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghbmF0aXZlSW1hZ2UtPmlzRGF0YUNv
bXBsZXRlKCkpCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gYnVmZmVyaW5n
SWNvbi0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYgKCFuYXRpdmVJ
bWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBsb2FkZWQgPSB0cnVlOwotICAg
ICAgICBuYXRpdmVJbWFnZS0+Yml0bWFwKCkubG9ja1BpeGVscygpOworICAgICAgICBzX2J1ZmZl
cmluZ0ltYWdlV2lkdGggPSBidWZmZXJpbmdJY29uLT53aWR0aCgpOworICAgICAgICBzX2J1ZmZl
cmluZ0ltYWdlSGVpZ2h0ID0gYnVmZmVyaW5nSWNvbi0+aGVpZ2h0KCk7CisgICAgICAgIGludCBi
dWZTaXplID0gYnVmZmVyaW5nSWNvbi0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgc19idWZmZXJp
bmdJbWFnZURhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KG1hbGxvYyhidWZTaXplKSk7CiAK
LSAgICAgICAgaW50IGJ1ZlNpemUgPSBuYXRpdmVJbWFnZS0+Yml0bWFwKCkud2lkdGgoKSAqIG5h
dGl2ZUltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSAqIDQ7Ci0gICAgICAgIHNfYnVmZmVyaW5nSW1h
Z2VXaWR0aCA9IG5hdGl2ZUltYWdlLT5iaXRtYXAoKS53aWR0aCgpOwotICAgICAgICBzX2J1ZmZl
cmluZ0ltYWdlSGVpZ2h0ID0gbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpOwotICAgICAg
ICBzX2J1ZmZlcmluZ0ltYWdlRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MoYnVmU2l6
ZSkpOwotICAgICAgICBtZW1jcHkoc19idWZmZXJpbmdJbWFnZURhdGEsIG5hdGl2ZUltYWdlLT5i
aXRtYXAoKS5nZXRQaXhlbHMoKSwgYnVmU2l6ZSk7CisgICAgICAgIG5hdGl2ZUltYWdlLT5yZWFk
UGl4ZWxzKHNfYnVmZmVyaW5nSW1hZ2VEYXRhLCBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggKiBzX2J1
ZmZlcmluZ0ltYWdlSGVpZ2h0KTsKIAotICAgICAgICBuYXRpdmVJbWFnZS0+Yml0bWFwKCkudW5s
b2NrUGl4ZWxzKCk7CiAgICAgICAgIGJ1ZmZlcmluZ0ljb24tPmRlcmVmKCk7CiAgICAgfQogfQpA
QCAtOTM5LDggKzg5Niw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2V0QnVmZmVyaW5nKGJvb2wgYnVmZmVyaW5nKQogewotICAgIGlmICghaGFzVmlkZW8o
KSkKKyAgICBpZiAoIW1fd2ViQ29yZVBsYXllciB8fCAhbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBs
YXllckNsaWVudCgpIHx8ICFtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVySXNWaWRlbygpKQogICAgICAgICBidWZmZXJpbmcgPSBmYWxzZTsgLy8gQnVmZmVy
aW5nIGFuaW1hdGlvbiBub3QgdmlzaWJsZSBmb3IgYXVkaW8uCisKICAgICBpZiAoYnVmZmVyaW5n
ICE9IG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7CiAgICAgICAgIG1fc2hvd0J1ZmZlcmluZ0ltYWdl
ID0gYnVmZmVyaW5nOwogICAgICAgICBpZiAoYnVmZmVyaW5nKSB7CkBAIC05NjgsNyArOTI2LDcg
QEAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlVGV4dHVyZUlkKCkKICAgICByZXR1cm4gdGV4aWQ7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkcmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBp
bnQgdGV4Q29vcmRMb2NhdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkcmF3QnVmZmVy
aW5nQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEdy
YXBoaWNzOjpHTEVTMlByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgaWYgKG1fc2hvd0J1ZmZlcmlu
Z0ltYWdlICYmIHNfYnVmZmVyaW5nSW1hZ2VEYXRhICYmICFpc0Z1bGxzY3JlZW4oKSkgewogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7CkBAIC05OTcs
MzYgKzk1NSw2OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHJhd0J1ZmZlcmluZ0FuaW1h
dGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cgogICAgICAgICB2ZXJ0aWNlc1sy
XSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KGJ4LCBieSkpOwogICAgICAgICB2
ZXJ0aWNlc1szXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KGJ4LCAtYnkpKTsK
IAotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCB2ZXJ0aWNlcyk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcih0ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jk
cyk7CisgICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3Jh
bS5vcGFjaXR5TG9jYXRpb24oKSwgMS4wKTsKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHZl
cnRpY2VzKTsKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udGV4Q29vcmRM
b2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CiAgICAgICAg
IGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgIH0KIH0KICNlbmRpZgog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y29uZGl0aW9uYWxseUdvRnVsbHNjcmVlbkFmdGVy
UGxheSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25Db25kaXRpb25hbGx5RW50ZXJGdWxs
c2NyZWVuKCkKIHsKKyAgICBEb2N1bWVudCogb3duaW5nRG9jdW1lbnQgPSBtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyT3duaW5nRG9jdW1lbnQoKTsKICAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RGV2aWNlSW5mbyogaW5mbyA9IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpEZXZpY2VJbmZvOjppbnN0YW5jZSgpOwotICAgIGlmIChoYXNWaWRlbygpICYmIG1f
d2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc0Z1bGxzY3Jl
ZW5QZXJtaXR0ZWQoKSAmJiBpbmZvLT5pc01vYmlsZSgpKSB7CisKKyAgICAvLyBEb24ndCBhbGxv
dyB2aWRlbyBpbiA8ZW1iZWQ+IGFuZCA8b2JqZWN0PiBjb250YWluZXJzIHRvIGdvIGZ1bGxzY3Jl
ZW4KKyAgICAvLyBvbiBwbGF5IGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBjdXJyZW50bHkgd29yay4g
RGV0ZWN0IHRoaXMgYnkgY2hlY2tpbmcKKyAgICAvLyBmb3IgTWVkaWFEb2N1bWVudCB3aXRoIGEg
cGFyZW50IGRvY3VtZW50LgorICAgIGlmIChvd25pbmdEb2N1bWVudC0+aXNNZWRpYURvY3VtZW50
KCkgJiYgb3duaW5nRG9jdW1lbnQtPnBhcmVudERvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChpbmZvLT5pc01vYmlsZSgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBtb2Jp
bGUgZGV2aWNlIChzbWFsbCBzY3JlZW4pLCBub3QgYSB0YWJsZXQsIHNvIHdlCiAgICAgICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gdmlkZW8gb24gdXNlci1pbml0aWF0ZWQgcGxheXMuCiAgICAgICAg
IGJvb2wgbm90aGluZ0lzRnVsbHNjcmVlbiA9ICFtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVy
Q2xpZW50KCktPm1lZGlhUGxheWVySXNGdWxsc2NyZWVuKCk7CiAjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgICAgICBpZiAobV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgp
LT5tZWRpYVBsYXllck93bmluZ0RvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQorICAg
ICAgICBpZiAob3duaW5nRG9jdW1lbnQtPndlYmtpdElzRnVsbFNjcmVlbigpKQogICAgICAgICAg
ICAgbm90aGluZ0lzRnVsbHNjcmVlbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmIChub3Ro
aW5nSXNGdWxsc2NyZWVuICYmIGN1cnJlbnRUaW1lKCkgPT0gMC4wZikgewotICAgICAgICAgICAg
Ly8gT25seSBlbnRlciBmdWxsc2NyZWVuIHdoZW4gcGxheWluZyBmcm9tIHRoZSBiZWdpbm5pbmcu
IERvaW5nCi0gICAgICAgICAgICAvLyBzbyBvbiBldmVyeSBwbGF5IGlzIHN1cmUgdG8gYW5ub3kg
dGhlIHVzZXIgd2hvIGRvZXMgbm90IHdhbnQKLSAgICAgICAgICAgIC8vIHRvIHdhdGNoIHRoZSB2
aWRlbyBmdWxsc2NyZWVuLiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBjYWxsCi0gICAgICAgICAg
ICAvLyB3aWxsIGZhaWwgaWYgd2UgYXJlIG5vdCBoZXJlIGR1ZSB0byBhIHVzZXIgZ2VzdHVyZSwg
YXMgcGVyIHRoZQotICAgICAgICAgICAgLy8gY2hlY2sgaW4gRG9jdW1lbnQ6OnJlcXVlc3RGdWxs
U2NyZWVuRm9yRWxlbWVudCgpIHRvIHByZXZlbnQKLSAgICAgICAgICAgIC8vIHBvcHVwcy4KKyAg
ICAgICAgaWYgKG5vdGhpbmdJc0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRW50ZXJGdWxsc2NyZWVuKCk7Ci0g
ICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkV4aXRGdWxs
c2NyZWVuKCkKK3sKKyAgICBpZiAobV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgp
LT5tZWRpYVBsYXllcklzRnVsbHNjcmVlbigpKQorICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQ3JlYXRlSG9sZVB1bmNoUmVjdCgpCit7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIENyZWF0ZSBwbGF0Zm9ybSBsYXllciBm
b3IgdmlkZW8gKGNyZWF0ZSBob2xlIHB1bmNoIHJlY3QpLgorICAgIGlmICghbV9wbGF0Zm9ybUxh
eWVyICYmIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkgeworICAgICAgICBtX3Nob3dC
dWZmZXJpbmdJbWFnZSA9IGZhbHNlOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBWaWRlb0xh
eWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUobV93ZWJDb3JlUGxheWVyKTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uRGVzdHJveUhvbGVQdW5jaFJlY3QoKQor
eworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBzZXRCdWZmZXJpbmcoZmFs
c2UpOworICAgIC8vIFJlbW92ZSBtZWRpYSBwbGF5ZXIgZnJvbSBwbGF0Zm9ybSBsYXllciAocmVt
b3ZlIGhvbGUgcHVuY2ggcmVjdCkuCisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikgeworICAgICAg
ICBzdGF0aWNfY2FzdDxWaWRlb0xheWVyV2ViS2l0VGhyZWFkKj4obV9wbGF0Zm9ybUxheWVyLmdl
dCgpKS0+c2V0TWVkaWFQbGF5ZXIoMCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci5jbGVhcigp
OworICAgIH0KKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxh
Y2tCZXJyeS5oCmluZGV4IGJhNGM2YTNhZDBlNWRkMTA2MTk4NzRiZThkYWI4YjY1ZTk4YTZlYjgu
LmIzNDY1YmIxMTExOTM4ZDk5ODVjMzY3MDNhOTAyMTg5MjEyYWI0MzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2
YXRlQmxhY2tCZXJyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCkBAIC0yNiw4ICsyNiwxMyBA
QAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVBsYXllci5oPgogCiBuYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7CisKIG5hbWVzcGFjZSBQbGF0Zm9ybSB7CiBjbGFzcyBJbnRSZWN0OworCituYW1l
c3BhY2UgR3JhcGhpY3MgeworY2xhc3MgR0xFUzJQcm9ncmFtOworfQogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTU1LDcgKzYwLDcgQEAgcHVibGljOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0Owot
ICAgIHZvaWQgZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgdm9p
ZCBkcmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKICNlbmRp
ZgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXkoKTsKQEAgLTExMiw2ICsxMTcsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUo
KSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisKICAg
ICB2b2lkIHJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKTsKICAgICB2b2lkIHNldEZ1bGxzY3JlZW5X
ZWJQYWdlQ2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNsaWVudCopOwogICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBnZXRXaW5kb3coKTsKQEAgLTE0
Miw5ICsxNDksMTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIG9uQXV0aGVu
dGljYXRpb25OZWVkZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUkF1dGhDaGFsbGVuZ2UmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgb25BdXRoZW50aWNhdGlvbkFjY2VwdGVkKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpNTVJBdXRoQ2hhbGxlbmdlJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IG9uQ29uZGl0aW9uYWxseUVudGVyRnVsbHNjcmVlbigpOworICAgIHZpcnR1YWwgdm9pZCBvbkV4
aXRGdWxsc2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIG9uQ3JlYXRlSG9sZVB1bmNoUmVjdCgp
OworICAgIHZpcnR1YWwgdm9pZCBvbkRlc3Ryb3lIb2xlUHVuY2hSZWN0KCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IEtVUkwmLCBjb25zdCBQcm90ZWN0
aW9uU3BhY2UmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlc3VsdCwgY29uc3QgQ3JlZGVudGlh
bCYpOwogCisgICAgdmlydHVhbCBib29sIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc0VsZW1lbnRQYXVzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJWaXNpYmxl
KCkgY29uc3Q7CkBAIC0xNzQsMTAgKzE4Niw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8TWVkaWFQ
bGF5ZXJQcml2YXRlPiBtX2J1ZmZlcmluZ1RpbWVyOwogICAgIFJlZlB0cjxQbGF0Zm9ybUxheWVy
PiBtX3BsYXRmb3JtTGF5ZXI7CiAgICAgYm9vbCBtX3Nob3dCdWZmZXJpbmdJbWFnZTsKLSAgICBi
b29sIG1fbWVkaWFJc0J1ZmZlcmluZzsKICNlbmRpZgogCi0gICAgdm9pZCBjb25kaXRpb25hbGx5
R29GdWxsc2NyZWVuQWZ0ZXJQbGF5KCk7CiAgICAgdm9pZCB1c2VyRHJpdmVuU2Vla1RpbWVyRmly
ZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwogICAgIFRpbWVyPE1lZGlhUGxheWVyUHJp
dmF0ZT4gbV91c2VyRHJpdmVuU2Vla1RpbWVyOwogICAgIGZsb2F0IG1fbGFzdFNlZWtUaW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Q
YXRoQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L1BhdGhCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYThlYTE5ZDA2YjBkMTg4YzI3
ZjdmNjRhOWNiMjhlYjJmYTk3ODZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QYXRoQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCAr
MSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVB
cHBsaWVyLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoQ29udGV4dCgpCit7CisgICAgc3Rh
dGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIgPSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmNyZWF0ZUJ1ZmZlcihJbnRTaXplKCksIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6TmV2ZXJCYWNrZWQpOworICAgIHN0YXRpYyBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogcGdjID0gbG9ja0J1ZmZlckRyYXdhYmxlKGJ1ZmZlcik7Cisg
ICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dCBnYyhwZ2MpOworICAgIHJldHVybiAmZ2M7Cit9CisK
K1BhdGg6OlBhdGgoKSA6IG1fcGF0aChuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpQYXRoKQoreworfQorCitQYXRoOjpQYXRoKGNvbnN0IFBsYXRmb3JtUGF0aCYgcGF0aCkKKyAg
ICA6IG1fcGF0aChuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKHBhdGgp
KQoreworfQorCitQYXRoOjp+UGF0aCgpCit7CisgICAgaWYgKG1fcGF0aCkgeworICAgICAgICBk
ZWxldGUgbV9wYXRoOworICAgICAgICBtX3BhdGggPSAwOworICAgIH0KK30KKworUGF0aDo6UGF0
aChjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBtX3BhdGggPSBuZXcgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpQYXRoKCpvdGhlci5tX3BhdGgpOworfQorCitQYXRoJiBQYXRoOjpv
cGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgaWYgKG1fcGF0aCkgeworICAgICAg
ICBkZWxldGUgbV9wYXRoOworICAgICAgICBtX3BhdGggPSAwOworICAgIH0KKyAgICBtX3BhdGgg
PSBuZXcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQYXRoKCpvdGhlci5tX3BhdGgp
OworICAgIHJldHVybiAqdGhpczsKK30KKworRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmN1cnJlbnRQb2ludCgpOworfQorCitib29s
IFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50LCAoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kUnVsZSkocnVsZSkpOworfQorCitib29sIFBhdGg6OnN0
cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoID0gc2NyYXRj
aENvbnRleHQoKTsKKyAgICBzY3JhdGNoLT5zYXZlKCk7CisKKyAgICBpZiAoYXBwbGllcikKKyAg
ICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoc2NyYXRjaCk7CisKKyAgICBib29sIHJlc3VsdCA9
IHNjcmF0Y2hDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zdHJva2VDb250YWlucygqbV9w
YXRoLCBwb2ludCk7CisgICAgc2NyYXRjaC0+cmVzdG9yZSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb247CisgICAgdHJhbnNmb3JtYXRpb24udHJh
bnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgdHJhbnNmb3JtKHRyYW5z
Zm9ybWF0aW9uKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGF0aC0+Z2V0Qm91bmRzKCk7Cit9CisKK0Zsb2F0UmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAorewor
ICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNjcmF0Y2hDb250ZXh0KCk7CisgICAgc2Ny
YXRjaC0+c2F2ZSgpOworCisgICAgaWYgKGFwcGxpZXIpCisgICAgICAgIGFwcGxpZXItPnN0cm9r
ZVN0eWxlKHNjcmF0Y2gpOworCisgICAgRmxvYXRSZWN0IHJlc3VsdCA9IHNjcmF0Y2gtPnBsYXRm
b3JtQ29udGV4dCgpLT5nZXRTdHJva2VCb3VuZHMoKm1fcGF0aCk7CisKKyAgICBzY3JhdGNoLT5y
ZXN0b3JlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQYXRoOjptb3ZlVG8oY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOworfQor
Cit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBt
X3BhdGgtPmFkZExpbmVUbyhwb2ludCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2lu
dCkKK3sKKyAgICBtX3BhdGgtPmFkZFF1YWRDdXJ2ZVRvKGNvbnRyb2xQb2ludCwgZW5kUG9pbnQp
OworfQorCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29u
dHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQ
b2ludCYgZW5kUG9pbnQpCit7CisgICAgbV9wYXRoLT5hZGRCZXppZXJDdXJ2ZVRvKGNvbnRyb2xQ
b2ludDEsIGNvbnRyb2xQb2ludDIsIGVuZFBvaW50KTsKK30KKwordm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxv
YXQgcmFkaXVzKQoreworICAgIG1fcGF0aC0+YWRkQXJjVG8ocG9pbnQxLCBwb2ludDIsIHJhZGl1
cyk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBtX3BhdGgtPmNsb3Nl
U3VicGF0aCgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBjZW50
ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wg
YW50aWNsb2Nrd2lzZSkKK3sKKyAgICBtX3BhdGgtPmFkZEFyYyhjZW50ZXIsIHJhZGl1cywgc3Rh
cnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpOworfQorCit2b2lkIFBhdGg6OmFkZFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fcGF0aC0+YWRkUmVjdChyZWN0KTsK
K30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX3BhdGgtPmFkZEVsbGlwc2UocmVjdCk7Cit9CisKK3ZvaWQgUGF0aDo6cGxhdGZvcm1BZGRQ
YXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUm
IHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJh
ZGl1cykKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChyZWN0LndpZHRoKCkgPCB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKyB0b3BSaWdodFJhZGl1
cy53aWR0aCgpCisgICAgICAgIHx8IHJlY3Qud2lkdGgoKSA8IGJvdHRvbUxlZnRSYWRpdXMud2lk
dGgoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkKKyAgICAgICAgfHwgcmVjdC5oZWlnaHQo
KSA8IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCisg
ICAgICAgIHx8IHJlY3QuaGVpZ2h0KCkgPCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSArIGJvdHRv
bVJpZ2h0UmFkaXVzLmhlaWdodCgpKSB7CisgICAgICAgIC8vIElmIGFsbCB0aGUgcmFkaWkgY2Fu
bm90IGJlIGFjY29tbW9kYXRlZCwgcmV0dXJuIGEgcmVjdC4KKyAgICAgICAgYWRkUmVjdChyZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFJvdW5kZWRSZWN0IHJyKHJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgLy8gTWFrZSBzdXJlIHRo
ZSBnZW5lcmljIHBhdGggcmVmbGVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByb3VuZGVkIHJlY3Rz
CisgICAgbV9wYXRoLT5hZGRSb3VuZGVkUmVjdChycik7Cit9CisKK3ZvaWQgUGF0aDo6Y2xlYXIo
KQoreworICAgIG1fcGF0aC0+cmVzZXQoKTsKK30KKworYm9vbCBQYXRoOjppc0VtcHR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgUGF0aDo6aGFz
Q3VycmVudFBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5oYXNDdXJyZW50UG9p
bnQoKTsKK30KKwordm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0
aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIG1fcGF0aC0+YXBwbHkoaW5mbywgKHZvaWQqKWZ1
bmN0aW9uKTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm1hdGlvbikKK3sKKyAgICBtX3BhdGgtPnRyYW5zZm9ybShyZWludGVycHJldF9j
YXN0PGNvbnN0IGRvdWJsZSo+KCZ0cmFuc2Zvcm1hdGlvbikpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBp
ZiAoIXBwLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHcmFkaWVudCogcGxhdGZvcm1HcmFkaWVudCA9IGZpbGxHcmFkaWVudCgpID8gZmlsbEdy
YWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSA6IDA7CisgICAgICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6UGF0dGVybiogcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4o
KSA/IGZpbGxQYXR0ZXJuKCktPnBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkgOiAw
OworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkRmlsbFBhdGgoKnBwLCAoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kUnVsZSltX3N0YXRlLmZpbGxSdWxlLCBwbGF0Zm9y
bUdyYWRpZW50LCBwbGF0Zm9ybVBhdHRlcm4pOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlBhdGgqIHBwID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBp
ZiAoIXBwLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHcmFkaWVudCogZ3JhZGllbnQgPSBzdHJva2VHcmFkaWVudCgpID8gc3Ryb2tlR3JhZGll
bnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpIDogMDsKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpQYXR0ZXJuKiBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpID8gc3Ryb2tl
UGF0dGVybigpLT5wbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpIDogMDsKKyAgICAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZFN0cm9rZVBhdGgoKnBwLCBncmFkaWVudCwgcGF0dGVy
bik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIGZyb20sIGNv
bnN0IEludFBvaW50JiB0bykKK3sKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkRHJhd0xpbmUo
ZnJvbSwgdG8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQoreworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5hZGREcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyKHB0LCB3aWR0aCwgKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpc3R5bGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwg
Ym9vbCBwcmludGluZykKK3sKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YWRkRHJhd0xpbmVGb3JU
ZXh0KHB0LCB3aWR0aCwgcHJpbnRpbmcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6UGF0aCogcHAgPSBwYXRoLnBsYXRmb3JtUGF0aCgpOworICAgIHBwLT5hcHBseUFzQ2xpcChw
bGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3sKKyAgICBpZiAocGF0aC5wbGF0
Zm9ybVBhdGgoKS0+aXNSZWN0YW5ndWxhcigpKQorICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2xpcChwYXRoLmJvdW5kaW5nUmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNsaXAocGF0aCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgY2xpcChwYXRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OlBhdGgqIHBwID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBwcC0+YXBwbHlBc0NsaXBPdXQo
cGxhdGZvcm1Db250ZXh0KCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BhdHRlcm5CbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGF0dGVybkJsYWNrQmVycnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2MDBmY2RlNWM3YjliYjgwOWU3MjU5MTY5YzJkN2ZjYzlkZTVmMTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L1BhdHRlcm5CbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJJbWFnZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiUGF0aC5o
IgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQYXR0ZXJu
OjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGRlbGV0ZSBtX3BhdHRlcm47CisgICAgbV9wYXR0
ZXJuID0gMDsKK30KKworUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBsYXRmb3JtUGF0dGVy
bihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0pCit7CisgICAgaWYgKG1f
cGF0dGVybikKKyAgICAgICAgcmV0dXJuIG1fcGF0dGVybjsKKworICAgIGNvbnN0IE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gbV90aWxlSW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisKKyAgICBtX3BhdHRlcm4gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlBhdHRl
cm46OmNyZWF0ZSgpOworCisgICAgbV9wYXR0ZXJuLT5zZXRJbWFnZShpbWFnZSwgbV9yZXBlYXRY
LCBtX3JlcGVhdFkpOworICAgIG1fcGF0dGVybi0+c2V0TG9jYWxNYXRyaXgocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBkb3VibGUqPigmbV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbikpOworCisg
ICAgcmV0dXJuIG1fcGF0dGVybjsKK30KKwordm9pZCBQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRl
cm5TcGFjZVRyYW5zZm9ybSgpCit7CisgICAgaWYgKG1fcGF0dGVybikKKyAgICAgICAgbV9wYXR0
ZXJuLT5zZXRMb2NhbE1hdHJpeChyZWludGVycHJldF9jYXN0PGNvbnN0IGRvdWJsZSo+KCZtX3Bh
dHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
UGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvUGxhdGZvcm1TdXBwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTU5NDY4MTVmYjExODA3
ZWU2MmM1YTliOWRkNjY2MmZmZGYzMTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbGF0Zm9ybVN1cHBvcnQuY3BwCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3V0ZjE2Lmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgUGxhdGZvcm1TdXBwb3J0OjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMsIGNvbnN0IGNoYXIq
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RmFtaWx5KiBmYW1pbHkp
Cit7CisgICAgRmNDaGFyU2V0KiBjc2V0ID0gRmNDaGFyU2V0Q3JlYXRlKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzOyArK2kpIHsKKyAgICAgICAgaWYgKFUxNl9J
U19TVVJST0dBVEUoY2hhcmFjdGVyc1tpXSkKKyAgICAgICAgICAgICYmIFUxNl9JU19TVVJST0dB
VEVfTEVBRChjaGFyYWN0ZXJzW2ldKQorICAgICAgICAgICAgJiYgaSAhPSBudW1DaGFyYWN0ZXJz
IC0gMQorICAgICAgICAgICAgJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewor
ICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihjc2V0LCBVMTZfR0VUX1NVUFBMRU1FTlRBUlko
Y2hhcmFjdGVyc1tpXSwgY2hhcmFjdGVyc1tpKzFdKSk7CisgICAgICAgICAgICBpKys7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihjc2V0LCBjaGFyYWN0ZXJz
W2ldKTsKKyAgICB9CisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7
CisKKyAgICBGY1ZhbHVlIGZjdmFsdWU7CisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlQ2hhclNl
dDsKKyAgICBmY3ZhbHVlLnUuYyA9IGNzZXQ7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZD
X0NIQVJTRVQsIGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBl
Qm9vbDsKKyAgICBmY3ZhbHVlLnUuYiA9IEZjVHJ1ZTsKKyAgICBGY1BhdHRlcm5BZGQocGF0dGVy
biwgRkNfU0NBTEFCTEUsIGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAgZmN2YWx1ZS50eXBlID0g
RmNUeXBlSW50ZWdlcjsKKyAgICBmY3ZhbHVlLnUuaSA9IChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+
PSBGb250V2VpZ2h0Qm9sZCkgPyBGQ19XRUlHSFRfQk9MRCA6IEZDX1dFSUdIVF9OT1JNQUw7Cisg
ICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1dFSUdIVCwgZmN2YWx1ZSwgRmNGYWxzZSk7CisK
KyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVJbnRlZ2VyOworICAgIGZjdmFsdWUudS5pID0gKGRl
c2NyaXB0aW9uLml0YWxpYygpID09IEZvbnRJdGFsaWNPbikgPyBGQ19TTEFOVF9JVEFMSUMgOiBG
Q19TTEFOVF9ST01BTjsKKyAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfU0xBTlQsIGZjdmFs
dWUsIEZjRmFsc2UpOworCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0
Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworCisgICAgRmNS
ZXN1bHQgcmVzdWx0OworICAgIEZjRm9udFNldCogZm9udFNldCA9IEZjRm9udFNvcnQoMCwgcGF0
dGVybiwgMCwgMCwgJnJlc3VsdCk7CisgICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKKyAg
ICBGY0NoYXJTZXREZXN0cm95KGNzZXQpOworCisgICAgaWYgKCFmb250U2V0KSB7CisgICAgICAg
IGZhbWlseS0+bmFtZSA9IFN0cmluZygpOworICAgICAgICBmYW1pbHktPmlzQm9sZCA9IGZhbHNl
OworICAgICAgICBmYW1pbHktPmlzSXRhbGljID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBmb250Y29uZmlnIGhhdmUgYSBidWcgd2hl
cmUgdGhleSBjYW5ub3Qgc2VsZWN0CisgICAgLy8gb25seSBzY2FsYWJsZSBmb250cyBzbyB3ZSBo
YXZlIHRvIG1hbnVhbGx5IGZpbHRlciB0aGUgcmVzdWx0cy4KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGZvbnRTZXQtPm5mb250OyArK2kpIHsKKyAgICAgICAgRmNQYXR0ZXJuKiBjdXJyZW50ID0g
Zm9udFNldC0+Zm9udHNbaV07CisgICAgICAgIEZjQm9vbCBpc1NjYWxhYmxlOworCisgICAgICAg
IGlmIChGY1BhdHRlcm5HZXRCb29sKGN1cnJlbnQsIEZDX1NDQUxBQkxFLCAwLCAmaXNTY2FsYWJs
ZSkgIT0gRmNSZXN1bHRNYXRjaAorICAgICAgICAgICAgfHwgIWlzU2NhbGFibGUpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBmb250Y29uZmlnIGNhbiBhbHNvIHJldHVybiBm
b250cyB3aGljaCBhcmUgdW5yZWFkYWJsZQorICAgICAgICBGY0NoYXI4KiBjRmlsZW5hbWU7Cisg
ICAgICAgIGlmIChGY1BhdHRlcm5HZXRTdHJpbmcoY3VycmVudCwgRkNfRklMRSwgMCwgJmNGaWxl
bmFtZSkgIT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChhY2Nlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY0ZpbGVuYW1lKSwgUl9PSykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBGY0NoYXI4KiBmYW1pbHlOYW1lOworICAg
ICAgICBpZiAoRmNQYXR0ZXJuR2V0U3RyaW5nKGN1cnJlbnQsIEZDX0ZBTUlMWSwgMCwgJmZhbWls
eU5hbWUpID09IEZjUmVzdWx0TWF0Y2gpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNoYXJG
YW1pbHkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYW1pbHlOYW1lKTsKKyAgICAgICAgICAg
IGZhbWlseS0+bmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoY2hhckZhbWlseSwgc3RybGVuKGNoYXJG
YW1pbHkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB3ZWlnaHQ7CisgICAgICAgIGlmIChG
Y1BhdHRlcm5HZXRJbnRlZ2VyKGN1cnJlbnQsIEZDX1dFSUdIVCwgMCwgJndlaWdodCkgPT0gRmNS
ZXN1bHRNYXRjaCkKKyAgICAgICAgICAgIGZhbWlseS0+aXNCb2xkID0gd2VpZ2h0ID49IEZDX1dF
SUdIVF9CT0xEOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmYW1pbHktPmlzQm9sZCA9IGZh
bHNlOworCisgICAgICAgIGludCBzbGFudDsKKyAgICAgICAgaWYgKEZjUGF0dGVybkdldEludGVn
ZXIoY3VycmVudCwgRkNfU0xBTlQsIDAsICZzbGFudCkgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAg
ICAgICAgIGZhbWlseS0+aXNJdGFsaWMgPSBzbGFudCAhPSBGQ19TTEFOVF9ST01BTjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZmFtaWx5LT5pc0l0YWxpYyA9IGZhbHNlOworCisgICAgICAg
IEZjRm9udFNldERlc3Ryb3koZm9udFNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBGY0ZvbnRTZXREZXN0cm95KGZvbnRTZXQpOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9QbGF0Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvUGxhdGZvcm1TdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE2NmVhNDg1NDk1YjhmNDRm
ZDQyZDM0NmRhMjgwOWJjOTU0NWM2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGxhdGZvcm1TdXBwb3J0LmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMSwgUmVzZWFyY2ggSW4gTW90aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1TdXBwb3J0X2gKKyNkZWZpbmUgUGxhdGZv
cm1TdXBwb3J0X2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBGb250UmVuZGVyU3R5bGU7CitjbGFzcyBGb250RGVzY3Jp
cHRpb247CisKKy8vIFRoaXMgaXMgYSBtaW5pbWFsIHZlcnNpb24gb2YgdGhlIENocm9taXVtIFBs
YXRmb3JtU3VwcG9ydC9XZWJGb250SW5mbyBjbGFzc2VzIHVzZWQgZm9yIGZvbnQgc3VwcG9ydC4K
K2NsYXNzIFBsYXRmb3JtU3VwcG9ydCB7CitwdWJsaWM6CisgICAgc3RydWN0IEZvbnRGYW1pbHkg
eworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgYm9vbCBpc0JvbGQ7CisgICAgICAgIGJv
b2wgaXNJdGFsaWM7CisgICAgfTsKKyAgICBzdGF0aWMgdm9pZCBnZXRGb250RmFtaWx5Rm9yQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVfdCBudW1DaGFyYWN0ZXJzLCBjb25zdCBjaGFyKiBw
cmVmZXJyZWRMb2NhbGUsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRGYW1pbHkqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1
Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmluZGV4IGMyMjI1NGNiNzM0Y2Q5OGE2MDdlZjZlM2Q5
YTZhZDMzZDkwYWI2ZDcuLmFmNzFjMTBiZjZmOTQwZmM4NmZlMWYyNTEwN2NmYjlkNDkxZTE2YjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCkBAIC00MSw3
ICs0MSw3IEBAIHZvaWQgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFBsdWdpblZpZXcoUGx1
Z2luVmlldyogcGx1Z2luVmlldykKIHsKICAgICBtX3BsdWdpblZpZXcgPSBwbHVnaW5WaWV3Owog
ICAgIHNldE5lZWRzVGV4dHVyZShpc0RyYXdhYmxlKCkgJiYgcGx1Z2luVmlldyk7Ci0gICAgc2V0
TGF5ZXJQcm9ncmFtU2hhZGVyKExheWVyUHJvZ3JhbVNoYWRlclJHQkEpOworICAgIHNldExheWVy
UHJvZ3JhbShMYXllclByb2dyYW1SR0JBKTsKIAogICAgIGlmIChtX3BsdWdpblZpZXcpCiAgICAg
ICAgIHNldE5lZWRzRGlzcGxheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9TaW1wbGVGb250RGF0YUJsYWNrQmVycnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9TaW1wbGVGb250RGF0YUJs
YWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NzAwOWJmMDc0YjVkMDkyZmQzZjA1NDJhYzI2NTVh
YzliZTZlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L1NpbXBsZUZvbnREYXRhQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwy
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiSVR5cGVVdGlscy5oIgorCisjaW5j
bHVkZSA8ZnNfYXBpLmg+CisjaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gU21hbGxjYXBzIHZlcnNpb25zIG9mIGZvbnRzIGFyZSA3MCUgdGhl
IHNpemUgb2YgdGhlIG5vcm1hbCBmb250Lgorc3RhdGljIGNvbnN0IGZsb2F0IHNtYWxsQ2Fwc0Zy
YWN0aW9uID0gMC43ZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBlbXBoYXNpc01hcmtGcmFjdGlvbiA9
IC41OworCitzdGF0aWMgaW5saW5lIGZsb2F0IEZTRml4ZWRUb0Zsb2F0KEZTX0ZJWEVEIG4pIHsg
cmV0dXJuIG4gLyA2NTUzNi4wOyB9CisKKyNkZWZpbmUgb3BlblR5cGVUYWcoYSwgYiwgYywgZCkg
KEZTX1VMT05HKSgoYSA8PCAyNCkgfCAoYiA8PCAxNikgfCAoYyA8PCA4KSB8IGQpCisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgRlNfRklYRUQgYXNjZW5kZXIg
PSAwOworICAgIEZTX0ZJWEVEIGRlc2NlbmRlciA9IDA7CisgICAgRlNfRklYRUQgbGVhZGluZyA9
IDA7CisgICAgRnNBc2NEZXNjTGVhZFNvdXJjZSBzb3VyY2U7CisgICAgRlNfTE9ORyByZXN1bHQ7
CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gRklYTUU6
IGhhY2shIEZTX2dldF9hc2NlbmRlcl9kZXNjZW5kZXJfbGVhZGluZygpIHJldHVybnMgRVJSX05P
X0NVUlJFTlRfU0ZOVCB3aGVuIHNpemUgaXMgMCwgZXZlbiB0aG91Z2ggd2UgY2FsbGVkIEZTX3Nl
dF9zY2FsZSBhbmQgbV9wbGF0Zm9ybURhdGEuZm9udCgpLT5jdXJfc2ZudCBpcyBub3QgMAorICAg
ICAgICByZXN1bHQgPSBGU19nZXRfYXNjZW5kZXJfZGVzY2VuZGVyX2xlYWRpbmcobV9wbGF0Zm9y
bURhdGEuZm9udCgpLCAmYXNjZW5kZXIsICZkZXNjZW5kZXIsICZsZWFkaW5nLCAmc291cmNlKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBTVUNDRVNTKTsKKyAgICB9
CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChGU19ST1VORChhc2NlbmRlcikpOworICAg
IG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChGU19ST1VORChkZXNjZW5kZXIpKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVHYXAoaVR5cGVGaXhlZFRvRmxvYXQobGVhZGluZykpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihtX2ZvbnRNZXRyaWNzLmFzY2VudCgp
KSArIGxyb3VuZGYobV9mb250TWV0cmljcy5kZXNjZW50KCkpICsgbHJvdW5kZihtX2ZvbnRNZXRy
aWNzLmxpbmVHYXAoKSkpOworCisgICAgRk9OVF9NRVRSSUNTIG1ldHJpY3M7CisgICAgcmVzdWx0
ID0gRlNfZm9udF9tZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgJm1ldHJpY3MpOworICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gU1VDQ0VTUyk7CisKKyAgICAvLyBtX2Zv
bnRNZXRyaWNzLnNldFVuaXRzUGVyRW0oRlNfZ2V0X2Rlc2lnbl91bml0cyhtX3BsYXRmb3JtRGF0
YSgpLmZvbnQoKSkpOworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbShtZXRyaWNzLnVu
aXRzUGVyRW0pOworCisgICAgRlNfVVNIT1JUIHhSYW5nZSA9IG1ldHJpY3MuZm9udF9iYm94LnhN
YXggLSBtZXRyaWNzLmZvbnRfYmJveC54TWluOworICAgIG1fbWF4Q2hhcldpZHRoID0gcm91bmRm
KCh4UmFuZ2UgKiByb3VuZGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSkgLyBtZXRyaWNzLnVuaXRz
UGVyRW0pOworCisgICAgVFRGX09TMiBvczI7CisgICAgaWYgKEZTX2dldF90YWJsZV9zdHJ1Y3R1
cmUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBUQUdfT1MyLCAmb3MyKSA9PSBTVUNDRVNTICYmIG9z
Mi5zeEhlaWdodCAmJiBvczIueEF2Z0NoYXJXaWR0aCkgeworICAgICAgICBGU19VU0hPUlQgeXBw
ZW0gPSBtX3BsYXRmb3JtRGF0YS5mb250KCktPmxwbTsKKyAgICAgICAgbV9mb250TWV0cmljcy5z
ZXRYSGVpZ2h0KHN0YXRpY19jYXN0PGZsb2F0PihvczIuc3hIZWlnaHQpICogeXBwZW0gLyBtZXRy
aWNzLnVuaXRzUGVyRW0pOworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHN0YXRpY19jYXN0PGZs
b2F0PihvczIueEF2Z0NoYXJXaWR0aCkgKiB5cHBlbSAvIG1ldHJpY3MudW5pdHNQZXJFbTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBIQUNLCisgICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhl
aWdodChtX2ZvbnRNZXRyaWNzLmFzY2VudCgpICogMC41Nik7CisgICAgICAgIG1fZm9udE1ldHJp
Y3Muc2V0SGFzWEhlaWdodChmYWxzZSk7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250
TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICAgICAgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0g
R2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh0aGlzLCAwKS0+cGFnZSgpOworCisgICAg
ICAgIGlmIChnbHlwaFBhZ2VaZXJvKSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgVUNoYXIz
MiB4Q2hhciA9ICd4JzsKKyAgICAgICAgICAgIGNvbnN0IEdseXBoIHhHbHlwaCA9IGdseXBoUGFn
ZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3Rlcih4Q2hhcikuZ2x5cGg7CisKKyAgICAgICAgICAg
IGlmICh4R2x5cGgpIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB3aWR0aEZvckdseXBoKCksIHhH
bHlwaCB3aWxsIGJlIGNvbXBhcmVkIHdpdGgKKyAgICAgICAgICAgICAgICAvLyBtX3plcm9XaWR0
aFNwYWNlR2x5cGgsIHdoaWNoIGlzbid0IGluaXRpYWxpemVkIHlldCBoZXJlLgorICAgICAgICAg
ICAgICAgIC8vIEluaXRpYWxpemUgaXQgd2l0aCB6ZXJvIHRvIG1ha2Ugc3VyZSB3aWR0aEZvckds
eXBoKCkgcmV0dXJucworICAgICAgICAgICAgICAgIC8vIHRoZSByaWdodCB3aWR0aC4KKyAgICAg
ICAgICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOworICAgICAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNW
ZXJ0aWNhbEdseXBocyA9IEZTX2dldF90YWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIG9wZW5U
eXBlVGFnKCd2JywgJ2gnLCAnZScsICdhJyksIFRCTF9RVUVSWSwgMCkKKyAgICAgICAgICAgIHx8
IEZTX2dldF90YWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIG9wZW5UeXBlVGFnKCdWJywgJ08n
LCAnUicsICdHJyksIFRCTF9RVUVSWSwgMCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtRGVzdHJveSgpCit7Cit9CisKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQg
c2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2Nh
bGVGYWN0b3IpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoCisgICAg
ICAgIEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEuZm9udCgpLT5jdXJfbGZudC0+bmFt
ZSwKKyAgICAgICAgICAgIHNjYWxlZFNpemUsCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5z
eW50aGV0aWNCb2xkKCksCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCksCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLAorICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEudGV4dE9yaWVudGF0aW9uKCksCisgICAgICAgICAgICBtX3Bs
YXRmb3JtRGF0YS53aWR0aFZhcmlhbnQoKSksCisgICAgICAgIGlzQ3VzdG9tRm9udCgpLCBmYWxz
ZSkpOworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVy
aXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEtPnNtYWxsQ2FwcykKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rp
b24pOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7Cit9
CisKK1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVk
Rm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtG
cmFjdGlvbik7CisKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5n
ZXQoKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIGludCBwb3NpdGlv
biA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKKyAgICAgICAgLy8gRklY
TUU6IHVzZSBzaGFwZXI/CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAgICBpbnQg
bmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIG5l
eHRQb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIpOworCisgICAgICAgIEZTX1VTSE9SVCBnbHlw
aCA9IEZTX21hcF9jaGFyKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgc3RhdGljX2Nhc3Q8RlNfVUxP
Tkc+KGNoYXJhY3RlcikpOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
Cit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRj
aCgpOworfQorCitGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgRlNfR0xZUEhNQVAqIGdseXBobWFwID0gRlNf
Z2V0X2dseXBobWFwKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgZ2x5cGgsIEZTX01BUF9ESVNUQU5D
RUZJRUxEIHwgRlNfTUFQX0dSQVlNQVA4KTsKKyAgICBpZiAoIWdseXBobWFwKQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzKGdseXBobWFwLT5sb194
LCBnbHlwaG1hcC0+aGVpZ2h0IC0gZ2x5cGhtYXAtPmhpX3ksIGdseXBobWFwLT53aWR0aCwgZ2x5
cGhtYXAtPmhlaWdodCk7CisgICAgRlNfZnJlZV9jaGFyKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwg
Z2x5cGhtYXApOworCisgICAgcmV0dXJuIGJvdW5kczsKK30KKworZmxvYXQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGU19T
SE9SVCBpZHgsIGlkeTsKKyAgICBGU19GSVhFRCBkeCwgZHk7CisgICAgaWYgKEZTX2dldF9hZHZh
bmNlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgZ2x5cGgsIEZTX01BUF9ESVNUQU5DRUZJRUxEIHwg
RlNfTUFQX0dSQVlNQVA4LCAmaWR4LCAmaWR5LCAmZHgsICZkeSkgIT0gU1VDQ0VTUykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaVR5cGVGaXhlZFRvRmxvYXQoZHgpOworfQorCiti
b29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0KQorICAgICAgICBtX2NvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCA9IGFkb3B0UHRyKG5ldyBIYXNoTWFwPFN0cmluZywg
Ym9vbD4pOworCisgICAgV1RGOjpIYXNoTWFwPFN0cmluZywgYm9vbD46OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydC0+YWRkKFN0cmluZyhj
aGFyYWN0ZXJzLCBsZW5ndGgpLCBmYWxzZSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBVRXJy
b3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIFZlY3RvcjxVQ2hhciwgND4gbm9ybWFs
aXplZENoYXJhY3RlcnMobGVuZ3RoKTsKKyAgICBpbnQzMl90IG5vcm1hbGl6ZWRMZW5ndGggPSB1
bm9ybV9ub3JtYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIFVOT1JNX1VOSUNP
REVfM18yLCAmbm9ybWFsaXplZENoYXJhY3RlcnNbMF0sIGxlbmd0aCwgJmVycm9yKTsKKyAgICBp
ZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IHBv
c2l0aW9uID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBub3JtYWxpemVkTGVuZ3RoKSB7Cisg
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0gcG9z
aXRpb247CisgICAgICAgIFUxNl9ORVhUKG5vcm1hbGl6ZWRDaGFyYWN0ZXJzLCBuZXh0UG9zaXRp
b24sIG5vcm1hbGl6ZWRMZW5ndGgsIGNoYXJhY3Rlcik7CisKKyAgICAgICAgaWYgKCF1X2hhc0Jp
bmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lO
VCkpIHsKKyAgICAgICAgICAgIEZTX1VTSE9SVCBnbHlwaCA9IEZTX21hcF9jaGFyKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSwgc3RhdGljX2Nhc3Q8RlNfVUxPTkc+KGNoYXJhY3RlcikpOworICAgICAg
ICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKKyAgICB9CisKKyAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZS5jcHAKaW5kZXggMTMyNGQxNTM2N2VmODkwN2Nk
NmM1MjI3YTg5M2EzOGJjMDU2MmRmNi4uY2VmNDU2Mzc3MzYyOWFlZTkxNmMxMmM5MTE4Y2VjNDAx
YzZlODdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1RleHR1cmUuY3BwCkBAIC0yNSwzNiArMjUsMjEgQEAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaCIKIAor
I2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPFNrQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKLSNkZWZpbmUgREVCVUdf
VEVYVFVSRV9VUExPQURTIDAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBj
b3B5SW1hZ2VEYXRhKHVuc2lnbmVkIGNoYXIqIGRzdCwgaW50IGRzdFN0cmlkZSwgaW50IGRzdFgs
IGludCBkc3RZLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMs
IGludCBzcmNTdHJpZGUsIGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQotewotICAgIGRzdCArPSAoZHN0WSAqIGRzdFN0cmlkZSkgKyAoVGV4dHVyZTo6Ynl0ZXNQZXJQ
aXhlbCgpICogZHN0WCk7Ci0gICAgc3JjICs9IChzcmNZICogc3JjU3RyaWRlKSArIChUZXh0dXJl
OjpieXRlc1BlclBpeGVsKCkgKiBzcmNYKTsKLSAgICBpbnQgbGVuZ3RoID0gVGV4dHVyZTo6Ynl0
ZXNQZXJQaXhlbCgpICogd2lkdGg7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
Kyt5KSB7Ci0gICAgICAgIG1lbWNweShkc3QsIHNyYywgbGVuZ3RoKTsKLSAgICAgICAgZHN0ICs9
IGRzdFN0cmlkZTsKLSAgICAgICAgc3JjICs9IHNyY1N0cmlkZTsKLSAgICB9Ci19Ci0KIFRleHR1
cmU6OlRleHR1cmUoYm9vbCBpc0NvbG9yKQogICAgIDogbV9wcm90ZWN0aW9uQ291bnQoMCkKLSAg
ICAsIG1fdGV4dHVyZUlkKDApCisgICAgLCBtX2hhbmRsZSgwKQogICAgICwgbV9pc0NvbG9yKGlz
Q29sb3IpCiAgICAgLCBtX2lzT3BhcXVlKGZhbHNlKQorICAgICwgbV9idWZmZXJTaXplSW5CeXRl
cygwKQogewotICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmluc3RhbGwodGhp
cyk7CisgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+aW5zdGFsbCh0aGlzLCBJ
bnRTaXplKCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5lY2Vz
c2FyeSk7CiB9CiAKIFRleHR1cmU6On5UZXh0dXJlKCkKQEAgLTYyLDExMSArNDcsMjkgQEAgVGV4
dHVyZTo6flRleHR1cmUoKQogICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRl
eHR1cmVEZXN0cm95ZWQodGhpcyk7CiB9CiAKLXZvaWQgVGV4dHVyZTo6dXBkYXRlQ29udGVudHMo
Y29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IEludFJlY3QmIHRpbGUsIGJvb2wgaXNPcGFxdWUpCit2b2lkIFRleHR1cmU6OnVwZGF0ZUNvbnRl
bnRzKGNvbnN0IFRleHR1cmU6Okhvc3RUeXBlJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlLCBib29sIGlzT3BhcXVlKQogewotICAgIEludFJl
Y3QgdGlsZURpcnR5UmVjdChkaXJ0eVJlY3QpOwotCi0gICAgdGlsZURpcnR5UmVjdC5pbnRlcnNl
Y3QodGlsZSk7Ci0gICAgaWYgKHRpbGVEaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2lzT3BhcXVlID0gaXNPcGFxdWU7Ci0KLSAgICBpbnQgc3RyaWRlID0gYnl0
ZXNQZXJQaXhlbCgpICogY29udGVudHMud2lkdGgoKTsKLSAgICBpbnQgeCA9IHRpbGVEaXJ0eVJl
Y3QueCgpIC0gZGlydHlSZWN0LngoKTsKLSAgICBpbnQgeSA9IHRpbGVEaXJ0eVJlY3QueSgpIC0g
ZGlydHlSZWN0LnkoKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soY29udGVudHMpOwotICAg
IHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjb250
ZW50cy5nZXRQaXhlbHMoKSk7Ci0gICAgcGl4ZWxzICs9ICh5ICogc3RyaWRlKSArIChieXRlc1Bl
clBpeGVsKCkgKiB4KTsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCBzdWJJbWFnZSA9IHRpbGUuc2l6ZSgpID09IG1fc2l6ZTsKLSAgICBJbnRTaXplIHNpemUg
PSBzdWJJbWFnZSA/IHRpbGVEaXJ0eVJlY3Quc2l6ZSgpIDogdGlsZS5zaXplKCk7Ci0gICAgSW50
U2l6ZSBjb250ZW50c1NpemUoSW50U2l6ZShjb250ZW50cy53aWR0aCgpLCBjb250ZW50cy5oZWln
aHQoKSkpOwotCi0jaWYgREVCVUdfVEVYVFVSRV9VUExPQURTCi0gICAgZnByaW50ZihzdGRlcnIs
ICIlc1xuIiwgc3ViSW1hZ2UgPyAiU1VCSU1BR0UiIDogIklNQUdFIik7Ci0gICAgZnByaW50Zihz
dGRlcnIsICIgIHRpbGUgPSAoeD0lZCx5PSVkLHdpZHRoPSVkLGhlaWdodD0lZCksIG1fc2l6ZSA9
ICglZHglZClcbiIsIHRpbGUueCgpLCB0aWxlLnkoKSwgdGlsZS53aWR0aCgpLCB0aWxlLmhlaWdo
dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBmcHJpbnRmKHN0ZGVy
ciwgIiAgdGlsZURpcnR5UmVjdCA9ICh4PSVkLHk9JWQsd2lkdGg9JWQsaGVpZ2h0PSVkKSwgY29u
dGVudHMuc2l6ZSgpID0gKCVkeCVkKVxuIiwgdGlsZURpcnR5UmVjdC54KCksIHRpbGVEaXJ0eVJl
Y3QueSgpLCB0aWxlRGlydHlSZWN0LndpZHRoKCksIHRpbGVEaXJ0eVJlY3QuaGVpZ2h0KCksIGNv
bnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkpOwotICAgIEludFNpemUg
c2l6ZUJlZm9yZVNodW5rID0gc2l6ZTsKLSNlbmRpZgotCi0gICAgc2l6ZSA9IHNpemUuc2hydW5r
VG8oY29udGVudHNTaXplKTsKLQotI2lmIERFQlVHX1RFWFRVUkVfVVBMT0FEUwotICAgIGlmIChz
aXplICE9IHNpemVCZWZvcmVTaHVuaykKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIFNIUlVO
SyEhISFcbiIpOwotI2VuZGlmCi0KLSAgICBpZiAoIWhhc1RleHR1cmUoKSkgewotICAgICAgICAv
LyBXZSBtYXkgaGF2ZSBiZWVuIGV2aWN0ZWQgYnkgdGhlIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLAotICAgICAgICAvLyBhdHRlbXB0IHRvIGluc3RhbGwgdXMgYWdhaW4uCi0gICAgICAg
IGlmICghdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+aW5zdGFsbCh0aGlzKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKLQotICAgIEFTU0VSVChzaXplLndpZHRoKCkgPj0gMCk7Ci0gICAg
Ym9vbCBkb2VzVGlsZVN0cmlkZUVxdWFsVGV4dHVyZVN0cmlkZSA9IGNvbnRlbnRzLndpZHRoKCkg
PT0gc2l6ZS53aWR0aCgpOwotCi0gICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gdG1wOwot
ICAgIGlmICghZG9lc1RpbGVTdHJpZGVFcXVhbFRleHR1cmVTdHJpZGUpIHsKLSNpZiBkZWZpbmVk
KEdMX1VOUEFDS19ST1dfTEVOR1RIKQotICAgICAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19S
T1dfTEVOR1RILCBjb250ZW50cy53aWR0aCgpKTsKLSNlbHNlCi0gICAgICAgIHRtcCA9IGFkb3B0
QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAq
IGJ5dGVzUGVyUGl4ZWwoKV0pOwotICAgICAgICBjb3B5SW1hZ2VEYXRhKHRtcC5nZXQoKSwgYnl0
ZXNQZXJQaXhlbCgpICogc2l6ZS53aWR0aCgpLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAg
IHBpeGVscywgc3RyaWRlLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHBpeGVscyA9IHRtcC5nZXQoKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIGlmIChzdWJJbWFnZSkgewotI2lmIERFQlVHX1RFWFRVUkVfVVBMT0FEUwot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdsVGV4U3ViSW1hZ2UyRCglZCwgJWQsICVkLCAlZClc
biIsIHRpbGVEaXJ0eVJlY3QueCgpIC0gdGlsZS54KCksIHRpbGVEaXJ0eVJlY3QueSgpIC0gdGls
ZS55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwotICAgICAgICBkb3VibGUgdCA9IGN1cnJlbnRUaW1lKCk7Ci0jZW5kaWYKLSAgICAgICAg
Z2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aWxlRGlydHlSZWN0LngoKSAtIHRpbGUueCgpLCB0aWxlRGlydHlSZWN0LnkoKSAtIHRpbGUu
eSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4
ZWxzKTsKLSNpZiBERUJVR19URVhUVVJFX1VQTE9BRFMKLSAgICAgICAgdCA9IGN1cnJlbnRUaW1l
KCkgLSB0OwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICB0aW1lID0gJWYgcyAoJWQgYnl0
ZXMpXG4iLCB0LCBzaXplLndpZHRoKCkqc2l6ZS5oZWlnaHQoKSo0KTsKLSNlbmRpZgotICAgIH0g
ZWxzZSB7Ci0jaWYgREVCVUdfVEVYVFVSRV9VUExPQURTCi0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiZ2xUZXhJbWFnZTJEKCVkLCAlZClcbiIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGRvdWJsZSB0ID0gY3VycmVudFRpbWUoKTsKLSNlbmRpZgotICAgICAgICBnbFRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2lmIERFQlVH
X1RFWFRVUkVfVVBMT0FEUwotICAgICAgICB0ID0gY3VycmVudFRpbWUoKSAtIHQ7Ci0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICAgIHRpbWUgPSAlZiBzICglZCBieXRlcylcbiIsIHQsIHNpemUu
d2lkdGgoKSpzaXplLmhlaWdodCgpKjQpOwotI2VuZGlmCi0gICAgfQotCi0jaWYgZGVmaW5lZChH
TF9VTlBBQ0tfUk9XX0xFTkdUSCkKLSAgICBpZiAoIWRvZXNUaWxlU3RyaWRlRXF1YWxUZXh0dXJl
U3RyaWRlKQotICAgICAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsK
LSNlbmRpZgotCi0gICAgSW50U2l6ZSBvbGRTaXplID0gbV9zaXplOwotICAgIG1fc2l6ZSA9IHRp
bGUuc2l6ZSgpOwotICAgIGlmIChtX3NpemUgIT0gb2xkU2l6ZSkKLSAgICAgICAgdGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZVJlc2l6ZWQodGhpcywgb2xkU2l6ZSk7Cisg
ICAgaWYgKG1faGFuZGxlKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OmRlc3Ryb3lCdWZmZXIobV9oYW5kbGUpOworICAgIG1faGFuZGxlID0gY29udGVudHM7CisgICAg
c2l6ZV90IG5ld0J1ZmZlclNpemVJbkJ5dGVzID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpidWZmZXJTaXplSW5CeXRlcyhtX2hhbmRsZSk7CisgICAgdGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQoKS0+dGV4dHVyZVNpemVJbkJ5dGVzQ2hhbmdlZCh0aGlzLCBuZXdCdWZmZXJT
aXplSW5CeXRlcyAtIG1fYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIG1fYnVmZmVyU2l6ZUluQnl0
ZXMgPSBuZXdCdWZmZXJTaXplSW5CeXRlczsKIH0KIAogdm9pZCBUZXh0dXJlOjpzZXRDb250ZW50
c1RvQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIG1faXNPcGFxdWUgPSAhY29sb3Iu
aGFzQWxwaGEoKTsKICAgICBSR0JBMzIgcmdiYSA9IGNvbG9yLnJnYigpOwotICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAmcmdiYSk7CisKKyAgICBpZiAobV9oYW5kbGUpCisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihtX2hhbmRsZSk7CisKKyAgICBtX2hhbmRsZSA9
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKEludFNpemUoMSwg
MSksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5lY2Vzc2FyeSk7
CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogZ2MgPSBsb2NrQnVmZmVyRHJhd2FibGUobV9oYW5kbGUpOworICAgIGdjLT5zZXRGaWxs
Q29sb3IocmdiYSk7CisgICAgZ2MtPmFkZEZpbGxSZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFJlY3QoMCwgMCwgMSwgMSkpOworICAgIHJlbGVhc2VCdWZmZXJEcmF3YWJsZShtX2hhbmRs
ZSk7CiAKICAgICBJbnRTaXplIG9sZFNpemUgPSBtX3NpemU7CiAgICAgbV9zaXplID0gSW50U2l6
ZSgxLCAxKTsKQEAgLTE3NCwxMiArNzcsMTIgQEAgdm9pZCBUZXh0dXJlOjpzZXRDb250ZW50c1Rv
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGlu
Z1RocmVhZCgpLT50ZXh0dXJlUmVzaXplZCh0aGlzLCBvbGRTaXplKTsKIH0KIAotYm9vbCBUZXh0
dXJlOjpwcm90ZWN0KGNvbnN0IEludFNpemUmIHNpemUpCitib29sIFRleHR1cmU6OnByb3RlY3Qo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXJUeXBlIHR5cGUpCiB7CiAgICAgaWYgKCFoYXNUZXh0dXJlKCkpIHsKICAgICAgICAgLy8gV2Ug
bWF5IGhhdmUgYmVlbiBldmljdGVkIGJ5IHRoZSBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZCwKICAgICAgICAgLy8gYXR0ZW1wdCB0byBpbnN0YWxsIHVzIGFnYWluLgotICAgICAgICBpZiAo
IXRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmluc3RhbGwodGhpcykpCisgICAgICAg
IGlmICghdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+aW5zdGFsbCh0aGlzLCBzaXpl
LCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE4OCwxMiAr
OTEsOCBAQCBib29sIFRleHR1cmU6OnByb3RlY3QoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBp
ZiAobV9zaXplID09IHNpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSW50U2l6ZSBv
bGRTaXplID0gbV9zaXplOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgdGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZVJlc2l6ZWQodGhpcywgb2xkU2l6ZSk7CisgICAgdGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+cmVzaXplVGV4dHVyZSh0aGlzLCBzaXplLCB0
eXBlKTsKIAotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwot
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L1RleHR1cmUuaAppbmRleCA2ZGM0ZmRiY2NjMDc1NTYwNDBiYTA4ODBh
NGE3YjU4YjkxMzEwMzMzLi5lNTI5NDA4NjRhMDgxNWMxODYwYTI5MTFjOTZjZThlYTNlZjJhM2Nh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L1RleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1RleHR1cmUuaApAQCAtMjMsMTEgKzIzLDEwIEBACiAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotY2xhc3MgU2tC
aXRtYXA7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CkBAIC00OCwxMCAr
NDcsMTIgQEAgcHVibGljOgogCiAgICAgflRleHR1cmUoKTsKIAotICAgIHVuc2lnbmVkIHRleHR1
cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgdHlwZWRlZiBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogR3B1SGFuZGxlOworICAgIHR5cGVkZWYg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIEhvc3RUeXBlOwogCi0gICAg
Ym9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dHVyZUlkOyB9Ci0gICAgYm9vbCBo
YXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBHcHVIYW5kbGUg
dGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KKyAgICBib29sIGlzRGlydHko
KSBjb25zdCB7IHJldHVybiAhbV9oYW5kbGU7IH0KKyAgICBib29sIGhhc1RleHR1cmUoKSBjb25z
dCB7IHJldHVybiBtX2hhbmRsZTsgfQogCiAgICAgYm9vbCBpc0NvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9pc0NvbG9yOyB9CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNP
cGFxdWU7IH0KQEAgLTU5LDkgKzYwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvdGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9wcm90ZWN0aW9uQ291bnQgPiAwOyB9CiAgICAgdm9pZCBwcm90
ZWN0KCkgeyArK21fcHJvdGVjdGlvbkNvdW50OyB9CiAgICAgdm9pZCB1bnByb3RlY3QoKSB7IC0t
bV9wcm90ZWN0aW9uQ291bnQ7IH0KLSAgICBib29sIHByb3RlY3QoY29uc3QgSW50U2l6ZSYpOwog
Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZSwgYm9vbCBpc09wYXF1ZSk7
CisgICAgLy8gVGhpcyB3aWxsIGVuc3VyZSB0aGUgdGV4dHVyZSBoYXMgYmFja2luZyB3aXRoIHRo
ZSBzcGVjaWZpZWQgc2l6ZQorICAgIGJvb2wgcHJvdGVjdChjb25zdCBJbnRTaXplJiwgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlID0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCYWNrZWRXaGVuTmVjZXNzYXJ5KTsKKworICAgIHZvaWQgdXBkYXRlQ29u
dGVudHMoY29uc3QgSG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRpbGUsIGJvb2wgaXNPcGFxdWUpOwogICAgIHZvaWQgc2V0Q29udGVu
dHNUb0NvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KQEAgLTY5LDI2ICs3MiwzMSBAQCBwdWJsaWM6CiAgICAgaW50IGhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogICAgIHN0YXRpYyBpbnQgYnl0
ZXNQZXJQaXhlbCgpIHsgcmV0dXJuIDQ7IH0KIAorICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyU2l6ZUluQnl0ZXM7IH0KKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ7CiAKICAgICBUZXh0dXJlKGJv
b2wgaXNDb2xvciA9IGZhbHNlKTsKLQotICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlk
KQorICAgIHZvaWQgc2V0VGV4dHVyZUlkKEdwdUhhbmRsZSBpZCkKICAgICB7Ci0gICAgICAgIG1f
dGV4dHVyZUlkID0gaWQ7CisgICAgICAgIG1faGFuZGxlID0gaWQ7CiAKICAgICAgICAgLy8gV2Ug
YXNzdW1lIGl0IGlzIGEgbmV3bHkgYWxsb2NhdGVkIHRleHR1cmUsCiAgICAgICAgIC8vIGFuZCB0
aHVzIGVtcHR5LCBvciAwLCB3aGljaCB3b3VsZCBvZiBjb3Vyc2UKICAgICAgICAgLy8gYmUgZW1w
dHkuCiAgICAgICAgIG1fc2l6ZSA9IEludFNpemUoKTsKKyAgICAgICAgbV9idWZmZXJTaXplSW5C
eXRlcyA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
IHsgbV9zaXplID0gc2l6ZTsgfQorCiAgICAgaW50IG1fcHJvdGVjdGlvbkNvdW50OwotICAgIHVu
c2lnbmVkIG1fdGV4dHVyZUlkOworICAgIEdwdUhhbmRsZSBtX2hhbmRsZTsKICAgICBJbnRTaXpl
IG1fc2l6ZTsKICAgICBib29sIG1faXNDb2xvcjsKICAgICBib29sIG1faXNPcGFxdWU7CisgICAg
c2l6ZV90IG1fYnVmZmVyU2l6ZUluQnl0ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3Bw
CmluZGV4IGQ2NWM0ZGFkZGJiYjI1OThlYjBmYTI0MTcxYzRlNmFmMTRkZDc0YzguLjg2Njc5ZjMz
YzViOTVhNmNkY2E0MWQ0NTNmZmE3MGRiNTMzYWM5N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC0yNCw3ICsyNCw4IEBACiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8
U2tCaXRtYXAuaD4KKwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXI7CiAKICNkZWZpbmUgREVCVUdfVEVYVFVSRV9NRU1PUllfVVNBR0UgMAogCkBAIC01Nyw0MiAr
NTgsMjMgQEAgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OlRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkKCkKIHsKIH0KIAotdW5zaWduZWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQ6OmFsbG9jYXRlVGV4dHVyZUlkKCkKK1RleHR1cmU6OkdwdUhhbmRsZSBUZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZDo6YWxsb2NhdGVUZXh0dXJlSWQoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlIHR5cGUpCiB7Ci0g
ICAgdW5zaWduZWQgdGV4aWQ7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4aWQpOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4aWQpOwotICAgIGlmICghZ2xJc1RleHR1cmUo
dGV4aWQpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0
ZXJpbmcgb24gcmVzaXplLgotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAvLyBOUE9U
IHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRv
IEdMX0NMQU1QX1RPX0VER0UuCi0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IHJldHVybiB0ZXhpZDsKKyAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpjcmVhdGVCdWZmZXIoc2l6ZSwgdHlwZSk7CiB9CiAKLXZvaWQgVGV4dHVyZUNhY2hlQ29tcG9z
aXRpbmdUaHJlYWQ6OmZyZWVUZXh0dXJlSWQodW5zaWduZWQgaWQpCitzdGF0aWMgdm9pZCBmcmVl
VGV4dHVyZUlkKFRleHR1cmU6OkdwdUhhbmRsZSBpZCkKIHsKLSAgICBpZiAoaWQpCi0gICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJmlkKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OmRlc3Ryb3lCdWZmZXIoaWQpOwogfQogCiB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkOjpjb2xsZWN0R2FyYmFnZSgpCiB7Ci0gICAgaW50IGRlbHRhID0gMDsKLQogICAg
IGZvciAoR2FyYmFnZTo6aXRlcmF0b3IgaXQgPSBtX2dhcmJhZ2UuYmVnaW4oKTsgaXQgIT0gbV9n
YXJiYWdlLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFpvbWJpZVRleHR1cmUmIHpvbWJpZSA9ICpp
dDsKICAgICAgICAgZnJlZVRleHR1cmVJZCh6b21iaWUuaWQpOwotICAgICAgICBkZWx0YSArPSB6
b21iaWUuc2l6ZS53aWR0aCgpICogem9tYmllLnNpemUuaGVpZ2h0KCkgKiBUZXh0dXJlOjpieXRl
c1BlclBpeGVsKCk7CiAgICAgfQogICAgIG1fZ2FyYmFnZS5jbGVhcigpOwotCi0gICAgaWYgKGRl
bHRhKQotICAgICAgICBkZWNNZW1vcnlVc2FnZShkZWx0YSk7CiB9CiAKIHZvaWQgVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVSZXNpemVkKFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0IEludFNpemUmIG9sZFNpemUpCkBAIC0xMDMsNiArODUsMTMgQEAgdm9pZCBUZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZVJlc2l6ZWQoVGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgSW50U2kKICAgICAgICAgcHJ1bmUoKTsKIH0KIAordm9pZCBUZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZDo6dGV4dHVyZVNpemVJbkJ5dGVzQ2hhbmdlZChUZXh0dXJlKiwgaW50IGRlbHRh
KQoreworICAgIGluY01lbW9yeVVzYWdlKGRlbHRhKTsKKyAgICBpZiAoZGVsdGEgPiAwKQorICAg
ICAgICBwcnVuZSgpOworfQorCiB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0
ZXh0dXJlRGVzdHJveWVkKFRleHR1cmUqIHRleHR1cmUpCiB7CiAgICAgaWYgKHRleHR1cmUtPmlz
Q29sb3IoKSkgewpAQCAtMTEwLDI3ICs5OSw0NSBAQCB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkOjp0ZXh0dXJlRGVzdHJveWVkKFRleHR1cmUqIHRleHR1cmUpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBldmljdChtX3RleHR1cmVzLmZpbmQodGV4dHVyZSkpOworICAg
IFRleHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRleHR1cmUpOworICAg
IGV2aWN0KGl0KTsKKyAgICBtX3RleHR1cmVzLnJlbW92ZShpdCk7CiB9CiAKLWJvb2wgVGV4dHVy
ZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6Omluc3RhbGwoVGV4dHVyZSogdGV4dHVyZSkKK2Jvb2wg
VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6Omluc3RhbGwoVGV4dHVyZSogdGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXJUeXBlIHR5cGUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmICghdGV4dHVyZS0+aGFzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRl
eHR1cmVJZCA9IGFsbG9jYXRlVGV4dHVyZUlkKCk7CisgICAgaWYgKCF0ZXh0dXJlLT5oYXNUZXh0
dXJlKCkgJiYgIXNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIFRleHR1cmU6OkdwdUhhbmRsZSB0
ZXh0dXJlSWQgPSBhbGxvY2F0ZVRleHR1cmVJZChzaXplLCB0eXBlKTsKICAgICAgICAgaWYgKCF0
ZXh0dXJlSWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdGV4dHVyZS0+
c2V0VGV4dHVyZUlkKHRleHR1cmVJZCk7CisgICAgICAgIHRleHR1cmUtPnNldFNpemUoc2l6ZSk7
CisgICAgICAgIHRleHR1cmVSZXNpemVkKHRleHR1cmUsIEludFNpemUoKSk7CiAgICAgfQogCi0g
ICAgaWYgKCF0ZXh0dXJlLT5pc0NvbG9yKCkpIHsKLSAgICAgICAgaWYgKCFtX3RleHR1cmVzLmNv
bnRhaW5zKHRleHR1cmUpKQotICAgICAgICAgICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7Ci0g
ICAgfQorICAgIGlmICghdGV4dHVyZS0+aXNDb2xvcigpKQorICAgICAgICBtX3RleHR1cmVzLmFk
ZCh0ZXh0dXJlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkOjpyZXNpemVUZXh0dXJlKFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFNpemUmIHNpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSB0
eXBlKQoreworICAgIEludFNpemUgb2xkU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKKworICAgIC8v
IFJlYWxsb2NhdGUgdGhlIGJ1ZmZlcgorICAgIFRleHR1cmU6OkdwdUhhbmRsZSB0ZXh0dXJlSWQg
PSBhbGxvY2F0ZVRleHR1cmVJZChzaXplLCB0eXBlKTsKKyAgICBpZiAoIXRleHR1cmVJZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZnJlZVRleHR1cmVJZCh0ZXh0dXJlLT50ZXh0dXJl
SWQoKSk7CisgICAgdGV4dHVyZS0+c2V0VGV4dHVyZUlkKHRleHR1cmVJZCk7CisgICAgdGV4dHVy
ZS0+c2V0U2l6ZShzaXplKTsKKyAgICB0ZXh0dXJlUmVzaXplZCh0ZXh0dXJlLCBvbGRTaXplKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQwLDEyICsxNDcsMTYgQEAgdm9pZCBUZXh0dXJl
Q2FjaGVDb21wb3NpdGluZ1RocmVhZDo6ZXZpY3QoY29uc3QgVGV4dHVyZVNldDo6aXRlcmF0b3Im
IGl0KQogICAgICAgICByZXR1cm47CiAKICAgICBUZXh0dXJlKiB0ZXh0dXJlID0gKml0OwotICAg
IGlmICh0ZXh0dXJlLT5oYXNUZXh0dXJlKCkpCisgICAgaWYgKHRleHR1cmUtPmhhc1RleHR1cmUo
KSkgeworICAgICAgICBpbnQgZGVsdGEgPSAwOworICAgICAgICBkZWx0YSArPSB0ZXh0dXJlLT53
aWR0aCgpICogdGV4dHVyZS0+aGVpZ2h0KCkgKiBUZXh0dXJlOjpieXRlc1BlclBpeGVsKCk7Cisg
ICAgICAgIGRlbHRhICs9IHRleHR1cmUtPnNpemVJbkJ5dGVzKCk7CisgICAgICAgIGlmIChkZWx0
YSkKKyAgICAgICAgICAgIGRlY01lbW9yeVVzYWdlKGRlbHRhKTsKICAgICAgICAgbV9nYXJiYWdl
LmFwcGVuZChab21iaWVUZXh0dXJlKHRleHR1cmUpKTsKKyAgICB9CiAKICAgICB0ZXh0dXJlLT5z
ZXRUZXh0dXJlSWQoMCk7Ci0KLSAgICBtX3RleHR1cmVzLnJlbW92ZShpdCk7CiB9CiAKIHZvaWQg
VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVBY2Nlc3NlZChUZXh0dXJlKiB0
ZXh0dXJlKQpAQCAtMTczLDcgKzE4NCw3IEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdU
aHJlYWQ6OnBydW5lKHNpemVfdCBsaW1pdCkKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwog
ICAgICAgICBmb3IgKFRleHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigp
OyBpdCAhPSBtX3RleHR1cmVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBUZXh0dXJlKiB0
ZXh0dXJlID0gKml0OwotICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzUHJvdGVjdGVkKCkpCisg
ICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNQcm90ZWN0ZWQoKSB8fCAodGV4dHVyZS0+c2l6ZSgp
LmlzRW1wdHkoKSAmJiAhdGV4dHVyZS0+c2l6ZUluQnl0ZXMoKSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBldmljdChpdCk7CiAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CkBAIC0xODYsNyArMTk3LDYgQEAgdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZDo6cHJ1bmUoc2l6ZV90IGxpbWl0KQogCiB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjpjbGVhcigpCiB7Ci0gICAgbV9jYWNoZS5jbGVhcigpOwogICAgIG1fY29sb3JzLmNsZWFy
KCk7CiAgICAgY29sbGVjdEdhcmJhZ2UoKTsKIH0KQEAgLTE5OSwzMiArMjA5LDE1IEBAIHZvaWQg
VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldE1lbW9yeVVzYWdlKHNpemVfdCBtZW1v
cnlVc2FnZSkKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYg
Y29udGVudHMsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUaWxlSW5kZXgmIGluZGV4
LCBib29sIGlzT3BhcXVlKQorUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZDo6dGV4dHVyZUZvclRpbGVkQ29udGVudHMoY29uc3QgVGV4dHVyZTo6SG9zdFR5
cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVGlsZUluZGV4JiBp
bmRleCwgYm9vbCBpc09wYXF1ZSkKIHsKLSAgICBIYXNoTWFwPENvbnRlbnRzS2V5LCBUZXh0dXJl
TWFwPjo6aXRlcmF0b3IgaXQgPSBtX2NhY2hlLmFkZChrZXkoY29udGVudHMpLCBUZXh0dXJlTWFw
KCkpLml0ZXJhdG9yOwotICAgIFRleHR1cmVNYXAmIG1hcCA9ICgqaXQpLnZhbHVlOwotCi0gICAg
VGV4dHVyZU1hcDo6aXRlcmF0b3IganQgPSBtYXAuYWRkKGluZGV4LCBSZWZQdHI8VGV4dHVyZT4o
KSkuaXRlcmF0b3I7Ci0gICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSAoKmp0KS52YWx1ZTsK
LSAgICBpZiAoIXRleHR1cmUpIHsKLSAgICAgICAgdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsK
LSNpZiBERUJVR19URVhUVVJFX01FTU9SWV9VU0FHRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNyZWF0aW5nIHRleHR1cmUgMHgleCBmb3IgMHgleCslZCBAICglZCwgJWQpXG4iLCB0ZXh0dXJl
LmdldCgpLCBjb250ZW50cy5waXhlbFJlZigpLCBjb250ZW50cy5waXhlbFJlZk9mZnNldCgpLCBp
bmRleC5pKCksIGluZGV4LmooKSk7Ci0jZW5kaWYKLSAgICAgICAgbWFwLnNldChpbmRleCwgdGV4
dHVyZSk7Ci0gICAgfQorICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gY3JlYXRlVGV4dHVy
ZSgpOwogCiAgICAgLy8gUHJvdGVjdCBuZXdseSBjcmVhdGVkIHRleHR1cmUgZnJvbSBiZWluZyBl
dmljdGVkLgogICAgIFRleHR1cmVQcm90ZWN0b3IgcHJvdGVjdG9yKHRleHR1cmUuZ2V0KCkpOwog
Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoY29udGVudHMud2lkdGgoKSwgY29udGVudHMuaGVp
Z2h0KCkpOwotICAgIEludFJlY3QgZGlydHlSZWN0KEludFBvaW50KCksIGNvbnRlbnRzU2l6ZSk7
Ci0gICAgaWYgKHRpbGVSZWN0LnNpemUoKSAhPSB0ZXh0dXJlLT5zaXplKCkpIHsKLSNpZiBERUJV
R19URVhUVVJFX01FTU9SWV9VU0FHRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVwZGF0aW5n
IHRleHR1cmUgMHgleCBmb3IgMHgleCslZCBAICglZCwgJWQpXG4iLCB0ZXh0dXJlLmdldCgpLCBj
b250ZW50cy5waXhlbFJlZigpLCBjb250ZW50cy5waXhlbFJlZk9mZnNldCgpLCBpbmRleC5pKCks
IGluZGV4LmooKSk7Ci0jZW5kaWYKLSAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoY29u
dGVudHMsIGRpcnR5UmVjdCwgdGlsZVJlY3QsIGlzT3BhcXVlKTsKLSAgICB9CisgICAgdGV4dHVy
ZS0+dXBkYXRlQ29udGVudHMoY29udGVudHMsIHRpbGVSZWN0LCB0aWxlUmVjdCwgaXNPcGFxdWUp
OworCiAgICAgcmV0dXJuIHRleHR1cmUucmVsZWFzZSgpOwogfQogCkBAIC0yNTQsNyArMjQ3LDcg
QEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4
dHVyZUZvckNvbG9yKGNvbnN0IENvbG9yJgogICAgIHJldHVybiB0ZXh0dXJlLnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6
dXBkYXRlQ29udGVudHMoY29uc3QgUmVmUHRyPFRleHR1cmU+JiB0ZXh0dXJlSW4sIGNvbnN0IFNr
Qml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCwgYm9vbCBpc09wYXF1ZSkKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IFJlZlB0cjxUZXh0dXJl
PiYgdGV4dHVyZUluLCBjb25zdCBUZXh0dXJlOjpIb3N0VHlwZSYgY29udGVudHMsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGJvb2wgaXNPcGFxdWUp
CiB7CiAgICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUodGV4dHVyZUluKTsKIApAQCAtMjY2LDM2
ICsyNTksMTIgQEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZDo6dXBkYXRlQ29udGVudHMoY29uc3QgUmVmUHRyPFQKICAgICAvLyBQcm90ZWN0IG5ld2x5
IGNyZWF0ZWQgdGV4dHVyZSBmcm9tIGJlaW5nIGV2aWN0ZWQuCiAgICAgVGV4dHVyZVByb3RlY3Rv
ciBwcm90ZWN0b3IodGV4dHVyZS5nZXQoKSk7CiAKKy8vIFRPRE86IGlmIHRoaXMgaXMgYSBwYXJ0
aWFsIHVwZGF0ZSB3ZSBuZWVkIHRvIGJsaXQgdGhlIGJ1ZmZlciBvbiB0b3Agb2YgdGhlIG90aGVy
CiAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoY29udGVudHMsIGRpcnR5UmVjdCwgdGlsZVJl
Y3QsIGlzT3BhcXVlKTsKIAogICAgIHJldHVybiB0ZXh0dXJlLnJlbGVhc2UoKTsKIH0KIAotVGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OkNvbnRlbnRzS2V5IFRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkOjprZXkoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzKQotewotICAgIC8vIFRo
ZSBwaXhlbFJlZiBpcyBhbiBhZGRyZXNzLCBhbmQgYWRkcmVzc2VzIGNhbiBiZSByZXVzZWQgYnkg
dGhlIGFsbG9jYXRvcgotICAgIC8vIHNvIGl0J3MgdW5zdWl0YWJsZSB0byB1c2UgYXMgYSBrZXku
IEluc3RlYWQsIGdyYWIgdGhlIGdlbmVyYXRpb24sIHdoaWNoCi0gICAgLy8gaXMgZ2xvYmFsbHkg
dW5pcXVlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpbgotICAgIC8v
IFNrUGl4ZWxSZWYuY3BwLgotICAgIHVpbnQzMl90IGdlbmVyYXRpb24gPSBjb250ZW50cy5nZXRH
ZW5lcmF0aW9uSUQoKTsKLQotICAgIC8vIElmIHRoZSBnZW5lcmF0aW9uIGlzIGVxdWFsIHRvIHRo
ZSBkZWxldGVkIHZhbHVlLCB1c2Ugc29tZXRoaW5nIGVsc2UgdGhhdAotICAgIC8vIGlzIHVubGlr
ZWx5IHRvIGNvcnJlc3BvbmQgdG8gYSBnZW5lcmF0aW9uIGN1cnJlbnRseSBpbiB1c2Ugb3Igc29v
biB0byBiZQotICAgIC8vIGluIHVzZS4KLSAgICB1aW50MzJfdCBkZWxldGVkVmFsdWUgPSAwOwot
ICAgIEhhc2hUcmFpdHM8dWludDMyX3Q+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUoZGVsZXRlZFZh
bHVlKTsKLSAgICBpZiAoZ2VuZXJhdGlvbiA9PSBkZWxldGVkVmFsdWUpIHsKLSAgICAgICAgLy8g
VGhpcyBzdHJhdGVneSB3b3JrcyBhcyBsb25nIGFzIHRoZSBkZWxldGVkIHZhbHVlIGlzIC0xLgot
ICAgICAgICBBU1NFUlQoZGVsZXRlZFZhbHVlID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkp
OwotICAgICAgICBnZW5lcmF0aW9uID0gZGVsZXRlZFZhbHVlIC8gMjsKLSAgICB9Ci0KLSAgICAv
LyBOb3cgdGhlIGdlbmVyYXRpb24gYWxvbmUgZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhl
IHRleHR1cmUgY29udGVudHMuCi0gICAgLy8gVGhlIHNhbWUgcGl4ZWxyZWYgY2FuIGJlIHJldXNl
ZCBpbiBhbm90aGVyIGJpdG1hcCBidXQgd2l0aCBhIGRpZmZlcmVudAotICAgIC8vIG9mZnNldCAo
c29tZXdoYXQgY29udHJpdmVkLCBidXQgcG9zc2libGUpLgotICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihnZW5lcmF0aW9uLCBjb250ZW50cy5waXhlbFJlZk9mZnNldCgpKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNh
Y2hlQ29tcG9zaXRpbmdUaHJlYWQuaAppbmRleCBkZjc3OTJmYTJmMjdlMzIyY2ZhYzM2MjRjZGM0
ZDBiNzY1NTVjZDZlLi5kOTYxZjUxMTY0YWMxYzlkOTczMGM4NmYzOWE4MzM0NTVjNjgwNDYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1Rl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oCkBA
IC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUaWxlSW5kZXguaCIKICNpbmNsdWRlICJU
ZXh0dXJlLmgiCiAKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMSArNTEsMTEgQEAgcHVibGljOgogICAg
IH0KIAogICAgIC8vIFJldHJpZXZlIGEgdGV4dHVyZSBmcm9tIHRoZSBjYWNoZS4KLSAgICBQYXNz
UmVmUHRyPFRleHR1cmU+IHRleHR1cmVGb3JUaWxlZENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBj
b250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYsIGJvb2wg
aXNPcGFxdWUpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZUZvclRpbGVkQ29udGVu
dHMoY29uc3QgVGV4dHVyZTo6SG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgVGlsZUluZGV4JiwgYm9vbCBpc09wYXF1ZSk7CiAgICAgUGFzc1JlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlRm9yQ29sb3IoY29uc3QgQ29sb3ImKTsKIAogICAgIC8vIFVwZGF0ZSBj
b250ZW50cyBvZiBhbiBleGlzdGluZyB0ZXh0dXJlLCBvciBjcmVhdGUgYSBuZXcgb25lIGlmIHRl
eHR1cmUgaXMgMC4KLSAgICBQYXNzUmVmUHRyPFRleHR1cmU+IHVwZGF0ZUNvbnRlbnRzKGNvbnN0
IFJlZlB0cjxUZXh0dXJlPiYsIGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgYm9vbCBpc09wYXF1ZSk7Cisg
ICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB1cGRhdGVDb250ZW50cyhjb25zdCBSZWZQdHI8VGV4dHVy
ZT4mLCBjb25zdCBUZXh0dXJlOjpIb3N0VHlwZSYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGJvb2wgaXNPcGFxdWUpOwogCiAgICAg
c2l6ZV90IG1lbW9yeVVzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2FnZTsgfQogICAg
IHNpemVfdCBtZW1vcnlMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5TGltaXQ7IH0KQEAg
LTc3LDM4ICs3OCwzOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRleHR1cmVEZXN0cm95ZWQoVGV4
dHVyZSopOwogICAgIHZvaWQgdGV4dHVyZVJlc2l6ZWQoVGV4dHVyZSosIGNvbnN0IEludFNpemUm
IG9sZFNpemUpOworICAgIHZvaWQgdGV4dHVyZVNpemVJbkJ5dGVzQ2hhbmdlZChUZXh0dXJlKiwg
aW50IGRlbHRhKTsKIAogICAgIC8vIFVuZG8gdGhlIGVmZmVjdHMgb2YgZXZpY3Rpb24sIGlmIHBv
c3NpYmxlLgotICAgIGJvb2wgaW5zdGFsbChUZXh0dXJlKik7CisgICAgYm9vbCBpbnN0YWxsKFRl
eHR1cmUqLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSA9IEludFNpemUoMCwgMCksIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5lY2Vzc2FyeSk7CisgICAgYm9vbCByZXNpemVUZXh0
dXJlKFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBuZXdTaXplLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkJhY2tlZFdoZW5OZWNlc3NhcnkpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBab21iaWVUZXh0
dXJlIHsKICAgICAgICAgZXhwbGljaXQgWm9tYmllVGV4dHVyZShUZXh0dXJlKiB0ZXh0dXJlKQog
ICAgICAgICAgICAgOiBpZCh0ZXh0dXJlLT50ZXh0dXJlSWQoKSkKICAgICAgICAgICAgICwgc2l6
ZSh0ZXh0dXJlLT5zaXplKCkpCisgICAgICAgICAgICAsIHNpemVJbkJ5dGVzKHRleHR1cmUtPnNp
emVJbkJ5dGVzKCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGlk
OworICAgICAgICBUZXh0dXJlOjpHcHVIYW5kbGUgaWQ7CiAgICAgICAgIEludFNpemUgc2l6ZTsK
KyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzOwogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFz
aFNldDxUZXh0dXJlKiA+IFRleHR1cmVTZXQ7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8dWludDMy
X3QsIHNpemVfdD4gQ29udGVudHNLZXk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwg
UmVmUHRyPFRleHR1cmU+ID4gVGV4dHVyZU1hcDsKICAgICB0eXBlZGVmIFZlY3Rvcjxab21iaWVU
ZXh0dXJlPiBHYXJiYWdlOwogCiAgICAgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKTsK
ICAgICB+VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKTsKIAotICAgIHVuc2lnbmVkIGFs
bG9jYXRlVGV4dHVyZUlkKCk7Ci0gICAgdm9pZCBmcmVlVGV4dHVyZUlkKHVuc2lnbmVkIGlkKTsK
KyAgICBUZXh0dXJlOjpHcHVIYW5kbGUgYWxsb2NhdGVUZXh0dXJlSWQoY29uc3QgSW50U2l6ZSYg
dGV4dHVyZVNpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSk7
CiAKICAgICB2b2lkIGluY01lbW9yeVVzYWdlKGludCBkZWx0YSkgeyBzZXRNZW1vcnlVc2FnZSht
ZW1vcnlVc2FnZSgpICsgZGVsdGEpOyB9CiAgICAgdm9pZCBkZWNNZW1vcnlVc2FnZShpbnQgZGVs
dGEpIHsgc2V0TWVtb3J5VXNhZ2UobWVtb3J5VXNhZ2UoKSAtIGRlbHRhKTsgfQogICAgIHZvaWQg
c2V0TWVtb3J5VXNhZ2Uoc2l6ZV90KTsKIAotICAgIENvbnRlbnRzS2V5IGtleShjb25zdCBTa0Jp
dG1hcCYgY29udGVudHMpOwotCiAgICAgdm9pZCBldmljdChjb25zdCBUZXh0dXJlU2V0OjppdGVy
YXRvciYpOwogCiAgICAgLy8gTFJVIHNldCBvZiB3ZWFrIHBvaW50ZXJzIHRvIHRleHR1cmVzLgpA
QCAtMTE2LDggKzExNyw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fbWVtb3J5VXNhZ2U7CiAg
ICAgc2l6ZV90IG1fbWVtb3J5TGltaXQ7CiAKLSAgICAvLyBNYXAgb2YgcmVmQ291bnRlZCBwb2lu
dGVycyB0byB0ZXh0dXJlcy4KLSAgICBIYXNoTWFwPENvbnRlbnRzS2V5LCBUZXh0dXJlTWFwPiBt
X2NhY2hlOwogICAgIHN0cnVjdCBDb2xvckhhc2ggewogICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDb2xvciYga2V5KSB7IHJldHVybiBXVEY6OmludEhhc2goa2V5LnJnYigpKTsg
fQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3Im
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9za2lhL0ltYWdlQnVmZmVyRGF0YVNraWEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9JbWFnZUJ1ZmZlckRh
dGFTa2lhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMjQ2YzA5ZDg3N2ExYWMx
MThmYmVjNjgxM2VhYzllZDEzZjc3YzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9za2lhL0ltYWdlQnVmZmVyRGF0YVNraWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFJlc2VhcmNoIEluIE1vdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlQnVmZmVyRGF0YVNraWFfaAotI2RlZmluZSBJ
bWFnZUJ1ZmZlckRhdGFTa2lhX2gKLQotI2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybUdyYXBo
aWNzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJDYW52YXNMYXllcldlYktpdFRocmVhZC5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsK
LXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgT3du
UHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZv
cm1Db250ZXh0OwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ+IG1fcGxhdGZvcm1MYXllcjsKLSNlbmRpZgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhU2tpYV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L3NraWEvUGxhdGZvcm1TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvc2tpYS9QbGF0Zm9ybVN1cHBvcnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwOWNlYWQ4MjU0NzYxOGU0OWU4ODkyZmZiM2MxZmFmNTJjMmM2NmUwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9QbGF0Zm9ybVN1cHBvcnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDktMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAxMSwgUmVzZWFyY2ggSW4gTW90aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotI2luY2x1ZGUgIkZvbnRS
ZW5kZXJTdHlsZS5oIgotCi0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Ci0jaW5j
bHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91dGYxNi5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBz
ZXRGb250UmVuZGVyU3R5bGVEZWZhdWx0cyhGb250UmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAg
IHN0eWxlLT51c2VCaXRtYXBzID0gMjsKLSAgICBzdHlsZS0+dXNlQXV0b0hpbnQgPSAyOwotICAg
IHN0eWxlLT51c2VIaW50aW5nID0gMjsKLSAgICBzdHlsZS0+aGludFN0eWxlID0gMDsKLSAgICBz
dHlsZS0+dXNlQW50aUFsaWFzID0gMjsKLSAgICBzdHlsZS0+dXNlU3VicGl4ZWxSZW5kZXJpbmcg
PSAyOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2Uo
Y29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIG91
dCkKLXsKLSAgICBib29sIGlzQm9sZCA9IHNpemVBbmRTdHlsZSAmIDE7Ci0gICAgYm9vbCBpc0l0
YWxpYyA9IHNpemVBbmRTdHlsZSAmIDI7Ci0gICAgaW50IHBpeGVsU2l6ZSA9IHNpemVBbmRTdHls
ZSA+PiAyOwotCi0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7Ci0g
ICAgRmNWYWx1ZSBmY3ZhbHVlOwotCi0gICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlU3RyaW5nOwot
ICAgIGZjdmFsdWUudS5zID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4ICo+KGZhbWls
eSk7Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0ZBTUlMWSwgZmN2YWx1ZSwgRmNGYWxz
ZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVJbnRlZ2VyOwotICAgIGZjdmFsdWUudS5p
ID0gaXNCb2xkID8gRkNfV0VJR0hUX0JPTEQgOiBGQ19XRUlHSFRfTk9STUFMOwotICAgIEZjUGF0
dGVybkFkZChwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjdmFsdWUsIEZjRmFsc2UpOwotCi0gICAgZmN2
YWx1ZS50eXBlID0gRmNUeXBlSW50ZWdlcjsKLSAgICBmY3ZhbHVlLnUuaSA9IGlzSXRhbGljID8g
RkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU47Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRl
cm4sIEZDX1NMQU5ULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIGZjdmFsdWUudHlwZSA9IEZj
VHlwZUJvb2w7Ci0gICAgZmN2YWx1ZS51LmIgPSBGY1RydWU7Ci0gICAgRmNQYXR0ZXJuQWRkKHBh
dHRlcm4sIEZDX1NDQUxBQkxFLCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIGZjdmFsdWUudHlw
ZSA9IEZjVHlwZURvdWJsZTsKLSAgICBmY3ZhbHVlLnUuZCA9IHBpeGVsU2l6ZTsKLSAgICBGY1Bh
dHRlcm5BZGQocGF0dGVybiwgRkNfU0laRSwgZmN2YWx1ZSwgRmNGYWxzZSk7Ci0KLSAgICBGY0Nv
bmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOwotICAgIEZjRGVmYXVs
dFN1YnN0aXR1dGUocGF0dGVybik7Ci0KLSAgICBGY1Jlc3VsdCByZXN1bHQ7Ci0gICAgLy8gU29t
ZSB2ZXJzaW9ucyBvZiBmb250Y29uZmlnIGRvbid0IGFjdHVhbGx5IHdyaXRlIGEgdmFsdWUgaW50
byByZXN1bHQuCi0gICAgLy8gSG93ZXZlciwgaXQncyBub3QgY2xlYXIgZnJvbSB0aGUgZG9jdW1l
bnRhdGlvbiBpZiByZXN1bHQgc2hvdWxkIGJlIGEKLSAgICAvLyBub24tMCBwb2ludGVyOiBmdXR1
cmUgdmVyc2lvbnMgbWlnaHQgZXhwZWN0IHRvIGJlIGFibGUgdG8gd3JpdGUgdG8KLSAgICAvLyBp
dC4gU28gd2UgcGFzcyBpbiBhIHZhbGlkIHBvaW50ZXIgYW5kIGlnbm9yZSBpdC4KLSAgICBGY1Bh
dHRlcm4qIG1hdGNoID0gRmNGb250TWF0Y2goMCwgcGF0dGVybiwgJnJlc3VsdCk7Ci0gICAgRmNQ
YXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKLQotICAgIHNldEZvbnRSZW5kZXJTdHlsZURlZmF1bHRz
KG91dCk7Ci0KLSAgICBpZiAoIW1hdGNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGY0Jvb2wg
Ym9vbFZhbHVlOwotICAgIGludCBpbnRWYWx1ZTsKLQotICAgIGlmIChGY1BhdHRlcm5HZXRCb29s
KG1hdGNoLCBGQ19BTlRJQUxJQVMsIDAsICZib29sVmFsdWUpID09IEZjUmVzdWx0TWF0Y2gpCi0g
ICAgICAgIG91dC0+dXNlQW50aUFsaWFzID0gYm9vbFZhbHVlOwotICAgIGlmIChGY1BhdHRlcm5H
ZXRCb29sKG1hdGNoLCBGQ19FTUJFRERFRF9CSVRNQVAsIDAsICZib29sVmFsdWUpID09IEZjUmVz
dWx0TWF0Y2gpCi0gICAgICAgIG91dC0+dXNlQml0bWFwcyA9IGJvb2xWYWx1ZTsKLSAgICBpZiAo
RmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNfQVVUT0hJTlQsIDAsICZib29sVmFsdWUpID09IEZj
UmVzdWx0TWF0Y2gpCi0gICAgICAgIG91dC0+dXNlQXV0b0hpbnQgPSBib29sVmFsdWU7Ci0gICAg
aWYgKEZjUGF0dGVybkdldEJvb2wobWF0Y2gsIEZDX0hJTlRJTkcsIDAsICZib29sVmFsdWUpID09
IEZjUmVzdWx0TWF0Y2gpCi0gICAgICAgIG91dC0+dXNlSGludGluZyA9IGJvb2xWYWx1ZTsKLQot
ICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKG1hdGNoLCBGQ19SR0JBLCAwLCAmaW50VmFsdWUp
ID09IEZjUmVzdWx0TWF0Y2gpIHsKLSAgICAgICAgc3dpdGNoIChpbnRWYWx1ZSkgewotICAgICAg
ICBjYXNlIEZDX1JHQkFfTk9ORToKLSAgICAgICAgICAgIG91dC0+dXNlU3VicGl4ZWxSZW5kZXJp
bmcgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkNfUkdCQV9SR0I6Ci0g
ICAgICAgIGNhc2UgRkNfUkdCQV9CR1I6Ci0gICAgICAgIGNhc2UgRkNfUkdCQV9WUkdCOgotICAg
ICAgICBjYXNlIEZDX1JHQkFfVkJHUjoKLSAgICAgICAgICAgIG91dC0+dXNlU3VicGl4ZWxSZW5k
ZXJpbmcgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAvLyBUaGlzIGluY2x1ZGVzIEZDX1JHQkFfVU5LTk9XTi4KLSAgICAgICAgICAgIG91dC0+
dXNlU3VicGl4ZWxSZW5kZXJpbmcgPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBGY1BhdHRlcm5EZXN0cm95KG1hdGNoKTsKLX0KLQotfTsgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvc2tpYS9QbGF0Zm9ybVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9QbGF0Zm9ybVN1cHBvcnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjMDQzYmRjY2IwOTIxMmY1YjUwMGZhMGY1MjQ2N2NlYWU1
YzNjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L3NraWEvUGxhdGZvcm1TdXBw
b3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChj
KSAyMDExLCBSZXNlYXJjaCBJbiBNb3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0
Zm9ybVN1cHBvcnRfaAotI2RlZmluZSBQbGF0Zm9ybVN1cHBvcnRfaAotCi0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEZvbnRS
ZW5kZXJTdHlsZTsKLQotLy8gVGhpcyBpcyBhIG1pbmltYWwgdmVyc2lvbiBvZiB0aGUgQ2hyb21p
dW0gUGxhdGZvcm1TdXBwb3J0L1dlYkZvbnRJbmZvIGNsYXNzZXMgdXNlZCBmb3IgZm9udCBzdXBw
b3J0LgotY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBn
ZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5
bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190965</attachid>
            <date>2013-03-01 07:39:53 -0800</date>
            <delta_ts>2013-03-01 09:45:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111072-20130301163603.patch</filename>
            <type>text/plain</type>
            <size>263441</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhmM2ZiMzAyOTRmMzM0
NGZiMGFlZmUyN2M1NTg5NjFlYWYwZWRkYS4uNzQ2NTM4OTM3ZWQxYWM1NjYzZDM1MTA1MWM4ZGNj
N2ExMjc0NWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxNiBAQAorMjAxMy0wMy0wMSAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIFVw
c3RyZWFtIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R3JhcGhpY3NDb250ZXh0IGlu
dGVncmF0aW9uIHJlbGF0ZWQgY2hhbmdlcyBpbiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEwNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbGFja0Jl
cnJ5IFBSIDI5MzIwOAorCisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgY29udHJpYnV0aW9u
cyBmcm9tIG1hbnkgbWVtYmVycyBvZiB0aGUgQmxhY2tCZXJyeQorICAgICAgICBXZWJLaXQgdGVh
bToKKworICAgICAgICBSb2IgQnVpcworICAgICAgICBSb2JpbiBDYW8KKyAgICAgICAgTWljaGFl
bCBDYXJtb2R5CisgICAgICAgIE1heCBGZWlsCisgICAgICAgIEVsaSBGaWRsZXIKKyAgICAgICAg
QW50b25pbyBHb21lcworICAgICAgICBKYWNreSBKaWFuZworICAgICAgICBNaWtlIExhdHRhbnpp
bworICAgICAgICBZb25nIExpCisgICAgICAgIEFuZHJldyBMbworICAgICAgICBNYXhpbSBNb2dp
bG5pdHNreQorICAgICAgICBKb3NodWEgTmV0dGVyZmllbGQKKyAgICAgICAgQXJ2aWQgTmlsc3Nv
bgorICAgICAgICBKYWtvYiBQZXRzb3ZpdHMKKyAgICAgICAgS29ucmFkIFBpYXNjaWsKKyAgICAg
ICAgSmVmZiBSb2dlcnMKKyAgICAgICAgQXJ0ZW0gU2ltb25vdgorICAgICAgICBGaWxpcCBTcGFj
ZWsKKyAgICAgICAgR2VvcmdlIFN0YWlrb3MKKyAgICAgICAgQ29zbWluIFRydXRhCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAgICAg
KENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJDb21wb3NpdGluZ1RocmVh
ZERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
Y2xlYXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6OmRyYXdUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkZWxldGVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojpjb21taXRQZW5kaW5nVGV4dHVy
ZVVwbG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OkNh
bnZhc0xheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkOjp+Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OmNsZWFyQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpj
cmVhdGUpOgorICAgICAgICAoQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRGlzcGxheVJlZnJlc2hNb25pdG9yQmxhY2tCZXJy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlM
aW5rRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojp+
RUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQ6OmRyYXdUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6YmluZENvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ6OnNldFRleHR1cmVBY2Nlc3Nvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaDoKKyAgICAgICAg
KEdyYXBoaWNzKToKKyAgICAgICAgKEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OkVHTEltYWdlTGF5
ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllcldlYktpdFRo
cmVhZDo6fkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdM
SW1hZ2VMYXllcldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6ZGVsZXRlRnJvbnRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6Y29tbWl0UGVuZGluZ1Rl
eHR1cmVVcGxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJl
YWQ6OmNyZWF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxh
eWVyV2ViS2l0VGhyZWFkOjpibGl0VG9Gcm9udEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmg6CisgICAgICAg
IChHcmFwaGljcyk6CisgICAgICAgIChFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UmVjdEJsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojpub3JtYWxpemVkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udENhY2hl
QmxhY2tiZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xheWVyQmxhY2tC
ZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6R3Jh
cGhpY3NMYXllckJsYWNrQmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJs
YWNrQmVycnk6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQmxhY2tCZXJyeTo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVu
dHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckJsYWNrQmVy
cnk6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQmxh
Y2tCZXJyeTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0dXBDb250ZW50c0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5Lmg6CisgICAgICAgIChHcmFwaGljc0xheWVyQmxhY2tCZXJyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW5zdHJ1bWVudGVkUGxh
dGZvcm1DYW52YXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmg6CisgICAgICAgIChHcmFwaGljcyk6CisgICAgICAg
IChMYXllckNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaDoKKyAgICAgICAgKEdyYXBo
aWNzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
Ojpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJEYXRhOjpMYXllckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjpjb250
ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCk6CisgICAgICAgIChMYXllckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjpsYXllclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJEYXRhOjppc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJEYXRhOjppc0ZpeGVkVG9Ub3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJEYXRhOjppc0ZpeGVkVG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6ZnJh
bWVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmZyYW1lQ29udGVu
dHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Y29udGVudHNTY2FsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5k
ZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckZpbHRlclJlbmRlcmVyOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVu
ZGVyZXI6OnBvbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cHVz
aFNuYXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OnBvcFNu
YXBzaG90KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OmFwcGx5QWN0
aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRl
cmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlcjo6TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjp+
TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpzZXRWaWV3
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmRyYXdDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmdsUm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dG9PcGVuR0xXaW5kb3dDb29y
ZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpkcmF3RGVidWdCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6ZHJhd0hvbGVQdW5jaFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVyc1JlY3Vy
c2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpjcmVhdGVQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OnVzZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXNlTGF5ZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVy
UmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlclN1cmZh
Y2U6OmVuc3VyZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6TGF5ZXJUaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaDoKKyAgICAgICAgKExheWVyVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6OnJlbmRlclN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZTo6bmVlZHNSZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
OjpzZXROZWVkc1JlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6OnNldFJlbmRl
clBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpzZXRSZW5kZXJEb25lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZUluZGV4Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFRpbGVTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OkxheWVyVGlsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGlsZXI6OndpbGxDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6
Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXI6OmxheWVyVmlzaWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Ojpwcm9jZXNzVGV4dHVyZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjphZGRU
aWxlSm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OmRyYXdUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OmRyYXdUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGVyOjpwcnVuZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnVwZGF0
ZVRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnNldE5lZWRzQmFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpjb250ZW50c1RleHR1cmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dGlsZVNpemUpOgorICAgICAgICAoTGF5ZXJUaWxlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpUZXh0dXJlSm9iOjpUZXh0dXJlSm9iKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OlRleHR1cmVKb2I6OnNldENvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OlRleHR1cmVKb2I6OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6
bmVlZHNSZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVtb3ZlVXBkYXRl
Q29udGVudHNKb2JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyV2ViS2l0VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFk
OjpMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVh
ZDo6fkxheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhy
ZWFkOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFk
Ojpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJX
ZWJLaXRUaHJlYWQ6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpzZXROZWVkc0NvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRo
cmVhZDo6bm90aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJX
ZWJLaXRUaHJlYWQ6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyV2ViS2l0VGhyZWFkOjpzdGFydEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllcldlYktpdFRocmVhZDo6Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6YWRkU3VibGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6YWRkT3ZlcmxheSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVGcm9tU3VwZXJsYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlU3VibGF5ZXJPck92ZXJsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1YmxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVyYXJjaHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldElzTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllcldlYktpdFRocmVhZDo6cmVsZWFzZUxheWVyUmVzb3VyY2VzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0U3VibGF5ZXIpOgorICAgICAgICAo
TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6
OmlzTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlQWxs
U3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRGaXhl
ZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRJc0Nv
bnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJX
ZWJLaXRUaHJlYWQ6OnNldEZpeGVkVG9Ub3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6OnNldEZpeGVkVG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpzZXRGcmFtZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2Vi
S2l0VGhyZWFkOjpzZXRGcmFtZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
cldlYktpdFRocmVhZDo6c2V0TGF5ZXJQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVwYXJlRm9yUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGVyY2VudExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9uTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bm90aWZ5Q2hhbGxlbmdlUmVzdWx0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6bG9hZEJ1ZmZlcmluZ0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OnNldEJ1ZmZlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmRyYXdCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkNvbmRpdGlvbmFsbHlFbnRlckZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkV4aXRGdWxsc2NyZWVu
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25DcmVhdGVIb2xlUHVu
Y2hSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25EZXN0cm95
SG9sZVB1bmNoUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9N
ZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChCbGFja0JlcnJ5KToKKyAg
ICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKEdyYXBoaWNzKToKKyAgICAgICAgKE1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVn
aW5MYXllcldlYktpdFRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllcldl
YktpdFRocmVhZDo6c2V0UGx1Z2luVmlldyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OlRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZTo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmU6OnByb3RlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvVGV4dHVyZS5oOgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6aXNEaXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpoYXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmU6OnNpemVJbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnNl
dFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpzZXRTaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjphbGxvY2F0ZVRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpmcmVlVGV4dHVyZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpjb2xs
ZWN0R2FyYmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZDo6dGV4dHVyZVNpemVJbkJ5dGVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
OjppbnN0YWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjpyZXNpemVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkOjpldmljdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDb21w
b3NpdGluZ1RocmVhZDo6cHJ1bmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUNhY2hlQ29t
cG9zaXRpbmdUaHJlYWQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkOjp0ZXh0dXJlRm9yVGlsZWRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dXBkYXRlQ29udGVudHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZUNhY2hlQ29tcG9zaXRp
bmdUaHJlYWQuaDoKKyAgICAgICAgKFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpab21iaWVUZXh0
dXJlOjpab21iaWVUZXh0dXJlKToKKyAgICAgICAgKFpvbWJpZVRleHR1cmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9za2lhL1Bs
YXRmb3JtU3VwcG9ydC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9za2lhL1BsYXRmb3JtU3VwcG9ydC5oOiBSZW1vdmVkLgorCiAyMDEzLTAyLTI4
ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjE0NDE2OSk6IEl0IGJyb2tlIGNsaXBwaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmluZGV4IGRmY2Y5Yjk5ODE4NDg2NzIzNWZh
ZDc3YmIzZTVjZGJlYmRhNzJkMjIuLmU1YjFhMzlkNmI0ZTNhM2E2MjBlNDBkNjc2NDg2ODgzNzhh
ODM1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCkBA
IC0xOCw1NiArMTgsOTQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbnZh
c0xheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5o
IgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQogCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxTa0dwdURldmljZS5oPgorI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyUHJvZ3JhbS5oPgorCit1c2luZyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1DYW52YXNMYXllcldlYktpdFRocmVhZDo6Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoU2tHcHVE
ZXZpY2UqIGRldmljZSkKLSAgICA6IEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQoQ2FudmFzTGF5
ZXIpCit2b2lkIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpkZWxldGVUZXh0dXJlcygpCiB7Ci0g
ICAgc2V0RGV2aWNlKGRldmljZSk7CiB9CiAKLUNhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjp+Q2Fu
dmFzTGF5ZXJXZWJLaXRUaHJlYWQoKQorY2xhc3MgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCA6IHB1YmxpYyBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6QnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOworCisgICAgdm9pZCBsYXll
ckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IH0K
KyAgICB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5nZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCos
IGJvb2wpIHsgfQorICAgIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKikgeyB9CisKKyAgICB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiwgZG91YmxlIHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mKTsKKyAgICB2b2lkIGRl
bGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKKworICAgIHZvaWQgY29tbWl0
UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKKworICAgIHZv
aWQgY2xlYXJCdWZmZXIoKSB7IG1fYnVmZmVyID0gMDsgfQorCitwcml2YXRlOgorICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBtX2J1ZmZlcjsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKK307CisKK0NhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OkNhbnZh
c0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fYnVmZmVy
KGJ1ZmZlcikKKyAgICAsIG1fc2l6ZShzaXplKQogewotICAgIGlmIChTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBkZWxldGVGcm9u
dEJ1ZmZlcigpOwogfQogCi12b2lkIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpzZXREZXZpY2Uo
U2tHcHVEZXZpY2UqIGRldmljZSkKK3ZvaWQgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUg
c2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCiB7Ci0gICAgbV9kZXZpY2UgPSBkZXZpY2U7Ci0g
ICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHQgPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgIGR0LnRyYW5zbGF0ZSgtbGF5ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1sYXll
ci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOworICAgIGR0LnNjYWxlTm9uVW5pZm9ybShzdGF0
aWNfY2FzdDxkb3VibGU+KGxheWVyLT5ib3VuZHMoKS53aWR0aCgpKSAvIG1fc2l6ZS53aWR0aCgp
LCBzdGF0aWNfY2FzdDxkb3VibGU+KGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSkgLyBtX3NpemUu
aGVpZ2h0KCkpOworICAgIGJsaXRUb0J1ZmZlcigwLCBtX2J1ZmZlciwgcmVpbnRlcnByZXRfY2Fz
dDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmPihkdCksCisgICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3Zlciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4obGF5ZXItPmRyYXdPcGFjaXR5KCkgKiAyNTUpKTsKIH0KIAotdm9p
ZCBDYW52YXNMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQo
KQordm9pZCBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkZWxldGVUZXh0dXJl
cyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikKIHsKLSAgICBpZiAoIW1fZGV2aWNlKQot
ICAgICAgICByZXR1cm47CisgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB0aGUgYnVmZmVyIGlz
IG5vdCBvd25lZCBieSB1cy4KK30KIAotICAgIGlmICghU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmdldCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKK3ZvaWQgQ2FudmFzTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyKQoreworICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdyUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQgPSByZWludGVycHJldF9jYXN0PEdy
UmVuZGVyVGFyZ2V0Kj4obV9kZXZpY2UtPmFjY2Vzc1JlbmRlclRhcmdldCgpKTsKLSAgICBpZiAo
IXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBkdXJpbmcgYSBzeW5jaHJvbml6YXRpb24gcG9pbnQgYmV0d2VlbiBXZWJLaXQgYW5kIGNv
bXBvc2l0aW5nIHRocmVhZC4KKyAgICAvLyBUaGlzIGlzIG91ciBvbmx5IGNoYW5jZSB0byB0cmFu
c2ZlciB0aGUgYmFjayBkaXNwbGF5IGxpc3QgdG8gdGhlIGZyb250IGRpc3BsYXkgbGlzdCB3aXRo
b3V0CisgICAgLy8gcmFjZSBjb25kaXRpb25zLgorICAgIC8vIDEuIEZsdXNoIGJhY2sgZGlzcGxh
eSBsaXN0IHRvIGZyb250CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpyZWxl
YXNlQnVmZmVyRHJhd2FibGUobV9idWZmZXIpOworICAgIC8vIDIuIERyYXcgZnJvbnQgZGlzcGxh
eSBsaXN0IHRvIEZCTworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6dXBkYXRl
QnVmZmVyQmFja2luZ1N1cmZhY2UobV9idWZmZXIpOworfQogCi0gICAgR3JUZXh0dXJlKiB0ZXh0
dXJlID0gcmVuZGVyVGFyZ2V0LT5hc1RleHR1cmUoKTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAg
ICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUZyb250QnVmZmVyKEludFNpemUobV9kZXZpY2UtPndp
ZHRoKCksIG1fZGV2aWNlLT5oZWlnaHQoKSksIHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKSk7
CitDYW52YXNMYXllcldlYktpdFRocmVhZDo6Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICA6IExheWVyV2ViS2l0VGhyZWFkKENhbnZhc0xheWVyLCAwKQoreworICAgIG1f
Y29tcG9zaXRpbmdUaHJlYWRDbGllbnQgPSBuZXcgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudChidWZmZXIsIHNpemUpOworICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0
Q2xpZW50KG1fY29tcG9zaXRpbmdUaHJlYWRDbGllbnQpOwogfQogCi12b2lkIENhbnZhc0xheWVy
V2ViS2l0VGhyZWFkOjpkZWxldGVUZXh0dXJlcygpCitDYW52YXNMYXllcldlYktpdFRocmVhZDo6
fkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKCkKK3sKKyAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFk
KCktPnNldENsaWVudCgwKTsKKyAgICBkZWxldGUgbV9jb21wb3NpdGluZ1RocmVhZENsaWVudDsK
K30KKwordm9pZCBDYW52YXNMYXllcldlYktpdFRocmVhZDo6Y2xlYXJCdWZmZXIoQ2FudmFzTGF5
ZXJXZWJLaXRUaHJlYWQqIGxheWVyKQogewotICAgIGlmIChTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6Z2V0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICBkZWxldGVGcm9udEJ1ZmZl
cigpOworICAgIGxheWVyLT5tX2NvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5jbGVhckJ1ZmZlcigp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmgKaW5kZXgg
NjJlNjJiMmUzZGQ0NDBhODQ2OGJkYzIwZjYyMjI0ZTNjMzA1ODVmMy4uYTBmZjE5MmI2ODJiMDAw
OWU5ODYxZWEwNDhlYmVkYTBlYzJhYTZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJX
ZWJLaXRUaHJlYWQuaApAQCAtMjMsMzEgKzIzLDI3IEBACiAKICNpbmNsdWRlICJFR0xJbWFnZUxh
eWVyV2ViS2l0VGhyZWFkLmgiCiAKLWNsYXNzIFNrR3B1RGV2aWNlOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xhc3MgQ2FudmFzTGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDsKIAotY2xhc3MgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQgOiBw
dWJsaWMgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZCB7CitjbGFzcyBDYW52YXNMYXllcldlYktp
dFRocmVhZCA6IHB1YmxpYyBMYXllcldlYktpdFRocmVhZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZShTa0dwdURldmljZSog
ZGV2aWNlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0xheWVyV2ViS2l0VGhyZWFkPiBj
cmVhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2Fu
dmFzTGF5ZXJXZWJLaXRUaHJlYWQoZGV2aWNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoYnVmZmVyLCBzaXplKSk7CiAgICAgfQogCiAgICAg
dmlydHVhbCB+Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoKTsKIAotICAgIHZvaWQgc2V0RGV2aWNl
KFNrR3B1RGV2aWNlKik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJCdWZmZXIoQ2FudmFzTGF5ZXJX
ZWJLaXRUaHJlYWQqKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0
dXJlQ29udGVudHNJZk5lZWRlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcygp
OwogCiBwcml2YXRlOgotICAgIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKFNrR3B1RGV2aWNlKik7
Ci0KLSAgICBTa0dwdURldmljZSogbV9kZXZpY2U7CisgICAgQ2FudmFzTGF5ZXJXZWJLaXRUaHJl
YWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBjb25zdCBJbnRTaXpl
Jik7CisgICAgQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCogbV9jb21wb3NpdGlu
Z1RocmVhZENsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRGlzcGxheVJlZnJl
c2hNb25pdG9yQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0Rpc3BsYXlSZWZyZXNoTW9uaXRvckJsYWNrQmVycnkuY3BwCmluZGV4IDAy
ODFhYTFlNWI3YmYwMTVjMzQ4MjRmOThjOGU4ODU0NjRhNTlhMzkuLmI4NWFmYzM0NTEzNjVhM2Jj
NTM2ZDYyODQ3NDdkMDQ4Mjg5NjRiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRGlzcGxheVJlZnJlc2hNb25pdG9yQmxhY2tCZXJyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EaXNw
bGF5UmVmcmVzaE1vbml0b3JCbGFja0JlcnJ5LmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lkIERp
c3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxheUxpbmtGaXJlZCgpCiAKICAgICBtX3ByZXZpb3Vz
RnJhbWVEb25lID0gZmFsc2U7CiAKLSAgICBtX21vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIG1fdGltZXN0YW1wID0gY3VycmVu
dFRpbWUoKTsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoaGFuZGxlRGlzcGxheVJlZnJlc2hlZE5v
dGlmaWNhdGlvbk9uTWFpblRocmVhZCwgdGhpcyk7CiAgICAgbV9tdXRleC51bmxvY2soKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJh
d2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHAKaW5kZXggNzgwODc2MDYx
N2JmMTFlZDZhNGI5Njk1ZGI2OWI5ZGYxN2RiZTliMy4uYzUzMTA4YzAwYTExZDc2MGM1MTIyNmVl
OWQ3NWQ4ZTJlNTdiYWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tC
ZXJyeS5jcHAKQEAgLTY3LDggKzY3LDYgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX2Zibyhjb250ZXh0
LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQotICAgICwgbV9mcm9udENvbG9yQnVmZmVyKDApCi0gICAg
LCBtX3NlcGFyYXRlRnJvbnRUZXh0dXJlKGZhbHNlKQogewogICAgIG1faW50ZXJuYWwgPSBhZG9w
dFB0cihuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKTsKIApAQCAtODcsNiArODUsMjUgQEAgRHJh
d2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQogICAgIGNsZWFyKCk7CiB9CiAKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1Bs
YXRmb3JtTGF5ZXIoKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9jYWxsYmFjaykKKyAgICAgICAgbV9jYWxsYmFjay0+d2lsbFB1Ymxpc2goKTsK
KworICAgIC8vIEZJWE1FOiBXZSBkbyB0aGUgY29weSBpbiB0aGUgY2FudmFzJyAoY2hpbGQpIGNv
bnRleHQgc28gdGhhdCBpdCBleGVjdXRlcyBpbiB0aGUgY29ycmVjdCBvcmRlciByZWxhdGl2ZSB0
bworICAgIC8vIG90aGVyIGNvbW1hbmRzIGluIHRoZSBjaGlsZCBjb250ZXh0LiBUaGlzIGVuc3Vy
ZXMgdGhhdCB0aGUgcGFyZW50IHRleHR1cmUgYWx3YXlzIGNvbnRhaW5zIGEgY29tcGxldGUKKyAg
ICAvLyBmcmFtZSBhbmQgbm90IHNvbWUgaW50ZXJtZWRpYXRlIHJlc3VsdC4gSG93ZXZlciwgdGhl
cmUgaXMgbm8gc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoaXMgY29weQorICAgIC8v
IGhhcHBlbnMgYmVmb3JlIHRoZSBjb21wb3NpdG9yIGRyYXdzLiBUaGlzIG1lYW5zIHdlIG1pZ2h0
IGRyYXcgc3RhbGUgZnJhbWVzIHNvbWV0aW1lcy4gSWRlYWxseSB0aGlzCisgICAgLy8gd291bGQg
aW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY2hpbGQgY29tbWFuZCBzdHJlYW0gdGhhdCB0aGUgY29t
cG9zaXRvciBjb3VsZCB3YWl0IGZvci4KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKyNlbmRpZgorCiBib29sIERyYXdpbmdC
dWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKCFtX2NvbnRl
eHQpCkBAIC0xMDgsMjQgKzEyNSw2IEBAIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKQogewogICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLmdl
dCgpOwogfQotCi12b2lkIERyYXdpbmdCdWZmZXI6OnByZXBhcmVCYWNrQnVmZmVyKCkKLXsKLX0K
LQotYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXF1aXJlc0NvcHlGcm9tQmFja1RvRnJvbnRCdWZmZXIo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgRHJhd2luZ0J1ZmZl
cjo6ZnJvbnRDb2xvckJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbG9yQnVmZmVyKCk7
Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJQbGF0Zm9ybUxheWVyKCkKLXsKLX0KICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAKaW5kZXggZTU0YWVh
ZGEzNTNhZDE4NDVjMjAzOGI1NmM1MzljMWIwZTgyYWI2Yy4uM2U0OGMyOTM1ZWNhMmU4ZTM1NWQ0
YWU3YWYzYTA1ZGM3ZTI0OTY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdM
SW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcApAQCAtMjIsNiArMjIsOCBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ29tcG9z
aXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0u
aD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlNoYXJlZFRleHR1cmUuaD4KICNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgogI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUxvZy5oPgogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KQEAgLTI5LDk2ICszMSw1NiBA
QAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOwogCi1zdGF0aWMgUEZOR0xFR0xJTUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BST0Mg
Z2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyA9IDA7Ci1zdGF0aWMgUEZORUdMREVTVFJPWUlN
QUdFS0hSUFJPQyBlZ2xEZXN0cm95SW1hZ2VLSFIgPSAwOworbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6On5FR0xJbWFnZUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQoKQogewogICAgIC8vIFNvbWVvbmUgc2hvdWxkIGhhdmUgY2Fs
bGVkIGRlbGV0ZVRleHR1cmVzKCkgYnkgbm93Ci0gICAgQVNTRVJUKCFtX3RleHR1cmUgJiYgIW1f
aW1hZ2UpOworICAgIEFTU0VSVCghbV90ZXh0dXJlQWNjZXNzb3IpOwogfQogCiB2b2lkIEVHTElt
YWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKikKIHsKLSAgICBpZiAoIW1faW1hZ2VDaGFuZ2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMpIHsK
LSAgICAgICAgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UEZOR0xFR0xJTUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJn
bEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTIikpOwotICAgICAgICBBU1NFUlQoZ2xFR0xJbWFn
ZVRhcmdldFRleHR1cmUyRE9FUyk7Ci0gICAgICAgIGlmICghZ2xFR0xJbWFnZVRhcmdldFRleHR1
cmUyRE9FUykgewotICAgICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRm
b3JtOwotICAgICAgICAgICAgbG9nQWx3YXlzKExvZ0xldmVsV2FybiwgImVnbEdldFByb2NBZGRy
ZXNzIGZvciBnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTIEZBSUxFRCIpOwotICAgICAgICAg
ICAgbV9pbWFnZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlKSB7
Ci0gICAgICAgICAgICBtX3RleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUoKTsKLSAgICAgICAgICAg
IG1fdGV4dHVyZS0+cHJvdGVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29ubmVjdCB0
byB0aGUgbmV3IGltYWdlCi0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgICAgIGdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRP
RVMoR0xfVEVYVFVSRV8yRCwgbV9pbWFnZSk7Ci0gICAgfSBlbHNlIGlmIChtX3RleHR1cmUpIHsK
LSAgICAgICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKLSAgICAgICAgbV90ZXh0dXJlLmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgbV9pbWFnZUNoYW5nZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBFR0xJ
bWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIC8qc2NhbGUqLywgaW50IHBvc2l0aW9uTG9jYXRp
b24sIGludCB0ZXhDb29yZExvY2F0aW9uKQordm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwg
ZG91YmxlIC8qc2NhbGUqLywgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtKQogewogICAgIHN0
YXRpYyBmbG9hdCB1cHNpZGVEb3duWzQgKiAyXSA9IHsgMCwgMSwgIDAsIDAsICAxLCAwLCAgMSwg
MSB9OwogCi0gICAgaWYgKCFtX3RleHR1cmUpCisgICAgaWYgKCFtX3RleHR1cmVBY2Nlc3NvciB8
fCAhbV90ZXh0dXJlQWNjZXNzb3ItPnRleHR1cmVJRCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkpOwotICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
IHVwc2lkZURvd24pOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LT50ZXh0dXJlSWQoKSk7CisgICAgZ2xFbmFibGUoR0xfQkxFTkQpOworICAgIGdsQmxlbmRGdW5j
KEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dy
YW0ubV9wcm9ncmFtKTsKKyAgICBnbFVuaWZvcm0xZihwcm9ncmFtLm9wYWNpdHlMb2NhdGlvbigp
LCBsYXllci0+ZHJhd09wYWNpdHkoKSk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dy
YW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZsYXllci0+
Z2V0VHJhbnNmb3JtZWRCb3VuZHMoKSk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dy
YW0udGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVwc2lkZURv
d24pOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlQWNjZXNzb3It
PnRleHR1cmVJRCgpKTsKICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsK
IH0KIAogdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRl
eHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogewotICAgIGlmIChtX3RleHR1cmUpIHsK
LSAgICAgICAgbV90ZXh0dXJlLT51bnByb3RlY3QoKTsKLSAgICAgICAgbV90ZXh0dXJlLmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBJZiB0aGUgaW1hZ2UgaXMgc3RpbGwgd2l0aCB1cywgaXQgd2FzIG5ldmVyIGRlc3Ryb3llZCBi
eSB0aGUgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC4KLSAgICBpZiAoIWVnbERlc3Ryb3lJbWFn
ZUtIUikKLSAgICAgICAgZWdsRGVzdHJveUltYWdlS0hSID0gcmVpbnRlcnByZXRfY2FzdDxQRk5F
R0xERVNUUk9ZSU1BR0VLSFJQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZWdsRGVzdHJveUltYWdl
S0hSIikpOwotCi0gICAgQVNTRVJUKGVnbERlc3Ryb3lJbWFnZUtIUik7Ci0gICAgaWYgKGVnbERl
c3Ryb3lJbWFnZUtIUikKLSAgICAgICAgZWdsRGVzdHJveUltYWdlS0hSKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6ZWdsRGlzcGxheSgpLCBtX2ltYWdlKTsKLQotICAgIG1faW1hZ2Ug
PSAwOworICAgIGRlbGV0ZSBtX3RleHR1cmVBY2Nlc3NvcjsKKyAgICBtX3RleHR1cmVBY2Nlc3Nv
ciA9IDA7CiB9CiAKIHZvaWQgRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojpi
aW5kQ29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogewotICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7CisgICAgaWYg
KG1fdGV4dHVyZUFjY2Vzc29yKQorICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZUFjY2Vzc29yLT50ZXh0dXJlSUQoKSk7CiB9CiAKLXZvaWQgRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRJbWFnZSh2b2lkKiBpbWFnZSkKK3ZvaWQgRUdM
SW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRUZXh0dXJlQWNjZXNzb3IoR0xF
UzJTaGFyZWRUZXh0dXJlQWNjZXNzb3IqIHRleHR1cmVBY2Nlc3NvcikKIHsKLSAgICBpZiAobV9p
bWFnZSA9PSBpbWFnZSkKKyAgICBpZiAobV90ZXh0dXJlQWNjZXNzb3IgPT0gdGV4dHVyZUFjY2Vz
c29yKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFn
ZUNoYW5nZWQgPSB0cnVlOworICAgIGRlbGV0ZSBtX3RleHR1cmVBY2Nlc3NvcjsKKyAgICBtX3Rl
eHR1cmVBY2Nlc3NvciA9IHRleHR1cmVBY2Nlc3NvcjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50LmgKaW5kZXggOTY3YzEzMGE2MGI3MTlhNDllOWM5Y2I2YTA1ZjJhZjI3OTg4
YWE4NC4uMDk5ZDg0MDY0NDlhNWYwZWZmMmFlZjk4YzRkMTNhZDM2ZDM4NGQ1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dC5oCkBAIC0yMiwxMSArMjIsMTggQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgiCi0jaW5jbHVkZSAi
VGV4dHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCituYW1lc3Bh
Y2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworbmFtZXNwYWNlIEdyYXBoaWNz
IHsKK2NsYXNzIEdMRVMyU2hhcmVkVGV4dHVyZUFjY2Vzc29yOworfQorfQorfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CkBAIC00OCwyNSAr
NTUsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2Vk
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpIHsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRv
dWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBk
b3VibGUgc2NhbGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQ
cm9ncmFtJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqKTsKIAotICAgIC8vIFRoZSBpbWFnZSBtdXN0IG5vdCBiZSBkZWxl
dGVkIHdoaWxlIGluIG91ciBjdXN0b2R5LCBob3dldmVyIGFmdGVyIGNoYW5naW5nIGltYWdlIHlv
dSBhcmUgZnJlZSB0byBkZWxldGUgdGhlIG9sZCBvbmUuCi0gICAgdm9pZCBzZXRJbWFnZSh2b2lk
Kik7CisgICAgdm9pZCBzZXRUZXh0dXJlQWNjZXNzb3IoQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpHTEVTMlNoYXJlZFRleHR1cmVBY2Nlc3NvciopOwogCiBwcml2YXRlOgogICAgIEVH
TEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCgpCi0gICAgICAgIDogbV9pbWFnZSgw
KQotICAgICAgICAsIG1faW1hZ2VDaGFuZ2VkKGZhbHNlKQorICAgICAgICA6IG1fdGV4dHVyZUFj
Y2Vzc29yKDApCiAgICAgewogICAgICAgICByZWYoKTsgLy8gTWF0Y2hlZCBieSBkZXJlZigpIGlu
IGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoKQogICAgIH0KIAotICAgIHZvaWQqIG1f
aW1hZ2U7Ci0gICAgYm9vbCBtX2ltYWdlQ2hhbmdlZDsKLSAgICBSZWZQdHI8VGV4dHVyZT4gbV90
ZXh0dXJlOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJTaGFyZWRU
ZXh0dXJlQWNjZXNzb3IqIG1fdGV4dHVyZUFjY2Vzc29yOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5jcHAK
aW5kZXggODkyMGU5ODdhYTc2ZDVjNmRkNzRhMTBkNGE4MGFiMmZkMWM3YWQyNC4uNDE3NzAxNDFk
MTVmZGEyOGQwN2ZjOWRmZTcwMDAwZDEyOGYxNGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VH
TEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCkBAIC0yNSw0MSArMjUsMzYgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMkNvbnRleHRTdGF0ZS5oPgorI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyU2hhcmVkVGV4dHVyZS5oPgogI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
TG9nLmg+CiAjaW5jbHVkZSA8RUdML2VnbC5oPgogI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAotdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMlByb2dyYW07Ci11c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkdMRVMyQ29udGV4dFN0YXRlOwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUEZORUdMQ1JFQVRF
SU1BR0VLSFJQUk9DIGVnbENyZWF0ZUltYWdlS0hSID0gMDsKLXN0YXRpYyBQRk5FR0xERVNUUk9Z
SU1BR0VLSFJQUk9DIGVnbERlc3Ryb3lJbWFnZUtIUiA9IDA7Ci0KIEVHTEltYWdlTGF5ZXJXZWJL
aXRUaHJlYWQ6OkVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUpCiAgICAg
OiBMYXllcldlYktpdFRocmVhZCh0eXBlLCAwKQogICAgICwgbV9jbGllbnQoRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpjcmVhdGUoKSkKICAgICAsIG1fbmVlZHNEaXNwbGF5
KGZhbHNlKQotICAgICwgbV9mcm9udEJ1ZmZlclRleHR1cmUoMCkKLSAgICAsIG1fZmJvKDApCiAg
ICAgLCBtX3Byb2dyYW0oMCkKLSAgICAsIG1faW1hZ2UoMCkKKyAgICAsIG1fdGV4dHVyZSgwKQor
ICAgICwgbV90ZXh0dXJlQWNjZXNzb3IoMCkKIHsKICAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFk
KCktPnNldENsaWVudChtX2NsaWVudC5nZXQoKSk7Ci0gICAgc2V0TGF5ZXJQcm9ncmFtU2hhZGVy
KExheWVyUHJvZ3JhbVNoYWRlclJHQkEpOworICAgIHNldExheWVyUHJvZ3JhbShMYXllclByb2dy
YW1SR0JBKTsKIH0KIAogRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6fkVHTEltYWdlTGF5ZXJX
ZWJLaXRUaHJlYWQoKQogewogICAgIC8vIFRoZSBzdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Ig
Y2FsbGluZyBkZWxldGVGcm9udEJ1ZmZlcigpCiAgICAgLy8gYmVmb3JlIHdlIGdldCB0aGlzIGZh
ci4KLSAgICBBU1NFUlQoIW1fZnJvbnRCdWZmZXJUZXh0dXJlKTsKLSAgICBBU1NFUlQoIW1fZmJv
KTsKICAgICBBU1NFUlQoIW1fcHJvZ3JhbSk7Ci0gICAgQVNTRVJUKCFtX2ltYWdlKTsKKyAgICBB
U1NFUlQoIW1fdGV4dHVyZSk7CisgICAgQVNTRVJUKCFtX3RleHR1cmVBY2Nlc3Nvcik7CiB9CiAK
IHZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKQEAgLTc2
LDkgKzcxLDYgQEAgdm9pZCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVGcm9udEJ1
ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZAogICAgIGlmIChzaXplLmlzRW1wdHko
KSkgewogICAgICAgICBpZiAoc2l6ZSAhPSBtX3NpemUpIHsKICAgICAgICAgICAgIGRlbGV0ZUZy
b250QnVmZmVyKCk7Ci0gICAgICAgICAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgICAgICAgICBt
X2dhcmJhZ2UuYXBwZW5kKG1faW1hZ2UpOwotICAgICAgICAgICAgbV9pbWFnZSA9IDA7CiAgICAg
ICAgICAgICBtX3NpemUgPSBzaXplOwogICAgICAgICB9CiAKQEAgLTg2LDE5ICs3OCw2IEBAIHZv
aWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
ZWdsQ3JlYXRlSW1hZ2VLSFIpIHsKLSAgICAgICAgZWdsQ3JlYXRlSW1hZ2VLSFIgPSByZWludGVy
cHJldF9jYXN0PFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImVn
bENyZWF0ZUltYWdlS0hSIikpOwotICAgICAgICBlZ2xEZXN0cm95SW1hZ2VLSFIgPSByZWludGVy
cHJldF9jYXN0PFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJl
Z2xEZXN0cm95SW1hZ2VLSFIiKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGVnbENyZWF0ZUltYWdl
S0hSICYmIGVnbERlc3Ryb3lJbWFnZUtIUik7Ci0gICAgaWYgKCFlZ2xDcmVhdGVJbWFnZUtIUiB8
fCAhZWdsRGVzdHJveUltYWdlS0hSKSB7Ci0gICAgICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTsKLSAgICAgICAgbG9nQWx3YXlzKExvZ0xldmVsV2FybiwgImVnbEdldFBy
b2NBZGRyZXNzIGZvciBlZ2xDcmVhdGUvRGVzdHJveUltYWdlS0hSIEZBSUxFRCIpOwotICAgICAg
ICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
R0xlbnVtIGN1cnJlbnRBY3RpdmVUZXh0dXJlID0gMDsKICAgICBnbEdldEludGVnZXJ2KEdMX0FD
VElWRV9URVhUVVJFLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJmN1cnJlbnRBY3RpdmVUZXh0
dXJlKSk7CiAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKQEAgLTEwNiw3ICs4NSw3
IEBAIHZvaWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQKICAgICB7CiAgICAgICAgIEdMRVMyQ29udGV4dFN0
YXRlOjpUZXh0dXJlQW5kRkJPU3RhdGVTYXZlciB0ZXh0dXJlQW5kRkJPU3RhdGVTYXZlcjsKIAot
ICAgICAgICBpZiAoIWNyZWF0ZUltYWdlSWZOZWVkZWQoc2l6ZSkpCisgICAgICAgIGlmICghY3Jl
YXRlVGV4dHVyZUlmTmVlZGVkKHNpemUpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CkBAIC0xMTksMTYgKzk4LDE0IEBAIHZvaWQgRUdMSW1h
Z2VMYXllcldlYktpdFRocmVhZDo6dXBkYXRlRnJvbnRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgdW5zaWduZWQKIAogdm9pZCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpkZWxldGVGcm9u
dEJ1ZmZlcigpCiB7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9mcm9udEJ1ZmZlclRleHR1
cmUpOwotICAgIG1fZnJvbnRCdWZmZXJUZXh0dXJlID0gMDsKLSAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9mYm8pOwotICAgIG1fZmJvID0gMDsKKyAgICBkZWxldGUgbV90ZXh0dXJlOwor
ICAgIG1fdGV4dHVyZSA9IDA7CiAgICAgZ2xEZWxldGVQcm9ncmFtKG1fcHJvZ3JhbSk7CiAgICAg
bV9wcm9ncmFtID0gMDsKIAotICAgIC8vIFRoZSBpbWFnZSBpcyBpbiBvdXIgRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50J3MgY3VzdG9keQorICAgIC8vIFRoZSB0ZXh0dXJlIGFj
Y2Vzc29yIGlzIGluIG91ciBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQncyBj
dXN0b2R5CiAgICAgLy8gYXQgdGhpcyBwb2ludCwgYW5kIHRoYXQgb2JqZWN0IGlzIHJlc3BvbnNp
YmxlIGZvciBkZWxldGluZyBpdC4KLSAgICBtX2ltYWdlID0gMDsKKyAgICBtX3RleHR1cmVBY2Nl
c3NvciA9IDA7CiAKICAgICAvLyBJZiBhbnlvbmUgdHJpZXMgdG8gcmVuZGVyIHVzIGFmdGVyIHRo
aXMsIHdlJ3JlIGNlcnRhaW5seSBnb2luZyB0byBuZWVkIGRpc3BsYXkuCiAgICAgbV9uZWVkc0Rp
c3BsYXkgPSB0cnVlOwpAQCAtMTM5LDU1ICsxMTYsMjEgQEAgdm9pZCBFR0xJbWFnZUxheWVyV2Vi
S2l0VGhyZWFkOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoKQogICAgIC8vIFRoaXMgY2Fs
bCBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGNvbXBvc2l0aW5nIHRocmVhZCwgc28gaXQncyBzYWZl
IHRvIHVwZGF0ZSB0aGUKICAgICAvLyBpbWFnZSBhbmQgZGVzdHJveSBhbnkgb2xkIGltYWdlcy4K
IAotICAgIG1fY2xpZW50LT5zZXRJbWFnZShtX2ltYWdlKTsKLQotICAgIC8vIERlc3Ryb3kgdGhl
IGdhcmJhZ2UgaW1hZ2VzIGluIGEgdGhyZWFkLXNhZmUgd2F5Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2dhcmJhZ2Uuc2l6ZSgpOyArK2kpCi0gICAgICAgIGVnbERlc3Ryb3lJbWFnZUtI
UihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmVnbERpc3BsYXkoKSwgbV9nYXJiYWdl
W2ldKTsKKyAgICBtX2NsaWVudC0+c2V0VGV4dHVyZUFjY2Vzc29yKG1fdGV4dHVyZUFjY2Vzc29y
KTsKIH0KIAotYm9vbCBFR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGVJbWFnZUlmTmVl
ZGVkKGNvbnN0IEludFNpemUmIHNpemUpCitib29sIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6
OmNyZWF0ZVRleHR1cmVJZk5lZWRlZChjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIC8vIFdl
IHVzZSBhIHRleHR1cmUgcmF0aGVyIHRoYW4gYSByZW5kZXJidWZmZXIgYXMgdGhlIGJhc2lzIG9m
IHRoZSBGQk8gYW5kIEVHTEltYWdlLAotICAgIC8vIHNpbmNlIHRoZSBFR0xJbWFnZSB3aWxsIGJl
IHVzZWQgYXMgYSB0ZXh0dXJlIG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgaW4gdGhlIGVuZC4K
LQotICAgIGlmICghbV9mcm9udEJ1ZmZlclRleHR1cmUpIHsKLSAgICAgICAgZ2xHZW5UZXh0dXJl
cygxLCAmbV9mcm9udEJ1ZmZlclRleHR1cmUpOwotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fZnJvbnRCdWZmZXJUZXh0dXJlKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fZmJvKQotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9m
Ym8pOwotCi0gICAgaWYgKCFtX2ltYWdlIHx8IHNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIElu
dFNpemUgZmJvU2l6ZSA9IHNpemU7Ci0KLSAgICAgICAgLy8gSW1hZ2luYXRpb24tc3BlY2lmaWMg
Zml4Ci0gICAgICAgIHN0YXRpYyBib29sIGlzSW1hZ2luYXRpb25IYXJkd2FyZSA9IHN0ZDo6c3Ry
c3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKEdMX1JFTkRFUkVS
KSksICJQb3dlclZSIFNHWCIpOwotICAgICAgICBpZiAoaXNJbWFnaW5hdGlvbkhhcmR3YXJlKQot
ICAgICAgICAgICAgZmJvU2l6ZSA9IGZib1NpemUuZXhwYW5kZWRUbyhJbnRTaXplKDE2LCAxNikp
OwotCi0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9mcm9udEJ1ZmZlclRl
eHR1cmUpOwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgICAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgZmJvU2l6
ZS53aWR0aCgpLCBmYm9TaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAwKTsKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZnJvbnRCdWZmZXJUZXh0dXJlLCAw
KTsKLQotICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVS
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKGdsR2V0RXJyb3IoKSAhPSBHTF9OT19FUlJPUikKKyAgICBpZiAoIW1fdGV4
dHVyZSB8fCBzaXplICE9IG1fc2l6ZSkgeworICAgICAgICBkZWxldGUgbV90ZXh0dXJlOworICAg
ICAgICBtX3RleHR1cmUgPSBuZXcgR0xFUzJTaGFyZWRUZXh0dXJlKHNpemUpOworICAgICAgICBp
ZiAoIW1fdGV4dHVyZS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBkZWxldGUgbV90ZXh0dXJl
OworICAgICAgICAgICAgbV90ZXh0dXJlID0gMDsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCi0gICAgICAgIC8vIFRoZSBzaWJsaW5nIGlzIG9ycGhhbmVkIGFmdGVyIGds
VGV4SW1hZ2UyRCwgcmVjcmVhdGUgdGhlIGltYWdlLgotICAgICAgICBpZiAobV9pbWFnZSkKLSAg
ICAgICAgICAgIG1fZ2FyYmFnZS5hcHBlbmQobV9pbWFnZSk7Ci0gICAgICAgIG1faW1hZ2UgPSBl
Z2xDcmVhdGVJbWFnZUtIUihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmVnbERpc3Bs
YXkoKSwgZWdsR2V0Q3VycmVudENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICBFR0xfR0xfVEVY
VFVSRV8yRF9LSFIsIChFR0xDbGllbnRCdWZmZXIpbV9mcm9udEJ1ZmZlclRleHR1cmUsIDApOwot
ICAgICAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG1fdGV4dHVyZUFjY2Vzc29yID0gbV90ZXh0dXJlLT5jcmVhdGVUZXh0dXJlQWNjZXNzb3IoKTsK
IAogICAgICAgICBtX3NpemUgPSBzaXplOwogICAgIH0KQEAgLTIzNCwxNyArMTc3LDEyIEBAIHZv
aWQgRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZDo6YmxpdFRvRnJvbnRCdWZmZXIodW5zaWduZWQg
YmFja0J1ZmZlclRleHR1cmUpCiAgICAgaWYgKCFiYWNrQnVmZmVyVGV4dHVyZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtID0gMDsKLSAgICBnbEdldEludGVn
ZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZjdXJyZW50
UHJvZ3JhbSkpOworICAgIEdMRVMyQ29udGV4dFN0YXRlOjpQcm9ncmFtU3RhdGVTYXZlciBwcm9n
cmFtU3RhdGVTYXZlcjsKIAogICAgIGNyZWF0ZVNoYWRlcklmTmVlZGVkKCk7CiAKLSAgICBHTHVp
bnQgY3VycmVudEFycmF5QnVmZmVyQmluZGluZyA9IDAsIGN1cnJlbnRFbGVtZW50QXJyYXlCdWZm
ZXJCaW5kaW5nID0gMDsKLSAgICBHTGludCBjdXJyZW50Vmlld3BvcnRbNF0gPSB7IDAsIDAsIDAs
IDAgfTsKLSAgICBnbEdldEludGVnZXJ2KEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCByZWludGVy
cHJldF9jYXN0PEdMaW50Kj4oJmN1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmcpKTsKLSAgICBnbEdl
dEludGVnZXJ2KEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0xpbnQqPigmY3VycmVudEVsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmcpKTsKLSAgICBnbEdl
dEludGVnZXJ2KEdMX1ZJRVdQT1JULCAmY3VycmVudFZpZXdwb3J0WzBdKTsKLQorICAgIEdMRVMy
Q29udGV4dFN0YXRlOjpCdWZmZXJCaW5kaW5nU2F2ZXIgYnVmZmVyQmluZGluZ1NhdmVyOworICAg
IEdMRVMyQ29udGV4dFN0YXRlOjpWaWV3cG9ydFNhdmVyIHZpZXdwb3J0U2F2ZXI7CiAgICAgR0xF
UzJDb250ZXh0U3RhdGU6Okdsb2JhbEZsYWdTdGF0ZVNhdmVyIGZsYWdTdGF0ZVNhdmVyKEdMRVMy
Q29udGV4dFN0YXRlOjpHbG9iYWxGbGFnU3RhdGU6OkRvbnRSZXN0b3JlQmxlbmRGdW5jKTsKIAog
ICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKQEAgLTI1NCw3ICsxOTIsNyBAQCB2b2lkIEVH
TEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmJsaXRUb0Zyb250QnVmZmVyKHVuc2lnbmVkIGJhY2tC
dWZmZXJUZXh0dXJlKQogICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CiAKICAgICBnbFZpZXdwb3J0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbWFrZUJ1ZmZlckN1cnJlbnQobV90
ZXh0dXJlLT5idWZmZXIoKSwgR0xFUzIpOwogICAgIGdsVXNlUHJvZ3JhbShtX3Byb2dyYW0pOwog
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgYmFja0J1ZmZlclRleHR1cmUpOwogICAg
IGdsQ29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOwpAQCAtMjc3LDE4ICsyMTUsNyBA
QCB2b2lkIEVHTEltYWdlTGF5ZXJXZWJLaXRUaHJlYWQ6OmJsaXRUb0Zyb250QnVmZmVyKHVuc2ln
bmVkIGJhY2tCdWZmZXJUZXh0dXJlKQogCiAgICAgICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdMRVMyUHJvZ3JhbTo6UG9zaXRpb25BdHRyaWJ1dGVJbmRleCk7CiAgICAgICAgIGdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KEdMRVMyUHJvZ3JhbTo6VGV4Q29vcmRBdHRyaWJ1dGVJbmRl
eCk7Ci0KLSAgICAgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgY3VycmVudEFycmF5
QnVmZmVyQmluZGluZyk7Ci0gICAgICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JV
RkZFUiwgY3VycmVudEVsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmcpOwogICAgIH0KLQotICAgIC8v
IFRoZSBwcmV2aW91cyBwcm9ncmFtIG1pZ2h0IGhhdmUgYmVlbiBkZWxldGVkIGJ5IHJlZmNvdW50
IGRlc3RydWN0aW9uCi0gICAgLy8gd2l0aCBhbm90aGVyIG9uZSBub3cgaW4gdXNlLiBEb24ndCB0
cnkgdG8gcmVzdG9yZSBpdCBsYXRlci4KLSAgICBpZiAoY3VycmVudFByb2dyYW0gJiYgIWdsSXNQ
cm9ncmFtKGN1cnJlbnRQcm9ncmFtKSkKLSAgICAgICAgY3VycmVudFByb2dyYW0gPSAwOwotCi0g
ICAgZ2xVc2VQcm9ncmFtKGN1cnJlbnRQcm9ncmFtKTsKLSAgICBnbFZpZXdwb3J0KGN1cnJlbnRW
aWV3cG9ydFswXSwgY3VycmVudFZpZXdwb3J0WzFdLCBjdXJyZW50Vmlld3BvcnRbMl0sIGN1cnJl
bnRWaWV3cG9ydFszXSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllcldlYktpdFRocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyV2Vi
S2l0VGhyZWFkLmgKaW5kZXggN2Y4NDJlOTYwYzljMzE4ZDRmNmVkOWEwZTY5OWNhMzQ3OTY5MDI4
Ny4uMjdlOTg3OGZhNjYwNGVmNzAyN2RhZjBmZjUwZjZhMGYyYWUxOWQxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVy
V2ViS2l0VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9FR0xJbWFnZUxheWVyV2ViS2l0VGhyZWFkLmgKQEAgLTI0LDYgKzI0LDE1IEBACiAj
aW5jbHVkZSAiRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKIAorbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNw
YWNlIFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7CitjbGFzcyBHTEVTMlNoYXJlZFRl
eHR1cmU7CitjbGFzcyBHTEVTMlNoYXJlZFRleHR1cmVBY2Nlc3NvcjsKK30KK30KK30KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAvLyBCYXNlIGNsYXNzIGZvciBFR0xJbWFnZSBiYXNlZCBsYXll
cnMKQEAgLTQ4LDE3ICs1NywxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkZWxldGVGcm9udEJ1
ZmZlcigpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY3JlYXRlSW1hZ2VJZk5lZWRlZChjb25zdCBJ
bnRTaXplJik7CisgICAgYm9vbCBjcmVhdGVUZXh0dXJlSWZOZWVkZWQoY29uc3QgSW50U2l6ZSYp
OwogICAgIHZvaWQgY3JlYXRlU2hhZGVySWZOZWVkZWQoKTsKICAgICB2b2lkIGJsaXRUb0Zyb250
QnVmZmVyKHVuc2lnbmVkIGJhY2tCdWZmZXJUZXh0dXJlKTsKIAogICAgIFJlZlB0cjxFR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ+IG1fY2xpZW50OwogICAgIGJvb2wgbV9uZWVk
c0Rpc3BsYXk7Ci0gICAgdW5zaWduZWQgbV9mcm9udEJ1ZmZlclRleHR1cmU7Ci0gICAgdW5zaWdu
ZWQgbV9mYm87CiAgICAgdW5zaWduZWQgbV9wcm9ncmFtOwotICAgIHZvaWQqIG1faW1hZ2U7Ci0g
ICAgVmVjdG9yPHZvaWQqPiBtX2dhcmJhZ2U7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpHTEVTMlNoYXJlZFRleHR1cmUqIG1fdGV4dHVyZTsKKyAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyU2hhcmVkVGV4dHVyZUFjY2Vzc29yKiBtX3RleHR1cmVB
Y2Nlc3NvcjsKICAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRSZWN0QmxhY2tCZXJyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0Zsb2F0UmVj
dEJsYWNrQmVycnkuY3BwCmluZGV4IGQ0MTEzOTcyMGMyODI5MWJlYmQ4Zjk1ODU0OWU2OTRiOTdl
NzE4MTUuLmU3ZDNjMzJlN2FjNmJjZTNiODYzYzU1MjRjOWJhNzcwMzVhYzFhMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRmxvYXRSZWN0
QmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9GbG9hdFJlY3RCbGFja0JlcnJ5LmNwcApAQCAtMzQsNCArMzQsMTkgQEAgRmxvYXRS
ZWN0OjpvcGVyYXRvciBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSZWN0KCkgY29uc3QKICAg
ICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgo
KSwgaGVpZ2h0KCkpOwogfQogCitGbG9hdFJlY3QgRmxvYXRSZWN0Ojpub3JtYWxpemVkKCkgY29u
c3QKK3sKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFJlY3QgPSAqdGhpczsKKworICAgIGlmICh3
aWR0aCgpIDwgMCkgeworICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRYKHgoKSArIHdpZHRoKCkp
OworICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRXaWR0aCgtd2lkdGgoKSk7CisgICAgfQorICAg
IGlmIChoZWlnaHQoKSA8IDApIHsKKyAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0WSh5KCkgKyBo
ZWlnaHQoKSk7CisgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldEhlaWdodCgtaGVpZ2h0KCkpOwor
ICAgIH0KKyAgICByZXR1cm4gbm9ybWFsaXplZFJlY3Q7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRm9udENhY2hlQmxhY2tiZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRDYWNoZUJsYWNrYmVycnkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2Zjk4OTZhZDYzY2IwMWM1ZDgyMTRhMzNhYWZmYmI1ZGMyYzJkOThj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udENhY2hlQmxhY2tiZXJyeS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJGb250
UmVuZGVyU3R5bGUuaCIKLQotI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdXRmMTYuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2Fj
aGU6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbnVtQ2hhcmFjdGVycywgY29uc3QgY2hhciosIEZvbnRDYWNoZTo6U2ltcGxlRm9udEZh
bWlseSogZmFtaWx5KQotewotICAgIEZjQ2hhclNldCogY3NldCA9IEZjQ2hhclNldENyZWF0ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKSB7Ci0gICAg
ICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcnNbaV0pCi0gICAgICAgICAgICAmJiBV
MTZfSVNfU1VSUk9HQVRFX0xFQUQoY2hhcmFjdGVyc1tpXSkKLSAgICAgICAgICAgICYmIGkgIT0g
bnVtQ2hhcmFjdGVycyAtIDEKLSAgICAgICAgICAgICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJz
W2kgKyAxXSkpIHsKLSAgICAgICAgICAgIEZjQ2hhclNldEFkZENoYXIoY3NldCwgVTE2X0dFVF9T
VVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbaV0sIGNoYXJhY3RlcnNbaSsxXSkpOwotICAgICAgICAg
ICAgaSsrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihj
c2V0LCBjaGFyYWN0ZXJzW2ldKTsKLSAgICB9Ci0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQ
YXR0ZXJuQ3JlYXRlKCk7Ci0KLSAgICBGY1ZhbHVlIGZjdmFsdWU7Ci0gICAgZmN2YWx1ZS50eXBl
ID0gRmNUeXBlQ2hhclNldDsKLSAgICBmY3ZhbHVlLnUuYyA9IGNzZXQ7Ci0gICAgRmNQYXR0ZXJu
QWRkKHBhdHRlcm4sIEZDX0NIQVJTRVQsIGZjdmFsdWUsIEZjRmFsc2UpOwotCi0gICAgZmN2YWx1
ZS50eXBlID0gRmNUeXBlQm9vbDsKLSAgICBmY3ZhbHVlLnUuYiA9IEZjVHJ1ZTsKLSAgICBGY1Bh
dHRlcm5BZGQocGF0dGVybiwgRkNfU0NBTEFCTEUsIGZjdmFsdWUsIEZjRmFsc2UpOwotCi0gICAg
RmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0Rl
ZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwotCi0gICAgRmNSZXN1bHQgcmVzdWx0OwotICAgIEZj
Rm9udFNldCogZm9udFNldCA9IEZjRm9udFNvcnQoMCwgcGF0dGVybiwgMCwgMCwgJnJlc3VsdCk7
Ci0gICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKLSAgICBGY0NoYXJTZXREZXN0cm95KGNz
ZXQpOwotCi0gICAgaWYgKCFmb250U2V0KSB7Ci0gICAgICAgIGZhbWlseS0+bmFtZSA9IFN0cmlu
ZygpOwotICAgICAgICBmYW1pbHktPmlzQm9sZCA9IGZhbHNlOwotICAgICAgICBmYW1pbHktPmlz
SXRhbGljID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPbGRlciB2
ZXJzaW9ucyBvZiBmb250Y29uZmlnIGhhdmUgYSBidWcgd2hlcmUgdGhleSBjYW5ub3Qgc2VsZWN0
Ci0gICAgLy8gb25seSBzY2FsYWJsZSBmb250cyBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGZpbHRl
ciB0aGUgcmVzdWx0cy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRTZXQtPm5mb250OyAr
K2kpIHsKLSAgICAgICAgRmNQYXR0ZXJuKiBjdXJyZW50ID0gZm9udFNldC0+Zm9udHNbaV07Ci0g
ICAgICAgIEZjQm9vbCBpc1NjYWxhYmxlOwotCi0gICAgICAgIGlmIChGY1BhdHRlcm5HZXRCb29s
KGN1cnJlbnQsIEZDX1NDQUxBQkxFLCAwLCAmaXNTY2FsYWJsZSkgIT0gRmNSZXN1bHRNYXRjaAot
ICAgICAgICAgICAgfHwgIWlzU2NhbGFibGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAvLyBmb250Y29uZmlnIGNhbiBhbHNvIHJldHVybiBmb250cyB3aGljaCBhcmUgdW5yZWFk
YWJsZQotICAgICAgICBGY0NoYXI4KiBjRmlsZW5hbWU7Ci0gICAgICAgIGlmIChGY1BhdHRlcm5H
ZXRTdHJpbmcoY3VycmVudCwgRkNfRklMRSwgMCwgJmNGaWxlbmFtZSkgIT0gRmNSZXN1bHRNYXRj
aCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChhY2Nlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY0ZpbGVuYW1lKSwgUl9PSykpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBGY0NoYXI4KiBmYW1pbHlOYW1lOwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0
U3RyaW5nKGN1cnJlbnQsIEZDX0ZBTUlMWSwgMCwgJmZhbWlseU5hbWUpID09IEZjUmVzdWx0TWF0
Y2gpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNoYXJGYW1pbHkgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGZhbWlseS0+bmFtZSA9IFN0cmlu
Zzo6ZnJvbVVURjgoY2hhckZhbWlseSwgc3RybGVuKGNoYXJGYW1pbHkpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCB3ZWlnaHQ7Ci0gICAgICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKGN1
cnJlbnQsIEZDX1dFSUdIVCwgMCwgJndlaWdodCkgPT0gRmNSZXN1bHRNYXRjaCkKLSAgICAgICAg
ICAgIGZhbWlseS0+aXNCb2xkID0gd2VpZ2h0ID49IEZDX1dFSUdIVF9CT0xEOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmYW1pbHktPmlzQm9sZCA9IGZhbHNlOwotCi0gICAgICAgIGludCBz
bGFudDsKLSAgICAgICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIoY3VycmVudCwgRkNfU0xBTlQs
IDAsICZzbGFudCkgPT0gRmNSZXN1bHRNYXRjaCkKLSAgICAgICAgICAgIGZhbWlseS0+aXNJdGFs
aWMgPSBzbGFudCAhPSBGQ19TTEFOVF9ST01BTjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZmFtaWx5LT5pc0l0YWxpYyA9IGZhbHNlOwotCi0gICAgICAgIEZjRm9udFNldERlc3Ryb3koZm9u
dFNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGY0ZvbnRTZXREZXN0cm95KGZv
bnRTZXQpOwotfQotCi19OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJs
YWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCmluZGV4IGVhNDgwYWYwZTk5ODM0MGVj
OWY3ZTQ1MmZiYmIzNzBkNGZmYmQxMDkuLjc1MDUzMmQ4OTQzZmUyYTgxNTk4ZWFkMTQ3OGE4Yjhk
NTYwNTZjNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tC
ZXJyeS5jcHAKQEAgLTMwLDE0ICszMCwxNSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllcldlYktpdFRo
cmVhZC5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNpbmNsdWRlIDxUaWxlZEltYWdlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTEyLDYgKzExMyw5IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
CiAgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKIAog
ICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsgLy8gQWx3YXlzIHNldCB0byAx
IGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzID0gbV9leHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
Iik7CisgICAgQU5HTEVSZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IG1fZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0VHTF9pbWFnZV9leHRlcm5hbCIpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IG1fZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FS
Ql90ZXh0dXJlX3JlY3RhbmdsZSIpOwogICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xF
UmVzb3VyY2VzKTsKIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwpAQCAtMzQyLDE2
ICszNDYsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVT
Mk5QT1RTdHJpY3QoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdGV4dHVy
ZTsKQEAgLTM3MiwzMCArMzY2LDE1IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNE
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9D
YW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBp
bnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwKICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogdGVtcFBp
eGVscyA9IG5ldyB1bnNpZ25lZCBjaGFyW2ltYWdlV2lkdGggKiBpbWFnZUhlaWdodCAqIDRdOwot
Ci0gICAgLy8gM0QgaW1hZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBCR1JBLiBE
b24ndCBkbyBpdCB0d2ljZSEhCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZUhlaWdodDsg
eSsrKSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY1JvdyA9IGltYWdlUGl4ZWxz
ICsgKGltYWdlV2lkdGggKiA0ICogeSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RSb3cg
PSB0ZW1wUGl4ZWxzICsgKGltYWdlV2lkdGggKiA0ICogKGltYWdlSGVpZ2h0IC0geSAtIDEpKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbWFnZVdpZHRoICogNDsgaSArPSA0KQotICAg
ICAgICAgICAgbWVtY3B5KGRlc3RSb3cgKyBpLCBzcmNSb3cgKyBpLCA0KTsKLSAgICB9Ci0KLSAg
ICBTa0JpdG1hcCBjYW52YXNCaXRtYXA7Ci0KLSAgICBjYW52YXNCaXRtYXAuc2V0Q29uZmlnKFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCk7Ci0g
ICAgY2FudmFzQml0bWFwLmFsbG9jUGl4ZWxzKDAsIDApOwotICAgIGNhbnZhc0JpdG1hcC5sb2Nr
UGl4ZWxzKCk7Ci0gICAgbWVtY3B5KGNhbnZhc0JpdG1hcC5nZXRQaXhlbHMoKSwgdGVtcFBpeGVs
cywgaW1hZ2VXaWR0aCAqIGltYWdlSGVpZ2h0ICogNCk7Ci0gICAgY2FudmFzQml0bWFwLnVubG9j
a1BpeGVscygpOwotICAgIGRlbGV0ZSBbXSB0ZW1wUGl4ZWxzOwotCiAgICAgRmxvYXRSZWN0IHNy
YygwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKICAgICBGbG9hdFJlY3QgZHN0KDAs
IDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLQotICAgIFJlZlB0cjxCaXRtYXBJbWFnZVNp
bmdsZUZyYW1lU2tpYT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6
Y3JlYXRlKGNhbnZhc0JpdG1hcCwgZmFsc2UpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShiaXRt
YXBJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0LCBzcmMsIENvbXBvc2l0ZUNv
cHksIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CisgICAgZG91YmxlIG9sZFRyYW5z
Zm9ybVs2XTsKKyAgICBkb3VibGUgZmxpcFlUcmFuc2Zvcm1bNl0gPSB7IDEuMGYsIDAuMGYsIDAu
MGYsIC0xLjBmLCAwLjBmLCBpbWFnZUhlaWdodCAtIDEgfTsKKyAgICBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Z2V0VHJhbnNmb3JtKG9sZFRyYW5zZm9ybSk7CisgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPnNldFRyYW5zZm9ybShmbGlwWVRyYW5zZm9ybSk7CisgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlZEltYWdlIGltYWdlKEludFNpemUoaW1hZ2VX
aWR0aCwgaW1hZ2VIZWlnaHQpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1bnNpZ25lZCo+
KGltYWdlUGl4ZWxzKSk7CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFkZEltYWdl
KGRzdCwgc3JjLCAmaW1hZ2UpOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRU
cmFuc2Zvcm0ob2xkVHJhbnNmb3JtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0
Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxi
YWNrKQpAQCAtNDA3LDYgKzM4NiwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJv
ck1lc3NhZ2VDYWxsYmFjayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPgogewogfQog
Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBp
Z25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3Ip
Cit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
bnNpZ25lZCBpbWFnZVNpemUgPSBuYXRpdmVJbWFnZS0+c2l6ZSgpLndpZHRoKCkgKiBuYXRpdmVJ
bWFnZS0+c2l6ZSgpLmhlaWdodCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gaW1hZ2VEYXRhKGlt
YWdlU2l6ZSk7CisgICAgaWYgKCFuYXRpdmVJbWFnZS0+cmVhZFBpeGVscyhpbWFnZURhdGEuZGF0
YSgpLCBpbWFnZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSYXcgaW1h
Z2UgZGF0YSBpcyBwcmVtdWx0aXBsaWVkCisgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxw
aGFEb05vdGhpbmc7CisgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICBuZWVkZWRB
bHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CisKKyAgICBvdXRwdXRWZWN0b3IucmVzaXplKGlt
YWdlU2l6ZSAqIDQpOworICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGltYWdlRGF0YS5kYXRhKCkpLAorICAgICAgICBTb3VyY2VGb3JtYXRCR1JB
OCwKKyAgICAgICAgbmF0aXZlSW1hZ2UtPnNpemUoKS53aWR0aCgpLCBuYXRpdmVJbWFnZS0+c2l6
ZSgpLmhlaWdodCgpLCAwLAorICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91
dHB1dFZlY3Rvci5kYXRhKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNr
QmVycnkuY3BwCmluZGV4IDc0ZWEyYmY4NmExNzMzMjdjMmZiYjRiMjk5ODkyMDliODNjMzRjZDUu
LmI1ZjRjYzJiZTUwYzY3ODRhMmRkZDc2N2MwZTdmYTY3NjFmM2U0ZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJs
YWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAKICNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgpAQCAt
ODAsMTQgKzc5LDYgQEAgc3RhdGljIHZvaWQgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcihMYXll
cldlYktpdFRocmVhZCYgbGF5ZXIpCiAgICAgbGF5ZXIuc2V0QmFja2dyb3VuZENvbG9yKENvbG9y
Ojp0cmFuc3BhcmVudCk7CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKCFmYWN0b3J5KQotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KGNsaWVudCkpOwotCi0gICAgcmV0dXJu
IGZhY3RvcnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKLX0KLQogUGFzc093blB0cjxH
cmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NMYXllckJsYWNrQmVy
cnkoY2xpZW50KSk7CkBAIC05Nyw2ICs4OCw3IEBAIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpH
cmFwaGljc0xheWVyQmxhY2tCZXJyeShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAg
OiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAgICAsIG1fc3VzcGVuZFRpbWUoMCkKICAgICAsIG1f
Y29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQorICAgICwgbV9jb250ZW50c0xh
eWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQogewogICAgIG1fbGF5ZXIgPSBMYXllcldlYktp
dFRocmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6TGF5ZXIsIHRoaXMpOwogCkBAIC0yODAsMTUgKzI3
Miw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldFJlcGxpY2F0ZWRCeUxheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIHByaW1hcnlMYXllcigpLT5zZXRSZXBsaWNhTGF5
ZXIocmVwbGljYUxheWVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0
Rml4ZWRQb3NpdGlvbihib29sIGZpeGVkKQotewotICAgIGlmIChmaXhlZCA9PSBtX2ZpeGVkUG9z
aXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkUG9z
aXRpb24oZml4ZWQpOwotICAgIHVwZGF0ZUZpeGVkUG9zaXRpb24oKTsKLX0KLQogdm9pZCBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeTo6c2V0SGFzRml4ZWRDb250YWluZXIoYm9vbCBoYXNGaXhlZENv
bnRhaW5lcikKIHsKICAgICBpZiAoaGFzRml4ZWRDb250YWluZXIgPT0gbV9oYXNGaXhlZENvbnRh
aW5lcikKQEAgLTMyOSwxMyArMzEyLDI0IEBAIGJvb2wgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIAogdm9pZCBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAoY29sb3IgPT0gbV9iYWNrZ3JvdW5kQ29sb3IpCisgICAgaWYgKG1fYmFj
a2dyb3VuZENvbG9yU2V0ICYmIG1fYmFja2dyb3VuZENvbG9yID09IGNvbG9yKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3Iucmdi
KCkpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CisKKyAg
ICBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29sb3IgPSB0cnVlOwogICAgIHVwZGF0ZUxh
eWVyQmFja2dyb3VuZENvbG9yKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6
OmNsZWFyQmFja2dyb3VuZENvbG9yKCkKK3sKKyAgICBpZiAoIW1fYmFja2dyb3VuZENvbG9yU2V0
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpjbGVhckJhY2tncm91bmRD
b2xvcigpOworICAgIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fY29udGVudHNMYXllcik7
Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldENvbnRlbnRzT3BhcXVlKGJv
b2wgb3BhcXVlKQogewogICAgIGlmIChtX2NvbnRlbnRzT3BhcXVlID09IG9wYXF1ZSkKQEAgLTM2
NywyNiArMzYxLDIwIEBAIHZvaWQgR3JhcGhpY3NMYXllckJsYWNrQmVycnk6OnNldE9wYWNpdHko
ZmxvYXQgb3BhY2l0eSkKIAogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6c2V0Q29udGVu
dHNOZWVkc0Rpc3BsYXkoKQogewotICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICBpZiAo
bV9jb250ZW50c0xheWVyKQogICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOwotICAgICAgICBhZGRSZXBhaW50UmVjdChjb250ZW50c1JlY3QoKSk7Ci0gICAgfQogfQog
CiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAg
IGlmIChkcmF3c0NvbnRlbnQoKSkgeworICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKICAgICAgICAg
bV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIGFkZFJlcGFpbnRSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSkpOwotICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQmxhY2tCZXJyeTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkpIHsKKyAgICBpZiAoZHJhd3NDb250ZW50KCkp
CiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAg
YWRkUmVwYWludFJlY3QocmVjdCk7Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5OjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTgwNiwxMSAr
Nzk0LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlTGF5ZXJJc0RyYXdh
YmxlKCkKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyQmxhY2tCZXJyeTo6dXBkYXRlRml4ZWRQb3NpdGlvbigpCi17Ci0gICAgbV9sYXllci0+c2V0
Rml4ZWRQb3NpdGlvbihtX2ZpeGVkUG9zaXRpb24pOwotfQotCiB2b2lkIEdyYXBoaWNzTGF5ZXJC
bGFja0JlcnJ5Ojp1cGRhdGVIYXNGaXhlZENvbnRhaW5lcigpCiB7CiAgICAgbV9sYXllci0+c2V0
SGFzRml4ZWRDb250YWluZXIobV9oYXNGaXhlZENvbnRhaW5lcik7CkBAIC04MjMsMTAgKzgwNiwx
NCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5Ojp1cGRhdGVIYXNGaXhlZEFuY2VzdG9y
SW5ET01UcmVlKCkKIAogdm9pZCBHcmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlTGF5ZXJC
YWNrZ3JvdW5kQ29sb3IoKQogewotICAgIGlmIChtX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgIHNldExheWVyQmFja2dyb3VuZENvbG9yKCptX2xheWVyLCBtX2JhY2tncm91bmRD
b2xvcik7CisgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFdlIG5ldmVyIGNyZWF0ZSB0aGUgY29udGVudHMgbGF5ZXIganVzdCBmb3IgYmFja2dyb3Vu
ZCBjb2xvciB5ZXQuCisgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0KQorICAgICAgICBzZXRM
YXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyLCBtX2JhY2tncm91bmRDb2xvcik7
CiAgICAgZWxzZQotICAgICAgICBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2xheWVyKTsK
KyAgICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyKTsKIH0K
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTkwMSw3ICs4ODgsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5OjpzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQq
IGNvbnRlbnRzTGF5ZQogCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwogCi0gICAgICAg
IGlmIChpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpKSB7CisgICAgICAgIGlmIChzaG93RGVidWdCb3Jk
ZXJzKCkpIHsKICAgICAgICAgICAgIHNldExheWVyQm9yZGVyQ29sb3IoKm1fY29udGVudHNMYXll
ciwgQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKICAgICAgICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0Qm9yZGVyV2lkdGgoMSk7CiAgICAgICAgIH0KQEAgLTkxNSwxNCArOTAyLDYgQEAgdm9pZCBH
cmFwaGljc0xheWVyQmxhY2tCZXJyeTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogICAgIHByaW1h
cnlMYXllcigpLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NMYXll
ckJsYWNrQmVycnk6OmNvbnRlbnRzVmlzaWJsZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gbV9jbGllbnQtPmNvbnRlbnRzVmlzaWJsZSh0aGlzLCBjb250ZW50UmVjdCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NMYXllckJsYWNrQmVycnkuaAppbmRl
eCBlMmRkOTBjMTQ4OThiYzZkNGUzNTg5NGI5ZDdmZTVhNGMxZGNkOTkyLi4wODlhM2YwZDRkNTk3
MWIyMGJhZTE5MzhjZTRjN2M3Yzc1N2NjYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0xh
eWVyQmxhY2tCZXJyeS5oCkBAIC0yOSw4ICsyOSw2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpbmNsdWRlICJQbGF0Zm9ybS5oIgotCiAjaWZuZGVmIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
X2gKICNkZWZpbmUgR3JhcGhpY3NMYXllckJsYWNrQmVycnlfaAogCkBAIC03NSw3ICs3Myw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNWaXNpYmxlKGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEZpeGVkUG9zaXRpb24oYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEhhc0ZpeGVk
Q29udGFpbmVyKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNGaXhlZEFuY2VzdG9ySW5E
T01UcmVlKGJvb2wpOwogCkBAIC04Niw2ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAg
dmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhckJhY2tncm91bmRDb2xvcigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzT3BhcXVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxp
dHkoYm9vbCk7CkBAIC0xMTUsMTAgKzExMywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgdmlydHVhbCB2b2lk
IHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgpOwogCi0gICAg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkKKyAgICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgp
CiAgICAgewogICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+bm90
aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5ub3RpZnlTeW5j
UmVxdWlyZWQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGRvdWJsZSB0aW1lKQpAQCAtMTI3LDggKzEyNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
Y2xpZW50LT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsIHRpbWUpOwogICAgIH0KIAotICAg
IGJvb2wgY29udGVudHNWaXNpYmxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
LQogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CiAKQEAgLTE0
OSw3ICsxNDUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5
KCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclByZXNlcnZlczNEKCk7CiAgICAgdm9pZCB1cGRhdGVM
YXllcklzRHJhd2FibGUoKTsKLSAgICB2b2lkIHVwZGF0ZUZpeGVkUG9zaXRpb24oKTsKICAgICB2
b2lkIHVwZGF0ZUhhc0ZpeGVkQ29udGFpbmVyKCk7CiAgICAgdm9pZCB1cGRhdGVIYXNGaXhlZEFu
Y2VzdG9ySW5ET01UcmVlKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigp
OwpAQCAtMTg1LDYgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIENvbnRlbnRzTGF5
ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CisgICAgYm9vbCBtX2NvbnRlbnRzTGF5
ZXJIYXNCYWNrZ3JvdW5kQ29sb3IgOiAxOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9J
bWFnZUJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9JbWFnZUJsYWNrQmVycnkuY3BwCmluZGV4IDA3ZGE5OTE1ZTgyMmE3M2Q3ODlkMDUy
NWYwNTk3MDExNjMwODBmMzUuLjdkMTBjYWIyYmY2MWY2MjgwZWFlZjliYWI3YzEwN2MwNzFjZjk3
NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvSW1hZ2VCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0ltYWdlQmxhY2tCZXJyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDExICsxOSwyMSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCisjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtUmVzb3VyY2VTdG9yZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVz
aW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpSZXNvdXJjZURhdGE7CiB1c2luZyBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6UmVzb3VyY2VTdG9yZTsKQEAgLTQ1LDQgKzU1LDEzNSBAQCBQYXNzUmVmUHRy
PEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkKICAg
ICByZXR1cm4gaW1nLnJlbGVhc2UoKTsKIH0KIAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVkSW1hZ2UobV9zaXplLCBtX2J5dGVzKTsKK30KKworYm9v
bCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKK3sKKyAgICBpZiAoY2xlYXJN
ZXRhZGF0YSkKKyAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgIGlmIChtX2Zy
YW1lKSB7CisgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOworICAgICAgICBtX2ZyYW1lID0gMDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlcikKKyAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9jdXJyZW50RnJh
bWUoMCkKKyAgICAsIG1fZnJhbWVzKDApCisgICAgLCBtX2ZyYW1lVGltZXIoMCkKKyAgICAsIG1f
cmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQorICAgICwgbV9yZXBldGl0aW9uQ291bnRT
dGF0dXMoVW5rbm93bikKKyAgICAsIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSgwKQorICAgICwgbV9k
ZWNvZGVkU2l6ZSgwKQorICAgICwgbV9mcmFtZUNvdW50KDEpCisgICAgLCBtX2lzU29saWRDb2xv
cihmYWxzZSkKKyAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCisgICAgLCBtX2Fu
aW1hdGlvbkZpbmlzaGVkKHRydWUpCisgICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQorICAg
ICwgbV9oYXZlU2l6ZSh0cnVlKQorICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCisgICAgLCBt
X2hhdmVGcmFtZUNvdW50KHRydWUpCit7CisgICAgaW50IHdpZHRoID0gbmF0aXZlSW1hZ2UtPnNp
emUoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBuYXRpdmVJbWFnZS0+c2l6ZSgpLmhlaWdo
dCgpOworICAgIG1fZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgbV9zaXpl
ID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKworICAgIG1fZnJhbWVzLmdyb3coMSk7CisgICAg
bV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOworICAgIG1fZnJhbWVzWzBdLm1faGFz
QWxwaGEgPSBuYXRpdmVJbWFnZS0+aGFzQWxwaGEoKTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhdmVN
ZXRhZGF0YSA9IHRydWU7CisgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7Cit9CisKK3ZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCit7CisgICAgbV9pc1NvbGlkQ29sb3IgPSBz
aXplKCkud2lkdGgoKSA9PSAxICYmIHNpemUoKS5oZWlnaHQoKSA9PSAxICYmIGZyYW1lQ291bnQo
KSA9PSAxOworICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOworICAgIGlmIChtX2lz
U29saWRDb2xvcikgeworICAgICAgICB1bnNpZ25lZCBidWZmZXI7CisgICAgICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaW1h
Z2UtPnJlYWRQaXhlbHMoJmJ1ZmZlciwgMSk7CisgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9y
KGJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7
CisgICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBkc3RSZWN0Lm5vcm1hbGl6ZWQoKTsK
KyAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBzcmNSZWN0Lm5vcm1hbGl6ZWQoKTsKKworICAg
IGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZHJhdy4KKworI2lmIEVOQUJMRShJTUFHRV9ERUNP
REVSX0RPV05fU0FNUExJTkcpCisgICAgbm9ybVNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9y
RG93blNhbXBsaW5nKG5vcm1TcmNSZWN0LCBpbWFnZS0+c2l6ZSgpKTsKKyNlbmRpZgorCisgICAg
Q29tcG9zaXRlT3BlcmF0b3Igb2xkT3BlcmF0b3IgPSBjb250ZXh0LT5jb21wb3NpdGVPcGVyYXRp
b24oKTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGRJbWFnZShub3JtRHN0UmVjdCwgbm9ybVNyY1JlY3Qs
IGltYWdlKTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkT3BlcmF0b3Ip
OworCisgICAgaWYgKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1hZ2VPYnNlcnZlcigpKQor
ICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyh0aGlzKTsKK30KKwordm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIHBhdHRlcm5UcmFuc2Zvcm1hdGlvbiBjb250YWlucyB0
aGUgdGlsZSBzY2FsZSBmYWN0b3IgcmVsYXRpdmUgdG8KKyAgICAvLyBkb2N1bWVudCBjb29yZGlu
YXRlcy4gcGhhc2UgaXMgZ2l2ZW4gaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMgYW5kCisgICAgLy8g
Y29ycmVzcG9uZHMgdG8gYSB0ZXh0dXJlIGRyYXduIHdpdGggc3JjIHN0YXJ0aW5nIGF0ICgwLCAw
KS4KKyAgICAvLyBUaHVzLCBkc3RSZWN0IHN0YXJ0cyBhdCBwaGFzZSArIHBhdHRlcm5UcmFuc2Zv
cm1hdGlvbi5tYXBQb2ludChzcmNSZWN0LmxvY2F0aW9uKCkpLgorICAgIEFmZmluZVRyYW5zZm9y
bSBzcmNUcmFuc2Zvcm07CisgICAgc3JjVHJhbnNmb3JtLnRyYW5zbGF0ZShwaGFzZS54KCksIHBo
YXNlLnkoKSk7CisgICAgc3JjVHJhbnNmb3JtLm11bHRpcGx5KHBhdHRlcm5UcmFuc2Zvcm1hdGlv
bik7CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBGbG9hdFJl
Y3Qgc3JjUmVjdExvY2FsKHNyY1JlY3QpOworICAgIGNvbnN0IEludFNpemUgdW5zY2FsZWRTaXpl
ID0gc2l6ZSgpOworICAgIGNvbnN0IEludFNpemUgc2NhbGVkU2l6ZSA9IGltYWdlLT5zaXplKCk7
CisgICAgaWYgKHVuc2NhbGVkU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIHNyY1JlY3RM
b2NhbCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdCwgc2NhbGVkU2l6
ZSk7CisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYmVlbiBkb3duIHNhbXBsZWQsIHRoZSB0
cmFuc2Zvcm1hdGlvbiBzaG91bGQgdGFrZSB0aGUgc2NhbGUgaW50byBhY2NvdW50LgorICAgICAg
ICBmbG9hdCB4c2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4odW5zY2FsZWRTaXplLndpZHRoKCkp
IC8gc2NhbGVkU2l6ZS53aWR0aCgpOworICAgICAgICBmbG9hdCB5c2NhbGUgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4odW5zY2FsZWRTaXplLmhlaWdodCgpKSAvIHNjYWxlZFNpemUuaGVpZ2h0KCk7Cisg
ICAgICAgIHNyY1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oeHNjYWxlLCB5c2NhbGUpOworICAg
IH0KKyNlbHNlCisgICAgRmxvYXRSZWN0IHNyY1JlY3RMb2NhbChzcmNSZWN0KTsKKyNlbmRpZgor
ICAgIHNyY1RyYW5zZm9ybS50cmFuc2xhdGUoc3JjUmVjdExvY2FsLngoKSwgc3JjUmVjdExvY2Fs
LnkoKSk7CisgICAgZG91YmxlIHNyY1RyYW5zZm9ybUFycmF5WzZdID0geworICAgICAgICBzcmNU
cmFuc2Zvcm0uYSgpLCBzcmNUcmFuc2Zvcm0uYigpLAorICAgICAgICBzcmNUcmFuc2Zvcm0uYygp
LCBzcmNUcmFuc2Zvcm0uZCgpLAorICAgICAgICBzcmNUcmFuc2Zvcm0uZSgpLCBzcmNUcmFuc2Zv
cm0uZigpCisgICAgfTsKKworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9sZE9wZXJhdG9yID0gY29u
dGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CisgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wKTsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRkUGF0dGVybihk
c3RSZWN0LCBzcmNSZWN0TG9jYWwsIHNyY1RyYW5zZm9ybUFycmF5LCBpbWFnZSk7CisgICAgY29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9sZE9wZXJhdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9JbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9JbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZh
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGExNmNiYzlkZDk5YTFlNDI3MDg0
MWQ4YTdlNmUxMzM3OGQ4ZmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW5z
dHJ1bWVudGVkUGxhdGZvcm1DYW52YXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgSW5zdHJ1
bWVudGVkUGxhdGZvcm1DYW52YXNfaAotI2RlZmluZSBJbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZh
c19oCi0KLSNpbmNsdWRlIDxza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaD4KLQotI2RlZmluZSBE
RUJVR19TS0lBX0RSQVdJTkcgMAotI2lmIERFQlVHX1NLSUFfRFJBV0lORwotI2RlZmluZSBXUkFQ
Q0FOVkFTX0xPR19FTlRSWSguLi4pIGRvIHsgXAotICAgIGZwcmludGYoc3RkZXJyLCAiJXMgIiwg
X19GVU5DVElPTl9fKTsgXAotICAgIGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7IFwKLSAg
ICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7IFwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBX
UkFQQ0FOVkFTX0xPR19FTlRSWSguLi4pICgodm9pZCkwKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSW5zdHJ1bWVudGVkUGxhdGZvcm1DYW52YXMgOiBwdWJsaWMgU2tD
YW52YXMgewotcHVibGljOgotICAgIEluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzKGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXApCi0gICAgICAgIDogbV9zaXplKGJpdG1hcC53aWR0aCgpLCBiaXRtYXAu
aGVpZ2h0KCkpCi0gICAgICAgICwgbV9pc1NvbGlkQ29sb3IodHJ1ZSkKLSAgICAgICAgLCBtX3Nv
bGlkQ29sb3IoMCwgMCwgMCwgMCkKLSAgICB7Ci0gICAgICAgIHNldERldmljZShuZXcgU2tEZXZp
Y2UoYml0bWFwKSktPnVucmVmKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+SW5zdHJ1bWVudGVk
UGxhdGZvcm1DYW52YXMoKSB7IH0KLQotICAgIGJvb2wgaXNTb2xpZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NvbGlkQ29sb3I7IH0KLSAgICBDb2xvciBzb2xpZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb2xpZENvbG9yOyB9Ci0KLSAgICAvLyBvdmVycmlkZXMgZnJvbSBTa0NhbnZhcwot
ICAgIHZpcnR1YWwgaW50IHNhdmUoU2F2ZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgV1JB
UENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICByZXR1cm4gU2tDYW52YXM6OnNhdmUoZmxh
Z3MpOwotICAgIH0KLQotICAgIHZpcnR1YWwgaW50IHNhdmVMYXllcihjb25zdCBTa1JlY3QqIGJv
dW5kcywgY29uc3QgU2tQYWludCogcGFpbnQsIFNhdmVGbGFncyBmbGFncykKLSAgICB7Ci0gICAg
ICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBm
YWxzZTsKLSAgICAgICAgcmV0dXJuIFNrQ2FudmFzOjpzYXZlTGF5ZXIoYm91bmRzLCBwYWludCwg
ZmxhZ3MpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgU2tDYW52YXM6OnJlc3RvcmUo
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdHJhbnNsYXRlKFNrU2NhbGFyIGR4LCBTa1Nj
YWxhciBkeSkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAg
ICAgcmV0dXJuIFNrQ2FudmFzOjp0cmFuc2xhdGUoZHgsIGR5KTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgc2NhbGUoU2tTY2FsYXIgc3gsIFNrU2NhbGFyIHN5KQotICAgIHsKLSAgICAgICAg
V1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICByZXR1cm4gU2tDYW52YXM6OnNjYWxl
KHN4LCBzeSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHJvdGF0ZShTa1NjYWxhciBkZWdy
ZWVzKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBy
ZXR1cm4gU2tDYW52YXM6OnJvdGF0ZShkZWdyZWVzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgc2tldyhTa1NjYWxhciBzeCwgU2tTY2FsYXIgc3kpCi0gICAgewotICAgICAgICBXUkFQQ0FO
VkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIHJldHVybiBTa0NhbnZhczo6c2tldyhzeCwgc3kp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb25jYXQoY29uc3QgU2tNYXRyaXgmIG1hdHJp
eCkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgcmV0
dXJuIFNrQ2FudmFzOjpjb25jYXQobWF0cml4KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TWF0cml4KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpCi0gICAgewotICAgICAgICBXUkFQQ0FO
VkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIFNrQ2FudmFzOjpzZXRNYXRyaXgobWF0cml4KTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBT
a1JlZ2lvbjo6T3Agb3ApCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7
Ci0gICAgICAgIHJldHVybiBTa0NhbnZhczo6Y2xpcFJlY3QocmVjdCwgb3ApOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBjbGlwUGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIFNrUmVnaW9uOjpP
cCBvcCkgCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAg
IG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBTa0NhbnZhczo6Y2xpcFBh
dGgocGF0aCwgb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjbGlwUmVnaW9uKGNvbnN0
IFNrUmVnaW9uJiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkKLSAgICB7Ci0gICAgICAgIFdSQVBD
QU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIFNrQ2FudmFzOjpjbGlwUmVnaW9uKHJlZ2lvbiwgb3ApOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcihTa0NvbG9yIGNvbG9yKQotICAgIHsKLSAgICAgICAgV1JB
UENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7Ci0g
ICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKGNvbG9yKTsKLSAgICAgICAgU2tDYW52YXM6OmNs
ZWFyKGNvbG9yKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhaW50KGNvbnN0IFNr
UGFpbnQmIHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwot
ICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6ZHJhd1Bh
aW50KHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BvaW50cyhQb2ludE1v
ZGUgbW9kZSwgc2l6ZV90IGNvdW50LCBjb25zdCBTa1BvaW50IHB0c1tdLAotICAgICAgICAgICAg
Y29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRS
WSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFz
OjpkcmF3UG9pbnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWlu
dCkKLSAgICB7Ci0gICAgICAgIEludFJlY3QgcmVjdFRvRHJhdyhyZWN0KTsKLSAgICAgICAgV1JB
UENBTlZBU19MT0dfRU5UUlkoInJlY3QgPSAoeD0lZCx5PSVkLHdpZHRoPSVkLGhlaWdodD0lZCki
LCByZWN0VG9EcmF3LngoKSwgcmVjdFRvRHJhdy55KCksIHJlY3RUb0RyYXcud2lkdGgoKSwgcmVj
dFRvRHJhdy5oZWlnaHQoKSk7Ci0gICAgICAgIEludFJlY3QgY2FudmFzUmVjdChJbnRQb2ludCgp
LCBtX3NpemUpOwotICAgICAgICBpZiAobV9pc1NvbGlkQ29sb3IgJiYgZ2V0VG90YWxNYXRyaXgo
KS5yZWN0U3RheXNSZWN0KCkgJiYgZ2V0VG90YWxDbGlwKCkuY29udGFpbnMoY2FudmFzUmVjdCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IFNrTWF0cml4JiBtYXRyaXggPSBnZXRUb3RhbE1hdHJpeCgp
OwotICAgICAgICAgICAgU2tSZWN0IG1hcHBlZDsKLSAgICAgICAgICAgIG1hdHJpeC5tYXBSZWN0
KCZtYXBwZWQsIHJlY3QpOwotICAgICAgICAgICAgaWYgKG1hcHBlZC5jb250YWlucyhjYW52YXNS
ZWN0KSkgewotICAgICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gc29saWRDb2xvcihwYWludCk7
Ci0gICAgICAgICAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBjb2xvci5pc1ZhbGlkKCk7Ci0gICAg
ICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gY29sb3I7Ci0gICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRy
YXdSZWN0KHJlY3QsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgo
Y29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKLSAgICB7Ci0gICAgICAg
IFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxz
ZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTa1NjYWxh
ciBsZWZ0LAotICAgICAgICAgICAgU2tTY2FsYXIgdG9wLCBjb25zdCBTa1BhaW50KiBwYWludCkK
LSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1Nv
bGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdCaXRtYXAoYml0bWFwLCBs
ZWZ0LCB0b3AsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0JpdG1hcFJl
Y3QoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCogc3JjLAotICAgICAgICAg
ICAgY29uc3QgU2tSZWN0JiBkc3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQotICAgIHsKLSAgICAg
ICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZh
bHNlOwotICAgICAgICBTa0NhbnZhczo6ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCBzcmMsIGRzdCwg
cGFpbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qml0bWFwTWF0cml4KGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsCi0gICAgICAgICAgICBjb25zdCBTa01hdHJpeCYgbWF0cml4LCBj
b25zdCBTa1BhaW50KiBwYWludCkKLSAgICB7Ci0gICAgICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZ
KCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgU2tDYW52YXM6
OmRyYXdCaXRtYXBNYXRyaXgoYml0bWFwLCBtYXRyaXgsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0JpdG1hcE5pbmUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3Qg
U2tJUmVjdCYgY2VudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
a1JlY3QmIGRzdCwgY29uc3QgU2tQYWludCogcGFpbnQgPSAwKQotICAgIHsKLSAgICAgICAgV1JB
UENBTlZBU19MT0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwot
ICAgICAgICBTa0NhbnZhczo6ZHJhd0JpdG1hcE5pbmUoYml0bWFwLCBjZW50ZXIsIGRzdCwgcGFp
bnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3U3ByaXRlKGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLAotICAgICAgICAgICAgY29uc3QgU2tQYWludCog
cGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAg
IG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3U3ByaXRlKGJp
dG1hcCwgbGVmdCwgdG9wLCBwYWludCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0KGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBTa1NjYWxhciB4LAotICAg
ICAgICAgICAgU2tTY2FsYXIgeSwgY29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAg
ICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFs
c2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3VGV4dCh0ZXh0LCBieXRlTGVuZ3RoLCB4LCB5LCBw
YWludCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQb3NUZXh0KGNvbnN0IHZvaWQq
IHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLAotICAgICAgICAgICAgY29uc3QgU2tQb2ludCBwb3Nb
XSwgY29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewotICAgICAgICBXUkFQQ0FOVkFTX0xPR19F
TlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIFNrQ2Fu
dmFzOjpkcmF3UG9zVGV4dCh0ZXh0LCBieXRlTGVuZ3RoLCBwb3MsIHBhaW50KTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Bvc1RleHRIKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBi
eXRlTGVuZ3RoLAotICAgICAgICAgICAgY29uc3QgU2tTY2FsYXIgeHBvc1tdLCBTa1NjYWxhciBj
b25zdFksIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBT
a0NhbnZhczo6ZHJhd1Bvc1RleHRIKHRleHQsIGJ5dGVMZW5ndGgsIHhwb3MsIGNvbnN0WSwgcGFp
bnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dE9uUGF0aChjb25zdCB2b2lk
KiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwKLSAgICAgICAgICAgIGNvbnN0IFNrUGF0aCYgcGF0
aCwgY29uc3QgU2tNYXRyaXgqIG1hdHJpeCwgY29uc3QgU2tQYWludCYgcGFpbnQpCi0gICAgewot
ICAgICAgICBXUkFQQ0FOVkFTX0xPR19FTlRSWSgiIik7Ci0gICAgICAgIG1faXNTb2xpZENvbG9y
ID0gZmFsc2U7Ci0gICAgICAgIFNrQ2FudmFzOjpkcmF3VGV4dE9uUGF0aCh0ZXh0LCBieXRlTGVu
Z3RoLCBwYXRoLCBtYXRyaXgsIHBhaW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d1BpY3R1cmUoU2tQaWN0dXJlJiBwaWN0dXJlKQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19M
T0dfRU5UUlkoIiIpOwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBT
a0NhbnZhczo6ZHJhd1BpY3R1cmUocGljdHVyZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdWZXJ0aWNlcyhWZXJ0ZXhNb2RlIG1vZGUsIGludCB2ZXJ0ZXhDb3VudCwKLSAgICAgICAg
ICAgIGNvbnN0IFNrUG9pbnQgdmVydGljZXNbXSwgY29uc3QgU2tQb2ludCB0ZXhzW10sCi0gICAg
ICAgICAgICBjb25zdCBTa0NvbG9yIGNvbG9yc1tdLCBTa1hmZXJtb2RlKiB4ZmVybW9kZSwKLSAg
ICAgICAgICAgIGNvbnN0IHVpbnQxNl90IGluZGljZXNbXSwgaW50IGluZGV4Q291bnQsIGNvbnN0
IFNrUGFpbnQmIHBhaW50KQotICAgIHsKLSAgICAgICAgV1JBUENBTlZBU19MT0dfRU5UUlkoIiIp
OwotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICBTa0NhbnZhczo6ZHJh
d1ZlcnRpY2VzKG1vZGUsIHZlcnRleENvdW50LCB2ZXJ0aWNlcywgdGV4cywgY29sb3JzLCB4ZmVy
bW9kZSwgaW5kaWNlcywgaW5kZXhDb3VudCwgcGFpbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBkcmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAg
ICAgIFdSQVBDQU5WQVNfTE9HX0VOVFJZKCIiKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBm
YWxzZTsKLSAgICAgICAgU2tDYW52YXM6OmRyYXdEYXRhKGRhdGEsIHNpemUpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBDb2xvciBzb2xpZENvbG9yKGNvbnN0IFNrUGFpbnQmIHBhaW50KQotICAg
IHsKLSAgICAgICAgaWYgKHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgaWYgKHBhaW50LmdldExvb3Bl
cigpIHx8IHBhaW50LmdldFNoYWRlcigpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0K
LSAgICAgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOwotICAgICAgICBTa1hmZXJtb2RlOjpBc01v
ZGUocGFpbnQuZ2V0WGZlcm1vZGUoKSwgJm1vZGUpOwotICAgICAgICBpZiAobW9kZSA9PSBTa1hm
ZXJtb2RlOjprQ2xlYXJfTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAw
KTsKLQotICAgICAgICBpZiAoKG1vZGUgPT0gU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSAmJiBw
YWludC5nZXRBbHBoYSgpID09IDI1NSkgfHwgbW9kZSA9PSBTa1hmZXJtb2RlOjprU3JjX01vZGUp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7Ci0gICAgICAgIHJl
dHVybiBDb2xvcigpOwotICAgIH0KLQotICAgIEludFNpemUgbV9zaXplOwotICAgIGJvb2wgbV9p
c1NvbGlkQ29sb3I7Ci0gICAgQ29sb3IgbV9zb2xpZENvbG9yOwotICAgIFNrUGFpbnQgbV9zb2xp
ZFBhaW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSW5zdHJ1
bWVudGVkUGxhdGZvcm1DYW52YXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZC5jcHAKaW5kZXggNDU0YWYxYTBjYjQ1ZTQwY2RjNmQ4NmZkOGU5ODNhNGZiOWY0OGU1My4u
Y2NkMDQ3MGRjZTZmNzQ4YzM3MDE2N2VjNjA5NTFhYWRjMzc2ZjA5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5n
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBAIC00NywxMiArNDcsMTUgQEAKICNpbmNs
dWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJl
YWQuaCIKIAorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyQ29udGV4dFN0YXRlLmg+
CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Mb2cuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiAjZGVm
aW5lIERFQlVHX1ZJREVPX0NMSVBQSU5HIDAKIAordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBM
YXllck92ZXJyaWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMjA3
LDcgKzIxMCw3IEBAIEZsb2F0UXVhZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpnZXRUcmFuc2Zv
cm1lZEhvbGVQdW5jaFJlY3QoKSBjb25zdAogICAgIHJldHVybiBnZXRUcmFuc2Zvcm1lZFJlY3Qo
bV9ib3VuZHMsIGRyYXdSZWN0LCBtX2RyYXdUcmFuc2Zvcm0pOwogfQogCi12b2lkIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OmRyYXdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxv
Y2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVj
dCkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKGRvdWJsZSBzY2Fs
ZSwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVS
ZWN0KQogewogICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwg
MSwgIDEsIDEsICAxLCAwIH07CiAKQEAgLTIyNiw4ICsyMjksMTMgQEAgdm9pZCBMYXllckNvbXBv
c2l0aW5nVGhyZWFkOjpkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBpbnQgcG9zaXRpb25Mb2Nh
dGlvbiwgaW4KIAogICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5hZGRMYXllclRvUmVsZWFz
ZVRleHR1cmVSZXNvdXJjZXNMaXN0KHRoaXMpOwogCi0gICAgICAgICAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbV90
cmFuc2Zvcm1lZEJvdW5kcyk7Ci0gICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4
Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAg
ICAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOworICAgICAgICAgICAgZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCkpOworICAgICAgICAgICAgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSk7CisgICAg
ICAgICAgICBnbFVuaWZvcm0xZihwcm9ncmFtLm9wYWNpdHlMb2NhdGlvbigpLCBkcmF3T3BhY2l0
eSgpKTsKKyAgICAgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9u
TG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbV90cmFuc2Zvcm1lZEJvdW5k
cyk7CisgICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExv
Y2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKICAgICAgICAg
ICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKQEAgLTI0NCw1MyArMjUyLDcwIEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6ZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGlu
CiAgICAgICAgICAgICBmbG9hdCB5ID0gLW1fdHJhbnNmb3JtZWRCb3VuZHMucDEoKS55KCkgKiB2
cmgyICsgdnJoMiArIHZpc2libGVSZWN0LnkoKTsKICAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXIt
PnBhaW50KDAsIEludFJlY3QoKGludCkoeCArIDAuNSksIChpbnQpKHkgKyAwLjUpLCBtX2JvdW5k
cy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBtcHAgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihtX21lZGlhUGxh
eWVyLT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucW54TWVkaWFQbGF5ZXIpOwotICAgICAgICAgICAg
bXBwLT5kcmF3QnVmZmVyaW5nQW5pbWF0aW9uKG1fZHJhd1RyYW5zZm9ybSwgcG9zaXRpb25Mb2Nh
dGlvbiwgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgICAgICAgICBtcHAtPmRyYXdCdWZmZXJpbmdB
bmltYXRpb24obV9kcmF3VHJhbnNmb3JtLCBwcm9ncmFtKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xp
ZW50LT5kcmF3VGV4dHVyZXModGhpcywgc2NhbGUsIHBvc2l0aW9uTG9jYXRpb24sIHRleENvb3Jk
TG9jYXRpb24pOworICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRoaXMsIHNjYWxlLCBw
cm9ncmFtKTsKIH0KIAotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3U3VyZmFjZShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbWFzaywgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9u
KQordm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3U3VyZmFjZShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFz
aywgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtKQogeworICAgIHVzaW5nIG5hbWVzcGFjZSBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M7CisKICAgICBpZiAobV9sYXllclJlbmRlcmVy
LT5sYXllckFscmVhZHlPblN1cmZhY2UodGhpcykpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4SUQg
PSBsYXllclJlbmRlcmVyU3VyZmFjZSgpLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpOwotICAgICAg
ICBpZiAoIXRleElEKSB7CisgICAgICAgIFRleHR1cmUqIHN1cmZhY2VUZXh0dXJlID0gbGF5ZXJS
ZW5kZXJlclN1cmZhY2UoKS0+dGV4dHVyZSgpOworICAgICAgICBpZiAoIXN1cmZhY2VUZXh0dXJl
KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50
ZXh0dXJlQWNjZXNzZWQobGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+dGV4dHVyZSgpKTsKLSAgICAg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXhJRCk7CisgICAgICAgIEdMdWludCBz
dXJmYWNlVGV4SUQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5k
bGUoc3VyZmFjZVRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgaWYgKCFzdXJmYWNl
VGV4SUQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAgIGds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBtYXNrLT5iaW5kQ29udGVu
dHNUZXh0dXJlKCk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgICAgICAgICAgVGV4dHVyZSogbWFza1RleHR1cmUgPSBtYXNrLT5jb250ZW50c1RleHR1cmUo
KTsKKyAgICAgICAgICAgIGlmIChtYXNrVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIEdMdWlu
dCBtYXNrVGV4SUQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5k
bGUobWFza1RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGb3Jj
ZSBjcmVhdGlvbiBpZiBpdCdzIDAKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2tUZXhJRCkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbGwgd2lsbCBjYXVzZSBkaXNwbGF5IGxpc3Qg
dG8gcmVuZGVyIHRvIGJhY2tpbmcsIHdoaWNoIGNhbiBtdXRhdGUgYSBsb3Qgb2YgR0wgc3RhdGUu
CisgICAgICAgICAgICAgICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpQcm9ncmFtU3RhdGVTYXZl
ciBwcm9ncmFtU2F2ZXI7CisgICAgICAgICAgICAgICAgICAgIEdMRVMyQ29udGV4dFN0YXRlOjpU
ZXh0dXJlQW5kRkJPU3RhdGVTYXZlciB0ZXh0dXJlU2F2ZXI7CisgICAgICAgICAgICAgICAgICAg
IGxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKG1hc2tUZXh0dXJlLT50ZXh0dXJlSWQoKSwgR0xf
VEVYVFVSRV8yRCk7CisgICAgICAgICAgICAgICAgICAgIG1hc2tUZXhJRCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtYXNrVGV4dHVyZS0+dGV4dHVyZUlk
KCkpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTEpOworICAgICAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbWFza1RleElEKTsKKyAgICAgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTApOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgZ2xFbmFibGUoR0xf
QkxFTkQpOworICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQ
SEEpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2VUZXhJRCk7
CisKICAgICAgICAgRmxvYXRRdWFkIHN1cmZhY2VRdWFkID0gZ2V0VHJhbnNmb3JtZWRSZWN0KG1f
Ym91bmRzLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYm91bmRzKSwgZHJhd1RyYW5zZm9y
bSk7Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAyLCBH
TF9GTE9BVCwgR0xfRkFMU0UsIDAsICZzdXJmYWNlUXVhZCk7CisgICAgICAgIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCkpOworICAgICAgICBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0udGV4Q29vcmRMb2NhdGlvbigpKTsKKyAgICAg
ICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlclN1
cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihw
cm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmc3Vy
ZmFjZVF1YWQpOwogCiAgICAgICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAw
LCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07Ci0gICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cih0ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7
CisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24o
KSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOwogICAgICAgICBnbERyYXdB
cnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKICAgICB9CiB9CiAKLWJvb2wgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6aGFzTWlzc2luZ1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+aGFzTWlzc2luZ1RleHR1cmVzKHRoaXMpIDogZmFsc2U7Ci19
Ci0KLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd01pc3NpbmdUZXh0dXJlcyhkb3Vi
bGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiAvKnZpc2libGVSZWN0Ki8pCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAg
ICAgICBtX2NsaWVudC0+ZHJhd01pc3NpbmdUZXh0dXJlcyh0aGlzLCBzY2FsZSwgcG9zaXRpb25M
b2NhdGlvbiwgdGV4Q29vcmRMb2NhdGlvbik7Ci19Ci0KIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6cmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKQogewogICAgIGlmIChtX3BsdWdpblZpZXcg
JiYgbV9wbHVnaW5CdWZmZXIpIHsKQEAgLTM5NywxMCArNDIyLDEyIEBAIHZvaWQgTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQogICAgICAgICBt
X2NsaWVudC0+dXBsb2FkVGV4dHVyZXNJZk5lZWRlZCh0aGlzKTsKIH0KIAotdm9pZCBMYXllckNv
bXBvc2l0aW5nVGhyZWFkOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKK1RleHR1cmUqIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ6OmNvbnRlbnRzVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+YmluZENvbnRlbnRzVGV4dHVyZSh0aGlzKTsKKyAgICAgICAgcmV0
dXJuIG1fY2xpZW50LT5jb250ZW50c1RleHR1cmUodGhpcyk7CisKKyAgICByZXR1cm4gMDsKIH0K
IAogdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
QEAgLTQ0MCw2ICs0NjcsMTIgQEAgdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzY2hlZHVs
ZUNvbW1pdCgpCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tbWl0KCk7CiB9CiAKK3ZvaWQgTGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jb21taXRQZW5kaW5nVGV4dHVyZVVw
bG9hZHModGhpcyk7Cit9CisKIGJvb2wgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6dXBkYXRlQW5p
bWF0aW9ucyhkb3VibGUgY3VycmVudFRpbWUpCiB7CiAgICAgLy8gVGhlIGNvbW1pdCBtZWNoYW5p
c20gYWx3YXlzIG92ZXJ3cml0ZXMgb3VyIHN0YXRlIHdpdGggc3RhdGUgZnJvbSB0aGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKaW5kZXggODUzODVlZDJjNWU2NjhhMDE3
ODY1MGQ4YjE2YmNiYjg0NGIwMTg4NS4uNTc1ZmYzODMzODZiNGY1OGVlOWU1N2I4YjIzNzA2ZmFm
ZjZmY2E0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmgKQEAgLTUw
LDYgKzUwLDcgQEAgbmFtZXNwYWNlIEJsYWNrQmVycnkgewogbmFtZXNwYWNlIFBsYXRmb3JtIHsK
IG5hbWVzcGFjZSBHcmFwaGljcyB7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBHTEVTMlByb2dyYW07
CiB9CiB9CiB9CkBAIC0xNDIsMTAgKzE0MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVG
cm9tU3VwZXJsYXllcigpOwogICAgIHZvaWQgc2V0TmVlZHNUZXh0dXJlKGJvb2wgbmVlZHNUZXh0
dXJlKSB7IG1fbmVlZHNUZXh0dXJlID0gbmVlZHNUZXh0dXJlOyB9CiAKKyAgICB2b2lkIGNvbW1p
dFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpOworCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGhh
dmUgYW4gYW5pbWF0aW9uCiAgICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBjdXJyZW50
VGltZSk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpOwotICAgIHZv
aWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOworICAgIFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgp
OwogCiAgICAgY29uc3QgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcm9vdExheWVyKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0
aW5nVGhyZWFkPiA+Jik7CkBAIC0xNzgsMTAgKzE4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZGVsZXRlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwg
aW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHZpc2libGVSZWN0KTsKLSAgICBib29sIGhhc01pc3NpbmdUZXh0dXJlcygpIGNvbnN0Owot
ICAgIHZvaWQgZHJhd01pc3NpbmdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxv
Y2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVj
dCk7Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2ssIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4
Q29vcmRMb2NhdGlvbik7CisgICAgdm9pZCBkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGNvbnN0IEZs
b2F0UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIHZvaWQgZHJhd1N1cmZhY2UoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBtYXNrLCBjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwogCiAgICAgdm9pZCBy
ZWxlYXNlVGV4dHVyZVJlc291cmNlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudC5oCmluZGV4IDc0NmFkZWE0OTdhMDViMzgyMTYyY2VmNTE5N2Q5
NWE3OWRiZWUwZWQuLmNjN2JmM2JiZWI4ZjM5MWU3ZDNlM2E0ODA5MDk3YWQ2MjNkODQxMTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCkBAIC0y
MSw5ICsyMSwxNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCituYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworbmFtZXNwYWNlIEdyYXBo
aWNzIHsKK2NsYXNzIEdMRVMyUHJvZ3JhbTsKK30KK30KK30KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDsKK2NsYXNzIFRleHR1cmU7CiAKIGNsYXNz
IExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewogcHVibGljOgpAQCAtMzQsMTUgKzQyLDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRv
dWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFk
KiwgZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopID0gMDsKIAogICAgIC8vIE9wdGlvbmFsLiBBbGxvd3MgbGF5ZXJz
IHRvIHNlcnZlIGFzIGEgbWFzayBmb3Igb3RoZXIgbGF5ZXJzCi0gICAgdmlydHVhbCB2b2lkIGJp
bmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIHsgfQorICAgIHZpcnR1
YWwgVGV4dHVyZSogY29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IHJl
dHVybiAwOyB9CiAKLSAgICAvLyBPcHRpb25hbC4gQWxsb3dzIGxheWVycyB0byBoYXZlIHVuY2Fj
aGVkIHJlZ2lvbnMsIHR5cGljYWxseSBkcmF3biBhcyBjaGVja2VyYm9hcmQKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzTWlzc2luZ1RleHR1cmVzKGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWlzc2luZ1RleHR1
cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxv
Y2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbikgeyB9CisgICAgLy8gT3B0aW9uYWwuIEFsbG93
IHRoZSBsYXllciB0byBjb21taXQgdGhyZWFkIHNlbnNpdGl2ZSBjb250ZW50IGR1cmluZyBhIHN5
bmMgcG9pbnQKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IH0KIAogICAgIC8vIFVubGlrZSB0aGUgb3RoZXIgbWV0
aG9kcyBoZXJlLCB0aGlzIG9uZSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgV2ViS2l0IHRocmVhZAog
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbW1pdCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgKaW5kZXgg
NTBiZTA4YWY1NmVjMmRiNjE4ZDFhOTUzNDY0Y2I3NWQ3NWFlMWQ4ZC4uNWMyNTllM2Q1YjcyMzBi
MWE3YTI4NmMzYWI4Mzk5MmVhNjY3NjQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCkBAIC01NiwyNyArNTYs
MzEgQEAgY2xhc3MgTGF5ZXJEYXRhIHsKIHB1YmxpYzoKICAgICBlbnVtIExheWVyVHlwZSB7IExh
eWVyLCBUcmFuc2Zvcm1MYXllciwgV2ViR0xMYXllciwgQ2FudmFzTGF5ZXIsIEN1c3RvbUxheWVy
IH07CiAgICAgZW51bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIsIExh
bmN6b3MgfTsKLSAgICBlbnVtIExheWVyUHJvZ3JhbVNoYWRlciB7IExheWVyUHJvZ3JhbVNoYWRl
clJHQkEgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJQcm9ncmFtU2hh
ZGVyQkdSQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mTGF5ZXJQcm9n
cmFtU2hhZGVycyB9OworICAgIGVudW0gTGF5ZXJQcm9ncmFtIHsKKyAgICAgICAgTGF5ZXJQcm9n
cmFtUkdCQSA9IDAsCisgICAgICAgIExheWVyUHJvZ3JhbUJHUkEsCisgICAgICAgIE51bWJlck9m
TGF5ZXJQcm9ncmFtcworICAgIH07CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgZW51
bSBDU1NGaWx0ZXJTaGFkZXJzIHsgQ1NTRmlsdGVyU2hhZGVyR3JheXNjYWxlID0gMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTZXBpYSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJTYXR1cmF0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVSb3RhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVySW52ZXJ0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU0ZpbHRlclNoYWRlckJyaWdodG5lc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTRmlsdGVyU2hhZGVyQ29udHJhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTRmlsdGVyU2hhZGVyT3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NGaWx0ZXJTaGFkZXJCbHVyWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0
ZXJTaGFkZXJCbHVyWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NGaWx0ZXJTaGFk
ZXJTaGFkb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVyUGFz
c3Rocm91Z2gsCisgICAgZW51bSBDU1NGaWx0ZXJTaGFkZXJzIHsKKyAgICAgICAgQ1NTRmlsdGVy
U2hhZGVyR3JheXNjYWxlID0gMCwKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyU2VwaWEsCisgICAg
ICAgIENTU0ZpbHRlclNoYWRlclNhdHVyYXRlLAorICAgICAgICBDU1NGaWx0ZXJTaGFkZXJIdWVS
b3RhdGUsCisgICAgICAgIENTU0ZpbHRlclNoYWRlckludmVydCwKKyAgICAgICAgQ1NTRmlsdGVy
U2hhZGVyQnJpZ2h0bmVzcywKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVyQ29udHJhc3QsCisgICAg
ICAgIENTU0ZpbHRlclNoYWRlck9wYWNpdHksCisgICAgICAgIENTU0ZpbHRlclNoYWRlckJsdXJZ
LAorICAgICAgICBDU1NGaWx0ZXJTaGFkZXJCbHVyWCwKKyAgICAgICAgQ1NTRmlsdGVyU2hhZGVy
U2hhZG93LAorICAgICAgICBDU1NGaWx0ZXJTaGFkZXJQYXNzdGhyb3VnaCwKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTRmlsdGVyU2hhZGVy
Q3VzdG9tLAorICAgICAgICBDU1NGaWx0ZXJTaGFkZXJDdXN0b20sCiAjZW5kaWYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNTU0ZpbHRlclNoYWRlcnMgfTsKKyAgICAgICAg
TnVtYmVyT2ZDU1NGaWx0ZXJTaGFkZXJzCisgICAgfTsKICNlbmRpZgogCiAgICAgTGF5ZXJEYXRh
KExheWVyVHlwZSB0eXBlKQpAQCAtODcsMTIgKzkxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X29wYWNpdHkoMS4wKQogICAgICAgICAsIG1fYW5jaG9yUG9pbnRaKDAuMCkKICAgICAgICAgLCBt
X2JvcmRlcldpZHRoKDAuMCkKLSAgICAgICAgLCBtX2xheWVyUHJvZ3JhbVNoYWRlcihMYXllclBy
b2dyYW1TaGFkZXJCR1JBKQorICAgICAgICAsIG1fbGF5ZXJQcm9ncmFtKExheWVyUHJvZ3JhbUJH
UkEpCiAgICAgICAgICwgbV9wbHVnaW5WaWV3KDApCiAjaWYgRU5BQkxFKFZJREVPKQogICAgICAg
ICAsIG1fbWVkaWFQbGF5ZXIoMCkKICNlbmRpZgogICAgICAgICAsIG1fc3VzcGVuZFRpbWUoMCkK
KyAgICAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMS4wKQogICAgICAgICAsIG1fZG91YmxlU2lkZWQo
dHJ1ZSkKICAgICAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgICAgICwgbV9pc09w
YXF1ZShmYWxzZSkKQEAgLTEwMiw4ICsxMDcsMTAgQEAgcHVibGljOgogICAgICAgICAsIG1faXNG
aXhlZFBvc2l0aW9uKGZhbHNlKQogICAgICAgICAsIG1faGFzRml4ZWRDb250YWluZXIoZmFsc2Up
CiAgICAgICAgICwgbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGZhbHNlKQotICAgICAgICAs
IG1faXNWaXNpYmxlKHRydWUpCisgICAgICAgICwgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRp
b25MYXllcnMoZmFsc2UpCiAgICAgICAgICwgbV9zaXplSXNTY2FsZUludmFyaWFudChmYWxzZSkK
KyAgICAgICAgLCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KGZhbHNlKQorICAgICAg
ICAsIG1faXNWaXNpYmxlKHRydWUpCiAgICAgewogICAgIH0KIApAQCAtMTI1LDYgKzEzMiw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgc2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSBjb25zdCB7IHJldHVy
biBtX3NpemVJc1NjYWxlSW52YXJpYW50OyB9CiAKKyAgICBib29sIGNvbnRlbnRzUmVzb2x1dGlv
bkluZGVwZW5kZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Jlc29sdXRpb25JbmRlcGVu
ZGVudDsgfQorCiAgICAgYm9vbCBkb3VibGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91Ymxl
U2lkZWQ7IH0KIAogICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KQEAgLTE1MCwxNyArMTU5LDI1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmVlZHNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGUgPT0gV2ViR0xMYXllciB8fCBtX2xheWVyVHlw
ZSA9PSBDYW52YXNMYXllciB8fCBtX25lZWRzVGV4dHVyZTsgfQogCi0gICAgTGF5ZXJQcm9ncmFt
U2hhZGVyIGxheWVyUHJvZ3JhbVNoYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9ncmFt
U2hhZGVyOyB9CisgICAgTGF5ZXJQcm9ncmFtIGxheWVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJQcm9ncmFtOyB9CiAKICAgICBib29sIGlzRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faXNGaXhlZFBvc2l0aW9uOyB9CiAgICAgYm9vbCBoYXNGaXhlZENvbnRhaW5lcigp
IGNvbnN0IHsgcmV0dXJuIG1faGFzRml4ZWRDb250YWluZXI7IH0KICAgICBib29sIGhhc0ZpeGVk
QW5jZXN0b3JJbkRPTVRyZWUoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRP
TVRyZWU7IH0KKyAgICBib29sIGlzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycygpIGNv
bnN0IHsgcmV0dXJuIG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzOyB9CisgICAg
Ym9vbCBpc0ZpeGVkVG9Ub3AoKSBjb25zdCB7IHJldHVybiBtX2lzRml4ZWRUb1RvcDsgfQorICAg
IGJvb2wgaXNGaXhlZFRvTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXhlZFRvTGVmdDsgfQor
CisgICAgSW50UmVjdCBmcmFtZVZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZp
c2libGVSZWN0OyB9CisgICAgSW50U2l6ZSBmcmFtZUNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVDb250ZW50c1NpemU7IH0KIAogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXco
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpblZpZXc7IH0KIAogICAgIEludFJlY3QgaG9sZVB1bmNo
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faG9sZVB1bmNoUmVjdDsgfQogICAgIGJvb2wgaGFzSG9s
ZVB1bmNoUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFtX2hvbGVQdW5jaFJlY3QuaXNFbXB0eSgpOyB9
CiAKKyAgICBkb3VibGUgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNT
Y2FsZTsgfQorCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXI7IH0KICNlbmRpZgpAQCAtMjAyLDcgKzIx
OSw3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKICAgICBmbG9hdCBt
X2JvcmRlcldpZHRoOwogCi0gICAgTGF5ZXJQcm9ncmFtU2hhZGVyIG1fbGF5ZXJQcm9ncmFtU2hh
ZGVyOworICAgIExheWVyUHJvZ3JhbSBtX2xheWVyUHJvZ3JhbTsKIAogICAgIFBsdWdpblZpZXcq
IG1fcGx1Z2luVmlldzsKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMTEsNyArMjI4LDExIEBAIHBy
b3RlY3RlZDoKICNlbmRpZgogICAgIEludFJlY3QgbV9ob2xlUHVuY2hSZWN0OwogCisgICAgSW50
UmVjdCBtX2ZyYW1lVmlzaWJsZVJlY3Q7CisgICAgSW50U2l6ZSBtX2ZyYW1lQ29udGVudHNTaXpl
OworCiAgICAgZG91YmxlIG1fc3VzcGVuZFRpbWU7CisgICAgZG91YmxlIG1fY29udGVudHNTY2Fs
ZTsKIAogICAgIHVuc2lnbmVkIG1fZG91YmxlU2lkZWQgOiAxOwogICAgIHVuc2lnbmVkIG1fbWFz
a3NUb0JvdW5kcyA6IDE7CkBAIC0yMjMsMTAgKzI0NCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5z
aWduZWQgbV9pc0ZpeGVkUG9zaXRpb24gOiAxOwogICAgIHVuc2lnbmVkIG1faGFzRml4ZWRDb250
YWluZXIgOiAxOwogICAgIHVuc2lnbmVkIG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSA6IDE7
CisgICAgdW5zaWduZWQgbV9pc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnM6IDE7Cisg
ICAgdW5zaWduZWQgbV9pc0ZpeGVkVG9Ub3AgOiAxOworICAgIHVuc2lnbmVkIG1faXNGaXhlZFRv
TGVmdCA6IDE7CisKKyAgICB1bnNpZ25lZCBtX3NpemVJc1NjYWxlSW52YXJpYW50IDogMTsKKyAg
ICB1bnNpZ25lZCBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50IDogMTsKIAogICAgIC8v
IFRoZSBmb2xsb3dpbmcgaXMgb25seSBhdmFpbGFibGUgZm9yIG1lZGlhICh2aWRlbykgYW5kIHBs
dWdpbiBsYXllcnMuCiAgICAgdW5zaWduZWQgbV9pc1Zpc2libGUgOiAxOwotICAgIHVuc2lnbmVk
IG1fc2l6ZUlzU2NhbGVJbnZhcmlhbnQgOiAxOwogCiAgICAgLy8gQ0FVVElPTjogYWxsIHRoZSBk
YXRhIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIG9uZSBpbnN0YW5jZSB0byBhbm90aGVyCiAgICAg
Ly8gaS5lLiBmcm9tIG9uZSB0aHJlYWQgdG8gYW5vdGhlciBpbiB0aGUgcmVwbGljYXRlIG1ldGhv
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCmluZGV4IDgwZmMxZWE0ZGY2
YTAyYzhkMzFlYTYyZWI3YjgxOTg5ZDBiYmFmMWQuLmIyYzI5MTg5YjU2ODc2ZDRiNTllMzE1NTU5
MzA3NjIwMmNhZDA1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8VmVjdG9yLmg+CiAKICNpbmNsdWRl
IDxjc3RyaW5nPgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTI0Miw3ICsyNDIsNiBAQCBQYXNzUmVm
UHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246
OmNyZWF0ZShpbnQgcHJvZwogCiBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uKGludCBjX3Byb2dyYW1JZCkKICAgICA6IG1fcHJvZ3JhbUlkKGNfcHJv
Z3JhbUlkKQotICAgICwgbV9jdXN0b21JZCgtMSkKICAgICAsIG1fcHVzaFNuYXBzaG90KGZhbHNl
KQogICAgICwgbV9wb3BTbmFwc2hvdChmYWxzZSkKICAgICAsIG1fZHJhd2luZ01vZGUoRHJhd1Ry
aWFuZ2xlRmFuQXJyYXlzKQpAQCAtMzAyLDcgKzMwMSw3IEBAIGJvb2wgTGF5ZXJGaWx0ZXJSZW5k
ZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiB7CiAgICAgLy8gU2VlIGFsc28gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCiAKLSAgICBjaGFyIHZlcnRleFNoYWRlclN0cmlu
Z1tdID0KKyAgICBjaGFyIHN0YW5kYXJkVmVydGV4U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAi
YXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKICAgICAgICAgImF0dHJpYnV0ZSB2ZWMy
IGFfdGV4Q29vcmQ7ICAgXG4iCiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAg
IFxuIgpAQCAtMzEyLDYgKzMxMSwxNyBAQCBib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRp
YWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhDb29y
ZDsgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCisg
ICAgY2hhciBvZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUg
dmVjNCBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVj
MiBhX3RleENvb3JkOyAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAg
dmVjMiB1X29mZnNldDsgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsg
ICAgICAgICAgICAgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkIC0gdV9v
ZmZzZXQ7ICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iOworCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCiAgICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iXAogICAgICAgICAiXG4iXApAQCAtMzIxLDE2ICsz
MzEsNiBAQCBib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVj
dHMoKQogICAgICAgICAjeFwKICAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0Nv
bG9yID0gc2hhZGUodGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgogCi0jZGVm
aW5lIE9GRlNFVF9GSUxURVIoeC4uLikgXAotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7IFxuIlwKLSAgICAgICAgIlxuIlwKLSAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZf
dGV4Q29vcmQ7XG4iXAotICAgICAgICAidW5pZm9ybSBsb3dwIHNhbXBsZXIyRCBzX3RleHR1cmU7
XG4iXAotICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAg
ICJ1bmlmb3JtIG1lZGl1bXAgdmVjMiB1X29mZnNldDtcbiJcCi0gICAgICAgICN4XAotICAgICAg
ICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc190
ZXh0dXJlLCB2X3RleENvb3JkIC0gdV9vZmZzZXQpKTsgfSIKLQogI2RlZmluZSBCTFVSX0ZJTFRF
Uih4Li4uKSBcCiAgICAgICAgICJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7IFxuIlwKICAgICAgICAg
IlxuIlwKQEAgLTM1NCw3ICszNTQsNyBAQCBib29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRp
YWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAiY29lZmZpY2llbnRTdW0gKz0gaW5jci54
O1xuIlwKICAgICAgICAgImluY3IueHkgKj0gaW5jci55ejtcbiJcCiAgICAgICAgICJcbiJcCi0g
ICAgICAgICJmb3IgKGZsb2F0IGkgPSAxLjA7IGkgPD0gbnVtQmx1clBpeGVsc1BlclNpZGU7IGkr
Kykge1xuIlwKKyAgICAgICAgImZvciAoZmxvYXQgaSA9IDEuMDsgaSA8PSB1X2Ftb3VudDsgaSsr
KSB7XG4iXAogICAgICAgICAiICAgIGF2ZyArPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENv
b3JkLnh5IC0gaSAqIHVfYmx1clNpemUgKiBibHVyTXVsdGlwbHlWZWMpICogaW5jci54O1xuIlwK
ICAgICAgICAgIiAgICBhdmcgKz0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdl90ZXhDb29yZC54eSAr
IGkgKiB1X2JsdXJTaXplICogYmx1ck11bHRpcGx5VmVjKSAqIGluY3IueDtcbiJcCiAgICAgICAg
ICIgICAgY29lZmZpY2llbnRTdW0gKz0gMi4wICogaW5jci54O1xuIlwKQEAgLTQ0MiwxNiArNDQy
LDE0IEBAIGJvb2wgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0
cygpCiAgICAgKTsKIAogICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJC
bHVyWF0gPSBCTFVSX0ZJTFRFUigKLSAgICAgICAgY29uc3QgZmxvYXQgbnVtQmx1clBpeGVsc1Bl
clNpZGUgPSAyLjA7CiAgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBseVZlYyAgICAgID0g
dmVjMigxLjAsIDAuMCk7CiAgICAgKTsKIAogICAgIHNoYWRlclN0cnNbTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJCbHVyWV0gPSBCTFVSX0ZJTFRFUigKLSAgICAgICAgY29uc3QgZmxvYXQgbnVt
Qmx1clBpeGVsc1BlclNpZGUgPSAyLjA7CiAgICAgICAgIGNvbnN0IHZlYzIgIGJsdXJNdWx0aXBs
eVZlYyAgICAgID0gdmVjMigwLjAsIDEuMCk7CiAgICAgKTsKIAotICAgIHNoYWRlclN0cnNbTGF5
ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3ddID0gT0ZGU0VUX0ZJTFRFUigKKyAgICBzaGFk
ZXJTdHJzW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93XSA9IFNUQU5EQVJEX0ZJTFRF
UigKICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzMgdV9jb2xvcjsKICAgICAgICAgbG93cCB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgewpAQCAtNDY5LDcgKzQ2NywxMCBAQCBi
b29sIExheWVyRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAg
ICk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZDU1NGaWx0
ZXJTaGFkZXJzOyBpKyspIHsKLSAgICAgICAgbV9jc3NGaWx0ZXJQcm9ncmFtT2JqZWN0W2ldID0g
TGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBzaGFk
ZXJTdHJzW2ldKTsKKyAgICAgICAgaWYgKGkgPT0gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJT
aGFkb3cpCisgICAgICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSBMYXllclJl
bmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShvZmZzZXRWZXJ0ZXhTaGFkZXJTdHJpbmcsIHNoYWRl
clN0cnNbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1P
YmplY3RbaV0gPSBMYXllclJlbmRlcmVyOjpsb2FkU2hhZGVyUHJvZ3JhbShzdGFuZGFyZFZlcnRl
eFNoYWRlclN0cmluZywgc2hhZGVyU3Ryc1tpXSk7CiAgICAgICAgIGlmICghbV9jc3NGaWx0ZXJQ
cm9ncmFtT2JqZWN0W2ldKSB7CiAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9n
QWx3YXlzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJDb3VsZCBub3QgbG9h
ZCBDU1MgRmlsdGVyIFNoYWRlciAlaSIsIGkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDk5LDE5ICs1MDAsNTUgQEAgYm9vbCBMYXllckZpbHRlclJlbmRlcmVyOjppbml0aWFsaXpl
U2hhcmVkR0xPYmplY3RzKCkKIAogdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwaW5nKExheWVy
UmVuZGVyZXJTdXJmYWNlKiBzdXJmYWNlKQogewotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUtPnRleHR1cmVJZCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIEdMdWludCB0ZXhpZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3RleHR1cmUtPnRl
eHR1cmVJZCgpKSk7CisgICAgaWYgKCF0ZXhpZCkgeworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5kQnVmZmVyR0xUZXh0dXJlKG1fdGV4dHVyZS0+dGV4
dHVyZUlkKCksIEdMX1RFWFRVUkVfMkQpOworICAgICAgICB0ZXhpZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7
CisgICAgfQorCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCgKKyAgICAgICAgR0xfRlJBTUVC
VUZGRVIsCisgICAgICAgIEdMX0NPTE9SX0FUVEFDSE1FTlQwLAorICAgICAgICBHTF9URVhUVVJF
XzJELAorICAgICAgICB0ZXhpZCwKKyAgICAgICAgMAorICAgICk7CisgICAgZ2xCaW5kVGV4dHVy
ZSgKKyAgICAgICAgR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHTHVp
bnQ+KHBsYXRmb3JtQnVmZmVySGFuZGxlKHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkp
KQorICAgICk7CiB9CiAKIHZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6cG9uZyhMYXllclJlbmRl
cmVyU3VyZmFjZSogc3VyZmFjZSkKIHsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+
dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KAorICAgICAgICBHTF9GUkFNRUJVRkZFUiwKKyAgICAgICAgR0xfQ09MT1JfQVRUQUNITUVOVDAs
CisgICAgICAgIEdMX1RFWFRVUkVfMkQsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShzdXJmYWNlLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKSks
CisgICAgICAgIDAKKyAgICApOworICAgIGdsQmluZFRleHR1cmUoCisgICAgICAgIEdMX1RFWFRV
UkVfMkQsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhh
bmRsZShtX3RleHR1cmUtPnRleHR1cmVJZCgpKSkKKyAgICApOwogfQogCiB2b2lkIExheWVyRmls
dGVyUmVuZGVyZXI6OnB1c2hTbmFwc2hvdChMYXllclJlbmRlcmVyU3VyZmFjZSogc3VyZmFjZSwg
aW50IHNvdXJjZUlkKQogewotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3NuYXBzaG90VGV4dHVy
ZS0+dGV4dHVyZUlkKCksIDApOworICAgIEdMdWludCB0ZXhpZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShtX3NuYXBzaG90VGV4dHVyZS0+dGV4dHVyZUlk
KCkpKTsKKyAgICBpZiAoIXRleGlkKSB7CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6bG9ja0FuZEJpbmRCdWZmZXJHTFRleHR1cmUobV9zbmFwc2hvdFRleHR1cmUtPnRl
eHR1cmVJZCgpLCBHTF9URVhUVVJFXzJEKTsKKyAgICAgICAgdGV4aWQgPSByZWludGVycHJldF9j
YXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5kbGUobV9zbmFwc2hvdFRleHR1cmUtPnRleHR1
cmVJZCgpKSk7CisgICAgfQorCisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCgKKyAgICAgICAg
R0xfRlJBTUVCVUZGRVIsCisgICAgICAgIEdMX0NPTE9SX0FUVEFDSE1FTlQwLAorICAgICAgICBH
TF9URVhUVVJFXzJELAorICAgICAgICB0ZXhpZCwKKyAgICAgICAgMAorICAgICk7CiAKICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZUlkKTsKICAgICBnbENsZWFyKEdMX0NP
TE9SX0JVRkZFUl9CSVQpOyAvLyB0byB0cmFuc3BhcmVuY3kKQEAgLTUyOSw3ICs1NjYsMTAgQEAg
dm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjpwb3BTbmFwc2hvdCgpCiAgICAgLy8gdG8gdGhlIHNu
YXBzaG90IHRleHR1cmUuIE5leHQgdGltZSBnbERyYXdBcnJheXMgaXMgY2FsbGVkLCB0aGUgc25h
cHNob3Qgd2lsbCBiZSBkcmF3bi4KIAogICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4s
IDAsIDQpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zbmFwc2hvdFRleHR1
cmUtPnRleHR1cmVJZCgpKTsKKyAgICBnbEJpbmRUZXh0dXJlKAorICAgICAgICBHTF9URVhUVVJF
XzJELAorICAgICAgICByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZmZXJIYW5k
bGUobV9zbmFwc2hvdFRleHR1cmUtPnRleHR1cmVJZCgpKSkKKyAgICApOwogfQogCiBWZWN0b3I8
UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
YWN0aW9uc0Zvck9wZXJhdGlvbnMoTGF5ZXJSZW5kZXJlclN1cmZhY2UqIHN1cmZhY2UsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBvcHMpCkBAIC02NTksOSArNjk5LDkg
QEAgdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQmIGZibywg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGEKICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkg
KTsKICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9G
TE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CiAKLSAgICBtX3RleHR1cmUtPnByb3RlY3Qo
c3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCkpOworICAgIG1fdGV4dHVyZS0+cHJvdGVjdChzdXJm
YWNlLT50ZXh0dXJlKCktPnNpemUoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpB
bHdheXNCYWNrZWQpOwogICAgIGlmIChyZXF1aXJlU25hcHNob3QpCi0gICAgICAgIG1fc25hcHNo
b3RUZXh0dXJlLT5wcm90ZWN0KHN1cmZhY2UtPnRleHR1cmUoKS0+c2l6ZSgpKTsKKyAgICAgICAg
bV9zbmFwc2hvdFRleHR1cmUtPnByb3RlY3Qoc3VyZmFjZS0+dGV4dHVyZSgpLT5zaXplKCksIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QWx3YXlzQmFja2VkKTsKIAogICAgIGlmICgh
ZmJvKQogICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKQEAgLTY3OCw5ICs3MTgs
MTYgQEAgdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQmIGZi
bywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGEKICAgICAgICAgLy8gQmVjYXVzZSB3ZSBldmVu
dHVhbGx5IGhhdmUgdG8gZW5kIG9uIHRoZSBwYXJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhbiBldmVu
IG51bWJlciBvZiBhY3Rpb25zLgogICAgICAgICAvLyBhY3Rpb25zRm9yT3BlcmF0aW9ucyB0YWtl
cyBjYXJlIG9mIHRoYXQuCiAKLSAgICAgICAgaWYgKGFjdGlvbnNbaV0tPnNob3VsZFB1c2hTbmFw
c2hvdCgpKQotICAgICAgICAgICAgcHVzaFNuYXBzaG90KHN1cmZhY2UsICghKGkgJSAyKSA/IHN1
cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkgOiBtX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7
CisgICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQdXNoU25hcHNob3QoKSkgeworICAgICAg
ICAgICAgUmVmUHRyPFRleHR1cmU+IGN1cnJlbnRUZXh0dXJlID0gKCEoaSAlIDIpID8gc3VyZmFj
ZS0+dGV4dHVyZSgpIDogbV90ZXh0dXJlKTsKKyAgICAgICAgICAgIEdMdWludCB0ZXhpZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihwbGF0Zm9ybUJ1ZmZlckhhbmRsZShjdXJyZW50VGV4dHVy
ZS0+dGV4dHVyZUlkKCkpKTsKKyAgICAgICAgICAgIGlmICghdGV4aWQpIHsKKyAgICAgICAgICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5kQnVmZmVyR0xU
ZXh0dXJlKGN1cnJlbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgR0xfVEVYVFVSRV8yRCk7CisgICAg
ICAgICAgICAgICAgdGV4aWQgPSByZWludGVycHJldF9jYXN0PEdMdWludD4ocGxhdGZvcm1CdWZm
ZXJIYW5kbGUoY3VycmVudFRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIHB1c2hTbmFwc2hvdChzdXJmYWNlLCB0ZXhpZCk7CisgICAgICAgIH0KICAg
ICAgICAgaWYgKCEoaSAlIDIpKQogICAgICAgICAgICAgcGluZyhzdXJmYWNlKTsgLy8gU2V0IGZy
YW1lYnVmZmVyIHRvIG91cnMsIGFuZCB0ZXh0dXJlIHRvIHBhcmVudAogICAgICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclJlbmRlcmVyLmNwcAppbmRleCA4YWQzNDFjYWM4NTM0OWU4MjFmMmRmNTI0MTE2
NjU4NDU1OWYyNjYyLi5mNjk2Y2FjYjNhMDBkMTFlNmViOTJkZGE0M2Y5Y2JmZjU2ODI4MmFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKQEAgLTUxLDE3ICs1MSwyMCBAQAogI2RlZmluZSBE
RUJVR19DTElQUElORyAwCiAKIHVzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJDb250ZXh0OwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVT
MlByb2dyYW07CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcigpCi17CiAjaWZuZGVmIE5ERUJVRwotICAgIGlmIChH
TGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCkpCi0gICAgICAgIExPR19FUlJPUigiR0wgRXJyb3I6
IDB4JXggIiAsIGVycm9yKTsKLSNlbmRpZgorI2RlZmluZSBjaGVja0dMRXJyb3IoKSBcCit7IFwK
KyAgICBpZiAoR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpKSBcCisgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpsb2dBbHdheXMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3Jp
dGljYWwsICIlczolZCBHTCBFcnJvcjogMHgleCAiLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm9y
KTsgXAogfQorI2Vsc2UKKyNkZWZpbmUgY2hlY2tHTEVycm9yKCkKKyNlbmRpZgogCiBHTHVpbnQg
TGF5ZXJSZW5kZXJlcjo6bG9hZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgY2hhciogc2hhZGVy
U291cmNlKQogewpAQCAtMTQ1LDExICsxNDgsNyBAQCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXI+
IExheWVyUmVuZGVyZXI6OmNyZWF0ZShHTEVTMkNvbnRleHQqIGNvbnRleHQpCiB9CiAKIExheWVy
UmVuZGVyZXI6OkxheWVyUmVuZGVyZXIoR0xFUzJDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9j
b2xvclByb2dyYW1PYmplY3QoMCkKLSAgICAsIG1fY2hlY2tlclByb2dyYW1PYmplY3QoMCkKLSAg
ICAsIG1fcG9zaXRpb25Mb2NhdGlvbigwKQotICAgICwgbV90ZXhDb29yZExvY2F0aW9uKDEpCi0g
ICAgLCBtX3NjYWxlKDEuMCkKKyAgICA6IG1fc2NhbGUoMS4wKQogICAgICwgbV9hbmltYXRpb25U
aW1lKC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICwgbV9mYm8oMCkK
ICAgICAsIG1fY3VycmVudExheWVyUmVuZGVyZXJTdXJmYWNlKDApCkBAIC0xNTksMTYgKzE1OCwx
NCBAQCBMYXllclJlbmRlcmVyOjpMYXllclJlbmRlcmVyKEdMRVMyQ29udGV4dCogY29udGV4dCkK
ICAgICAsIG1fbmVlZHNDb21taXQoZmFsc2UpCiAgICAgLCBtX3N0ZW5jaWxDbGVhcmVkKGZhbHNl
KQogewotICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgIC8vIFdlJ3JlIG5vdyBp
bml0aWFsaXppbmcgbGF6aWx5LCBzbyBhIGNoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRl
IGN1cnJlbnQKKyAgICAvLyB3aWxsIGhhdmUgdG8gc3VmZmljZSB0byBkZXRlcm1pbmUgaWYgaGFy
ZHdhcmUgY29tcG9zaXRpbmcgaXMgcG9zc2libGUuCisgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5n
ID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1faGFyZHdhcmVDb21wb3NpdGluZykg
ewogICAgICAgICBtX2lzUm9idXN0bmVzc1N1cHBvcnRlZCA9IFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSkuY29udGFpbnMo
IkdMX0VYVF9yb2J1c3RuZXNzIik7CiAgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc1N1cHBvcnRl
ZCkKICAgICAgICAgICAgIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DPihlZ2xHZXRQcm9jQWRk
cmVzcygiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIikpOwogICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnM7ICsr
aSkKLSAgICAgICAgbV9sYXllclByb2dyYW1PYmplY3RbaV0gPSAwOwotCi0gICAgbV9oYXJkd2Fy
ZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpOwogfQogCiBMYXllclJl
bmRlcmVyOjp+TGF5ZXJSZW5kZXJlcigpCkBAIC0xNzcsMTAgKzE3NCw5IEBAIExheWVyUmVuZGVy
ZXI6On5MYXllclJlbmRlcmVyKCkKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
ICAgIGlmIChtX2ZibykKICAgICAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zi
byk7Ci0gICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX2NvbG9yUHJvZ3JhbU9iamVjdCk7Ci0gICAg
ICAgIGdsRGVsZXRlUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVyczsg
KytpKQotICAgICAgICAgICAgZ2xEZWxldGVQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ld
KTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE51bWJlck9mUHJvZ3JhbXM7ICsr
aSkKKyAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbShtX3Byb2dyYW1zW2ldLm1fcHJvZ3JhbSk7
CiAKICAgICAgICAgLy8gRnJlZSB1cCBhbGwgR0wgdGV4dHVyZXMuCiAgICAgICAgIHdoaWxlICht
X2xheWVycy5iZWdpbigpICE9IG1fbGF5ZXJzLmVuZCgpKSB7CkBAIC0yNzMsOCArMjY5LDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmUKICAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVS
LCAwKTsKICAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOwogCi0g
ICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotICAgIGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhDb29yZExvY2F0aW9uKTsKICAgICBnbEFjdGl2
ZVRleHR1cmUoR0xfVEVYVFVSRTApOwogICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKICAg
ICBnbERpc2FibGUoR0xfQ1VMTF9GQUNFKTsKQEAgLTI4MiwxOCArMjc2LDkgQEAgdm9pZCBMYXll
clJlbmRlcmVyOjpzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmUKIAogICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdlIHdp
bGwgY3VsbCB0aGUgYmFja2ZhY2UuCiAgICAgZ2xDdWxsRmFjZShHTF9CQUNLKTsKLSAgICAvLyBU
aGUgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gaXMgc2V0dXAgc3VjaCB0aGF0IFkgc3RhcnRzIGF0
IHplcm8gYW5kCi0gICAgLy8gaW5jcmVhc2VzIGdvaW5nIGRvd24gdGhlIHBhZ2Ugd2hpY2ggZmxp
cHMgdGhlIHdpbmRpbmcgb3JkZXIgb2YgdHJpYW5nbGVzLgotICAgIC8vIFRoZSBsYXllciBxdWFk
cyBhcmUgZHJhd24gaW4gY2xvY2std2lzZSBvcmRlciBzbyB0aGUgZnJvbnQgZmFjZSBpcyBDQ1cu
Ci0gICAgZ2xGcm9udEZhY2UoR0xfQ0NXKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcGFyYW1ldGVy
cyBmb3IgdGhlIGNoZWNrZXJib2FyZCBkcmF3aW5nLgotICAgIGdsVXNlUHJvZ3JhbShtX2NoZWNr
ZXJQcm9ncmFtT2JqZWN0KTsKLSAgICBmbG9hdCBiaXRtYXBTY2FsZSA9IHN0YXRpY19jYXN0PGZs
b2F0PihtX2xheW91dFJlY3Qud2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV92aXNpYmxl
UmVjdC53aWR0aCgpKTsKLSAgICBnbFVuaWZvcm0xZihtX2NoZWNrZXJTY2FsZUxvY2F0aW9uLCBi
aXRtYXBTY2FsZSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV92aWV3
cG9ydC53aWR0aCgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3Zpc2libGVSZWN0LndpZHRoKCkp
OwotICAgIGdsVW5pZm9ybTJmKG1fY2hlY2tlck9yaWdpbkxvY2F0aW9uLCBtX3Zpc2libGVSZWN0
LngoKSpzY2FsZSwgbV92aXNpYmxlUmVjdC55KCkqc2NhbGUpOwotICAgIGdsVW5pZm9ybTFmKG1f
Y2hlY2tlclN1cmZhY2VIZWlnaHRMb2NhdGlvbiwgbV9jb250ZXh0LT5zdXJmYWNlU2l6ZSgpLmhl
aWdodCgpKTsKKworICAgIC8vIFRoZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250
ZXh0IHVzZXMgT3BlbkdMIGNvbnZlbnRpb25zLCBzbyBldmVyeXRoaW5nIGlzIHVwc2lkZSBkb3du
CisgICAgZ2xGcm9udEZhY2UoR0xfQ1cpOwogCiAgICAgY2hlY2tHTEVycm9yKCk7CiAKQEAgLTM1
MSwxMSArMzM2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnMoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgTGF5ZXJDb20KICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUaGUgc2hhZGVyIHVzZWQg
dG8gcmVuZGVyIGxheWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwotICAg
IC8vIHNvIHdlIG5lZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5Lgot
ICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKLSAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9N
SU5VU19TUkNfQUxQSEEpOwotCiAgICAgLy8gSWYgc29tZSBsYXllcnMgc2hvdWxkIGJlIGRyYXdl
ZCBvbiB0ZW1wb3Jhcnkgc3VyZmFjZXMsIHdlIHNob3VsZCBkbyBpdCBmaXJzdC4KICAgICBkcmF3
TGF5ZXJzT25TdXJmYWNlcyhzdXJmYWNlTGF5ZXJzKTsKIApAQCAtMzgzLDkgKzM2Myw2IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIExheWVyQ29tCiAgICAgLy8gZHJpdmVyIGJ5IHVuYmluZGluZyBlYXJseSAo
d2hlbiB0aGUgcGl4bWFwIGlzIGhvcGVmdWxseSBzdGlsbCBhcm91bmQpLgogICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAKLSAgICAvLyBUdXJuIG9mZiBibGVuZGluZyBhZ2Fp
bgotICAgIGdsRGlzYWJsZShHTF9CTEVORCk7Ci0KICAgICBMYXllclNldDo6aXRlcmF0b3IgaXRl
ciA9IG1fbGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuYmVnaW4oKTsKICAgICBmb3IgKDsg
aXRlciAhPSBtX2xheWVyc0xvY2tpbmdUZXh0dXJlUmVzb3VyY2VzLmVuZCgpOyArK2l0ZXIpCiAg
ICAgICAgICgqaXRlciktPnJlbGVhc2VUZXh0dXJlUmVzb3VyY2VzKCk7CkBAIC00MTUsMjggKzM5
MiwyOCBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUJ1ZmZlcihjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdAogICAgIGlmICghdmVydGljZXMuYm91bmRp
bmdCb3goKS5pbnRlcnNlY3RzKG1fY2xpcFJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBi
b29sIGJsZW5kaW5nID0gIWNvbnRlbnRzT3BhcXVlIHx8IG9wYWNpdHkgPCAxLjBmOwotICAgIGlm
IChibGVuZGluZykgeworICAgIGlmICghY29udGVudHNPcGFxdWUgfHwgb3BhY2l0eSA8IDEuMGYp
IHsKICAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogICAgICAgICBnbEJsZW5kRnVuYyhHTF9P
TkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdsRGlz
YWJsZShHTF9CTEVORCk7CiAgICAgfQogCi0gICAgZ2xVc2VQcm9ncmFtKG1fbGF5ZXJQcm9ncmFt
T2JqZWN0W0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyUkdCQV0pOwotICAgIGdsVW5pZm9y
bTFmKG1fYWxwaGFMb2NhdGlvbltMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkFdLCBv
cGFjaXR5KTsKKyAgICBpZiAoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQW5k
QmluZEJ1ZmZlckdMVGV4dHVyZShidWZmZXIsIEdMX1RFWFRVUkVfMkQpKSB7CisgICAgICAgIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oTGF5ZXJQcm9ncmFtUkdCQSk7
CisgICAgICAgIGdsVW5pZm9ybTFmKHByb2dyYW0ub3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkp
OwogCi0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAmdmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRz
KTsKKyAgICAgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnBvc2l0aW9uTG9j
YXRpb24oKSk7CisgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS50ZXhD
b29yZExvY2F0aW9uKCkpOworICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5w
b3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsK
KyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udGV4Q29vcmRMb2NhdGlvbigp
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CiAKLSAgICBpZiAoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpsb2NrQW5kQmluZEJ1ZmZlckdMVGV4dHVyZShidWZm
ZXIsIEdMX1RFWFRVUkVfMkQpKSB7CiAgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpOwogICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OnJlbGVh
c2VCdWZmZXJHTFRleHR1cmUoYnVmZmVyKTsKICAgICB9Ci0KLSAgICBpZiAoYmxlbmRpbmcpCi0g
ICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJh
d0NoZWNrZXJib2FyZFBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiBjb250ZW50cykKK3ZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0Nv
bG9yKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVj
dCYgY29udGVudHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBGbG9hdFF1YWQgdmVydGlj
ZXModHJhbnNmb3JtLm1hcFBvaW50KGNvbnRlbnRzLm1pblhNaW5ZQ29ybmVyKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWluWE1heFlDb3Ju
ZXIoKSksCkBAIC00NDYsMTAgKzQyMywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdDaGVj
a2VyYm9hcmRQYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2ZvcgogICAg
IGlmICghdmVydGljZXMuYm91bmRpbmdCb3goKS5pbnRlcnNlY3RzKG1fY2xpcFJlY3QpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBnbFVzZVByb2dyYW0obV9jaGVja2VyUHJvZ3JhbU9iamVjdCk7
CisgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlUHJvZ3JhbShDb2xvclByb2dy
YW0pOwogCi0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmdmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29v
cmRzKTsKKyAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDI1NSkgeworICAgICAgICBnbEVuYWJsZShH
TF9CTEVORCk7CisgICAgICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19B
TFBIQSk7CisgICAgfSBlbHNlCisgICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7CisKKyAgICBn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpKTsKKyAg
ICBnbFVuaWZvcm00ZihtX2NvbG9yQ29sb3JMb2NhdGlvbiwgY29sb3IucmVkKCkgLyAyNTUuMCwg
Y29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVlKCkgLyAyNTUuMCwgY29sb3IuYWxwaGEo
KSAvIDI1NS4wKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxv
Y2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsKIAogICAgIGds
RHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogfQpAQCAtNDY4LDEwICs0NTIsMTcg
QEAgYm9vbCBMYXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKExheWVyUmVuZGVyZXJTdXJmYWNlKiBz
dXJmYWNlKQogCiAgICAgc3VyZmFjZS0+ZW5zdXJlVGV4dHVyZSgpOwogCisgICAgR0x1aW50IHRl
eGlkID0gcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KHBsYXRmb3JtQnVmZmVySGFuZGxlKHN1cmZh
Y2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpKTsKKyAgICBpZiAoIXRleGlkKSB7CisgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6bG9ja0FuZEJpbmRCdWZmZXJHTFRleHR1
cmUoc3VyZmFjZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgR0xfVEVYVFVSRV8yRCk7CisgICAg
ICAgIHRleGlkID0gcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KHBsYXRmb3JtQnVmZmVySGFuZGxl
KHN1cmZhY2UtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpKTsKKyAgICB9CisKICAgICBpZiAoIW1f
ZmJvKQogICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+dGV4dHVyZSgp
LT50ZXh0dXJlSWQoKSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleGlkLCAwKTsKIAog
I2lmbmRlZiBOREVCVUcKICAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdMX0ZSQU1FQlVGRkVSKTsKQEAgLTUwMyw3ICs0OTQsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXI6OmRyYXdMYXllcnNPblN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3Np
dGluZ1RocgogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICBpZiAoIW1fZmlsdGVy
UmVuZGVyZXIpCi0gICAgICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gTGF5ZXJGaWx0ZXJSZW5k
ZXJlcjo6Y3JlYXRlKG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29yZExvY2F0aW9uKTsKKyAg
ICAgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBMYXllckZpbHRlclJlbmRlcmVyOjpjcmVhdGUo
R0xFUzJQcm9ncmFtOjpQb3NpdGlvbkF0dHJpYnV0ZUluZGV4LCBHTEVTMlByb2dyYW06OlRleENv
b3JkQXR0cmlidXRlSW5kZXgpOwogICAgICAgICBpZiAobGF5ZXItPmZpbHRlck9wZXJhdGlvbnND
aGFuZ2VkKCkpIHsKICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXJPcGVyYXRpb25zQ2hhbmdl
ZChmYWxzZSk7CiAgICAgICAgICAgICBsYXllci0+c2V0RmlsdGVyQWN0aW9ucyhtX2ZpbHRlclJl
bmRlcmVyLT5hY3Rpb25zRm9yT3BlcmF0aW9ucyhzdXJmYWNlLCBsYXllci0+ZmlsdGVycygpLm9w
ZXJhdGlvbnMoKSkpOwpAQCAtNTQxLDYgKzUzMiwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmFk
ZExheWVyVG9SZWxlYXNlVGV4dHVyZVJlc291cmNlc0xpc3QoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZAogICAgIG1fbGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuYWRkKGxheWVyKTsKIH0KIAor
c3RhdGljIGludCBnbFJvdW5kKGZsb2F0IGYpCit7CisgICAgcmV0dXJuIGZsb29yZihmICsgMC41
Zik7Cit9CisKIC8vIFRyYW5zZm9ybSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byB3
aW5kb3cgY29vcmRpbmF0ZXMKIC8vIGFzIHNwZWNpZmllZCBpbiB0aGUgT3BlbkdMIEVTIDIuMCBz
cGVjIHNlY3Rpb24gMi4xMi4xLgogSW50UmVjdCBMYXllclJlbmRlcmVyOjp0b09wZW5HTFdpbmRv
d0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKQEAgLTU0OSw3ICs1NDUsNyBA
QCBJbnRSZWN0IExheWVyUmVuZGVyZXI6OnRvT3BlbkdMV2luZG93Q29vcmRpbmF0ZXMoY29uc3Qg
RmxvYXRSZWN0JiByKSBjb25zdAogICAgIGZsb2F0IHZoMiA9IG1fdmlld3BvcnQuaGVpZ2h0KCkg
LyAyLjA7CiAgICAgZmxvYXQgb3ggPSBtX3ZpZXdwb3J0LngoKSArIHZ3MjsKICAgICBmbG9hdCBv
eSA9IG1fdmlld3BvcnQueSgpICsgdmgyOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdChyLngoKSAqIHZ3MiArIG94LCByLnkoKSAqIHZoMiArIG95LCByLndpZHRoKCkgKiB2
dzIsIHIuaGVpZ2h0KCkgKiB2aDIpKTsKKyAgICByZXR1cm4gSW50UmVjdChnbFJvdW5kKHIueCgp
ICogdncyICsgb3gpLCBnbFJvdW5kKHIueSgpICogdmgyICsgb3kpLCBnbFJvdW5kKHIud2lkdGgo
KSAqIHZ3MiksIGdsUm91bmQoci5oZWlnaHQoKSAqIHZoMikpOwogfQogCiAvLyBUcmFuc2Zvcm0g
bm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gd2luZG93IGNvb3JkaW5hdGVzIGFzIFdl
YktpdCB1bmRlcnN0YW5kcyB0aGVtLgpAQCAtNTkyLDI2ICs1ODgsMzIgQEAgdm9pZCBMYXllclJl
bmRlcmVyOjpkcmF3RGVidWdCb3JkZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiAg
ICAgaWYgKCFib3JkZXJDb2xvci5hbHBoYSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBnbFVz
ZVByb2dyYW0obV9jb2xvclByb2dyYW1PYmplY3QpOworICAgIGlmIChib3JkZXJDb2xvci5hbHBo
YSgpIDwgMjU1KSB7CisgICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgZ2xCbGVu
ZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZ2xEaXNhYmxlKEdMX0JMRU5EKTsKKworICAgIHVzZVByb2dyYW0oQ29sb3JQcm9ncmFtKTsK
ICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAm
bGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkpOwogICAgIGdsVW5pZm9ybTRmKG1fY29sb3JD
b2xvckxvY2F0aW9uLCBib3JkZXJDb2xvci5yZWQoKSAvIDI1NS4wLCBib3JkZXJDb2xvci5ncmVl
bigpIC8gMjU1LjAsIGJvcmRlckNvbG9yLmJsdWUoKSAvIDI1NS4wLCAxKTsKIAotICAgIGdsTGlu
ZVdpZHRoKGxheWVyLT5ib3JkZXJXaWR0aCgpKTsKKyAgICBnbExpbmVXaWR0aChzdGQ6Om1heCgx
LjBmLCBsYXllci0+Ym9yZGVyV2lkdGgoKSkpOwogICAgIGdsRHJhd0FycmF5cyhHTF9MSU5FX0xP
T1AsIDAsIDQpOwogfQogCiAvLyBDbGVhcnMgYSByZWN0YW5nbGUgaW5zaWRlIHRoZSBsYXllcidz
IGJvdW5kcy4KIHZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0hvbGVQdW5jaFJlY3QoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbGF5ZXIpCiB7Ci0gICAgZ2xVc2VQcm9ncmFtKG1fY29sb3JQcm9ncmFt
T2JqZWN0KTsKKyAgICB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7CiAgICAgZ2xVbmlmb3JtNGYo
bV9jb2xvckNvbG9yTG9jYXRpb24sIDAsIDAsIDAsIDApOwogCisgICAgZ2xFbmFibGUoR0xfQkxF
TkQpOwogICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfWkVSTyk7CiAgICAgRmxvYXRRdWFkIGhv
bGUgPSBsYXllci0+Z2V0VHJhbnNmb3JtZWRIb2xlUHVuY2hSZWN0KCk7CiAgICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmhvbGUpOwogICAgIGds
RHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgIGNoZWNrR0xFcnJvcigpOwot
ICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlcjo6cHJlcGFyZUZyYW1lUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIGxheWVyLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBpc0NvbnRleHRDdXJyZW50
KQpAQCAtNjgxLDI4ICs2ODMsNTMgQEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNS
ZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKICAgICAvLyBM
YXllciB3aG9zZSBoYXNGaXhlZENvbnRhaW5lciBpcyB0cnVlIHdpbGwgZ2V0IHNjcm9sbGVkIHJl
bGF0aXZlIHRvCiAgICAgLy8gdGhlIGZpeGVkIHBvc2l0aW9uZWQgcGFyZW50LgogICAgIGlmICgh
bGF5ZXItPmhhc0ZpeGVkQ29udGFpbmVyKCkgJiYgKGxheWVyLT5pc0ZpeGVkUG9zaXRpb24oKSB8
fCBsYXllci0+aGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgpKSkgewotICAgICAgICAvLyBUaGUg
YmFzaWMgaWRlYSBoZXJlIGlzIHRvIHNldCB2aXNpYmxlIHkgdG8gdGhlIHZhbHVlIHdlIHdhbnQs
IGFuZAotICAgICAgICAvLyBsYXlvdXQgeSB0byB0aGUgdmFsdWUgV2ViQ29yZSBsYXlvdXRlZCB0
aGUgZml4ZWQgZWxlbWVudCB0by4KLSAgICAgICAgZmxvYXQgbWF4aW11bVNjcm9sbFkgPSBtX2Nv
bnRlbnRzU2l6ZS5oZWlnaHQoKSAtIG1fdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGZs
b2F0IHZpc2libGVZID0gbWF4KDAuMGYsIG1fdmlzaWJsZVJlY3QueSgpKTsKLSAgICAgICAgZmxv
YXQgbGF5b3V0WSA9IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFksIChmbG9hdCltX2xheW91
dFJlY3QueSgpKSk7Ci0KLSAgICAgICAgLy8gRm9yIHN0dWZmIGxvY2F0ZWQgb24gdGhlIGxvd2Vy
IGhhbGYgb2YgdGhlIHNjcmVlbiwgd2Ugem9vbSByZWxhdGl2ZSB0byBib3R0b20uCi0gICAgICAg
IC8vIFRoaXMgdHJpY2sgYWxsb3dzIHVzIHRvIGRpc3BsYXkgZml4ZWQgcG9zaXRpb25lZCBlbGVt
ZW50cyBhbGlnbmVkIHRvIHRvcCBvcgotICAgICAgICAvLyBib3R0b20gY29ycmVjdGx5IHdoZW4g
cGFubmluZyBhbmQgem9vbWluZywgd2l0aG91dCBhY3R1YWxseSBrbm93aW5nIHRoZQotICAgICAg
ICAvLyBudW1lcmljIHZhbHVlcyBvZiB0aGUgdG9wIGFuZCBib3R0b20gQ1NTIGF0dHJpYnV0ZXMu
Ci0gICAgICAgIC8vIEluIGZhY3QsIHRoZSBwb3NpdGlvbiBpcyB0aGUgbG9jYXRpb24gb2YgdGhl
IGFuY2hvciwgc28gdG8gZmluZCB0aGUgbWlkLXBvaW50Ci0gICAgICAgIC8vIHdlIGhhdmUgdG8g
c3VidHJhY3QgdGhlIGFuY2hvciBvZmZzZXQgZnJvbSB0aGUgbWlkZGxlICgwLjUpIHRpbWVzIHRo
ZSBib3VuZHMuCi0gICAgICAgIC8vIFRoZSBhbmNob3IgZGVmYXVsdHMgdG8gKDAuNSwgMC41KSBm
b3IgbW9zdCBsYXllcnMuCi0gICAgICAgIGlmIChwb3NpdGlvbi55KCkgKyAoMC41IC0gYW5jaG9y
UG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKSA+IGxheW91dFkgKyBtX2xheW91dFJlY3QuaGVp
Z2h0KCkgLyAyKSB7Ci0gICAgICAgICAgICB2aXNpYmxlWSA9IG1pbjxmbG9hdD4obV9jb250ZW50
c1NpemUuaGVpZ2h0KCksIG1fdmlzaWJsZVJlY3QueSgpICsgbV92aXNpYmxlUmVjdC5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICBsYXlvdXRZID0gbWluKG1fY29udGVudHNTaXplLmhlaWdodCgpLCBt
YXgoMCwgbV9sYXlvdXRSZWN0LnkoKSkgKyBtX2xheW91dFJlY3QuaGVpZ2h0KCkpOworICAgICAg
ICBGbG9hdFJlY3QgbGF5b3V0UmVjdCA9IG1fbGF5b3V0UmVjdDsKKyAgICAgICAgRmxvYXRTaXpl
IGNvbnRlbnRzU2l6ZSA9IG1fY29udGVudHNTaXplOworICAgICAgICBGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QgPSBtX3Zpc2libGVSZWN0OworICAgICAgICBmb3IgKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIGN1cnIgPSBsYXllci0+c3VwZXJsYXllcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+c3VwZXJs
YXllcigpKSB7CisKKyAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoIGEgY29udGFpbmVyIGZvciBm
aXhlZCBwb3NpdGlvbiBsYXllcnMsIGFuZCBpdCBoYXMgaXRzIG92ZXJyaWRlJ3MgcG9zaXRpb24g
c2V0LCBpdCBtZWFucyBpdCBpcyBhIHNjcm9sbGFibGUgaWZyYW1lCisgICAgICAgICAgICBpZiAo
Y3Vyci0+aXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgJiYgY3Vyci0+b3ZlcnJp
ZGUoKS0+aXNQb3NpdGlvblNldCgpKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0UmVjdCA9IGN1
cnItPmZyYW1lVmlzaWJsZVJlY3QoKTsKKyAgICAgICAgICAgICAgICBjb250ZW50c1NpemUgPSBj
dXJyLT5mcmFtZUNvbnRlbnRzU2l6ZSgpOworCisgICAgICAgICAgICAgICAgLy8gSW52ZXJ0ZWQg
bG9naWMgb2YKKyAgICAgICAgICAgICAgICAvLyBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oLXNj
cm9sbFBvc2l0aW9uLngoKSArIGFuY2hvci54KCkgKiBib3VuZHMud2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLXNjcm9sbFBvc2l0aW9uLnkoKSAr
IGFuY2hvci55KCkgKiBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgc2Nyb2xsUG9zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIC0oY3Vyci0+b3ZlcnJpZGUo
KS0+cG9zaXRpb24oKS54KCkgLSAoY3Vyci0+YW5jaG9yUG9pbnQoKS54KCkgKiBjdXJyLT5ib3Vu
ZHMoKS53aWR0aCgpKSksCisgICAgICAgICAgICAgICAgICAgIC0oY3Vyci0+b3ZlcnJpZGUoKS0+
cG9zaXRpb24oKS55KCkgLSAoY3Vyci0+YW5jaG9yUG9pbnQoKS55KCkgKiBjdXJyLT5ib3VuZHMo
KS5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChz
Y3JvbGxQb3NpdGlvbiwgbGF5b3V0UmVjdC5zaXplKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgRmxvYXRQb2ludCBtYXhpbXVt
U2Nyb2xsUG9zaXRpb24gPSBGbG9hdFBvaW50KDAsIDApICsgKGNvbnRlbnRzU2l6ZSAtIHZpc2li
bGVSZWN0LnNpemUoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgbWF4aW11bUxheW91dFNjcm9sbFBv
c2l0aW9uID0gRmxvYXRQb2ludCgwLCAwKSArIChjb250ZW50c1NpemUgLSBsYXlvdXRSZWN0LnNp
emUoKSk7CisKKyAgICAgICAgLy8gVGhlIGJhc2ljIGlkZWEgaGVyZSBpcyB0byBzZXQgdmlzaWJs
ZSB4L3kgdG8gdGhlIHZhbHVlIHdlIHdhbnQsIGFuZAorICAgICAgICAvLyBsYXlvdXQgeC95IHRv
IHRoZSB2YWx1ZSBXZWJDb3JlIGxheW91dGVkIHRoZSBmaXhlZCBlbGVtZW50IHRvLgorICAgICAg
ICBmbG9hdCB2aXNpYmxlWTsKKyAgICAgICAgZmxvYXQgbGF5b3V0WTsKKyAgICAgICAgaWYgKGxh
eWVyLT5pc0ZpeGVkVG9Ub3AoKSkgeworICAgICAgICAgICAgdmlzaWJsZVkgPSBtYXgoMC4wZiwg
bWluKG1heGltdW1TY3JvbGxQb3NpdGlvbi55KCksIHZpc2libGVSZWN0LnkoKSkpOworICAgICAg
ICAgICAgbGF5b3V0WSA9IG1heCgwLjBmLCBtaW4obWF4aW11bUxheW91dFNjcm9sbFBvc2l0aW9u
LnkoKSwgbGF5b3V0UmVjdC55KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZp
c2libGVZID0gbWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVJlY3QueSgpICsgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgbGF5b3V0WSA9IG1pbihjb250ZW50c1Np
emUuaGVpZ2h0KCksIG1heCgwLjBmLCBsYXlvdXRSZWN0LnkoKSkgKyBsYXlvdXRSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgfQogICAgICAgICBwb3NpdGlvbi5zZXRZKHBvc2l0aW9uLnkoKSArICh2
aXNpYmxlWSAtIGxheW91dFkpKTsKIAotICAgICAgICBmbG9hdCB2aXNpYmxlWCA9IG1heCgwLjBm
LCB2aXNpYmxlUmVjdC54KCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLngoKSAr
IHZpc2libGVYKTsKKyAgICAgICAgZmxvYXQgdmlzaWJsZVg7CisgICAgICAgIGZsb2F0IGxheW91
dFg7CisgICAgICAgIGlmIChsYXllci0+aXNGaXhlZFRvTGVmdCgpKSB7CisgICAgICAgICAgICB2
aXNpYmxlWCA9IG1heCgwLjBmLCBtaW4obWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSwgdmlzaWJs
ZVJlY3QueCgpKSk7CisgICAgICAgICAgICBsYXlvdXRYID0gbWF4KDAuMGYsIG1pbihtYXhpbXVt
TGF5b3V0U2Nyb2xsUG9zaXRpb24ueCgpLCBsYXlvdXRSZWN0LngoKSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdmlzaWJsZVggPSBtaW4oY29udGVudHNTaXplLndpZHRoKCksIHZp
c2libGVSZWN0LngoKSArIHZpc2libGVSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgbGF5b3V0
WCA9IG1pbihjb250ZW50c1NpemUud2lkdGgoKSwgbWF4KDAuMGYsIGxheW91dFJlY3QueCgpKSAr
IGxheW91dFJlY3Qud2lkdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb24uc2V0WChw
b3NpdGlvbi54KCkgKyAodmlzaWJsZVggLSBsYXlvdXRYKSk7CiAgICAgfQogCiAgICAgLy8gT2Zm
c2V0IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgpAQCAt
ODY2LDEyICs4OTMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAvLyBEcmF3
IHRoZSBzdXJmYWNlIG9udG8gYW5vdGhlciBzdXJmYWNlIG9yIHNjcmVlbi4KICAgICAgICAgYm9v
bCBkcmF3U3VyZmFjZSA9IGxheWVyQWxyZWFkeU9uU3VyZmFjZShsYXllcik7CiAgICAgICAgIC8v
IFRoZSB0ZXh0dXJlIGZvcm1hdCBmb3IgdGhlIHN1cmZhY2UgaXMgUkdCQS4KLSAgICAgICAgTGF5
ZXJEYXRhOjpMYXllclByb2dyYW1TaGFkZXIgc2hhZGVyID0gZHJhd1N1cmZhY2UgPyBMYXllckRh
dGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkEgOiBsYXllci0+bGF5ZXJQcm9ncmFtU2hhZGVyKCk7
CisgICAgICAgIExheWVyRGF0YTo6TGF5ZXJQcm9ncmFtIGxheWVyUHJvZ3JhbSA9IGRyYXdTdXJm
YWNlID8gTGF5ZXJEYXRhOjpMYXllclByb2dyYW1SR0JBIDogbGF5ZXItPmxheWVyUHJvZ3JhbSgp
OwogCiAgICAgICAgIGlmICghZHJhd1N1cmZhY2UpIHsKLSAgICAgICAgICAgIGdsVXNlUHJvZ3Jh
bShtX2xheWVyUHJvZ3JhbU9iamVjdFtzaGFkZXJdKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFm
KG1fYWxwaGFMb2NhdGlvbltzaGFkZXJdLCBsYXllci0+ZHJhd09wYWNpdHkoKSk7Ci0gICAgICAg
ICAgICBsYXllci0+ZHJhd1RleHR1cmVzKG1fc2NhbGUsIG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90
ZXhDb29yZExvY2F0aW9uLCBtX3Zpc2libGVSZWN0KTsKKyAgICAgICAgICAgIGNvbnN0IEdMRVMy
UHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0pOworICAgICAg
ICAgICAgbGF5ZXItPmRyYXdUZXh0dXJlcyhtX3NjYWxlLCBwcm9ncmFtLCBtX3Zpc2libGVSZWN0
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZmxlY3Rpb24g
aWYgaXQgZXhpc3RzLgogICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpA
QCAtODgyLDIyICs5MDgsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNS
ZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAgICAg
ICAgIGlmICghbWFzayAmJiBsYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgICAgICAgICAg
ICAgIG1hc2sgPSBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwogCi0gICAgICAg
ICAgICAgICAgZ2xVc2VQcm9ncmFtKG1hc2sgPyBtX2xheWVyTWFza1Byb2dyYW1PYmplY3Rbc2hh
ZGVyXSA6IG1fbGF5ZXJQcm9ncmFtT2JqZWN0W3NoYWRlcl0pOwotICAgICAgICAgICAgICAgIGds
VW5pZm9ybTFmKG1hc2sgPyBtX21hc2tBbHBoYUxvY2F0aW9uW3NoYWRlcl0gOiBtX2FscGhhTG9j
YXRpb25bc2hhZGVyXSwgbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5
KCkpOwotICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5k
ZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgbV9wb3NpdGlvbkxv
Y2F0aW9uLCBtX3RleENvb3JkTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGNvbnN0IEdMRVMy
UHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0sIG1hc2spOwor
ICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1
cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgcHJvZ3JhbSk7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGdsVXNlUHJvZ3JhbShsYXllci0+bWFza0xheWVyKCkgPyBt
X2xheWVyTWFza1Byb2dyYW1PYmplY3Rbc2hhZGVyXSA6IG1fbGF5ZXJQcm9ncmFtT2JqZWN0W3No
YWRlcl0pOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWYobGF5ZXItPm1hc2tMYXllcigpID8gbV9t
YXNrQWxwaGFMb2NhdGlvbltzaGFkZXJdIDogbV9hbHBoYUxvY2F0aW9uW3NoYWRlcl0sIGxheWVy
LT5sYXllclJlbmRlcmVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKLSAgICAgICAgICAgIGxh
eWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1RyYW5z
Zm9ybSgpLCBsYXllci0+bWFza0xheWVyKCksIG1fcG9zaXRpb25Mb2NhdGlvbiwgbV90ZXhDb29y
ZExvY2F0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllci0+aGFzTWlzc2luZ1Rl
eHR1cmVzKCkpIHsKLSAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CTEVORCk7Ci0gICAgICAgICAg
ICBnbFVzZVByb2dyYW0obV9jaGVja2VyUHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgICAgICBsYXll
ci0+ZHJhd01pc3NpbmdUZXh0dXJlcyhtX3NjYWxlLCBtX3Bvc2l0aW9uTG9jYXRpb24sIG1fdGV4
Q29vcmRMb2NhdGlvbiwgbV92aXNpYmxlUmVjdCk7Ci0gICAgICAgICAgICBnbEVuYWJsZShHTF9C
TEVORCk7Ci0gICAgICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNf
QUxQSEEpOworICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlTGF5
ZXJQcm9ncmFtKGxheWVyUHJvZ3JhbSwgbGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICAgICAgICAg
IGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1Ry
YW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCksIHByb2dyYW0pOwogICAgICAgICB9CiAgICAg
fQogCkBAIC05MTYsNiArOTMyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXll
cnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogCiAgICAgaWYg
KHN0ZW5jaWxDbGlwKSB7CiAgICAgICAgIGlmICghbV9zdGVuY2lsQ2xlYXJlZCkgeworICAgICAg
ICAgICAgZ2xTdGVuY2lsTWFzaygweGZmZmZmZmZmKTsKICAgICAgICAgICAgIGdsQ2xlYXJTdGVu
Y2lsKDApOwogICAgICAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAg
ICAgICAgICAgbV9zdGVuY2lsQ2xlYXJlZCA9IHRydWU7CkBAIC05MjYsNyArOTQzLDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICBnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9JTkNS
LCBHTF9JTkNSKTsKIAogICAgICAgICB1cGRhdGVTY2lzc29ySWZOZWVkZWQoY2xpcFJlY3QpOwot
ICAgICAgICBnbFVzZVByb2dyYW0obV9jb2xvclByb2dyYW1PYmplY3QpOworICAgICAgICB1c2VQ
cm9ncmFtKENvbG9yUHJvZ3JhbSk7CiAgICAgICAgIGdsQ29sb3JNYXNrKEdMX0ZBTFNFLCBHTF9G
QUxTRSwgR0xfRkFMU0UsIEdMX0ZBTFNFKTsKICAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5k
cygpKTsKICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CkBAIC05
NjksNyArOTg2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNp
dmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICBnbFN0ZW5jaWxP
cChHTF9LRUVQLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKTsKIAogICAgICAgICB1cGRhdGVTY2lz
c29ySWZOZWVkZWQoY2xpcFJlY3QpOwotICAgICAgICBnbFVzZVByb2dyYW0obV9jb2xvclByb2dy
YW1PYmplY3QpOworICAgICAgICB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7CiAgICAgICAgIGds
Q29sb3JNYXNrKEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UsIEdMX0ZBTFNFKTsKICAgICAg
ICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxh
eWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5kcygpKTsKICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCk7CkBAIC0xMDEwLDI0ICsxMDI3LDEwIEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlcjo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gcmV0OwogfQogCi0vLyBCaW5k
cyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUgdG8gYSBjb21tb24gbG9jYXRpb24gYWNyb3NzIGFs
bCBwcm9ncmFtcwotLy8gdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNv
ZGUgdG8gYmluZCB0aGUgYXR0cmlidXRlcyBvbmx5IG9uY2UKLS8vIGV2ZW4gd2hlbiBzd2l0Y2hp
bmcgYmV0d2VlbiBwcm9ncmFtcy4KLXZvaWQgTGF5ZXJSZW5kZXJlcjo6YmluZENvbW1vbkF0dHJp
YkxvY2F0aW9uKGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSkKLXsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IExheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJz
OyArK2kpIHsKLSAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9sYXllclByb2dyYW1PYmpl
Y3RbaV0sIGxvY2F0aW9uLCBhdHRyaWJOYW1lKTsKLSAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRp
b24obV9sYXllck1hc2tQcm9ncmFtT2JqZWN0W2ldLCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Ci0g
ICAgfQotCi0gICAgZ2xCaW5kQXR0cmliTG9jYXRpb24obV9jb2xvclByb2dyYW1PYmplY3QsIGxv
Y2F0aW9uLCBhdHRyaWJOYW1lKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX2NoZWNrZXJQ
cm9ncmFtT2JqZWN0LCBsb2NhdGlvbiwgYXR0cmliTmFtZSk7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5k
ZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCitib29sIExheWVyUmVuZGVyZXI6OmNy
ZWF0ZVByb2dyYW0oUHJvZ3JhbUluZGV4IHByb2dyYW0pCiB7CiAgICAgLy8gU2hhZGVycyBmb3Ig
ZHJhd2luZyB0aGUgbGF5ZXIgY29udGVudHMuCi0gICAgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdb
XSA9CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU3RyaW5nID0KICAgICAgICAgImF0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Rl
eENvb3JkOyAgIFxuIgogICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIK
QEAgLTEwMzcsNyArMTA0MCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJl
ZEdMT2JqZWN0cygpCiAgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgIFxuIgog
ICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICBjaGFyIGZy
YWdtZW50U2hhZGVyU3RyaW5nUkdCQVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clN0cmluZ1JHQkEgPQogICAgICAgICAidmFyeWluZyBtZWRpdW1wIHZlYzIgdl90ZXhDb29yZDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInVuaWZvcm0gbG93cCBzYW1w
bGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1
bmlmb3JtIGxvd3AgZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgpAQCAtMTA0Niw3ICsxMDQ5LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyOjppbml0aWFsaXpl
U2hhcmVkR0xPYmplY3RzKCkKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHNf
dGV4dHVyZSwgdl90ZXhDb29yZCkgKiBhbHBoYTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAg
IGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdCR1JBW10gPQorICAgIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU3RyaW5nQkdSQSA9CiAgICAgICAgICJ2YXJ5aW5nIG1lZGl1bXAgdmVjMiB2X3Rl
eENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlm
b3JtIGxvd3Agc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIGxvd3AgZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCkBAIC0xMDU1LDcgKzEwNTgsNyBAQCBib29sIExh
eWVyUmVuZGVyZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAiICBnbF9G
cmFnQ29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKS5iZ3JhICogYWxwaGE7
IFxuIgogICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJp
bmdNYXNrUkdCQVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ01hc2tS
R0JBID0KICAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHNf
dGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAgICAidW5pZm9ybSBs
b3dwIHNhbXBsZXIyRCBzX21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKQEAg
LTEwNjcsNyArMTA3MCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZVNoYXJlZEdM
T2JqZWN0cygpCiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4
Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYSAqIG1hc2tDb2xvci53OyAg
ICAgICAgICAgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJT
dHJpbmdNYXNrQkdSQVtdID0KKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZ01h
c2tCR1JBID0KICAgICAgICAgInZhcnlpbmcgbWVkaXVtcCB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInVuaWZvcm0gbG93cCBzYW1w
bGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAg
ICAgInVuaWZvcm0gbG93cCBzYW1wbGVyMkQgc19tYXNrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKQEAgLTEwODAsMTE5ICsxMDgzLDEyOSBAQCBib29sIExheWVyUmVuZGVy
ZXI6OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgICAgICAifSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAog
ICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGRlYnVnIGJvcmRlcnMgYXJvdW5kIHRoZSBs
YXllcnMuCi0gICAgY2hhciBjb2xvclZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAgICBjb25zdCBj
aGFyKiBjb2xvclZlcnRleFNoYWRlclN0cmluZyA9CiAgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBh
X3Bvc2l0aW9uOyAgIFxuIgogICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBc
biIKICAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICIg
ICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247IFxuIgogICAgICAgICAifSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiI7CiAKLSAgICBjaGFyIGNvbG9yRnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CisgICAgY29uc3QgY2hhciogY29sb3JGcmFnbWVudFNoYWRlclN0cmluZyA9CiAgICAgICAg
ICJ1bmlmb3JtIGxvd3AgdmVjNCBjb2xvcjsgICAgIFxuIgogICAgICAgICAidm9pZCBtYWluKCkg
ICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOyAgICAgIFxuIgogICAgICAg
ICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICAvLyBGSVhNRTogZ2V0
IHNjcmVlbiBzaXplLCBnZXQgbGlnaHQvZGFyayBjb2xvciwgdXNlCi0gICAgLy8gc3RyaW5nIG1h
bmlwdWxhdGlvbiBtZXRob2RzIHRvIGluc2VydCB0aG9zZSBjb25zdGFudHMgaW50bwotICAgIC8v
IHRoZSBzaGFkZXIgc291cmNlLgotICAgIHN0YXRpYyBDb2xvciBsaWdodENvbG9yKDB4ZmIsIDB4
ZmQsIDB4ZmYpOwotICAgIC8vIGNoZWNrZXJib2FyZENvbG9yRGFyaygpCi0gICAgc3RhdGljIENv
bG9yIGRhcmtDb2xvcigweGU4LCAweGVlLCAweGY3KTsKLSAgICBpbnQgY2hlY2tlclNpemUgPSAy
MDsKLSAgICBTdHJpbmcgdG1wKAotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIGZsb2F0IHNjYWxl
OyAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIHZlYzIgb3Jp
Z2luOyAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAidW5pZm9ybSBtZWRpdW1wIGZsb2F0
IHN1cmZhY2VIZWlnaHQ7ICAgICAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAiICBjb25zdCBtZWRp
dW1wIGZsb2F0IGdyaWQgPSBHUklEOyAgICAgICAgICAgIFxuIgotICAgICAgICAiICBjb25zdCBs
b3dwIHZlYzQgbGlnaHRDb2xvciA9IExJR0hUX0NPTE9SOyAgIFxuIgotICAgICAgICAiICBjb25z
dCBsb3dwIHZlYzQgZGFya0NvbG9yID0gREFSS19DT0xPUjsgICAgIFxuIgotICAgICAgICAiICBt
ZWRpdW1wIGZsb2F0IHRtcCA9IGdyaWQgKiBzY2FsZTsgICAgICAgICAgIFxuIgotICAgICAgICAi
ICBnbF9GcmFnQ29sb3IgPSBtb2QoZmxvb3IoKGdsX0ZyYWdDb29yZC54ICsgb3JpZ2luLngpIC8g
dG1wKSArIGZsb29yKChzdXJmYWNlSGVpZ2h0IC0gZ2xfRnJhZ0Nvb3JkLnkgKyBvcmlnaW4ueSkg
LyB0bXApLCAyLjApID4gMC45OSBcbiIKLSAgICAgICAgIiAgICA/IGxpZ2h0Q29sb3IgOiBkYXJr
Q29sb3I7ICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIpOwotCi0gICAgLy8gTGV0IFdURjo6U3RyaW5n
IGJlIG91ciBwcmVwcm9jZXNzb3IKLSAgICB0bXAucmVwbGFjZSgiTElHSFRfQ09MT1IiLCBTdHJp
bmc6OmZvcm1hdCgidmVjNCglLjRmLCAlLjRmLCAlLjRmLCAxLjApIiwgbGlnaHRDb2xvci5yZWQo
KSAvIDI1NS4wLCBsaWdodENvbG9yLmdyZWVuKCkgLyAyNTUuMCwgbGlnaHRDb2xvci5ibHVlKCkg
LyAyNTUuMCkpOwotICAgIHRtcC5yZXBsYWNlKCJEQVJLX0NPTE9SIiwgU3RyaW5nOjpmb3JtYXQo
InZlYzQoJS40ZiwgJS40ZiwgJS40ZiwgMS4wKSIsIGRhcmtDb2xvci5yZWQoKSAvIDI1NS4wLCBk
YXJrQ29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBkYXJrQ29sb3IuYmx1ZSgpIC8gMjU1LjApKTsKLSAg
ICB0bXAucmVwbGFjZSgiR1JJRCIsIFN0cmluZzo6Zm9ybWF0KCIlLjNmIiwgKGZsb2F0KWNoZWNr
ZXJTaXplKSk7Ci0gICAgQ1N0cmluZyBjaGVja2VyRnJhZ21lbnRTaGFkZXJTdHJpbmcgPSB0bXAu
bGF0aW4xKCk7Ci0KLSAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlciA9IDA7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXIgPSAw
OworCisgICAgc3dpdGNoIChwcm9ncmFtKSB7CisgICAgY2FzZSBMYXllclByb2dyYW1SR0JBOgor
ICAgIGNhc2UgTGF5ZXJQcm9ncmFtQkdSQToKKyAgICBjYXNlIExheWVyTWFza1Byb2dyYW1SR0JB
OgorICAgIGNhc2UgTGF5ZXJNYXNrUHJvZ3JhbUJHUkE6CisgICAgICAgIHZlcnRleFNoYWRlciA9
IHZlcnRleFNoYWRlclN0cmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvclByb2dy
YW06CisgICAgICAgIHZlcnRleFNoYWRlciA9IGNvbG9yVmVydGV4U2hhZGVyU3RyaW5nOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE51bWJlck9mUHJvZ3JhbXM6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBtX2xheWVyUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkxheWVy
UHJvZ3JhbVNoYWRlclJHQkFdID0KLSAgICAgICAgbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hh
ZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZ1JHQkEpOwotICAgIGlmICghbV9sYXllclBy
b2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpMYXllclByb2dyYW1TaGFkZXJSR0JBXSkKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBSR0JBIGxheWVy
cyIpOwotCi0gICAgbV9sYXllclByb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpMYXllclByb2dyYW1T
aGFkZXJCR1JBXSA9Ci0gICAgICAgIGxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmlu
ZywgZnJhZ21lbnRTaGFkZXJTdHJpbmdCR1JBKTsKLSAgICBpZiAoIW1fbGF5ZXJQcm9ncmFtT2Jq
ZWN0W0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyQkdSQV0pCi0gICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgQkdSQSBsYXllcnMiKTsKLQot
ICAgIG1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRl
clJHQkFdID0KLSAgICAgICAgbG9hZFNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBm
cmFnbWVudFNoYWRlclN0cmluZ01hc2tSR0JBKTsKLSAgICBpZiAoIW1fbGF5ZXJNYXNrUHJvZ3Jh
bU9iamVjdFtMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlclJHQkFdKQotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIG1hc2sgcHJvZ3JhbSBmb3IgUkdCQSBsYXll
cnMiKTsKKyAgICBzd2l0Y2ggKHByb2dyYW0pIHsKKyAgICBjYXNlIExheWVyUHJvZ3JhbVJHQkE6
CisgICAgICAgIGZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJTdHJpbmdSR0JBOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIExheWVyUHJvZ3JhbUJHUkE6CisgICAgICAgIGZyYWdtZW50
U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJTdHJpbmdCR1JBOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExheWVyTWFza1Byb2dyYW1SR0JBOgorICAgICAgICBmcmFnbWVudFNoYWRlciA9IGZyYWdt
ZW50U2hhZGVyU3RyaW5nTWFza1JHQkE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJN
YXNrUHJvZ3JhbUJHUkE6CisgICAgICAgIGZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXJT
dHJpbmdNYXNrQkdSQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvclByb2dyYW06Cisg
ICAgICAgIGZyYWdtZW50U2hhZGVyID0gY29sb3JGcmFnbWVudFNoYWRlclN0cmluZzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJPZlByb2dyYW1zOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCi0gICAgbV9sYXllck1hc2tQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TGF5
ZXJQcm9ncmFtU2hhZGVyQkdSQV0gPQotICAgICAgICBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nTWFza0JHUkEpOwotICAgIGlmICghbV9s
YXllck1hc2tQcm9ncmFtT2JqZWN0W0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyQkdSQV0p
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgbWFzayBwcm9ncmFt
IGZvciBCR1JBIGxheWVycyIpOworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICFmcmFnbWVudFNo
YWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb2xvclByb2dyYW1PYmplY3Qg
PSBsb2FkU2hhZGVyUHJvZ3JhbShjb2xvclZlcnRleFNoYWRlclN0cmluZywgY29sb3JGcmFnbWVu
dFNoYWRlclN0cmluZyk7Ci0gICAgaWYgKCFtX2NvbG9yUHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBkZWJ1ZyBib3Jk
ZXJzIik7CisgICAgR0x1aW50IHByb2dyYW1PYmplY3QgPSBsb2FkU2hhZGVyUHJvZ3JhbSh2ZXJ0
ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBpZiAoIXByb2dyYW1PYmplY3QpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHByb2dyYW0gJXUiLCBwcm9ncmFtKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIG1fY2hlY2tlclByb2dyYW1PYmpl
Y3QgPSBsb2FkU2hhZGVyUHJvZ3JhbShjb2xvclZlcnRleFNoYWRlclN0cmluZywgY2hlY2tlckZy
YWdtZW50U2hhZGVyU3RyaW5nLmRhdGEoKSk7Ci0gICAgaWYgKCFtX2NoZWNrZXJQcm9ncmFtT2Jq
ZWN0KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0g
Zm9yIGNoZWNrZXJib2FyZCBwYXR0ZXJuIik7CisgICAgbV9wcm9ncmFtc1twcm9ncmFtXS5tX3By
b2dyYW0gPSBwcm9ncmFtT2JqZWN0OwogCi0gICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0
aW9uIGZvciB0aGUgcG9zaXRpb24gYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFt
cyB0bwotICAgIC8vIGF2b2lkIGJpbmRpbmcgcmUtYmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0
ZXMuCi0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKG1fcG9zaXRpb25Mb2NhdGlvbiwgImFf
cG9zaXRpb24iKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb24obV90ZXhDb29yZExvY2F0
aW9uLCAiYV90ZXhDb29yZCIpOworICAgIC8vIEJpbmRzIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFt
ZSB0byBhIGNvbW1vbiBsb2NhdGlvbiBhY3Jvc3MgYWxsIHByb2dyYW1zCisgICAgLy8gdXNlZCBi
eSB0aGUgY29tcG9zaXRvci4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdG8gYmluZCB0aGUgYXR0cmli
dXRlcyBvbmx5IG9uY2UKKyAgICAvLyBldmVuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gcHJvZ3Jh
bXMuCisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgR0xFUzJQcm9ncmFt
OjpQb3NpdGlvbkF0dHJpYnV0ZUluZGV4LCAiYV9wb3NpdGlvbiIpOworICAgIGdsQmluZEF0dHJp
YkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIEdMRVMyUHJvZ3JhbTo6VGV4Q29vcmRBdHRyaWJ1dGVJ
bmRleCwgImFfdGV4Q29vcmQiKTsKIAogICAgIGNoZWNrR0xFcnJvcigpOwogCi0gICAgLy8gUmUt
bGluayB0aGUgc2hhZGVycyB0byBnZXQgdGhlIG5ldyBhdHRyaWIgbG9jYXRpb24gdG8gdGFrZSBl
ZmZlY3QuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mTGF5ZXJQ
cm9ncmFtU2hhZGVyczsgKytpKSB7Ci0gICAgICAgIGdsTGlua1Byb2dyYW0obV9sYXllclByb2dy
YW1PYmplY3RbaV0pOwotICAgICAgICBnbExpbmtQcm9ncmFtKG1fbGF5ZXJNYXNrUHJvZ3JhbU9i
amVjdFtpXSk7Ci0gICAgfQotCi0gICAgZ2xMaW5rUHJvZ3JhbShtX2NvbG9yUHJvZ3JhbU9iamVj
dCk7Ci0gICAgZ2xMaW5rUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KTsKKyAgICAvLyBS
ZS1saW5rIHRoZSBzaGFkZXIgdG8gZ2V0IHRoZSBuZXcgYXR0cmliIGxvY2F0aW9uIHRvIHRha2Ug
ZWZmZWN0LgorICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbU9iamVjdCk7CiAKICAgICBjaGVja0dM
RXJyb3IoKTsKIAogICAgIC8vIEdldCBsb2NhdGlvbnMgb2YgdW5pZm9ybXMgZm9yIHRoZSBsYXll
ciBjb250ZW50IHNoYWRlciBwcm9ncmFtLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5ZXJE
YXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnM7ICsraSkgewotICAgICAgICBtX3NhbXBs
ZXJMb2NhdGlvbltpXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0
W2ldLCAic190ZXh0dXJlIik7Ci0gICAgICAgIG1fYWxwaGFMb2NhdGlvbltpXSA9IGdsR2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldLCAiYWxwaGEiKTsKLSAgICAgICAg
Z2xVc2VQcm9ncmFtKG1fbGF5ZXJQcm9ncmFtT2JqZWN0W2ldKTsKLSAgICAgICAgZ2xVbmlmb3Jt
MWkobV9zYW1wbGVyTG9jYXRpb25baV0sIDApOwotICAgICAgICBtX21hc2tTYW1wbGVyTG9jYXRp
b25baV0gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2xheWVyTWFza1Byb2dyYW1PYmplY3RbaV0s
ICJzX3RleHR1cmUiKTsKLSAgICAgICAgbV9tYXNrU2FtcGxlckxvY2F0aW9uTWFza1tpXSA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtpXSwgInNfbWFzayIp
OwotICAgICAgICBtX21hc2tBbHBoYUxvY2F0aW9uW2ldID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
bV9sYXllck1hc2tQcm9ncmFtT2JqZWN0W2ldLCAiYWxwaGEiKTsKLSAgICAgICAgZ2xVc2VQcm9n
cmFtKG1fbGF5ZXJNYXNrUHJvZ3JhbU9iamVjdFtpXSk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1f
bWFza1NhbXBsZXJMb2NhdGlvbltpXSwgMCk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1fbWFza1Nh
bXBsZXJMb2NhdGlvbk1hc2tbaV0sIDEpOworICAgIG1fcHJvZ3JhbXNbcHJvZ3JhbV0ubV9sb2Nh
dGlvbnNbR0xFUzJQcm9ncmFtOjpPcGFjaXR5VW5pZm9ybV0gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtT2JqZWN0LCAiYWxwaGEiKTsKKyAgICBzd2l0Y2ggKHByb2dyYW0pIHsKKyAgICBj
YXNlIExheWVyUHJvZ3JhbVJHQkE6CisgICAgY2FzZSBMYXllclByb2dyYW1CR1JBOiB7CisgICAg
ICAgIEdMaW50IHNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1P
YmplY3QsICJzX3RleHR1cmUiKTsKKyAgICAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW1PYmplY3Qp
OworICAgICAgICBnbFVuaWZvcm0xaShzYW1wbGVyTG9jYXRpb24sIDApOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBMYXllck1hc2tQcm9ncmFtUkdCQToKKyAgICBjYXNlIExheWVy
TWFza1Byb2dyYW1CR1JBOiB7CisgICAgICAgIEdMaW50IG1hc2tTYW1wbGVyTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2JqZWN0LCAic190ZXh0dXJlIik7CisgICAgICAg
IEdMaW50IG1hc2tTYW1wbGVyTG9jYXRpb25NYXNrID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbU9iamVjdCwgInNfbWFzayIpOworICAgICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbU9iamVj
dCk7CisgICAgICAgIGdsVW5pZm9ybTFpKG1hc2tTYW1wbGVyTG9jYXRpb24sIDApOworICAgICAg
ICBnbFVuaWZvcm0xaShtYXNrU2FtcGxlckxvY2F0aW9uTWFzaywgMSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIENvbG9yUHJvZ3JhbToKKyAgICAgICAgLy8gR2V0IGxvY2F0aW9u
cyBvZiB1bmlmb3JtcyBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KKyAgICAg
ICAgbV9jb2xvckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtT2Jq
ZWN0LCAiY29sb3IiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJPZlByb2dyYW1z
OgorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gR2V0IGxvY2F0aW9ucyBv
ZiB1bmlmb3JtcyBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KLSAgICBtX2Nv
bG9yQ29sb3JMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JQcm9ncmFtT2Jq
ZWN0LCAiY29sb3IiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIC8vIEdldCBsb2NhdGlv
bnMgb2YgdW5pZm9ybXMgZm9yIHRoZSBjaGVja2VyYm9hcmQgc2hhZGVyIHByb2dyYW0uCi0gICAg
bV9jaGVja2VyU2NhbGVMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY2hlY2tlclBy
b2dyYW1PYmplY3QsICJzY2FsZSIpOwotICAgIG1fY2hlY2tlck9yaWdpbkxvY2F0aW9uID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9jaGVja2VyUHJvZ3JhbU9iamVjdCwgIm9yaWdpbiIpOwotICAg
IG1fY2hlY2tlclN1cmZhY2VIZWlnaHRMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1f
Y2hlY2tlclByb2dyYW1PYmplY3QsICJzdXJmYWNlSGVpZ2h0Iik7Citjb25zdCBHTEVTMlByb2dy
YW0mIExheWVyUmVuZGVyZXI6OnVzZVByb2dyYW0oUHJvZ3JhbUluZGV4IGluZGV4KQoreworICAg
IEFTU0VSVChpbmRleCA8IE51bWJlck9mUHJvZ3JhbXMpOworICAgIGNvbnN0IEdMRVMyUHJvZ3Jh
bSYgcHJvZ3JhbSA9IG1fcHJvZ3JhbXNbaW5kZXhdOworICAgIGlmICghcHJvZ3JhbS5pc1ZhbGlk
KCkgJiYgIWNyZWF0ZVByb2dyYW0oaW5kZXgpKQorICAgICAgICByZXR1cm4gcHJvZ3JhbTsKIAot
ICAgIHJldHVybiB0cnVlOworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLm1fcHJvZ3JhbSk7CisK
KyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKworY29uc3QgR0xFUzJQcm9ncmFtJiBMYXllclJlbmRl
cmVyOjp1c2VMYXllclByb2dyYW0oTGF5ZXJEYXRhOjpMYXllclByb2dyYW0gbGF5ZXJQcm9ncmFt
LCBib29sIGlzTWFzayAvKiA9IGZhbHNlICovKQoreworICAgIGludCBwcm9ncmFtID0gbGF5ZXJQ
cm9ncmFtOworICAgIGlmIChpc01hc2spCisgICAgICAgIHByb2dyYW0gKz0gTWFza1Byb2dyYW1z
OworICAgIHJldHVybiB1c2VQcm9ncmFtKHN0YXRpY19jYXN0PFByb2dyYW1JbmRleD4ocHJvZ3Jh
bSkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyaW5nUmVzdWx0czo6YWRkRGlydHlSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCmluZGV4IDI0ZTc1NGRjMDEwMmM1
ZGM5OWYwZjAyN2ZhOTZkZDNiODY5ZDlkODUuLmYyZDA2MzRhNDU5MmJjNjEzZTUzN2VmNTg3ZGM0
MzgxZGQ0Mzk3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5oCkBAIC00MSw2ICs0MSw3IEBACiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybUdMRVMyQ29udGV4dC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMy
UHJvZ3JhbS5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdpb24uaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpA
QCAtMTAzLDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAvLyB0cmFuc2Zvcm0gaXMgdGhlIG1vZGVs
LXZpZXctcHJvamVjdCBtYXRyaXggdGhhdCBnb2VzIGFsbCB0aGUgd2F5IGZyb20gY29udGVudHMg
dG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMuCiAgICAgdm9pZCBjb21wb3NpdGVMYXll
cnMoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBy
b290TGF5ZXIpOwogICAgIHZvaWQgY29tcG9zaXRlQnVmZmVyKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JiBjb250ZW50cywgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqLCBib29sIGNvbnRlbnRzT3BhcXVlLCBmbG9hdCBvcGFjaXR5KTsK
LSAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgY29uc3QgRmxvYXRSZWN0JiBjb250ZW50cyk7CisgICAgdm9pZCBkcmF3Q29sb3IoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBjb25z
dCBDb2xvciYpOwogCiAgICAgLy8gS2VlcCB0cmFjayBvZiBsYXllcnMgdGhhdCBuZWVkIGNsZWFu
dXAgd2hlbiB0aGUgTGF5ZXJSZW5kZXJlciBpcyBkZXN0cm95ZWQKICAgICB2b2lkIGFkZExheWVy
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKQEAgLTE0OCwzNSArMTQ5LDM0IEBAIHByaXZhdGU6
CiAgICAgSW50UmVjdCB0b09wZW5HTFdpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OwogICAgIEludFJlY3QgdG9XZWJLaXRXaW5kb3dDb29yZGluYXRlcyhjb25zdCBGbG9h
dFJlY3QmKSBjb25zdDsKIAotICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9uKGludCBs
b2NhdGlvbiwgY29uc3QgY2hhciogYXR0cmliTmFtZSk7Ci0KICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogCi0gICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7CisgICAg
ZW51bSBQcm9ncmFtSW5kZXggeworICAgICAgICBMYXllclByb2dyYW1SR0JBID0gTGF5ZXJEYXRh
OjpMYXllclByb2dyYW1SR0JBLAorICAgICAgICBMYXllclByb2dyYW1CR1JBID0gTGF5ZXJEYXRh
OjpMYXllclByb2dyYW1CR1JBLAorCisgICAgICAgIE1hc2tQcm9ncmFtcywKKyAgICAgICAgTGF5
ZXJNYXNrUHJvZ3JhbVJHQkEgPSBNYXNrUHJvZ3JhbXMgKyBMYXllckRhdGE6OkxheWVyUHJvZ3Jh
bVJHQkEsCisgICAgICAgIExheWVyTWFza1Byb2dyYW1CR1JBID0gTWFza1Byb2dyYW1zICsgTGF5
ZXJEYXRhOjpMYXllclByb2dyYW1CR1JBLAorCisgICAgICAgIEludGVybmFsUHJvZ3JhbXMsCisg
ICAgICAgIENvbG9yUHJvZ3JhbSA9IEludGVybmFsUHJvZ3JhbXMsCiAKLSAgICAvLyBHTCBzaGFk
ZXIgcHJvZ3JhbSBvYmplY3QgSURzLgotICAgIHVuc2lnbmVkIG1fbGF5ZXJQcm9ncmFtT2JqZWN0
W0xheWVyRGF0YTo6TnVtYmVyT2ZMYXllclByb2dyYW1TaGFkZXJzXTsKLSAgICB1bnNpZ25lZCBt
X2xheWVyTWFza1Byb2dyYW1PYmplY3RbTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNo
YWRlcnNdOwotICAgIHVuc2lnbmVkIG1fY29sb3JQcm9ncmFtT2JqZWN0OwotICAgIHVuc2lnbmVk
IG1fY2hlY2tlclByb2dyYW1PYmplY3Q7CisgICAgICAgIE51bWJlck9mUHJvZ3JhbXMKKyAgICB9
OworCisgICAgYm9vbCBjcmVhdGVQcm9ncmFtKFByb2dyYW1JbmRleCk7CisgICAgY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mIHVzZVByb2dyYW0oUHJv
Z3JhbUluZGV4KTsKKyAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYgdXNlTGF5ZXJQcm9ncmFtKExheWVyRGF0YTo6TGF5ZXJQcm9ncmFtLCBib29s
IGlzTWFzayA9IGZhbHNlKTsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJQcm9ncmFtIG1fcHJvZ3JhbXNbTnVtYmVyT2ZQcm9ncmFtc107CiAKICAgICAvLyBTaGFk
ZXIgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBjb25zdCBpbnQgbV9wb3Np
dGlvbkxvY2F0aW9uOwotICAgIGNvbnN0IGludCBtX3RleENvb3JkTG9jYXRpb247CiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQogICAgIE93blB0cjxMYXllckZpbHRlclJlbmRlcmVyPiBtX2ZpbHRl
clJlbmRlcmVyOwogI2VuZGlmCiAKLSAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRh
OjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwotICAgIGludCBtX2FscGhhTG9jYXRpb25b
TGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwotICAgIGludCBtX21hc2tT
YW1wbGVyTG9jYXRpb25bTGF5ZXJEYXRhOjpOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnNdOwot
ICAgIGludCBtX21hc2tTYW1wbGVyTG9jYXRpb25NYXNrW0xheWVyRGF0YTo6TnVtYmVyT2ZMYXll
clByb2dyYW1TaGFkZXJzXTsKLSAgICBpbnQgbV9tYXNrQWxwaGFMb2NhdGlvbltMYXllckRhdGE6
Ok51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVyc107Ci0KICAgICBpbnQgbV9jb2xvckNvbG9yTG9j
YXRpb247Ci0gICAgaW50IG1fY2hlY2tlclNjYWxlTG9jYXRpb247Ci0gICAgaW50IG1fY2hlY2tl
ck9yaWdpbkxvY2F0aW9uOwotICAgIGludCBtX2NoZWNrZXJTdXJmYWNlSGVpZ2h0TG9jYXRpb247
CiAKICAgICAvLyBDdXJyZW50IGRyYXcgY29uZmlndXJhdGlvbi4KICAgICBkb3VibGUgbV9zY2Fs
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAKaW5kZXggZGVhMWRkMDAy
ZGFhNTY2NGIwZGJlNjhhMDJkZGRjMzAyOTgyZmM4ZC4uOTEyY2JiYWM1ZTgyNGMxZmRmMDIxZDkz
OGU4NWFiYzdkMGFlZmNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5j
cHAKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyU3VyZmFjZTo6ZW5zdXJlVGV4
dHVyZSgpCiAgICAgaWYgKCFtX3RleHR1cmUpCiAgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPmNyZWF0ZVRleHR1cmUoKTsKIAotICAgIHJldHVybiBt
X3RleHR1cmUtPnByb3RlY3QobV9zaXplKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlLT5wcm90ZWN0
KG1fc2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQpOwog
fQogCiB2b2lkIExheWVyUmVuZGVyZXJTdXJmYWNlOjpyZWxlYXNlVGV4dHVyZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGls
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZS5jcHAKaW5kZXggOWViNmY4MzZiMzhhNGQ3NzZhMTg0MGYxNzNkNjhjMjQ3NmQ5ZTA4Yy4u
OTJiNDRmZDUxMWU0ZjA1NDk5MzYyMzc5NWE2ZWJhYTJiMDU5MmVmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxl
LmNwcApAQCAtMjksNiArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBMYXllclRpbGU6Okxh
eWVyVGlsZSgpCiAgICAgOiBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3Zpc2libGUo
ZmFsc2UpCisgICAgLCBtX25lZWRzUmVuZGVyKGZhbHNlKQogewogfQogCkBAIC0zOCw3ICszOSw3
IEBAIExheWVyVGlsZTo6fkxheWVyVGlsZSgpCiAgICAgc2V0VmlzaWJsZShmYWxzZSk7CiB9CiAK
LXZvaWQgTGF5ZXJUaWxlOjpzZXRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBib29sIGlzT3Bh
cXVlKQordm9pZCBMYXllclRpbGU6OnNldENvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RUeXBl
JiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgsIGJvb2wgaXNPcGFxdWUpCiB7CiAgICAgc2V0VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZCgpLT50ZXh0dXJlRm9yVGlsZWRDb250ZW50cyhjb250ZW50cywgdGlsZVJlY3Qs
IGluZGV4LCBpc09wYXF1ZSkpOwogfQpAQCAtNDgsNyArNDksNyBAQCB2b2lkIExheWVyVGlsZTo6
c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBzZXRUZXh0dXJlKHRl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVGb3JDb2xvcihjb2xvcikpOwog
fQogCi12b2lkIExheWVyVGlsZTo6dXBkYXRlQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRl
bnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBi
b29sIGlzT3BhcXVlKQordm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IFRleHR1
cmU6Okhvc3RUeXBlJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJ
bnRSZWN0JiB0aWxlUmVjdCwgYm9vbCBpc09wYXF1ZSkKIHsKICAgICBzZXRUZXh0dXJlKHRleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZSwgY29u
dGVudHMsIGRpcnR5UmVjdCwgdGlsZVJlY3QsIGlzT3BhcXVlKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaApp
bmRleCBjZTk3ZDIxZTllMmEwZTZiZGNmZWY3NTllYzZkYWY2NmYzZTVhNWI5Li5jOGI3OGY4MWE0
ZjRjYTdhMzcxNGUyOTI5N2UwZDUxZTYyODJlODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKQEAgLTI1LDgg
KzI1LDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotY2xhc3MgU2tCaXRtYXA7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CkBAIC00OCw5ICs0Niw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAm
JiBtX3RleHR1cmUtPmhhc1RleHR1cmUoKTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50cyhjb25z
dCBTa0JpdG1hcCYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUaWxl
SW5kZXgmLCBib29sIGlzT3BhcXVlKTsKKyAgICB2b2lkIHNldENvbnRlbnRzKGNvbnN0IFRleHR1
cmU6Okhvc3RUeXBlJiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRp
bGVJbmRleCYsIGJvb2wgaXNPcGFxdWUpOwogICAgIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGNv
bnN0IENvbG9yJik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29u
dGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qs
IGJvb2wgaXNPcGFxdWUpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgVGV4dHVyZTo6
SG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0LCBib29sIGlzT3BhcXVlKTsKICAgICB2b2lkIGRpc2NhcmRDb250ZW50cygp
OwogCiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dHVyZSBpcyBhbiBhY2N1cmF0ZSBwcmV2aWV3IG9m
IHRoaXMgbGF5ZXIsIGJ1dCBhIG1vcmUKQEAgLTU4LDYgKzU2LDEzIEBAIHB1YmxpYzoKICAgICAv
LyB6b29tIGxldmVsIGNoYW5nZXMuCiAgICAgdm9pZCBzZXRDb250ZW50c0RpcnR5KCkgeyBtX2Nv
bnRlbnRzRGlydHkgPSB0cnVlOyB9CiAKKyAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9lc05vdE5l
ZWRSZW5kZXIgPSAwLCBOZWVkc1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07CisgICAg
UmVuZGVyU3RhdGUgcmVuZGVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJTdGF0ZT4obV9uZWVkc1JlbmRlcik7IH0KKyAgICBib29sIG5lZWRzUmVuZGVyKCkgeyByZXR1
cm4gbV9uZWVkc1JlbmRlciA9PSBOZWVkc1JlbmRlcjsgfQorICAgIHZvaWQgc2V0TmVlZHNSZW5k
ZXIoYm9vbCBuZWVkc1JlbmRlcikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7IH0KKyAg
ICB2b2lkIHNldFJlbmRlclBlbmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQZW5kaW5n
OyB9CisgICAgdm9pZCBzZXRSZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9lc05vdE5l
ZWRSZW5kZXI7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHNldFRleHR1cmUoUGFzc1JlZlB0cjxU
ZXh0dXJlPik7CiAKQEAgLTY1LDYgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VGV4dHVy
ZT4gbV90ZXh0dXJlOwogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5IDogMTsKICAgICBib29sIG1f
dmlzaWJsZSA6IDE7CisgICAgdW5zaWduZWQgbV9uZWVkc1JlbmRlciA6IDI7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyVGlsZUluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyVGlsZUluZGV4LmgKaW5kZXggNTc0ZTM3MmQzNzA3NDc5OWY2M2JmNGQ5MmQzYTIw
M2M0ODI5MmFlOC4uNGRmMDA4NzI4NWJkY2QxZjgxN2ExYzgzMmQyNjM0OWIxY2E1ZTQwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlSW5kZXguaApAQCAtNjYsNyArNjYsNyBAQCBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFRpbGVJbmRleCYgYSwgY29uc3QgVGlsZUluZGV4JiBiKQogbmFtZXNwYWNl
IFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8V2ViQ29yZTo6VGlsZUluZGV4PiB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6VGlsZUluZGV4JiBrZXkp
IHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS5pKCksIGtleS5qKCkpOyB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6VGlsZUluZGV4JiBrZXkpIHsgcmV0dXJuIGludEhh
c2goKHN0YXRpY19jYXN0PHVpbnQ2NF90PihrZXkuaSgpKSA8PCAzMiB8IGtleS5qKCkpKTsgfQog
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlRpbGVJbmRleCYgYSwgY29uc3Qg
V2ViQ29yZTo6VGlsZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRp
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJUaWxlci5jcHAKaW5kZXggMmJkOTc3Mzg0ZDU4N2FjMTA0YjZmMTEwMjZiNDYyODIzZmI4ZGM5
Mi4uZmQxMjEwOWJmM2E1Y2M1MzRjMzQ5MzRkYzk2YTk0YjY0NGIzMDgxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiwyOCArMjYsMjgg
QEAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJN
ZXNzYWdlLmgiCiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNpbmNsdWRlICJOYXRp
dmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5o
IgogCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+CiAjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2NyZWVuLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKK3VzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFt
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHRoZSB2
aWV3cG9ydCBhcyB1c2VkIGluIHRleHR1cmUgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMKIC8vIHNs
aWdodGx5IGxhcmdlciBzbyB0ZXh0dXJlcyBhcmUgdXBsb2FkZWQgYmVmb3JlIGJlY29taW5nIHJl
YWxseSB2aXNpYmxlLgotY29uc3QgZmxvYXQgdmlld3BvcnRJbmZsYXRpb25GYWN0b3IgPSAxLjFm
OwotCi0vLyBUaGUgdGlsZU11bHRpcGxpZXIgaW5kaWNhdGVzIGhvdyBtYW55IHRpbGVzIHdpbGwg
Zml0IGluIHRoZSBsYXJnZXN0IGRpbWVuc2lvbgotLy8gb2YgdGhlIHNjcmVlbiwgaWYgZHJhd24g
dXNpbmcgaWRlbnRpdHkgdHJhbnNmb3JtLgotLy8gV2UgdXNlIGhhbGYgdGhlIHNjcmVlbiBzaXpl
IGFzIHRpbGUgc2l6ZSwgdG8gcmVkdWNlIHRoZSB0ZXh0dXJlIHVwbG9hZCB0aW1lCi0vLyBmb3Ig
c21hbGwgcmVwYWludCByZWN0cy4gQ29tcGFyZWQgdG8gdXNpbmcgc2NyZWVuIHNpemUgZGlyZWN0
bHksIHRoaXMgc2hvdWxkCi0vLyBtYWtlIG1vc3Qgc21hbGwgaW52YWxpZGF0aW9ucyAxNnggZmFz
dGVyLCB1bmxlc3MgdGhleSdyZSB1bmZvcnR1bmF0ZSBlbm91Z2gKLS8vIHRvIGludGVyc2VjdCB0
d28gb3IgbW9yZSB0aWxlcywgd2hlcmUgaXQgd291bGQgYmUgOHgtMXggZmFzdGVyLgotY29uc3Qg
aW50IHRpbGVNdWx0aXBsaWVyID0gNDsKKy8vIEluZmxhdGlvbiBpcyBncmVhdGVyIGluIFkgZGly
ZWN0aW9uIChvbmUgc2NyZWVuZnVsIGluIGVpdGhlciBkaXJlY3Rpb24pIHNpbmNlCisvLyBzY3Jv
bGxpbmcgdmVydGljYWxseSBpcyBtb3JlIGNvbW1vbiwgYW5kIGVhc2lseSByZWFjaGVzIGhpZ2hl
ciB2ZWxvY2l0eSwgdGhhbgorLy8gc2Nyb2xsaW5nIGhvcml6b250YWxseS4KKy8vIFRoZSB2aWV3
cG9ydEluZmxhdGlvbiBpcyBleHByZXNzZWQgYXMgYSBmcmFjdGlvbiB0byBtdWx0aXBseSB0aGUg
dmlld3BvcnQgYnksIGFuZAorLy8gaXQgaXMgY2VudGVyZWQuCisvLyBBIGhlaWdodCBvZiAzIG1l
YW5zIHRvIGNvbnNpZGVyIG9uZSBzY3JlZW5mdWwgYWJvdmUgYW5kIG9uZSBzY3JlZW5mdWwgYmVs
b3cgdGhlCisvLyBjdXJyZW50IHZpZXdwb3J0IGFzIHZpc2libGUuCitjb25zdCBGbG9hdFNpemUg
dmlld3BvcnRJbmZsYXRpb24oMS4yZiwgMy4wZik7CiAKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybVBv
aW50KGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9h
dCogcmVzdWx0KQogewpAQCAtNjIsMTggKzYyLDE3IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybVBv
aW50KGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9h
CiAKIHN0YXRpYyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiB7Ci0gICAgc3RhdGljIEludFNp
emUgc2NyZWVuU2l6ZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U2NyZWVuOjpw
cmltYXJ5U2NyZWVuKCktPm5hdGl2ZVNpemUoKTsKLSAgICBzdGF0aWMgaW50IGRpbSA9IG1heChz
Y3JlZW5TaXplLndpZHRoKCksIHNjcmVlblNpemUuaGVpZ2h0KCkpIC8gdGlsZU11bHRpcGxpZXI7
Ci0gICAgcmV0dXJuIEludFNpemUoZGltLCBkaW0pOworICAgIHN0YXRpYyBJbnRTaXplIHNpemUo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT50aWxlU2l6ZSgpKTsK
KyAgICByZXR1cm4gc2l6ZTsKIH0KIAogTGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcihMYXllcldlYktp
dFRocmVhZCogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQotICAgICwgbV90aWxpbmdEaXNh
YmxlZChmYWxzZSkKKyAgICAsIG1fbmVlZHNSZW5kZXJDb3VudCgwKQorICAgICwgbV9uZWVkc0Jh
Y2tpbmcoZmFsc2UpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbGVT
aXplKGRlZmF1bHRUaWxlU2l6ZSgpKQogICAgICwgbV9jbGVhclRleHR1cmVKb2JzKGZhbHNlKQot
ICAgICwgbV9oYXNNaXNzaW5nVGV4dHVyZXMoZmFsc2UpCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUo
MC4wKQogewogICAgIHJlZigpOyAvLyBUaGlzIHJlZigpIGlzIG1hdGNoZWQgYnkgYSBkZXJlZiBp
biBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKCk7CkBAIC0xMTUsMTMgKzExNCw5IEBA
IHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNj
YWxlKQogewogICAgIHVwZGF0ZVRpbGVTaXplKCk7CiAKLSAgICBIYXNoU2V0PFRpbGVJbmRleD4g
cmVuZGVySm9iczsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlckpv
YnNNdXRleCk7Ci0gICAgICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmIG1fcmVuZGVySm9icy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlbmRlckpvYnMgPSBtX3Jl
bmRlckpvYnM7Ci0gICAgfQorICAgIC8vIENoZWNrIGlmIHVwZGF0ZSBpcyBuZWVkZWQKKyAgICBp
ZiAoIW1fY29udGVudHNEaXJ0eSAmJiAhbmVlZHNSZW5kZXIoKSkKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiBkcmF3aW5nIGNvbnRlbnRzIGF0IGEgaGlnaGVy
IHJlc29sdXRpb24gZm9yIHNjYWxlCiAgICAgLy8gaW52YXJpYW50IGxheWVycy4KQEAgLTE2OCw1
OSArMTYzLDYgQEAgdm9pZCBMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRl
ZChkb3VibGUgc2NhbGUpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgLy8gSWYgdGhlIG5ldyBz
aXplIGlzIGVtcHR5LCBjbGVhciB0aGUgdmlzaWJpbGl0eSBqb2JzCi0gICAgaWYgKHJlcXVpcmVk
VGV4dHVyZVNpemUuaXNFbXB0eSgpICYmIHJlbmRlckpvYnMuc2l6ZSgpKSB7Ci0gICAgICAgIHJl
bmRlckpvYnMuY2xlYXIoKTsKLQotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9yZW5kZXJK
b2JzTXV0ZXgpOwotICAgICAgICBtX3JlbmRlckpvYnMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBuZWVkIGRpc3BsYXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNw
bGF5ZWQsIGR1ZSB0byB0ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYg
d2UncmUgcmUtcmVuZGVyaW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0
dXJlIGpvYnMuCi0gICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5
UmVjdCA9PSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQot
ICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7Ci0KLSAgICBIYXNoU2V0PFRpbGVJbmRleD4gZmlu
aXNoZWRKb2JzOwotICAgIGlmICghcmVuZGVySm9icy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYg
KEltYWdlKiBpbWFnZSA9IG1fbGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAgIGJvb2wg
aXNPcGFxdWUgPSBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCk7Ci0gICAgICAg
ICAgICBpZiAoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKSkgewotICAgICAgICAgICAgICAgIFNrQml0bWFwIGJpdG1hcCA9IFNr
Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSk7Ci0gICAgICAgICAgICAgICAgYWRkVGV4dHVy
ZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhiaXRtYXAsIGlzT3BhcXVlKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBzdGls
bCBiZSBzb21lIHBlbmRpbmcgcmVuZGVyIGpvYnMgZHVlIHRvIHZpc2liaWxpdHkgY2hhbmdlcy4K
LSAgICAgICAgICAgIGZvciAoSGFzaFNldDxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHJlbmRl
ckpvYnMuYmVnaW4oKTsgaXQgIT0gcmVuZGVySm9icy5lbmQoKTsgKytpdCkgewotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGpvYiBoYXMgYmVl
biBjYW5jZWxsZWQuCi0gICAgICAgICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Jl
bmRlckpvYnNNdXRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9yZW5kZXJKb2JzLmNv
bnRhaW5zKCppdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9yZW5kZXJKb2JzLnJlbW92ZSgqaXQpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZSgqaXQsIHJl
cXVpcmVkVGV4dHVyZVNpemUpOwotICAgICAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYm9v
bCBpc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAg
ICAgICAgICAgICAgICBTa0JpdG1hcCBiaXRtYXAgPSBtX2xheWVyLT5wYWludENvbnRlbnRzKHRp
bGVSZWN0LCBzY2FsZSwgJmlzU29saWRDb2xvciwgJmNvbG9yKTsKLSAgICAgICAgICAgICAgICAv
LyBiaXRtYXAgY2FuIGJlIG51bGwgaGVyZS4gTWFrZSByZXF1aXJlZFRleHR1cmVTaXplIGVtcHR5
IHNvIHRoYXQgd2UKLSAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCB0cnkgdG8gdXBkYXRlIGFu
ZCBkcmF3IHRoZSBsYXllci4KLSAgICAgICAgICAgICAgICBpZiAoIWJpdG1hcC5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTb2xpZENvbG9yKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50c1RvQ29sb3IoY29s
b3IsICppdCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OnVwZGF0ZUNvbnRlbnRzKGJpdG1hcCwgdGls
ZVJlY3QsIG1fbGF5ZXItPmlzT3BhcXVlKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBmaW5pc2hlZEpvYnMuYWRkKCppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KICAgICBib29sIGRpZFJlc2l6ZSA9IGZhbHNlOwogICAgIEludFJlY3QgcHJl
dmlvdXNUZXh0dXJlUmVjdChJbnRQb2ludDo6emVybygpLCBtX3BlbmRpbmdUZXh0dXJlU2l6ZSk7
CiAgICAgaWYgKG1fcGVuZGluZ1RleHR1cmVTaXplICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpIHsK
QEAgLTIyOCw1MCArMTcwLDU3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRl
bnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9
IHJlcXVpcmVkVGV4dHVyZVNpemU7CiAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6
cmVzaXplQ29udGVudHMobV9wZW5kaW5nVGV4dHVyZVNpemUpKTsKICAgICB9Ci0gICAgbV9jb250
ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIAotICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47CisgICAgSW50UmVjdCByZWN0Rm9yT25lVGlsZShJbnRQb2ludDo6
emVybygpLCB0aWxlU2l6ZSgpKTsKKyAgICBib29sIHdhc09uZVRpbGUgPSByZWN0Rm9yT25lVGls
ZS5jb250YWlucyhwcmV2aW91c1RleHR1cmVSZWN0KTsKKyAgICBib29sIGlzT25lVGlsZSA9IHJl
Y3RGb3JPbmVUaWxlLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9wZW5kaW5n
VGV4dHVyZVNpemUpKTsKIAotICAgIGlmIChJbWFnZSogaW1hZ2UgPSBtX2xheWVyLT5jb250ZW50
cygpKSB7Ci0gICAgICAgIGJvb2wgaXNPcGFxdWUgPSBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25U
b0JlT3BhcXVlKCk7Ci0gICAgICAgIC8vIE5vIHBvaW50IGluIHRpbGluZyBhbiBpbWFnZSBsYXll
ciwgdGhlIGltYWdlIGlzIGFscmVhZHkgc3RvcmVkIGFzIGFuIFNrQml0bWFwCi0gICAgICAgIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gbV9sYXllci0+Y29udGVudHMoKS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKG5hdGl2ZUltYWdlKSB7Ci0gICAgICAg
ICAgICBTa0JpdG1hcCBiaXRtYXAgPSBTa0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCkpOwot
ICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhiaXRtYXAs
IGlzT3BhcXVlKSk7CisgICAgSGFzaFNldDxUaWxlSW5kZXg+IHJlbmRlckpvYnM7CisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKKworICAgICAgICAvLyBB
ZGQgcHJlZmlsbCBqb2JzCisgICAgICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgSW50UmVjdCByZWN0ID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjpp
bnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKTsKKyAgICAgICAgICAgIHJlY3QuaW50
ZXJzZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICBUaWxlSW5kZXggYmVnaW4gPSBpbmRleE9m
VGlsZShyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICAgICAgVGlsZUluZGV4IGVuZCA9
IGluZGV4T2ZUaWxlKHJlY3QubWF4WE1heFlDb3JuZXIoKSArIHRpbGVTaXplKCkgLSBJbnRTaXpl
KDEsIDEpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luLmkoKTsgaSA8IGVu
ZC5pKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJlZ2luLmoo
KTsgaiA8IGVuZC5qKCk7ICsraikKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQo
VGlsZUluZGV4KGksIGopKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW50UG9pbnQgdG9wTGVmdCA9IGRpcnR5UmVjdC5taW5YTWluWUNv
cm5lcigpOwotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0ID0gZGlydHlSZWN0Lm1heFhNYXhZQ29y
bmVyKCk7IC8vIFRoaXMgaXMgYWN0dWFsbHkgYSBwaXhlbCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0
IG9mIHRoZSBkaXJ0eVJlY3QuCiAKLSAgICBJbnRTaXplIHRpbGVNYXhpbXVtU2l6ZSh0aWxlU2l6
ZSgpKTsKLSAgICBJbnRSZWN0IHJlY3RGb3JPbmVUaWxlKEludFBvaW50Ojp6ZXJvKCksIHRpbGVN
YXhpbXVtU2l6ZSk7Ci0gICAgYm9vbCB3YXNPbmVUaWxlID0gcmVjdEZvck9uZVRpbGUuY29udGFp
bnMocHJldmlvdXNUZXh0dXJlUmVjdCk7Ci0gICAgYm9vbCBpc09uZVRpbGUgPSByZWN0Rm9yT25l
VGlsZS5jb250YWlucyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fcGVuZGluZ1RleHR1cmVT
aXplKSk7Ci0gICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKGluZGV4T2ZUaWxlKHRv
cExlZnQpKTsKLSAgICBJbnRSZWN0IHRpbGVSZWN0OwotICAgIGZvciAodGlsZVJlY3Quc2V0WChv
cmlnaW4ueCgpKTsgdGlsZVJlY3QueCgpIDwgYm90dG9tUmlnaHQueCgpOyB0aWxlUmVjdC5zZXRY
KHRpbGVSZWN0LngoKSArIHRpbGVNYXhpbXVtU2l6ZS53aWR0aCgpKSkgewotICAgICAgICBmb3Ig
KHRpbGVSZWN0LnNldFkob3JpZ2luLnkoKSk7IHRpbGVSZWN0LnkoKSA8IGJvdHRvbVJpZ2h0Lnko
KTsgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55KCkgKyB0aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkp
KSB7Ci0gICAgICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aChtaW4ocmVxdWlyZWRUZXh0dXJlU2l6
ZS53aWR0aCgpIC0gdGlsZVJlY3QueCgpLCB0aWxlTWF4aW11bVNpemUud2lkdGgoKSkpOwotICAg
ICAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1pbihyZXF1aXJlZFRleHR1cmVTaXplLmhlaWdo
dCgpIC0gdGlsZVJlY3QueSgpLCB0aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkpKTsKLQotICAgICAg
ICAgICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChkaXJ0eVJlY3QpOwotICAgICAgICAgICAgbG9j
YWxEaXJ0eVJlY3QuaW50ZXJzZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgIGlmIChsb2NhbERp
cnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RpbGVzLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAg
IFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKKyAgICAgICAgICAgIExheWVyVGlsZSogdGls
ZSA9ICgqaXQpLnZhbHVlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JU
aWxlKGluZGV4LCByZXF1aXJlZFRleHR1cmVTaXplKTsKKyAgICAgICAgICAgIGlmICh0aWxlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFRp
bGVJbmRleCBpbmRleCA9IGluZGV4T2ZUaWxlKHRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKKyAgICAgICAgICAgICAgICB0aWxlLT5z
ZXRSZW5kZXJQZW5kaW5nKCk7CisgICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKKyAgICAg
ICAgICAgICAgICByZW5kZXJKb2JzLmFkZChpbmRleCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1fY29udGVudHNEaXJ0eSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgbG9jYWxEaXJ0eVJl
Y3QoZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICBsb2NhbERpcnR5UmVjdC5pbnRlcnNlY3Qo
dGlsZVJlY3QpOworICAgICAgICAgICAgICAgIGlmIChsb2NhbERpcnR5UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBJZiB3ZSBh
bHJlYWR5IGRpZCB0aGlzIGFzIHBhcnQgb2Ygb25lIG9mIHRoZSByZW5kZXIgam9icyBkdWUgdG8K
LSAgICAgICAgICAgIC8vIHZpc2liaWxpdHkgY2hhbmdlcywgZG9uJ3QgcmVuZGVyIHRoYXQgdGls
ZSBhZ2Fpbi4KLSAgICAgICAgICAgIGlmIChmaW5pc2hlZEpvYnMuY29udGFpbnMoaW5kZXgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIC8vIFJlbmRlciBvbmx5
IHZpc2libGUgdGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB0
aGV5J3JlIG5ldmVyIGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAvLyB2aXNpYmxlLiBXb3Jr
YXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZlcnkgZmFzdCBvcGVyYXRp
b24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4gcmVmJ2luZyB0aGUgbWFz
ayBpbWFnZSkuCisgICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlzaWJsZSgpIHx8IG1fbGF5
ZXItPmlzTWFzaygpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckpvYnMuYWRkKGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUgdGlsZSBpZiBmb3Igc29t
ZSByZWFzb24gKGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBhbHJlYWR5IGFkZGVkLgor
ICAgICAgICAgICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICghc2hvdWxkUGVyZm9ybVJl
bmRlckpvYihpbmRleCwgIWlzWm9vbUpvYikpIHsKICAgICAgICAgICAgICAgICAvLyBBdm9pZCBj
aGVja2VyYm9hcmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVuCiAgICAgICAg
ICAgICAgICAgLy8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8gY2hhbmdlIGFw
cGVhcmFuY2UsIGZvcgogICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRvIGFzcGVjdCBy
YXRpbyBjaGFuZ2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKQEAgLTI4NSw0NiArMjM0LDUwIEBAIHZv
aWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxl
KQogICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRD
b250ZW50cyh0aWxlUmVjdCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgICAgIC8vIEp1c3QgaW4gY2FzZSBhIG5ldyBqb2IgZm9yIHRoaXMgdGls
ZSBoYXMganVzdCBiZWVuIGluc2VydGVkIGJ5IGNvbXBvc2l0aW5nIHRocmVhZC4KLSAgICAgICAg
ICAgIHJlbW92ZVJlbmRlckpvYihpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBh
cmUgYWx3YXlzIGRyYXdpbmcgd2hvbGUgdGlsZXMgYXQgdGhlIG1vbWVudCwgYmVjYXVzZQotICAg
ICAgICAgICAgLy8gd2UgY3VycmVudGx5IGNhbid0IGtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFydCBv
ZiBhIHRpbGUgaXMKLSAgICAgICAgICAgIC8vIHJlbmRlcmVkIGFuZCB3aGljaCBpcyBub3QuIFNl
bmRpbmcgb25seSBhIHN1YnJlY3RhbmdsZSBvZiBhIHRpbGUKLSAgICAgICAgICAgIC8vIHRvIHRo
ZSBjb21wb3NpdGluZyB0aHJlYWQgbWlnaHQgY2F1c2UgaXQgdG8gYmUgdXBsb2FkZWQgdXNpbmcK
LSAgICAgICAgICAgIC8vIGdsVGV4SW1hZ2UsIGlmIHRoZSB0ZXh0dXJlIHdhcyBwcmV2aW91c2x5
IGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUuCi0gICAgICAgICAgICAvLyBUaGUgcmVzdWx0IHdvdWxk
IGJlIHRoYXQgYSBzdWJyZWN0YW5nbGUgb2YgdGhlIHRpbGUgd2FzIHN0cmV0Y2hlZAotICAgICAg
ICAgICAgLy8gdG8gZml0IHRoZSB0aWxlIGdlb21ldHJ5LCBhcHBlYXJpbmcgYXMgYSBnbGFyaW5n
IG1pc3JlbmRlcmluZyBvZgotICAgICAgICAgICAgLy8gdGhlIHdlYiBwYWdlLgotICAgICAgICAg
ICAgYm9vbCBpc1NvbGlkQ29sb3IgPSBmYWxzZTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwot
ICAgICAgICAgICAgU2tCaXRtYXAgYml0bWFwID0gbV9sYXllci0+cGFpbnRDb250ZW50cyh0aWxl
UmVjdCwgc2NhbGUsICZpc1NvbGlkQ29sb3IsICZjb2xvcik7Ci0gICAgICAgICAgICAvLyBiaXRt
YXAgY2FuIGJlIG51bGwgaGVyZS4gTWFrZSByZXF1aXJlZFRleHR1cmVTaXplIGVtcHR5IHNvIHRo
YXQgd2UKLSAgICAgICAgICAgIC8vIHdpbGwgbm90IHRyeSB0byB1cGRhdGUgYW5kIGRyYXcgdGhl
IGxheWVyLgotICAgICAgICAgICAgaWYgKCFiaXRtYXAuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNTb2xpZENvbG9yKQotICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9i
KFRleHR1cmVKb2I6OnNldENvbnRlbnRzVG9Db2xvcihjb2xvciwgaW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpv
Yjo6dXBkYXRlQ29udGVudHMoYml0bWFwLCB0aWxlUmVjdCwgbV9sYXllci0+aXNPcGFxdWUoKSkp
OworICAgIC8vIElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRv
IGJlIGRpc3BsYXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNvbWluZyAwIHggMCwKKyAgICAv
LyBvciBpZiB3ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRoaW5nIGFueXdheSwgY2xlYXIg
b2xkIHRleHR1cmUgam9icy4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc0VtcHR5KCkg
fHwgZGlydHlSZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0dXJl
U2l6ZSkpCisgICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKKworICAgIGlmIChyZW5kZXJKb2Jz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1f
bGF5ZXItPmNvbnRlbnRzKCkpIHsKKyAgICAgICAgLy8gSWYgd2UgbmVlZCBiYWNraW5nLCB3ZSBo
YXZlIG5vIGNob2ljZSBidXQgdG8gZW5mb3JjZSB0aGUgdGlsZSBzaXplLCB3aGljaCBjb3VsZCBj
YXVzZSBjbGlwcGluZy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBkb24ndCBjbGlwIC0gaW5jbHVk
ZSB0aGUgd2hvbGUgaW1hZ2UuCisgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IG1fbmVlZHNC
YWNraW5nID8gdGlsZVNpemUoKSA6IGltYWdlLT5zaXplKCk7CisgICAgICAgIGlmIChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVmZmVyKGJ1
ZmZlclNpemUpKSB7CisgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdChJbnRQb2ludDo6
emVybygpLCBpbWFnZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnBhaW50Q29udGVu
dHMoYnVmZmVyLCBjb250ZW50c1JlY3QsIHNjYWxlKTsKKworICAgICAgICAgICAgYm9vbCBpc09w
YXF1ZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisg
ICAgICAgICAgICAgICAgaXNPcGFxdWUgPSAhc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihpbWFn
ZSktPmN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRl
eHR1cmVKb2I6OnNldENvbnRlbnRzKGJ1ZmZlciwgY29udGVudHNSZWN0LCBpc09wYXF1ZSkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAg
ICAgICBmb3IgKEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSByZW5kZXJKb2JzLmJl
Z2luKCk7IGl0ICE9IHJlbmRlckpvYnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogYnVmZmVyID0gY3JlYXRlQnVm
ZmVyKHRpbGVTaXplKCkpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJl
Y3RGb3JUaWxlKCppdCwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CisgICAgICAgICAgICAgICAgbV9s
YXllci0+cGFpbnRDb250ZW50cyhidWZmZXIsIHRpbGVSZWN0LCBzY2FsZSk7CisgICAgICAgICAg
ICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjp1cGRhdGVDb250ZW50cyhidWZmZXIsIHRp
bGVSZWN0LCBtX2xheWVyLT5pc09wYXF1ZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICBtX2RpcnR5UmVjdCA9
IEZsb2F0UmVjdCgpOwogfQogCi1ib29sIExheWVyVGlsZXI6OnNob3VsZFBlcmZvcm1SZW5kZXJK
b2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgYm9vbCBhbGxvd1ByZWZpbGwpCitCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogTGF5ZXJUaWxlcjo6Y3JlYXRlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgLy8gVGlsZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRs
eSB2aXNpYmxlIG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgbWF5IHN0aWxsCi0gICAgLy8gZGVz
ZXJ2ZSB0byBiZSByZW5kZXJlZCBpZiB0aGV5IHNob3VsZCBiZSBwcmVmaWxsZWQuLi4KLSAgICBp
ZiAoYWxsb3dQcmVmaWxsICYmIHNob3VsZFByZWZpbGxUaWxlKGluZGV4KSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBPciBpZiB0aGV5IGFyZSB2aXNpYmxlIGFjY29yZGluZyB0byB0
aGUgc3RhdGUgdGhhdCdzIGFib3V0IHRvIGJlCi0gICAgLy8gY29tbWl0dGVkLiBXZSBkbyBhIHZp
c2liaWxpdHkgdGVzdCB1c2luZyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gc3RhdGUuCi0gICAgSW50
UmVjdCBjb250ZW50UmVjdCA9IHJlY3RGb3JUaWxlKGluZGV4LCBtX3BlbmRpbmdUZXh0dXJlU2l6
ZSk7Ci0gICAgcmV0dXJuIG1fbGF5ZXItPmNvbnRlbnRzVmlzaWJsZShMYXllcldlYktpdFRocmVh
ZDo6bWFwRnJvbVRyYW5zZm9ybWVkKGNvbnRlbnRSZWN0LCBtX2NvbnRlbnRzU2NhbGUpKTsKKyAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgYnVmZmVyVHlwZSA9
IG1fbmVlZHNCYWNraW5nID8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpBbHdheXNC
YWNrZWQgOiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3Nh
cnk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciA9
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKHNpemUsIGJ1ZmZl
clR5cGUpOworICAgIHJldHVybiBidWZmZXI7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlcjo6YWRkVGV4
dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IpCkBAIC0zNDAsMTUgKzI5MywzNCBAQCB2b2lk
IExheWVyVGlsZXI6OmNsZWFyVGV4dHVyZUpvYnMoKQogICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRz
Sm9icyhtX3BlbmRpbmdUZXh0dXJlSm9icyk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlcjo6Y29tbWl0
UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKK3N0YXRpYyBzaXplX3QgYmFja2luZ1NpemVJbkJ5dGVz
ID0gMDsKKwordm9pZCBMYXllclRpbGVyOjp3aWxsQ29tbWl0KCkKK3sKKyAgICBiYWNraW5nU2l6
ZUluQnl0ZXMgPSAwOworfQorCit2b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJl
VXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKIHsKICAgICBpZiAobV9jbGVhclRleHR1
cmVKb2JzKSB7CiAgICAgICAgIHJlbW92ZVVwZGF0ZUNvbnRlbnRzSm9icyhtX3RleHR1cmVKb2Jz
KTsKICAgICAgICAgbV9jbGVhclRleHR1cmVKb2JzID0gZmFsc2U7CiAgICAgfQogCi0gICAgZm9y
IChWZWN0b3I8VGV4dHVyZUpvYj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVGV4dHVyZUpvYnMu
YmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuZW5kKCk7ICsraXQpCi0gICAgICAg
IG1fdGV4dHVyZUpvYnMuYXBwZW5kKCppdCk7CisgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiBy
ZW5kZXJpbmcgbW9yZSB0aGFuIHRoZSBjYWNoZSBjYXBhY2l0eSBkdXJpbmcgb25lIGZyYW1lLgor
ICAgIGNvbnN0IHNpemVfdCBtYXhCYWNraW5nUGVyRnJhbWUgPSB0ZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZCgpLT5tZW1vcnlMaW1pdCgpOworCisgICAgZm9yIChWZWN0b3I8VGV4dHVyZUpv
Yj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVGV4dHVyZUpvYnMuYmVnaW4oKTsgaXQgIT0gbV9w
ZW5kaW5nVGV4dHVyZUpvYnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVGV4dHVyZUpvYiYgdGV4
dHVyZUpvYiA9ICppdDsKKworICAgICAgICAvLyBVcGRhdGUgYmFja2luZyBzdXJmYWNlIGZvciBi
YWNrZWQgdGlsZXMgbm93LCB0byBhdm9pZCBkcm9wcGluZyBmcmFtZXMgZHVyaW5nIGFuaW1hdGlv
bi4KKyAgICAgICAgaWYgKHRleHR1cmVKb2IubV9jb250ZW50cyAmJiBiYWNraW5nU2l6ZUluQnl0
ZXMgPCBtYXhCYWNraW5nUGVyRnJhbWUpIHsKKyAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6dXBkYXRlQnVmZmVyQmFja2luZ1N1cmZhY2UodGV4dHVyZUpvYi5tX2Nv
bnRlbnRzKTsKKyAgICAgICAgICAgIGJhY2tpbmdTaXplSW5CeXRlcyArPSBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OmJ1ZmZlclNpemVJbkJ5dGVzKHRleHR1cmVKb2IubV9jb250ZW50
cyk7CisgICAgICAgIH0KKworICAgICAgICBtX3RleHR1cmVKb2JzLmFwcGVuZCh0ZXh0dXJlSm9i
KTsKKyAgICB9CiAgICAgbV9wZW5kaW5nVGV4dHVyZUpvYnMuY2xlYXIoKTsKIH0KIApAQCAtMzYx
LDE0ICszMzMsMTggQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAKICAgICB7CiAgICAgICAgIC8v
IEFsbCB0aWxlcyBhcmUgaW52aXNpYmxlIG5vdy4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fcmVuZGVySm9ic011dGV4KTsKLSAgICAgICAgbV9yZW5kZXJKb2JzLmNsZWFyKCk7Ci0gICAg
fQotCi0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gbV90aWxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0
KS5rZXk7Ci0gICAgICAgIExheWVyVGlsZSogdGlsZSA9ICgqaXQpLnZhbHVlOwotICAgICAgICB0
aWxlLT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZXNNdXRleCk7CisKKyAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgVGlsZUlu
ZGV4IGluZGV4ID0gKCppdCkua2V5OworICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCpp
dCkudmFsdWU7CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAg
ICAgIGlmICh0aWxlLT5uZWVkc1JlbmRlcigpKSB7CisgICAgICAgICAgICAgICAgdGlsZS0+c2V0
TmVlZHNSZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX25lZWRzUmVuZGVyQ291bnQgPj0gMCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTM4Nyw2ICszNjMsOCBAQCB2b2lk
IExheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCopCiAgICAgICAgIGlmICghdGlsZSkgewogICAgICAgICAgICAgaWYgKG9yaWdpbi54KCkgPj0g
bV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3JlcXVpcmVk
VGV4dHVyZVNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwogICAgICAgICAgICAgdGls
ZSA9IG5ldyBMYXllclRpbGUoKTsKICAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVKb2JzSXRl
ci0+a2V5LCB0aWxlKTsKICAgICAgICAgfQpAQCAtNDE1LDE3ICszOTMsOSBAQCB2b2lkIExheWVy
VGlsZXI6OnByb2Nlc3NUZXh0dXJlSm9iKGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUpvYnNN
YXAmIHRpbGVKb2JzTQogICAgIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6OlNldENvbnRl
bnRzVG9Db2xvcikgewogICAgICAgICBhZGRUaWxlSm9iKGpvYi5tX2luZGV4LCBqb2IsIHRpbGVK
b2JzTWFwKTsKICAgICAgICAgcmV0dXJuOwotICAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVNYXhp
bXVtU2l6ZSA9IHRpbGVTaXplKCk7Ci0gICAgSW50UG9pbnQgdG9wTGVmdCA9IGpvYi5tX2RpcnR5
UmVjdC5taW5YTWluWUNvcm5lcigpOwotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0ID0gam9iLm1f
ZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCk7IC8vIFRoaXMgaXMgYWN0dWFsbHkgYSBwaXhlbCBi
ZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaXJ0eVJlY3QuCi0gICAgSW50UG9pbnQgb3Jp
Z2luID0gb3JpZ2luT2ZUaWxlKGluZGV4T2ZUaWxlKHRvcExlZnQpKTsKLSAgICBJbnRSZWN0IHRp
bGVSZWN0OwotICAgIGZvciAodGlsZVJlY3Quc2V0WChvcmlnaW4ueCgpKTsgdGlsZVJlY3QueCgp
IDwgYm90dG9tUmlnaHQueCgpOyB0aWxlUmVjdC5zZXRYKHRpbGVSZWN0LngoKSArIHRpbGVNYXhp
bXVtU2l6ZS53aWR0aCgpKSkgewotICAgICAgICBmb3IgKHRpbGVSZWN0LnNldFkob3JpZ2luLnko
KSk7IHRpbGVSZWN0LnkoKSA8IGJvdHRvbVJpZ2h0LnkoKTsgdGlsZVJlY3Quc2V0WSh0aWxlUmVj
dC55KCkgKyB0aWxlTWF4aW11bVNpemUuaGVpZ2h0KCkpKQotICAgICAgICAgICAgYWRkVGlsZUpv
YihpbmRleE9mVGlsZSh0aWxlUmVjdC5sb2NhdGlvbigpKSwgam9iLCB0aWxlSm9ic01hcCk7CiAg
ICAgfQorCisgICAgYWRkVGlsZUpvYihpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1p
bllDb3JuZXIoKSksIGpvYiwgdGlsZUpvYnNNYXApOwogfQogCiB2b2lkIExheWVyVGlsZXI6OmFk
ZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBU
aWxlSm9ic01hcCYgdGlsZUpvYnNNYXApCkBAIC00NDIsNiArNDEyLDkgQEAgdm9pZCBMYXllclRp
bGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2Im
IGpvYiwgVGlsZUoKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3ZlcnJpZGUgdGhlIHByZXZp
b3VzIGpvYi4KKyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAmJiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5tX2NvbnRlbnRzKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OmRlc3Ryb3lCdWZmZXIocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV9jb250ZW50cyk7
CisKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKIH0KIApAQCAtNDUzLDkgKzQy
NiwxOSBAQCB2b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwg
Y29uc3QgVGV4dHVyZUpvYiYgam9iLCBjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBUZXh0dXJlSm9iOjpTZXRDb250ZW50czoKICAgICAgICAgdGlsZS0+c2V0Q29udGVudHMoam9i
Lm1fY29udGVudHMsIHRpbGVSZWN0LCBpbmRleE9mVGlsZSh0aWxlUmVjdC5sb2NhdGlvbigpKSwg
am9iLm1faXNPcGFxdWUpOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlc011dGV4KTsKKyAgICAgICAgICAgIGlmICh0aWxlLT5yZW5kZXJTdGF0ZSgpID09
IExheWVyVGlsZTo6UmVuZGVyUGVuZGluZykKKyAgICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5k
ZXJEb25lKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4dHVyZUpv
Yjo6VXBkYXRlQ29udGVudHM6CiAgICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2Nv
bnRlbnRzLCBqb2IubV9kaXJ0eVJlY3QsIHRpbGVSZWN0LCBqb2IubV9pc09wYXF1ZSk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOworICAg
ICAgICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQZW5k
aW5nKQorICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHM6CiAg
ICAgICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygpOwpAQCAtNDcxLDE1NCArNDU0LDEyNSBAQCB2
b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4
dHVyZUpvYiYgam9iLCBjb25zdCBJbgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIExheWVyVGlsZXI6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXll
ciwgZG91YmxlIHNjYWxlLCBpbnQgcG9zLCBpbnQgdGV4Q29vcmQpCitib29sIExheWVyVGlsZXI6
OmRyYXdUaWxlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgc2NhbGUsIGNv
bnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBHTEVTMlBy
b2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgZHJhd1RleHR1cmVzSW50ZXJuYWwobGF5ZXIsIHNjYWxl
LCBwb3MsIHRleENvb3JkLCBmYWxzZSAvKiBkcmF3TWlzc2luZyAqLyk7Ci19CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Cisg
ICAgZmxvYXQgdmVydGljZXNbNCAqIDRdOwogCi12b2lkIExheWVyVGlsZXI6OmRyYXdNaXNzaW5n
VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSBzY2FsZSwgaW50
IHBvcywgaW50IHRleENvb3JkKQotewotICAgIGRyYXdUZXh0dXJlc0ludGVybmFsKGxheWVyLCBz
Y2FsZSwgcG9zLCB0ZXhDb29yZCwgdHJ1ZSAvKiBkcmF3TWlzc2luZyAqLyk7CisgICAgTGF5ZXJU
aWxlKiB0aWxlID0gbV90aWxlcy5nZXQoaW5kZXgpOworICAgIGlmICghdGlsZSkgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKKyAgICAgICAgdGlsZSA9IG5ldyBM
YXllclRpbGUoKTsKKyAgICAgICAgbV90aWxlcy5hZGQoaW5kZXgsIHRpbGUpOworICAgIH0KKwor
ICAgIC8vIFdlIGFwcGx5IHRoZSB0cmFuc2Zvcm1hdGlvbiBieSBoYW5kLCBzaW5jZSB3ZSBuZWVk
IHRoZSB6IGNvb3JkaW5hdGUKKyAgICAvLyBhcyB3ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBjb3Jy
ZWN0IHRleHR1cmluZykgYW5kIHdlIGRvbid0IG5lZWQKKyAgICAvLyB0byBkaXZpZGUgYnkgdyBi
eSBoYW5kLCB0aGUgR1BVIHdpbGwgZG8gdGhhdCBmb3IgdXMKKyAgICB0cmFuc2Zvcm1Qb2ludChk
c3QueCgpLCBkc3QueSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMF0pOworICAgIHRyYW5z
Zm9ybVBvaW50KGRzdC54KCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s0
XSk7CisgICAgdHJhbnNmb3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0Lm1heFkoKSwgZHJhd1RyYW5z
Zm9ybSwgJnZlcnRpY2VzWzhdKTsKKyAgICB0cmFuc2Zvcm1Qb2ludChkc3QubWF4WCgpLCBkc3Qu
eSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMTJdKTsKKworICAgIC8vIEluZmxhdGUgdGhl
IHJlY3Qgc29tZXdoYXQgdG8gYXR0ZW1wdCB0byBtYWtlIHRleHR1cmVzIHJlbmRlciBiZWZvcmUg
dGhleSBzaG93CisgICAgLy8gdXAgb24gc2NyZWVuLiBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlY3Qg
aXMgaW4gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMuCisgICAgRmxvYXRSZWN0IHJlY3Qo
LXZpZXdwb3J0SW5mbGF0aW9uLndpZHRoKCksIC12aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSwg
Mip2aWV3cG9ydEluZmxhdGlvbi53aWR0aCgpLCAyKnZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgp
KTsKKyAgICBGbG9hdFF1YWQgcXVhZCgKKyAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1swXSAv
IHZlcnRpY2VzWzNdLCB2ZXJ0aWNlc1sxXSAvIHZlcnRpY2VzWzNdKSwKKyAgICAgICAgRmxvYXRQ
b2ludCh2ZXJ0aWNlc1s0XSAvIHZlcnRpY2VzWzddLCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzdd
KSwKKyAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1s4XSAvIHZlcnRpY2VzWzExXSwgdmVydGlj
ZXNbOV0gLyB2ZXJ0aWNlc1sxMV0pLAorICAgICAgICBGbG9hdFBvaW50KHZlcnRpY2VzWzEyXSAv
IHZlcnRpY2VzWzE1XSwgdmVydGljZXNbMTNdIC8gdmVydGljZXNbMTVdKSk7CisgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gcXVhZC5ib3VuZGluZ0JveCgpOworICAgIGJvb2wgdmlzaWJsZSA9
IGJvdW5kaW5nQm94LmludGVyc2VjdHMocmVjdCk7CisgICAgRmxvYXRSZWN0IHZpZXdwb3J0KC0x
LCAtMSwgMiwgMik7CisgICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1LjBmKTsKKyAgICBib29s
IHNob3VsZERyYXdUaWxlID0gYm91bmRpbmdCb3guaW50ZXJzZWN0cyh2aWV3cG9ydCkgJiYgZ2xv
YmFsQWxwaGE7CisKKyAgICBib29sIHdhc1Zpc2libGUgPSB0aWxlLT5pc1Zpc2libGUoKTsKKwor
ICAgIGlmICh2aXNpYmxlKSB7CisgICAgICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKKyAg
ICAgICAgICAgIFRleHR1cmUqIHRleHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7CisgICAgICAgICAg
ICB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVy
ZSk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGREcmF3VGlsZSkgeworICAgICAgICAgICAgICAg
IGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOworICAgICAgICAgICAg
ICAgIGlmIChsYXllci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBt
X3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRl
eHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGRyYXdUcmFuc2Zvcm0uc2NhbGUoMS4wIC8gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKSk7
CisgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZShsYXllci0+c2l6ZUlzU2NhbGVJ
bnZhcmlhbnQoKSA/IDEuMCAvIHNjYWxlIDogMS4wKTsKKyAgICAgICAgICAgICAgICBibGl0VG9C
dWZmZXIoMCwgdGV4dHVyZS0+dGV4dHVyZUlkKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJy
eTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCisgICAg
ICAgICAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3Zl
ciwgZ2xvYmFsQWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KHRpbGUtPmlzRGlydHkoKSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZXNNdXRleCk7CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgICAg
ICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpEb2VzTm90TmVlZFJl
bmRlcikgeworICAgICAgICAgICAgICAgIHRpbGUtPnNldE5lZWRzUmVuZGVyKHRydWUpOworICAg
ICAgICAgICAgICAgICsrbV9uZWVkc1JlbmRlckNvdW50OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdhc1Zpc2libGUp
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOworICAgICAg
ICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAod2FzVmlzaWJsZSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4
KTsKKyAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICAgICAgaWYgKHRpbGUt
Pm5lZWRzUmVuZGVyKCkpIHsKKyAgICAgICAgICAgIHRpbGUtPnNldE5lZWRzUmVuZGVyKGZhbHNl
KTsKKyAgICAgICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OworICAgICAgICAgICAgQVNTRVJU
KG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpkcmF3VGV4dHVyZXNJbnRlcm5hbChMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNjYWxlLCBpbnQgcG9zaXRpb25Mb2Nh
dGlvbiwgaW50IHRleENvb3JkTG9jYXRpb24sIGJvb2wgZHJhd01pc3NpbmcpCit2b2lkIExheWVy
VGlsZXI6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91Ymxl
IHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwog
ICAgIEZsb2F0U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAKICAgICBpZiAobGF5ZXIt
PnNpemVJc1NjYWxlSW52YXJpYW50KCkpIHsKICAgICAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5k
cy53aWR0aCgpIC8gc2NhbGUpOwotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy53aWR0
aCgpIC8gc2NhbGUpOworICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSAv
IHNjYWxlKTsKICAgICB9CiAKLSAgICBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAg
MCwgMSwgIDEsIDEsICAxLCAwIH07Ci0gICAgZmxvYXQgdmVydGljZXNbNCAqIDRdOwotCi0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDQsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgMCwgdmVydGljZXMpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29yZExv
Y2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7Ci0KLSAgICBtX2hh
c01pc3NpbmdUZXh0dXJlcyA9IGZhbHNlOwotCi0gICAgaW50IG1heHcgPSB0aWxlU2l6ZSgpLndp
ZHRoKCk7Ci0gICAgaW50IG1heGggPSB0aWxlU2l6ZSgpLmhlaWdodCgpOwotICAgIGZsb2F0IHN4
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy53aWR0aCgpKSAvIG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHN5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5o
ZWlnaHQoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7Ci0KICAgICBib29sIG5l
ZWRzRGlzcGxheSA9IGZhbHNlOwogCi0gICAgYm9vbCBibGVuZGluZyA9ICFkcmF3TWlzc2luZzsK
KyAgICBpZiAobGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKKyAgICAg
ICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBk
YXRhIGluIHRoZSBmaXJzdCB0aWxlIGFuZCBhbGwgdGhlIG90aGVycyBhcmUgdXNlbGVzcy4KKyAg
ICAgICAgRmxvYXRSZWN0IGRzdCgtYm91bmRzLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0
KCkgLyAyLjAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICBuZWVk
c0Rpc3BsYXkgPSBkcmF3VGlsZShsYXllciwgc2NhbGUsIFRpbGVJbmRleCgwLCAwKSwgZHN0LCBw
cm9ncmFtKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBzeCA9IHN0YXRpY19jYXN0PGZs
b2F0Pihib3VuZHMud2lkdGgoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKTsKKyAg
ICAgICAgZmxvYXQgc3kgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLmhlaWdodCgpKSAvIG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKTsKIAotICAgIEludFJlY3QgdGlsZVJlY3Q7Ci0g
ICAgZm9yICh0aWxlUmVjdC5zZXRYKDApOyB0aWxlUmVjdC54KCkgPCBtX3JlcXVpcmVkVGV4dHVy
ZVNpemUud2lkdGgoKTsgdGlsZVJlY3Quc2V0WCh0aWxlUmVjdC54KCkgKyBtYXh3KSkgewotICAg
ICAgICBmb3IgKHRpbGVSZWN0LnNldFkoMCk7IHRpbGVSZWN0LnkoKSA8IG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZS5oZWlnaHQoKTsgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55KCkgKyBtYXhoKSkgewot
ICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUodGlsZVJlY3QubG9jYXRp
b24oKSk7Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7
Ci0gICAgICAgICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgICAgICAgICB0aWxlID0gbmV3IExh
eWVyVGlsZSgpOwotICAgICAgICAgICAgICAgIG1fdGlsZXMuYWRkKGluZGV4LCB0aWxlKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXQgeCA9IGluZGV4LmkoKSAqIG1heHcgKiBz
eDsKLSAgICAgICAgICAgIGZsb2F0IHkgPSBpbmRleC5qKCkgKiBtYXhoICogc3k7Ci0gICAgICAg
ICAgICBmbG9hdCB3ID0gbWluKGJvdW5kcy53aWR0aCgpIC0geCwgbWF4dyAqIHN4KTsKLSAgICAg
ICAgICAgIGZsb2F0IGggPSBtaW4oYm91bmRzLmhlaWdodCgpIC0geSwgbWF4aCAqIHN5KTsKLSAg
ICAgICAgICAgIGZsb2F0IG94ID0geCAtIGJvdW5kcy53aWR0aCgpIC8gMi4wOwotICAgICAgICAg
ICAgZmxvYXQgb3kgPSB5IC0gYm91bmRzLmhlaWdodCgpIC8gMi4wOwotCi0gICAgICAgICAgICAv
LyBXZSBhcHBseSB0aGUgdHJhbnNmb3JtYXRpb24gYnkgaGFuZCwgc2luY2Ugd2UgbmVlZCB0aGUg
eiBjb29yZGluYXRlCi0gICAgICAgICAgICAvLyBhcyB3ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBj
b3JyZWN0IHRleHR1cmluZykgYW5kIHdlIGRvbid0IG5lZWQKLSAgICAgICAgICAgIC8vIHRvIGRp
dmlkZSBieSB3IGJ5IGhhbmQsIHRoZSBHUFUgd2lsbCBkbyB0aGF0IGZvciB1cwotICAgICAgICAg
ICAgdHJhbnNmb3JtUG9pbnQob3gsIG95LCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMF0pOwot
ICAgICAgICAgICAgdHJhbnNmb3JtUG9pbnQob3gsIG95ICsgaCwgZHJhd1RyYW5zZm9ybSwgJnZl
cnRpY2VzWzRdKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVBvaW50KG94ICsgdywgb3kgKyBoLCBk
cmF3VHJhbnNmb3JtLCAmdmVydGljZXNbOF0pOwotICAgICAgICAgICAgdHJhbnNmb3JtUG9pbnQo
b3ggKyB3LCBveSwgZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzEyXSk7Ci0KLSAgICAgICAgICAg
IC8vIEluZmxhdGUgdGhlIHJlY3Qgc29tZXdoYXQgdG8gYXR0ZW1wdCB0byBtYWtlIHRleHR1cmVz
IHJlbmRlciBiZWZvcmUgdGhleSBzaG93Ci0gICAgICAgICAgICAvLyB1cCBvbiBzY3JlZW4uCi0g
ICAgICAgICAgICBmbG9hdCBkID0gdmlld3BvcnRJbmZsYXRpb25GYWN0b3I7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgcmVjdCgtZCwgLWQsIDIgKiBkLCAyICogZCk7Ci0gICAgICAgICAgICBGbG9h
dFF1YWQgcXVhZChGbG9hdFBvaW50KHZlcnRpY2VzWzBdIC8gdmVydGljZXNbM10sIHZlcnRpY2Vz
WzFdIC8gdmVydGljZXNbM10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCh2ZXJ0aWNlc1s0XSAvIHZlcnRpY2VzWzddLCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzddKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbOF0gLyB2ZXJ0
aWNlc1sxMV0sIHZlcnRpY2VzWzldIC8gdmVydGljZXNbMTFdKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbMTJdIC8gdmVydGljZXNbMTVdLCB2ZXJ0aWNl
c1sxM10gLyB2ZXJ0aWNlc1sxNV0pKTsKLSAgICAgICAgICAgIGJvb2wgdmlzaWJsZSA9IHF1YWQu
Ym91bmRpbmdCb3goKS5pbnRlcnNlY3RzKHJlY3QpOwotCi0gICAgICAgICAgICBib29sIHdhc1Zp
c2libGUgPSB0aWxlLT5pc1Zpc2libGUoKTsKLSAgICAgICAgICAgIHRpbGUtPnNldFZpc2libGUo
dmlzaWJsZSk7CisgICAgICAgIEludFJlY3Qgc3JjKEludFBvaW50Ojp6ZXJvKCksIHRpbGVTaXpl
KCkpOworICAgICAgICBmb3IgKHNyYy5zZXRYKDApOyBzcmMueCgpIDwgbV9yZXF1aXJlZFRleHR1
cmVTaXplLndpZHRoKCk7IHNyYy5zZXRYKHNyYy54KCkgKyBzcmMud2lkdGgoKSkpIHsKKyAgICAg
ICAgICAgIGZvciAoc3JjLnNldFkoMCk7IHNyYy55KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCk7IHNyYy5zZXRZKHNyYy55KCkgKyBzcmMuaGVpZ2h0KCkpKSB7CisgICAgICAgICAg
ICAgICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUoc3JjLmxvY2F0aW9uKCkpOwogCi0g
ICAgICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdHdvIHBhc3Nlcy4gVGhlIGZp
cnN0IHBhc3MgZHJhd3MgYWxsCi0gICAgICAgICAgICAvLyB2aXNpYmxlIHRpbGVzIHdpdGggdGV4
dHVyZXMuCi0gICAgICAgICAgICAvLyBJZiBhIHZpc2libGUgdGlsZSBoYXMgbm8gdGV4dHVyZSwg
c2V0IHRoZSBtX2hhc01pc3NpbmdUZXh0dXJlcwotICAgICAgICAgICAgLy8gZmxhZywgdG8gaW5k
aWNhdGUgdGhhdCB3ZSBuZWVkIGEgc2Vjb25kIHBhc3MuCi0gICAgICAgICAgICAvLyBUaGUgc2Vj
b25kICJkcmF3TWlzc2luZyIgcGFzcyBkcmF3cyBhbGwgdmlzaWJsZSB0aWxlcyB3aXRob3V0Ci0g
ICAgICAgICAgICAvLyB0ZXh0dXJlcyBhcyBjaGVja2VyYm9hcmQuCi0gICAgICAgICAgICAvLyBI
b3dldmVyLCBkb24ndCBkcmF3IGJyYW5kIG5ldyB0aWxlcyBhcyBjaGVja2VyYm9hcmQuIFRoZSBj
aGVja2VyLQotICAgICAgICAgICAgLy8gYm9hcmQgaW5kaWNhdGVzIHRoYXQgYSB0aWxlIGhhcyBk
aXJ0eSBjb250ZW50cywgYnV0IHRoYXQncyBub3QKLSAgICAgICAgICAgIC8vIHRoZSBjYXNlIGlm
IGl0J3MgYnJhbmQgbmV3LgotICAgICAgICAgICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGhhc1RleHR1cmUgPSB0aWxlLT5oYXNUZXh0dXJlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFoYXNUZXh0dXJlKQotICAgICAgICAgICAgICAgICAgICBtX2hhc01pc3NpbmdUZXh0
dXJlcyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGFzVGV4dHVyZSAmJiAhZHJhd01p
c3NpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgVGV4dHVyZSogdGV4dHVyZSA9IHRpbGUtPnRl
eHR1cmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzT3BhcXVlKCkgJiYg
bGF5ZXItPmRyYXdPcGFjaXR5KCkgPT0gMS4wZiAmJiAhbGF5ZXItPm1hc2tMYXllcigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxlbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsRGlzYWJsZShHTF9CTEVORCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWJsZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBibGVuZGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbEVuYWJsZShH
TF9CTEVORCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdM
X09ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZUFjY2Vz
c2VkKHRleHR1cmUpOwotICAgICAgICAgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIHRleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZmxvYXQgeCA9IGluZGV4LmkoKSAqIHNyYy53aWR0aCgpICogc3g7CisgICAgICAg
ICAgICAgICAgZmxvYXQgeSA9IGluZGV4LmooKSAqIHNyYy5oZWlnaHQoKSAqIHN5OworICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCBkc3QoeCAtIGJvdW5kcy53aWR0aCgpIC8gMi4wLCB5IC0gYm91
bmRzLmhlaWdodCgpIC8gMi4wLCBtaW4oYm91bmRzLndpZHRoKCkgLSB4LCBzcmMud2lkdGgoKSAq
IHN4KSwgbWluKGJvdW5kcy5oZWlnaHQoKSAtIHksIHNyYy5oZWlnaHQoKSAqIHN5KSk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAoaGFzVGV4dHVyZSAhPSBkcmF3TWlzc2luZykKLSAgICAgICAgICAg
ICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAodGlsZS0+aXNEaXJ0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFJl
bmRlckpvYihpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRzRGlzcGxheSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNWaXNpYmxlKQot
ICAgICAgICAgICAgICAgIHJlbW92ZVJlbmRlckpvYihpbmRleCk7CisgICAgICAgICAgICAgICAg
bmVlZHNEaXNwbGF5IHw9IGRyYXdUaWxlKGxheWVyLCBzY2FsZSwgaW5kZXgsIGRzdCwgcHJvZ3Jh
bSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBSZXR1cm4gZWFy
bHkgZm9yIHRoZSBkcmF3TWlzc2luZyBjYXNlLCBkb24ndCBmbGFnIHVzIGFzIG5lZWRpbmcgY29t
bWl0LgotICAgIGlmIChkcmF3TWlzc2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dp
dGNoIG9uIGJsZW5kaW5nIGFnYWluICh3ZSBrbm93IHRoYXQgZHJhd01pc3NpbmcgPT0gZmFsc2Up
LgotICAgIGlmICghYmxlbmRpbmcpIHsKLSAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAg
ICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgIH0K
LQogICAgIC8vIElmIHdlIHNjaGVkdWxlIGEgY29tbWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBk
YXRlZCwgYW5kIGRpc3BsYXkgd2lsbAogICAgIC8vIGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZp
c2libGUgYW5kIGRpcnR5IHRleHR1cmVzLgogICAgIGlmIChuZWVkc0Rpc3BsYXkpCiAgICAgICAg
IGxheWVyLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyVGlsZXI6OmFkZFJlbmRl
ckpvYihjb25zdCBUaWxlSW5kZXgmIGluZGV4KQotewotICAgIEFTU0VSVChpc0NvbXBvc2l0aW5n
VGhyZWFkKCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVySm9ic011dGV4KTsK
LSAgICBtX3JlbmRlckpvYnMuYWRkKGluZGV4KTsKLX0KLQotdm9pZCBMYXllclRpbGVyOjpyZW1v
dmVSZW5kZXJKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCkKLXsKLSAgICBNdXRleExvY2tlciBs
b2NrZXIobV9yZW5kZXJKb2JzTXV0ZXgpOwotICAgIG1fcmVuZGVySm9icy5yZW1vdmUoaW5kZXgp
OwotfQotCiB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKQogewogICAgIC8vIFNpbmNlIHRleHR1cmVzIGFyZSBkZWxldGVkIGJ5IGEgc3luY2hy
b25vdXMgbWVzc2FnZQpAQCAtNjUxLDE2ICs2MDUsMjAgQEAgdm9pZCBMYXllclRpbGVyOjpwcnVu
ZVRleHR1cmVzKCkKICAgICAgICAgICAgIHRpbGVzVG9EZWxldGUuYXBwZW5kKGluZGV4KTsKICAg
ICB9CiAKLSAgICBmb3IgKFZlY3RvcjxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHRpbGVzVG9E
ZWxldGUuYmVnaW4oKTsgaXQgIT0gdGlsZXNUb0RlbGV0ZS5lbmQoKTsgKytpdCkgewotICAgICAg
ICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLnRha2UoKml0KTsKLSAgICAgICAgdGlsZS0+ZGlz
Y2FyZENvbnRlbnRzKCk7Ci0gICAgICAgIGRlbGV0ZSB0aWxlOworICAgIHsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7CisKKyAgICAgICAgZm9yIChWZWN0b3I8VGls
ZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSB0aWxlc1RvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRpbGVz
VG9EZWxldGUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1f
dGlsZXMudGFrZSgqaXQpOworICAgICAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRlbnRzKCk7Cisg
ICAgICAgICAgICBkZWxldGUgdGlsZTsKKyAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBMYXll
clRpbGVyOjp1cGRhdGVUaWxlU2l6ZSgpCiB7Ci0gICAgSW50U2l6ZSBzaXplID0gbV90aWxpbmdE
aXNhYmxlZCA/IG1fbGF5ZXItPmJvdW5kcygpIDogZGVmYXVsdFRpbGVTaXplKCk7CisgICAgSW50
U2l6ZSBzaXplID0gbV9sYXllci0+aXNNYXNrKCkgPyBtX2xheWVyLT5ib3VuZHMoKSA6IGRlZmF1
bHRUaWxlU2l6ZSgpOwogICAgIGNvbnN0IEludFNpemUgbWF4VGV4dHVyZVNpemUoMjA0OCwgMjA0
OCk7CiAgICAgc2l6ZSA9IHNpemUuc2hydW5rVG8obWF4VGV4dHVyZVNpemUpOwogCkBAIC02NzIs
MTIgKzYzMCwxMiBAQCB2b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRpbGVTaXplKCkKICAgICBtX3Rp
bGVTaXplID0gc2l6ZTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpkaXNhYmxlVGlsaW5nKGJvb2wg
ZGlzYWJsZSkKK3ZvaWQgTGF5ZXJUaWxlcjo6c2V0TmVlZHNCYWNraW5nKGJvb2wgbmVlZHNCYWNr
aW5nKQogewotICAgIGlmIChtX3RpbGluZ0Rpc2FibGVkID09IGRpc2FibGUpCisgICAgaWYgKG1f
bmVlZHNCYWNraW5nID09IG5lZWRzQmFja2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90
aWxpbmdEaXNhYmxlZCA9IGRpc2FibGU7CisgICAgbV9uZWVkc0JhY2tpbmcgPSBuZWVkc0JhY2tp
bmc7CiAgICAgdXBkYXRlVGlsZVNpemUoKTsKIH0KIApAQCAtNjg5LDEzICs2NDcsNiBAQCB2b2lk
IExheWVyVGlsZXI6OnNjaGVkdWxlQ29tbWl0KCkKICAgICAgICAgbV9sYXllci0+c2V0TmVlZHND
b21taXQoKTsKIH0KIAotYm9vbCBMYXllclRpbGVyOjpzaG91bGRQcmVmaWxsVGlsZShjb25zdCBU
aWxlSW5kZXgmIGluZGV4KQotewotICAgIEludFJlY3QgcHJlZmlsbFRhcmdldFJlY3QgPSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmxheWVyVGlsZXJQcmVmaWxs
UmVjdCgpOwotICAgIEludFJlY3QgdGlsZVJlY3QgPSBJbnRSZWN0KG9yaWdpbk9mVGlsZShpbmRl
eCksIHRpbGVTaXplKCkpOwotICAgIHJldHVybiBwcmVmaWxsVGFyZ2V0UmVjdC5pbnRlcnNlY3Rz
KHRpbGVSZWN0KTsKLX0KLQogVGlsZUluZGV4IExheWVyVGlsZXI6OmluZGV4T2ZUaWxlKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBvcmlnaW4pCiB7CiAgICAgaW50IG9mZnNldFggPSBvcmlnaW4u
eCgpOwpAQCAtNzIwLDE5ICs2NzEsMTkgQEAgSW50UmVjdCBMYXllclRpbGVyOjpyZWN0Rm9yVGls
ZShjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiAgICAgcmV0
dXJuIEludFJlY3Qob3JpZ2luLCBzaXplKTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpiaW5kQ29u
dGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQorVGV4dHVyZSogTGF5ZXJUaWxl
cjo6Y29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogewogICAgIEFTU0VS
VChtX3RpbGVzLnNpemUoKSA9PSAxKTsKICAgICBpZiAobV90aWxlcy5zaXplKCkgIT0gMSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIGNvbnN0IExheWVyVGlsZSog
dGlsZSA9IG1fdGlsZXMuYmVnaW4oKS0+dmFsdWU7CiAKICAgICBBU1NFUlQodGlsZS0+aGFzVGV4
dHVyZSgpKTsKICAgICBpZiAoIXRpbGUtPmhhc1RleHR1cmUoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gMDsKIAotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGls
ZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgcmV0dXJuIHRpbGUtPnRleHR1cmUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaAppbmRleCAwNGU0MGVl
NWYyMDU2N2JjZmQ5OGUyYWFjYWJlY2U5NTY1YjUwYzMzLi5kZTI0ZjJkODQ0MDNkNDg5YTJmZDdk
YjU0YjM1Njc2ZmY1YzkxY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaApAQCAtMjgsNyArMjgsNyBAQAog
I2luY2x1ZGUgIkxheWVyVGlsZS5oIgogI2luY2x1ZGUgIkxheWVyVGlsZUluZGV4LmgiCiAKLSNp
bmNsdWRlIDxTa0JpdG1hcC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdMRVMyUHJv
Z3JhbS5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTUyLDI5ICs1MiwyNiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5MYXllclRpbGVyKCk7CiAKKyAgICBJbnRTaXplIHRpbGVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQorCiAgICAgLy8gV2ViS2l0IHRocmVhZAogICAgIExh
eWVyV2ViS2l0VGhyZWFkKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICB2
b2lkIGxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVkKCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZChkb3VibGUgc2NhbGUp
OwotICAgIHZvaWQgZGlzYWJsZVRpbGluZyhib29sKTsKKyAgICB2b2lkIHNldE5lZWRzQmFja2lu
Zyhib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21taXQoKTsKIAogICAgIC8vIENv
bXBvc2l0aW5nIHRocmVhZAogICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFk
RGVzdHJveWVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5
ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxl
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKik7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGlu
dCB0ZXhDb29yZExvY2F0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzTWlzc2luZ1RleHR1cmVz
KGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSBjb25zdCB7IHJldHVybiBtX2hhc01pc3Np
bmdUZXh0dXJlczsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWlzc2luZ1RleHR1cmVzKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBp
bnQgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgdmlydHVhbCBUZXh0dXJlKiBjb250ZW50c1RleHR1
cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZvaWQgY29tbWl0
UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7Ci0KLSAgICAvLyBUaHJlYWQgc2FmZQotICAgIHZvaWQg
YWRkUmVuZGVySm9iKGNvbnN0IFRpbGVJbmRleCYpOwotICAgIHZvaWQgcmVtb3ZlUmVuZGVySm9i
KGNvbnN0IFRpbGVJbmRleCYpOworICAgIHN0YXRpYyB2b2lkIHdpbGxDb21taXQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4dHVyZUpvYiB7CkBAIC04MiwxMSAr
NzksMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICBUZXh0dXJlSm9iKCkKICAgICAgICAgICAgIDog
bV90eXBlKFVua25vd24pCisgICAgICAgICAgICAsIG1fY29udGVudHMoMCkKICAgICAgICAgewog
ICAgICAgICB9CiAKICAgICAgICAgVGV4dHVyZUpvYihUeXBlIHR5cGUsIGNvbnN0IEludFNpemUm
IG5ld1NpemUpCiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX2Nv
bnRlbnRzKDApCiAgICAgICAgICAgICAsIG1faXNPcGFxdWUoZmFsc2UpCiAgICAgICAgICAgICAs
IG1fZGlydHlSZWN0KEludFBvaW50Ojp6ZXJvKCksIG5ld1NpemUpCiAgICAgICAgIHsKQEAgLTk1
LDI0ICs5NCwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAg
ICAgICAgICAgLCBtX2NvbnRlbnRzKDApCiAgICAgICAgICAgICAsIG1faXNPcGFxdWUoZmFsc2Up
CiAgICAgICAgICAgICAsIG1fZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKHR5cGUgPT0gRGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250
ZW50cyk7CiAgICAgICAgIH0KIAotICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgY29uc3Qg
U2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNPcGFx
dWUpCisgICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBjb25zdCBUZXh0dXJlOjpIb3N0VHlw
ZSYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc09wYXF1ZSkKICAg
ICAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fY29udGVudHMoY29udGVu
dHMpCiAgICAgICAgICAgICAsIG1faXNPcGFxdWUoaXNPcGFxdWUpCiAgICAgICAgICAgICAsIG1f
ZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVXBkYXRlQ29udGVudHMgfHwgdHlwZSA9PSBTZXRDb250ZW50cyk7Ci0gICAgICAgICAgICBB
U1NFUlQoIWNvbnRlbnRzLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjb250ZW50cyk7
CiAgICAgICAgIH0KIAogICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgY29uc3QgQ29sb3Im
IGNvbG9yLCBjb25zdCBUaWxlSW5kZXgmIGluZGV4KQogICAgICAgICAgICAgOiBtX3R5cGUodHlw
ZSkKKyAgICAgICAgICAgICwgbV9jb250ZW50cygwKQogICAgICAgICAgICAgLCBtX2lzT3BhcXVl
KGZhbHNlKQogICAgICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQpAQCAtMTIwLDkgKzEyMSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gU2V0Q29udGVudHNUb0NvbG9yKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyBUZXh0dXJlSm9iIHNldENvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywgYm9v
bCBpc09wYXF1ZSkgeyByZXR1cm4gVGV4dHVyZUpvYihTZXRDb250ZW50cywgY29udGVudHMsIElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShjb250ZW50cy53aWR0aCgpLCBjb250ZW50
cy5oZWlnaHQoKSkpLCBpc09wYXF1ZSk7IH0KKyAgICAgICAgc3RhdGljIFRleHR1cmVKb2Igc2V0
Q29udGVudHMoY29uc3QgVGV4dHVyZTo6SG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50c1JlY3QsIGJvb2wgaXNPcGFxdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBUZXh0dXJlSm9iKFNldENvbnRlbnRzLCBjb250ZW50cywgY29udGVudHNSZWN0LCBpc09w
YXF1ZSk7CisgICAgICAgIH0KICAgICAgICAgc3RhdGljIFRleHR1cmVKb2Igc2V0Q29udGVudHNU
b0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgVGlsZUluZGV4JiBpbmRleCkgeyByZXR1
cm4gVGV4dHVyZUpvYihTZXRDb250ZW50c1RvQ29sb3IsIGNvbG9yLCBpbmRleCk7IH0KLSAgICAg
ICAgc3RhdGljIFRleHR1cmVKb2IgdXBkYXRlQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRl
bnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNPcGFxdWUpIHsgcmV0dXJuIFRl
eHR1cmVKb2IoVXBkYXRlQ29udGVudHMsIGNvbnRlbnRzLCBkaXJ0eVJlY3QsIGlzT3BhcXVlKTsg
fQorICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiB1cGRhdGVDb250ZW50cyhjb25zdCBUZXh0dXJl
OjpIb3N0VHlwZSYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc09w
YXF1ZSkgeyByZXR1cm4gVGV4dHVyZUpvYihVcGRhdGVDb250ZW50cywgY29udGVudHMsIGRpcnR5
UmVjdCwgaXNPcGFxdWUpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIGRpc2NhcmRDb250
ZW50cyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIHsgcmV0dXJuIFRleHR1cmVKb2IoRGlzY2Fy
ZENvbnRlbnRzLCBkaXJ0eVJlY3QpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIHJlc2l6
ZUNvbnRlbnRzKGNvbnN0IEludFNpemUmIG5ld1NpemUpIHsgcmV0dXJuIFRleHR1cmVKb2IoUmVz
aXplQ29udGVudHMsIG5ld1NpemUpOyB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9iIGRpcnR5
Q29udGVudHMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKERp
cnR5Q29udGVudHMsIGRpcnR5UmVjdCk7IH0KQEAgLTEzMCw3ICsxMzQsNyBAQCBwcml2YXRlOgog
ICAgICAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuIG1fdHlwZSA9PSBVbmtub3duOyB9CiAKICAg
ICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIFNrQml0bWFwIG1fY29udGVudHM7CisgICAgICAg
IFRleHR1cmU6Okhvc3RUeXBlIG1fY29udGVudHM7CiAgICAgICAgIGJvb2wgbV9pc09wYXF1ZTsK
ICAgICAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICAgICAgQ29sb3IgbV9jb2xvcjsKQEAg
LTE0MCw3ICsxNDQsNiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgs
IExheWVyVGlsZSo+IFRpbGVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgY29u
c3QgVGV4dHVyZUpvYio+IFRpbGVKb2JzTWFwOwogCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KICAgICB2b2lkIHVwZGF0ZVRpbGVTaXplKCk7CiAK
ICAgICBMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CkBAIC0xNDgsMTcgKzE1MSwxOSBA
QCBwcml2YXRlOgogICAgIC8vIFdlYktpdCB0aHJlYWQKICAgICB2b2lkIGFkZFRleHR1cmVKb2Io
Y29uc3QgVGV4dHVyZUpvYiYpOwogICAgIHZvaWQgY2xlYXJUZXh0dXJlSm9icygpOwotICAgIGJv
b2wgc2hvdWxkUGVyZm9ybVJlbmRlckpvYihjb25zdCBUaWxlSW5kZXgmLCBib29sIGFsbG93UHJl
ZmlsbCk7Ci0gICAgYm9vbCBzaG91bGRQcmVmaWxsVGlsZShjb25zdCBUaWxlSW5kZXgmKTsKKyAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY3JlYXRlQnVmZmVyKGNv
bnN0IEludFNpemUmKTsKIAogICAgIC8vIENvbXBvc2l0aW5nIHRocmVhZAogICAgIHZvaWQgdXBk
YXRlVGlsZUNvbnRlbnRzKGNvbnN0IFRleHR1cmVKb2ImLCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
dm9pZCBhZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYsIGNvbnN0IFRleHR1cmVKb2ImLCBUaWxl
Sm9ic01hcCYpOwogICAgIHZvaWQgcGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiwgY29uc3QgVGV4
dHVyZUpvYiYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHByb2Nlc3NUZXh0dXJlSm9iKGNv
bnN0IFRleHR1cmVKb2ImLCBUaWxlSm9ic01hcCYpOwotICAgIHZvaWQgZHJhd1RleHR1cmVzSW50
ZXJuYWwoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgaW50IHBvc2l0aW9u
TG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uLCBib29sIG1pc3NpbmcpOwogICAgIHZvaWQg
cHJ1bmVUZXh0dXJlcygpOwogICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBuZWVkc0Rp
c3BsYXkpOworICAgIGJvb2wgZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJs
ZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJik7CisKKyAgICAvLyBU
aHJlYWRzYWZlCisgICAgaW50IG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50IGNvbnN0IHZvbGF0aWxlICY+KG1fbmVlZHNSZW5kZXJDb3VudCk7IH0KIAogICAgIC8v
IENsZWFyIGFsbCBwZW5kaW5nIHVwZGF0ZSBjb250ZW50IHRleHR1cmUgam9icwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CkBAIC0xNjksMTUgKzE3NCwxOSBAQCBwcml2YXRlOgogICAgICAgICBm
b3IgKHR5cGVuYW1lIFQ6Oml0ZXJhdG9yIGl0ID0gam9icy5iZWdpbigpOyBpdCAhPSBqb2JzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKCppdCkubV90eXBlICE9IFRleHR1cmVKb2I6
OlVwZGF0ZUNvbnRlbnRzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKCppdCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpkZXN0cm95QnVmZmVyKCgqaXQpLm1fY29udGVudHMpOwogICAgICAgICB9CiAgICAgICAg
IGpvYnMgPSBsaXN0OwogICAgIH0KIAogICAgIExheWVyV2ViS2l0VGhyZWFkKiBtX2xheWVyOwog
Ci0gICAgVGlsZU1hcCBtX3RpbGVzOyAvLyBDb21wb3NpdGluZyB0aHJlYWQgb25seQorICAgIE11
dGV4IG1fdGlsZXNNdXRleDsKKyAgICBUaWxlTWFwIG1fdGlsZXM7IC8vIFByb3RlY3RlZCBieSBt
X3RpbGVzTXV0ZXgKKyAgICBpbnQgbV9uZWVkc1JlbmRlckNvdW50OyAvLyBhdG9taWMKIAotICAg
IGJvb2wgbV90aWxpbmdEaXNhYmxlZDsKKyAgICBib29sIG1fbmVlZHNCYWNraW5nOwogCiAgICAg
Ym9vbCBtX2NvbnRlbnRzRGlydHk7CiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwpAQCAtMTg5
LDEwICsxOTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jbGVhclRleHR1cmVKb2JzOwogICAg
IFZlY3RvcjxUZXh0dXJlSm9iPiBtX3BlbmRpbmdUZXh0dXJlSm9iczsgLy8gQWRkZWQsIGJ1dCBu
b3QgY29tbWl0dGVkIHlldC4KICAgICBEZXF1ZTxUZXh0dXJlSm9iPiBtX3RleHR1cmVKb2JzOwot
ICAgIGJvb2wgbV9oYXNNaXNzaW5nVGV4dHVyZXM7CiAKLSAgICBIYXNoU2V0PFRpbGVJbmRleD4g
bV9yZW5kZXJKb2JzOwotICAgIE11dGV4IG1fcmVuZGVySm9ic011dGV4OwogICAgIGRvdWJsZSBt
X2NvbnRlbnRzU2NhbGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCmlu
ZGV4IDQyOGIwMGE2N2MzYjEyMjU4MWE4NGYyN2IwYTExNmUwNjM4NTllMWIuLmZlYWI4MjU3YzJm
NDVmMGZjMWQ3MTg4YjAyYzcxMjIzOGYyZjg3YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwCkBAIC0zNiwxMCArMzYsOCBAQAogI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFk
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnN0cnVtZW50
ZWRQbGF0Zm9ybUNhbnZhcy5oIgogI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIK
ICNpbmNsdWRlICJMYXllck1lc3NhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKIApAQCAtNjAsNyArNTgsNiBAQCBMYXllcldlYktpdFRocmVhZDo6TGF5
ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5KiBv
dwogICAgICwgbV9vd25lcihvd25lcikKICAgICAsIG1fc3VwZXJsYXllcigwKQogICAgICwgbV9j
b250ZW50cygwKQotICAgICwgbV9zY2FsZSgxLjApCiAgICAgLCBtX2lzRHJhd2FibGUoZmFsc2Up
CiAgICAgLCBtX2lzTWFzayhmYWxzZSkKICAgICAsIG1fYW5pbWF0aW9uc0NoYW5nZWQoZmFsc2Up
CkBAIC02OCw2ICs2NSw3IEBAIExheWVyV2ViS2l0VGhyZWFkOjpMYXllcldlYktpdFRocmVhZChM
YXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG93CiAjaWYgRU5BQkxFKENT
U19GSUxURVJTKQogICAgICwgbV9maWx0ZXJzQ2hhbmdlZChmYWxzZSkKICNlbmRpZgorICAgICwg
bV9kaWRTdGFydEFuaW1hdGlvbnMoZmFsc2UpCiB7CiAgICAgaWYgKHR5cGUgPT0gTGF5ZXIpCiAg
ICAgICAgIG1fdGlsZXIgPSBMYXllclRpbGVyOjpjcmVhdGUodGhpcyk7CkBAIC04NCw3NiArODIs
NDYgQEAgTGF5ZXJXZWJLaXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCgpCiAgICAgQVNTRVJU
KCFzdXBlcmxheWVyKCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxheWVyIHJlZmVyZW5j
ZSBmcm9tIGFsbCBzdWJsYXllcnMuCi0gICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgcmVt
b3ZlQWxsKG1fc3VibGF5ZXJzKTsKKyAgICByZW1vdmVBbGwobV9vdmVybGF5cyk7CiB9CiAKLVNr
Qml0bWFwIExheWVyV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29sb3IsIENvbG9yKiBjb2xv
cikKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnBhaW50Q29udGVudHMoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgY29udGVudHNS
ZWN0LCBkb3VibGUgc2NhbGUpCiB7Ci0gICAgLy8gRG9uJ3QgdHJ5IHRvIGFsbG9jYXRlIGltYWdl
IGRhdGEgYmlnZ2VyIHRoYW4gdGhpcy4gVGhpcyBzaG91bGQgYmUgYmlnCi0gICAgLy8gZW5vdWdo
IHRvIGFjY29tb2RhdGUgYSBodWdlIGlTY3JvbGwgdXNlIGNhc2UuCi0gICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY3Jhc2ggYnVnIG9uIG1hcHMuYmluZy5jb20g
d2hlcmUKLSAgICAvLyBhICh2aXN1YWxseSBlbXB0eSkgbGF5ZXIgYmVjb21lcyB0b28gYmlnLgot
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUJpdG1hcFNpemVJbkJ5dGVzID0gNDAgKiAxMDI0
ICogMTAyNDsKLSAgICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyUGl4ZWwgPSA0OwotCi0gICAg
aWYgKGlzU29saWRDb2xvcikKLSAgICAgICAgKmlzU29saWRDb2xvciA9IGZhbHNlOwotCi0gICAg
aWYgKGNvbnRlbnRzUmVjdC53aWR0aCgpICogY29udGVudHNSZWN0LmhlaWdodCgpICogYnl0ZXNQ
ZXJQaXhlbCA+IG1heGltdW1CaXRtYXBTaXplSW5CeXRlcykKLSAgICAgICAgcmV0dXJuIFNrQml0
bWFwKCk7Ci0KLSAgICBTa0JpdG1hcCBiaXRtYXA7Ci0KLSAgICAvLyBLZWVwIHRoZSBjYW52YXMg
YWxpdmUgdW50aWwgd2UncmUgZG9uZSBleHRyYWN0aW5nIGl0cyBwaXhlbHMKLSAgICBPd25QdHI8
SW5zdHJ1bWVudGVkUGxhdGZvcm1DYW52YXM+IGNhbnZhczsKKyAgICBpZiAoIWRyYXdzQ29udGVu
dCgpICYmICFjb250ZW50cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZHJhd3NDb250
ZW50KCkpIHsgLy8gTGF5ZXIgY29udGVudHMgbXVzdCBiZSBkcmF3biBpbnRvIGEgY2FudmFzLgot
ICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBtYXBGcm9tVHJhbnNm
b3JtZWQoY29udGVudHNSZWN0LCBzY2FsZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBTa0JpdG1hcCBjYW52YXNCaXRtYXA7Ci0gICAgICAgIGNhbnZhc0Jp
dG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBjb250ZW50c1JlY3Qu
d2lkdGgoKSwgY29udGVudHNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFjYW52YXNCaXRt
YXAuYWxsb2NQaXhlbHMoKSkKLSAgICAgICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwotICAgICAg
ICBjYW52YXNCaXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOwotICAgICAgICBjYW52YXNCaXRtYXAu
ZXJhc2VDb2xvcigwKTsKKyAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBj
b250ZW50c1JlY3Q7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gY29udGVudHNSZWN0OworICAg
IGlmIChzY2FsZSAhPSAxLjApIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
OworICAgICAgICBtYXRyaXguc2NhbGUoMS4wIC8gc2NhbGUpOworICAgICAgICB1bnRyYW5zZm9y
bWVkQ29udGVudHNSZWN0ID0gbWF0cml4Lm1hcFJlY3QoY29udGVudHNSZWN0KTsKKyAgICAgICAg
Y2xpcFJlY3QgPSBtYXRyaXgubWFwUmVjdChjbGlwUmVjdCk7CiAKLSAgICAgICAgY2FudmFzID0g
YWRvcHRQdHIobmV3IEluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzKGNhbnZhc0JpdG1hcCkpOwot
ICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHNraWFDb250ZXh0KGNhbnZhcy5nZXQoKSk7Cisg
ICAgICAgIC8vIFdlIGV4dHJhY3QgZnJvbSB0aGUgY29udGVudHNSZWN0IGJ1dCBkcmF3IGEgc2xp
Z2h0bHkgbGFyZ2VyIHJlZ2lvbiB0aGFuCisgICAgICAgIC8vIHdlIHdlcmUgdG9sZCB0bywgaW4g
b3JkZXIgdG8gYXZvaWQgcGl4ZWxzIGJlaW5nIHJlbmRlcmVkIG9ubHkgcGFydGlhbGx5LgorICAg
ICAgICBjb25zdCBpbnQgYXRMZWFzdE9uZURldmljZVBpeGVsID0gc3RhdGljX2Nhc3Q8aW50Pihj
ZWlsZigxLjAgLyBzY2FsZSkpOworICAgICAgICB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0Lmlu
ZmxhdGUoYXRMZWFzdE9uZURldmljZVBpeGVsKTsKKyAgICB9CiAKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dCgmc2tpYUNvbnRleHQpOworICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQgPSBsb2NrQnVmZmVyRHJhd2FibGUoYnVmZmVyKTsK
KyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7Cisg
ICAgaWYgKGNvbnRlbnRzKCkpIHsKKyAgICAgICAgLy8gSW1hZ2VzIG5lZWRzIHRvIGJlIGNlbnRl
cmVkIGFuZCB3aWxsIGJlIHNjYWxlZCB0byBmaXQgdGhlIGJvdW5kcyBvbiB0aGUgY29tcG9zaXRp
bmcgdGhyZWFkCisgICAgICAgIGlmICghY29udGVudHMoKS0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoY29udGVudHMoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRzUmVjdC54KCksIC1jb250ZW50c1JlY3QueSgp
KTsKLQotICAgICAgICBpZiAoc2NhbGUgIT0gMS4wKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNjYWxlKEZsb2F0U2l6ZShzY2FsZSwgc2NhbGUpKTsKLQotICAgICAgICAvLyBSZW5kZXJM
YXllckJhY2tpbmcgZG9lc24ndCBhbHdheXMgY2xpcCwgc28gd2UgbmVlZCB0byBkbyB0aGlzIGJ5
IG91cnNlbHZlcy4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAodW50cmFuc2Zvcm1lZENv
bnRlbnRzUmVjdCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZShGbG9hdFNpemUoc2Nh
bGUsIHNjYWxlKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKICAg
ICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0
LCB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0KTsKLQotICAgICAgICBiaXRtYXAgPSBjYW52YXMt
PmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpZiAoaXNTb2xpZENv
bG9yKSB7Ci0gICAgICAgICAgICAqaXNTb2xpZENvbG9yID0gY2FudmFzLT5pc1NvbGlkQ29sb3Io
KTsKLSAgICAgICAgICAgIGlmIChjb2xvcikKLSAgICAgICAgICAgICAgICAqY29sb3IgPSBjYW52
YXMtPnNvbGlkQ29sb3IoKTsKLSAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVCghYml0bWFw
LmlzTnVsbCgpKTsKLQotICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBp
bWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0gICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwotCi0g
ICAgcmV0dXJuIGJpdG1hcDsKLX0KLQotYm9vbCBMYXllcldlYktpdFRocmVhZDo6Y29udGVudHNW
aXNpYmxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
b3duZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX293bmVyLT5jb250
ZW50c1Zpc2libGUoY29udGVudHNSZWN0KTsKKyAgICByZWxlYXNlQnVmZmVyRHJhd2FibGUoYnVm
ZmVyKTsKIH0KIAogdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRz
SWZOZWVkZWQoKQpAQCAtMTY0LDggKzEzMiw3IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnVw
ZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkKIAogdm9pZCBMYXllcldlYktpdFRocmVhZDo6
Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCkKIHsKLSAgICBpZiAobV90aWxlcikKLSAgICAg
ICAgbV90aWxlci0+Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7CisgICAgbGF5ZXJDb21w
b3NpdGluZ1RocmVhZCgpLT5jb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoKTsKIH0KIAogdm9p
ZCBMYXllcldlYktpdFRocmVhZDo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQpAQCAtMTg0
LDYgKzE1MSw5IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgZWxzZQogICAgICAgICBz
ZXROZWVkc0NvbW1pdCgpOworCisgICAgLy8gSWYgdGhpcyBsYXllciBjb250YWlucyBhIGJpdG1h
cCBpbWFnZSBpdCBpc24ndCByZXJlbmRlcmVkIGF0IGRpZmZlcmVudCBzY2FsZSAoaXQgaXMgcmVz
b2x1dGlvbiBpbmRlcGVuZGVudCkKKyAgICBtX2NvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4obV9jb250ZW50cyk7CiB9CiAKIHZvaWQgTGF5ZXJXZWJLaXRU
aHJlYWQ6OnNldERyYXdhYmxlKGJvb2wgaXNEcmF3YWJsZSkKQEAgLTE5OSw1MCArMTY5LDYxIEBA
IHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldERyYXdhYmxlKGJvb2wgaXNEcmF3YWJsZSkKIAog
dm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNDb21taXQoKQogewotICAgIC8vIENhbGwg
bm90aWZ5Rmx1c2hSZXF1aXJlZCgpLCB3aGljaCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHBsdW1i
cyB0aHJvdWdoIHRvCisgICAgLy8gQ2FsbCBub3RpZnlTeW5jUmVxdWlyZWQoKSwgd2hpY2ggaW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiBwbHVtYnMgdGhyb3VnaCB0bwogICAgIC8vIGNhbGwgc2NoZWR1
bGVSb290TGF5ZXJDb21taXQoKSBvbiB0aGUgV2ViVmlldywgd2hpY2ggd2lsbCBjYXVzZSB1cyB0
byBjb21taXQKICAgICAvLyBjaGFuZ2VzIGRvbmUgb24gdGhlIFdlYktpdCB0aHJlYWQgZm9yIGRp
c3BsYXkgb24gdGhlIENvbXBvc2l0aW5nIHRocmVhZC4KICAgICBpZiAobV9vd25lcikKLSAgICAg
ICAgbV9vd25lci0+bm90aWZ5Rmx1c2hSZXF1aXJlZCgpOworICAgICAgICBtX293bmVyLT5ub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKIH0KIAotdm9pZCBMYXllcldlYktpdFRocmVhZDo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Om5vdGlm
eUFuaW1hdGlvbnNTdGFydGVkKGRvdWJsZSB0aW1lKQogewotICAgIGlmIChtX293bmVyKQotICAg
ICAgICBtX293bmVyLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRpbWUpOworICAgIGlmIChtX2Rp
ZFN0YXJ0QW5pbWF0aW9ucykgeworICAgICAgICBtX2RpZFN0YXJ0QW5pbWF0aW9ucyA9IGZhbHNl
OworICAgICAgICBpZiAobV9vd25lcikKKyAgICAgICAgICAgIG1fb3duZXItPm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQodGltZSk7CisgICAgfQorCisgICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJs
YXllcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkK
KyAgICAgICAgbV9zdWJsYXllcnNbaV0tPm5vdGlmeUFuaW1hdGlvbnNTdGFydGVkKHRpbWUpOwor
CisgICAgbGlzdFNpemUgPSBtX292ZXJsYXlzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpCisgICAgICAgIG1fb3ZlcmxheXNbaV0tPm5vdGlmeUFuaW1h
dGlvbnNTdGFydGVkKHRpbWUpOwogfQogCiB2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpjb21taXRP
bldlYktpdFRocmVhZChkb3VibGUgc2NhbGUpCiB7CiAgICAgLy8gVXBkYXRpbmcgdGV4dHVyZSBj
b250ZW50cyByZXF1aXJlIHRoZSBsYXRlc3QgdmlzaWJpbGl0eSBpbmZvLgogICAgIHVwZGF0ZVRl
eHR1cmVDb250ZW50cyhzY2FsZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYWxsIGFuaW1hdGlvbnMg
YXJlIHN0YXJ0ZWQgYXQgdGhlIHNhbWUgdGltZQotICAgIC8vIHRvIGF2b2lkIHNob3dpbmcgYW5p
bWF0aW9ucyBvdXQtb2Ytc3luYy4KLSAgICAvLyBEbyB0aGlzIGFmdGVyIHVwZGF0aW5nIHRleHR1
cmUgY29udGVudHMsIGJlY2F1c2UgdGhhdCBjYW4gYmUgYSBzbG93Ci0gICAgLy8gb3BlcmF0aW9u
LgotICAgIHN0YXJ0QW5pbWF0aW9ucyhjdXJyZW50VGltZSgpKTsKIH0KIAotdm9pZCBMYXllcldl
YktpdFRocmVhZDo6c3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQorYm9vbCBMYXllcldlYktp
dFRocmVhZDo6c3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQogeworICAgIGJvb2wgZGlkU3Rh
cnRBbmltYXRpb25zID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3J1bm5p
bmdBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghbV9ydW5uaW5nQW5pbWF0
aW9uc1tpXS0+c3RhcnRUaW1lKCkpIHsKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uc0NoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1l
KHRpbWUpOwotICAgICAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKKyAgICAg
ICAgICAgIG1fZGlkU3RhcnRBbmltYXRpb25zID0gZGlkU3RhcnRBbmltYXRpb25zID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCi0gICAgICAg
IG1fc3VibGF5ZXJzW2ldLT5zdGFydEFuaW1hdGlvbnModGltZSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQorICAgICAgICBkaWRTdGFydEFuaW1hdGlvbnMgfD0g
bV9zdWJsYXllcnNbaV0tPnN0YXJ0QW5pbWF0aW9ucyh0aW1lKTsKKworICAgIGxpc3RTaXplID0g
bV9vdmVybGF5cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsg
KytpKQorICAgICAgICBkaWRTdGFydEFuaW1hdGlvbnMgfD0gbV9vdmVybGF5c1tpXS0+c3RhcnRB
bmltYXRpb25zKHRpbWUpOworCisgICAgcmV0dXJuIGRpZFN0YXJ0QW5pbWF0aW9uczsKIH0KIAog
dm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKGRvdWJsZSBzY2Fs
ZSkKIHsKLSAgICBpZiAobV9zY2FsZSAhPSBzY2FsZSkgewotICAgICAgICBtX3NjYWxlID0gc2Nh
bGU7CisgICAgaWYgKG1fY29udGVudHNTY2FsZSAhPSBzY2FsZSkgeworICAgICAgICBtX2NvbnRl
bnRzU2NhbGUgPSBzY2FsZTsKIAogICAgICAgICAvLyBPbmx5IHdlYiBjb250ZW50IGNhbiByZWRy
YXcgYXQgdGhlIG5ldyBzY2FsZS4KICAgICAgICAgLy8gQ2FudmFzLCBpbWFnZXMsIHZpZGVvIGV0
YyBjYW4ndC4KQEAgLTI2NSw5ICsyNDYsMTMgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBk
YXRlVGV4dHVyZUNvbnRlbnRzKGRvdWJsZSBzY2FsZSkKICAgICB9CiAKICAgICBzaXplX3QgbGlz
dFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgaSsrKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkK
ICAgICAgICAgbV9zdWJsYXllcnNbaV0tPnVwZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7CiAK
KyAgICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkKKyAgICAgICAgbV9vdmVybGF5c1tpXS0+dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKHNjYWxlKTsKKwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xh
eWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7CiAKQEAgLTI5OCwxMiArMjgzLDE3
IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKQog
ICAgIH0KICAgICBtX3Bvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgdXBkYXRlTGF5ZXJIaWVy
YXJjaHkoKTsKKwogICAgIGNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcygpOwogCiAgICAgc2l6
ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXpl
OyArK2kpCiAgICAgICAgIG1fc3VibGF5ZXJzW2ldLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFk
KCk7CiAKKyAgICBsaXN0U2l6ZSA9IG1fb3ZlcmxheXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKKyAgICAgICAgbV9vdmVybGF5c1tpXS0+Y29tbWl0
T25Db21wb3NpdGluZ1RocmVhZCgpOworCiAgICAgaWYgKG1hc2tMYXllcigpKSB7CiAgICAgICAg
IG1hc2tMYXllcigpLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7CiAgICAgICAgIGxheWVy
Q29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0TWFza0xheWVyKG1hc2tMYXllcigpLT5sYXllckNvbXBv
c2l0aW5nVGhyZWFkKCkpOwpAQCAtMzE5LDE1ICszMDksMjAgQEAgdm9pZCBMYXllcldlYktpdFRo
cmVhZDo6Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpCiAKIHZvaWQgTGF5ZXJXZWJLaXRUaHJl
YWQ6OmFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyKQog
ewotICAgIGluc2VydFN1YmxheWVyKHN1YmxheWVyLCBudW1TdWJsYXllcnMoKSk7CisgICAgaW5z
ZXJ0KG1fc3VibGF5ZXJzLCBzdWJsYXllciwgbV9zdWJsYXllcnMuc2l6ZSgpKTsKK30KKwordm9p
ZCBMYXllcldlYktpdFRocmVhZDo6YWRkT3ZlcmxheShQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhy
ZWFkPiBvdmVybGF5KQoreworICAgIGluc2VydChtX292ZXJsYXlzLCBvdmVybGF5LCBtX292ZXJs
YXlzLnNpemUoKSk7CiB9CiAKLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Omluc2VydFN1YmxheWVy
KFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgpCit2
b2lkIExheWVyV2ViS2l0VGhyZWFkOjppbnNlcnQoVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRo
cmVhZD4gPiYgbGlzdCwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gc3VibGF5ZXIsIHNp
emVfdCBpbmRleCkKIHsKICAgICBzdWJsYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAg
ICBpbmRleCA9IG1pbihpbmRleCwgbV9zdWJsYXllcnMuc2l6ZSgpKTsKKyAgICBpbmRleCA9IG1p
bihpbmRleCwgbGlzdC5zaXplKCkpOwogICAgIHN1YmxheWVyLT5zZXRTdXBlcmxheWVyKHRoaXMp
OwotICAgIG1fc3VibGF5ZXJzLmluc2VydChpbmRleCwgc3VibGF5ZXIpOworICAgIGxpc3QuaW5z
ZXJ0KGluZGV4LCBzdWJsYXllcik7CiAKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpAQCAtMzM1
LDE3ICszMzAsMjMgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6aW5zZXJ0U3VibGF5ZXIoUGFz
c1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gc3VibGF5ZXIsIHMKIHZvaWQgTGF5ZXJXZWJLaXRU
aHJlYWQ6OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKIHsKICAgICBpZiAobV9zdXBlcmxheWVyKQot
ICAgICAgICBtX3N1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyKHRoaXMpOworICAgICAgICBtX3N1
cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyT3JPdmVybGF5KHRoaXMpOwogfQogCi12b2lkIExheWVy
V2ViS2l0VGhyZWFkOjpyZW1vdmVTdWJsYXllcihMYXllcldlYktpdFRocmVhZCogc3VibGF5ZXIp
Cit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVTdWJsYXllck9yT3ZlcmxheShMYXllcldl
YktpdFRocmVhZCogc3VibGF5ZXIpCiB7Ci0gICAgaW50IGZvdW5kSW5kZXggPSBpbmRleE9mU3Vi
bGF5ZXIoc3VibGF5ZXIpOwotICAgIGlmIChmb3VuZEluZGV4ID09IC0xKQorICAgIHJlbW92ZSht
X3N1YmxheWVycywgc3VibGF5ZXIpOworICAgIHJlbW92ZShtX292ZXJsYXlzLCBzdWJsYXllcik7
Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZShWZWN0b3I8UmVmUHRyPExheWVy
V2ViS2l0VGhyZWFkPiA+JiB2ZWN0b3IsIExheWVyV2ViS2l0VGhyZWFkKiBzdWJsYXllcikKK3sK
KyAgICBpbnQgZm91bmRJbmRleCA9IHZlY3Rvci5maW5kKHN1YmxheWVyKTsKKyAgICBpZiAoZm91
bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3VibGF5ZXItPnNl
dFN1cGVybGF5ZXIoMCk7Ci0gICAgbV9zdWJsYXllcnMucmVtb3ZlKGZvdW5kSW5kZXgpOworICAg
IHZlY3Rvci5yZW1vdmUoZm91bmRJbmRleCk7CiAKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpA
QCAtMzU4LDggKzM1OSw4IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlcGxhY2VTdWJsYXll
cihMYXllcldlYktpdFRocmVhZCogcmVmZXJlbmNlLCBQYXNzUmVmUHRyCiAgICAgaWYgKHJlZmVy
ZW5jZSA9PSBuZXdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHJlZmVyZW5jZUlu
ZGV4ID0gaW5kZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7Ci0gICAgaWYgKHJlZmVyZW5jZUluZGV4
ID09IC0xKSB7CisgICAgaW50IHJlZmVyZW5jZUluZGV4ID0gbV9zdWJsYXllcnMuZmluZChyZWZl
cmVuY2UpOworICAgIGlmIChyZWZlcmVuY2VJbmRleCA9PSBub3RGb3VuZCkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MiwxNSAr
MzczLDYgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVyKExheWVyV2Vi
S2l0VGhyZWFkKiByZWZlcmVuY2UsIFBhc3NSZWZQdHIKICAgICB9CiB9CiAKLWludCBMYXllcldl
YktpdFRocmVhZDo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiByZWZl
cmVuY2UpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N1YmxheWVycy5zaXplKCk7
IGkrKykgewotICAgICAgICBpZiAobV9zdWJsYXllcnNbaV0gPT0gcmVmZXJlbmNlKQotICAgICAg
ICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQogdm9pZCBMYXllcldl
YktpdFRocmVhZDo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1f
Ym91bmRzID09IHNpemUpCkBAIC00MjEsNyArNDEzLDYgQEAgYm9vbCBMYXllcldlYktpdFRocmVh
ZDo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT006CiAjZW5kaWYKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ0NSwxMyArNDM2LDE3
IEBAIGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBMYXllcldlYktpdFRocmVhZDo6cm9vdExheWVy
KCkgY29uc3QKICAgICByZXR1cm4gbGF5ZXI7CiB9CiAKLXZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6
OnJlbW92ZUFsbFN1YmxheWVycygpCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVBbGwo
VmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYgdmVjdG9yKQogewotICAgIHdoaWxl
IChtX3N1YmxheWVycy5zaXplKCkpIHsKLSAgICAgICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFk
PiBsYXllciA9IG1fc3VibGF5ZXJzWzBdLmdldCgpOwotICAgICAgICBBU1NFUlQobGF5ZXItPnN1
cGVybGF5ZXIoKSk7CisgICAgaWYgKCF2ZWN0b3Iuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICB3aGlsZSAodmVjdG9yLnNpemUoKSkgeworICAgICAgICBSZWZQdHI8TGF5ZXJXZWJLaXRU
aHJlYWQ+IGxheWVyID0gdmVjdG9yWzBdLmdldCgpOworICAgICAgICBBU1NFUlQobGF5ZXItPnN1
cGVybGF5ZXIoKSA9PSB0aGlzKTsKICAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVy
KCk7CiAgICAgfQorCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAtNDYyLDcgKzQ1Nyw3
IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiBzCiAKICAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsK
ICAgICBzaXplX3QgbGlzdFNpemUgPSBzdWJsYXllcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpCiAgICAgICAgIGFkZFN1YmxheWVyKHN1YmxheWVyc1tpXSk7CiB9CiAKQEAg
LTQ4NSw4ICs0ODAsMTEgQEAgdm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVy
YXJjaHkoKQogICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U3VwZXJsYXllcihzdXBl
cmxheWVyKCkgPyBzdXBlcmxheWVyKCktPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSA6
IDApOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+IHN1Ymxh
eWVyczsKLSAgICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgIHNpemVfdCBsaXN0U2l6ZSA9
IG1fb3ZlcmxheXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7
ICsraSkKKyAgICAgICAgc3VibGF5ZXJzLmFwcGVuZChtX292ZXJsYXlzW2ldLT5tX2xheWVyQ29t
cG9zaXRpbmdUaHJlYWQuZ2V0KCkpOworICAgIGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKICAgICAgICAgc3Vi
bGF5ZXJzLmFwcGVuZChtX3N1YmxheWVyc1tpXS0+bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdl
dCgpKTsKICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFN1YmxheWVycyhzdWJsYXll
cnMpOwogfQpAQCAtNDk1LDcgKzQ5Myw3IEBAIHZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldElz
TWFzayhib29sIGlzTWFzaykKIHsKICAgICBtX2lzTWFzayA9IGlzTWFzazsKICAgICBpZiAoaXNN
YXNrICYmIG1fdGlsZXIpCi0gICAgICAgIG1fdGlsZXItPmRpc2FibGVUaWxpbmcodHJ1ZSk7Cisg
ICAgICAgIG1fdGlsZXItPnNldE5lZWRzQmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBMYXllcldl
YktpdFRocmVhZDo6c2V0UnVubmluZ0FuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
ckFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucykKQEAgLTUxNyw5ICs1MTUsMTMgQEAgdm9pZCBMYXll
cldlYktpdFRocmVhZDo6cmVsZWFzZUxheWVyUmVzb3VyY2VzKCkKICAgICBkZWxldGVUZXh0dXJl
cygpOwogCiAgICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpCiAgICAgICAgIG1fc3VibGF5ZXJzW2ldLT5yZWxlYXNlTGF5
ZXJSZXNvdXJjZXMoKTsKIAorICAgIGxpc3RTaXplID0gbV9vdmVybGF5cy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKQorICAgICAgICBtX292ZXJsYXlz
W2ldLT5yZWxlYXNlTGF5ZXJSZXNvdXJjZXMoKTsKKwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAg
ICAgICAgbWFza0xheWVyKCktPnJlbGVhc2VMYXllclJlc291cmNlcygpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0
VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyV2ViS2l0VGhyZWFkLmgKaW5kZXggYjgzNGQ4OGMxODc1OTUxZmY3NDRjNTYxNzFhMmU1YjVh
NGU3ZGQ5MC4uM2ZjNWNlNTA3NjBkZmNhOTFhODRkYTE3OTlmOWYwYWViNzYzNGE2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllcldl
YktpdFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtNDUsOCArNDUsNiBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1jbGFzcyBTa0JpdG1h
cDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFk
OwpAQCAtNTgsMTAgKzU2LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5MYXllcldlYktpdFRo
cmVhZCgpOwogCiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhy
ZWFkPik7Ci0gICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhy
ZWFkPiwgc2l6ZV90IGluZGV4KTsKKyAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8
TGF5ZXJXZWJLaXRUaHJlYWQ+IGxheWVyLCBzaXplX3QgaW5kZXgpIHsgaW5zZXJ0KG1fc3VibGF5
ZXJzLCBsYXllciwgaW5kZXgpOyB9CiAgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJXZWJL
aXRUaHJlYWQqIHJlZmVyZW5jZSwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbmV3TGF5
ZXIpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKIAorICAgIHZvaWQgYWRkT3Zl
cmxheShQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPik7CisKICAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBh
bmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQogCiAgICAgdm9pZCBzZXRBbmNob3JQb2lu
dFooZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CkBAIC04NCw2ICs4NCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0TWFza0xheWVyKExheWVyV2ViS2l0VGhyZWFkKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIg
PSBtYXNrTGF5ZXI7IH0KICAgICBMYXllcldlYktpdFRocmVhZCogbWFza0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKworICAgIGJvb2wgaXNNYXNrKCkgY29uc3Qg
eyByZXR1cm4gbV9pc01hc2s7IH0KICAgICB2b2lkIHNldElzTWFzayhib29sKTsKIAogICAgIHZv
aWQgc2V0UmVwbGljYUxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikgeyBtX3JlcGxpY2FM
YXllciA9IGxheWVyOyB9CkBAIC0xMDksNyArMTExLDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
TGF5ZXJXZWJLaXRUaHJlYWQqIHJvb3RMYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVB
bGxTdWJsYXllcnMoKTsKKyAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpIHsgcmVtb3ZlQWxs
KG1fc3VibGF5ZXJzKTsgfQogCiAgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiYpOwogCkBAIC0xMjMsMTAgKzEyNSw0NCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wgcHJlc2VydmVzM0QpIHsgbV9wcmVz
ZXJ2ZXMzRCA9IHByZXNlcnZlczNEOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAKLSAgICB2b2lkIHNl
dEZpeGVkUG9zaXRpb24oYm9vbCBmaXhlZCkgeyBtX2lzRml4ZWRQb3NpdGlvbiA9IGZpeGVkOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9pZCBzZXRGaXhlZFBvc2l0aW9uKGJvb2wgZml4ZWQp
CisgICAgeworICAgICAgICBpZiAobV9pc0ZpeGVkUG9zaXRpb24gPT0gZml4ZWQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1faXNGaXhlZFBvc2l0aW9uID0gZml4ZWQ7CisgICAgICAg
IHNldE5lZWRzQ29tbWl0KCk7CisgICAgfQorCiAgICAgdm9pZCBzZXRIYXNGaXhlZENvbnRhaW5l
cihib29sIGZpeGVkKSB7IG1faGFzRml4ZWRDb250YWluZXIgPSBmaXhlZDsgc2V0TmVlZHNDb21t
aXQoKTsgfQogICAgIHZvaWQgc2V0SGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZShib29sIGZpeGVk
KSB7IG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSA9IGZpeGVkOyBzZXROZWVkc0NvbW1pdCgp
OyB9CiAKKyAgICB2b2lkIHNldElzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhib29s
IGZpeGVkKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzID09IGZpeGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2lzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyA9IGZpeGVkOworICAgICAgICBzZXROZWVkc0NvbW1p
dCgpOworICAgIH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb1RvcChib29sIGZpeGVkVG9Ub3ApCisg
ICAgeworICAgICAgICBpZiAobV9pc0ZpeGVkVG9Ub3AgPT0gZml4ZWRUb1RvcCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9pc0ZpeGVkVG9Ub3AgPSBmaXhlZFRvVG9wOworICAgICAg
ICBzZXROZWVkc0NvbW1pdCgpOworICAgIH0KKworICAgIHZvaWQgc2V0Rml4ZWRUb0xlZnQoYm9v
bCBmaXhlZFRvTGVmdCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzRml4ZWRUb0xlZnQgPT0gZml4
ZWRUb0xlZnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faXNGaXhlZFRvTGVmdCA9
IGZpeGVkVG9MZWZ0OworICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworICAgIH0KKworICAgIHZv
aWQgc2V0RnJhbWVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZnJhbWVWaXNp
YmxlUmVjdCA9IHJlY3Q7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lkIHNldEZyYW1lQ29u
dGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9mcmFtZUNvbnRlbnRzU2l6ZSA9IHNp
emU7IHNldE5lZWRzQ29tbWl0KCk7IH0KKwogICAgIHZvaWQgc2V0Q29udGVudHMoSW1hZ2UqKTsK
ICAgICBJbWFnZSogY29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzLmdldCgpOyB9
CiAKQEAgLTEzNywyMCArMTczLDI0IEBAIHB1YmxpYzoKICAgICBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCk7IH0KICAg
ICB2b2lkIHNldERyYXdhYmxlKGJvb2wpOwogCisgICAgLy8gMS4gQ29tbWl0IG9uIFdlYktpdCB0
aHJlYWQKICAgICB2b2lkIGNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSk7CisKKyAg
ICAvLyAyLiBDb21taXQgb24gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9pZCBjb21taXRPbkNv
bXBvc2l0aW5nVGhyZWFkKCk7CisgICAgYm9vbCBzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUp
OworCisgICAgLy8gMy4gTm90aWZ5IHdoZW4gcmV0dXJuaW5nIHRvIFdlYktpdCB0aHJlYWQKKyAg
ICB2b2lkIG5vdGlmeUFuaW1hdGlvbnNTdGFydGVkKGRvdWJsZSB0aW1lKTsKKwogICAgIExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCk7IH0KIAogICAgIC8vIE9ubHkgdXNlZCB3
aGVuIHRoaXMgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIgb2YgYSBmcmFtZS4KICAgICB2b2lkIHNl
dEFic29sdXRlT2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KSB7IG1fYWJzb2x1dGVPZmZz
ZXQgPSBvZmZzZXQ7IH0KIAotICAgIGRvdWJsZSBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZTsgfQotCi0gICAgU2tCaXRtYXAgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0
JiB0cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29s
b3IgPSAwLCBDb2xvciogPSAwKTsKLSAgICBib29sIGNvbnRlbnRzVmlzaWJsZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50c1JlY3QpIGNvbnN0OworICAgIHZvaWQgcGFpbnRDb250ZW50cyhCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIGNvbnN0IEludFJlY3QmIHRyYW5zZm9y
bWVkQ29udGVudHNSZWN0LCBkb3VibGUgc2NhbGUpOwogCiAgICAgdm9pZCBzZXROZWVkc0NvbW1p
dCgpOwotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSk7CiAKICAg
ICB2b2lkIHNldFJ1bm5pbmdBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmlt
YXRpb24+ID4mKTsKICAgICB2b2lkIHNldFN1c3BlbmRlZEFuaW1hdGlvbnMoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYpOwpAQCAtMTY2LDEwICsyMDYsOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeSogb3duZXIpOwogCiAgICAgdm9pZCBzZXROZWVkc1RleHR1cmUoYm9vbCBuZWVkc1RleHR1
cmUpIHsgbV9uZWVkc1RleHR1cmUgPSBuZWVkc1RleHR1cmU7IH0KLSAgICB2b2lkIHNldExheWVy
UHJvZ3JhbVNoYWRlcihMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNoYWRlciBzaGFkZXIpIHsgbV9s
YXllclByb2dyYW1TaGFkZXIgPSBzaGFkZXI7IH0KKyAgICB2b2lkIHNldExheWVyUHJvZ3JhbShM
YXllckRhdGE6OkxheWVyUHJvZ3JhbSBsYXllclByb2dyYW0pIHsgbV9sYXllclByb2dyYW0gPSBs
YXllclByb2dyYW07IH0KICAgICBib29sIGlzRHJhd2FibGUoKSBjb25zdCB7IHJldHVybiBtX2lz
RHJhd2FibGU7IH0KIAotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKICAg
ICB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoKTsKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50
cyhkb3VibGUgc2NhbGUpOwogCkBAIC0xODMsMTYgKzIyMiwxMSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBzZXRTdXBlcmxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBzdXBlcmxheWVyKSB7IG1fc3Vw
ZXJsYXllciA9IHN1cGVybGF5ZXI7IH0KIAotICAgIHNpemVfdCBudW1TdWJsYXllcnMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3VibGF5ZXJzLnNpemUoKTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc3VibGF5ZXIgb3IgLTEgaWYgbm90IGZvdW5k
LgotICAgIGludCBpbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqKTsKLQog
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5
ZXIuCi0gICAgdm9pZCByZW1vdmVTdWJsYXllcihMYXllcldlYktpdFRocmVhZCopOworICAgIHZv
aWQgcmVtb3ZlU3VibGF5ZXJPck92ZXJsYXkoTGF5ZXJXZWJLaXRUaHJlYWQqKTsKKyAgICB2b2lk
IHJlbW92ZShWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiwgTGF5ZXJXZWJLaXRU
aHJlYWQqKTsKKyAgICB2b2lkIHJlbW92ZUFsbChWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhy
ZWFkPiA+Jik7CisgICAgdm9pZCBpbnNlcnQoVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVh
ZD4gPiYsIFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+LCBzaXplX3QgaW5kZXgpOwogCiAg
ICAgR3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG1fb3duZXI7CiAKQEAgLTIwMCw2ICsyMzQsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9zdXNwZW5k
ZWRBbmltYXRpb25zOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gPiBt
X3N1YmxheWVyczsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+IG1fb3Zl
cmxheXM7CiAgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIG1fc3VwZXJsYXllcjsKICAgICBSZWZQdHI8
TGF5ZXJXZWJLaXRUaHJlYWQ+IG1fbWFza0xheWVyOwogICAgIFJlZlB0cjxMYXllcldlYktpdFRo
cmVhZD4gbV9yZXBsaWNhTGF5ZXI7CkBAIC0yMDksNyArMjQ0LDYgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkOwog
ICAgIFJlZlB0cjxMYXllclRpbGVyPiBtX3RpbGVyOwogICAgIEZsb2F0U2l6ZSBtX2Fic29sdXRl
T2Zmc2V0OwotICAgIGRvdWJsZSBtX3NjYWxlOyAvLyBTY2FsZSBhcHBsaWVzIG9ubHkgdG8gY29u
dGVudCBsYXllcnMKICAgICB1bnNpZ25lZCBtX2lzRHJhd2FibGUgOiAxOwogICAgIHVuc2lnbmVk
IG1faXNNYXNrIDogMTsKICAgICB1bnNpZ25lZCBtX2FuaW1hdGlvbnNDaGFuZ2VkIDogMTsKQEAg
LTIxNyw2ICsyNTEsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB1
bnNpZ25lZCBtX2ZpbHRlcnNDaGFuZ2VkIDogMTsKICNlbmRpZgorICAgIHVuc2lnbmVkIG1fZGlk
U3RhcnRBbmltYXRpb25zIDogMTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlh
UGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwCmluZGV4IDdlZjNlMWM5YTVlZjE0NjM2ZjNhNDI3
ODgzODkyNzFkMTMzNjA2MTEuLmVlNjJlY2VmMWY1NWJiOWM5OTZjMGQ3ZTY0Zjc2YmFjOGU5NGI0
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5
LmNwcApAQCAtMjEsMzkgKzIxLDI1IEBACiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlTWFuYWdlci5oIgogI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJDcmVkZW50aWFsLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1SZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlQ2xpZW50LmgiCiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1EZXZpY2VJbmZv
Lmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+CiAjaW5jbHVkZSA8RnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5Lmg+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJOYXRp
dmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR0xFUzJQcm9ncmFtLmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPFRpbGVkSW1hZ2UuaD4KKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsKIApAQCAtMTE1
LDcgKzEwMSw2IEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlh
UGxheWVyKiBwbGF5ZXIpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwg
bV9idWZmZXJpbmdUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1l
ckZpcmVkKQogICAgICwgbV9zaG93QnVmZmVyaW5nSW1hZ2UoZmFsc2UpCi0gICAgLCBtX21lZGlh
SXNCdWZmZXJpbmcoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fdXNlckRyaXZlblNlZWtUaW1lcih0
aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjp1c2VyRHJpdmVuU2Vla1RpbWVyRmlyZWQpCiAgICAg
LCBtX2xhc3RTZWVrVGltZSgwKQpAQCAtMjAyLDggKzE4Nyw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwbGF5KCkKIHsKICAgICBpZiAobV9wbGF0Zm9ybVBsYXllcikgewogICAgICAgICBt
X3BsYXRmb3JtUGxheWVyLT5wbGF5KCk7Ci0gICAgICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5p
c01ldGFkYXRhUmVhZHkoKSkKLSAgICAgICAgICAgIGNvbmRpdGlvbmFsbHlHb0Z1bGxzY3JlZW5B
ZnRlclBsYXkoKTsKICAgICB9CiB9CiAKQEAgLTIxNSw3ICsxOTgsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGF1c2UoKQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGFzVmlk
ZW8oKTsKIH0KIAogSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29u
c3QKQEAgLTQwNywxMyArMzkwLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludEN1
cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvCiAgICAgaWYg
KCFoYXNWaWRlbygpIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhbV93ZWJDb3Jl
UGxheWVyLT52aXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFT
U0VSVChncmFwaGljcyk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpEcmF3
YWJsZSogZHN0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgY2xpcHBlZFJlY3QgPSBtX3dl
YkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyV2luZG93Q2xpcFJl
Y3QoKTsKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVdpbmRvd0Ns
aXBSZWN0KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QueSgpLCBjbGlwcGVkUmVjdC53aWR0
aCgpLCBjbGlwcGVkUmVjdC5oZWlnaHQoKSk7Ci0gICAgbV9wbGF0Zm9ybVBsYXllci0+cGFpbnQo
Z3JhcGhpY3MtPmNhbnZhcygpLCBwbGF0Zm9ybVJlY3QsIHBsYXRmb3JtV2luZG93Q2xpcFJlY3Qp
OworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBhaW50KGRzdCwgcGxhdGZvcm1SZWN0LCBwbGF0Zm9y
bVdpbmRvd0NsaXBSZWN0KTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F2YWls
YWJsZVZpZGVvRnJhbWUoKSBjb25zdApAQCAtNDM1LDYgKzQxNywxMiBAQCBNZWRpYVBsYXllcjo6
TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFR5cGUoKSBjb25zdAog
ICAgIHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsKIH0KIAordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnByZXBhcmVGb3JSZW5kZXJpbmcoKQoreworICAgIGlmIChtX3BsYXRmb3JtUGxheWVy
KQorICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5wcmVwYXJlRm9yUmVuZGVyaW5nKCk7Cit9CisK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKCkKIHsKICAg
ICBpZiAoIW1fd2ViQ29yZVBsYXllcikKQEAgLTQ0MywyMiArNDMxLDEwIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpyZXNpemVTb3VyY2VEaW1lbnNpb25zKCkKICAgICBpZiAoIW1fd2ViQ29y
ZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJc1ZpZGVvKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIC8vIElmIHdlIGhhdmUgYW4gSFRNTFZpZGVvRWxlbWVudCBidXQg
dGhlIHNvdXJjZSBoYXMgbm8gdmlkZW8sIHRoZW4gd2UgbmVlZCB0byByZXNpemUgdGhlIG1lZGlh
IGVsZW1lbnQuCi0gICAgaWYgKCFoYXNWaWRlbygpICYmIFBsYXRmb3JtUGxheWVyOjpNZWRpYU9L
ID09IG1fcGxhdGZvcm1QbGF5ZXItPmVycm9yKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCByZWN0
ID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckNvbnRl
bnRCb3hSZWN0KCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwbGF5Ym9va01pbkF1ZGlv
RWxlbWVudFdpZHRoID0gMzAwOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBsYXlib29rTWlu
QXVkaW9FbGVtZW50SGVpZ2h0ID0gMzI7Ci0gICAgICAgIC8vIElmIHRoZSByZWN0IGRpbWVuc2lv
bnMgYXJlIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtLCB1c2UgdGhlIG1pbmltdW0gaW5z
dGVhZC4KLSAgICAgICAgaW50IG5ld1dpZHRoID0gbWF4KHJlY3Qud2lkdGgoKS50b0ludCgpLCBw
bGF5Ym9va01pbkF1ZGlvRWxlbWVudFdpZHRoKTsKLSAgICAgICAgaW50IG5ld0hlaWdodCA9IG1h
eChyZWN0LmhlaWdodCgpLnRvSW50KCksIHBsYXlib29rTWluQXVkaW9FbGVtZW50SGVpZ2h0KTsK
LQotICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxh
eWVyU2V0U2l6ZShJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpKTsKLSAgICB9Ci0KICAgICAv
LyBJZiB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZpZGVv
IHNvdXJjZSBpcywgdGhlbiB3ZSBuZWVkIHRvIHNldCBpdCB0byBzb21ldGhpbmcgc2FuZS4KICAg
ICBpZiAobV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKSAmJiBtX3BsYXRmb3JtUGxheWVy
LT5zb3VyY2VIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgTGF5b3V0UmVjdCByZWN0
ID0gbV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckNvbnRl
bnRCb3hSZWN0KCk7CiAgICAgbV9wbGF0Zm9ybVBsYXllci0+c2V0U291cmNlRGltZW5zaW9uKHJl
Y3Qud2lkdGgoKS50b1Vuc2lnbmVkKCksIHJlY3QuaGVpZ2h0KCkudG9VbnNpZ25lZCgpKTsKIH0K
QEAgLTUwOSw4ICs0ODUsOSBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OnBlcmNlbnRMb2Fk
ZWQoKQogICAgIGZsb2F0IGJ1ZmZlcmVkID0gMDsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGlt
ZVJhbmdlcyA9IHRoaXMtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1l
UmFuZ2VzLT5zdGFydChpLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgZmxvYXQgZW5kID0g
dGltZVJhbmdlcy0+ZW5kKGksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBFeGNlcHRpb25D
b2RlIGlnbm9yZWRFeGNlcHRpb247CisgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+
c3RhcnQoaSwgaWdub3JlZEV4Y2VwdGlvbik7CisgICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5n
ZXMtPmVuZChpLCBpZ25vcmVkRXhjZXB0aW9uKTsKICAgICAgICAgYnVmZmVyZWQgKz0gZW5kIC0g
c3RhcnQ7CiAgICAgfQogCkBAIC01NjcsMjYgKzU0NCwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKCkKIAogICAgICAgICBzd2l0Y2ggKG1fcGxhdGZvcm1QbGF5ZXIt
PnN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBQbGF0Zm9ybVBsYXllcjo6TVBfU1RBVEVfSURMRToK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICBzZXRCdWZmZXJp
bmcoZmFsc2UpOwotICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0gZmFsc2U7Ci0gICAg
ICAgICAgICAvLyBSZW1vdmUgbWVkaWEgcGxheWVyIGZyb20gcGxhdGZvcm0gbGF5ZXIgKHJlbW92
ZSBob2xlIHB1bmNoIHJlY3QpLgotICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikgewot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3Bs
YXRmb3JtTGF5ZXIuZ2V0KCkpLT5zZXRNZWRpYVBsYXllcigwKTsKLSAgICAgICAgICAgICAgICBt
X3BsYXRmb3JtTGF5ZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAg
ICAgaWYgKGlzRnVsbHNjcmVlbigpKQogICAgICAgICAgICAgICAgIG1fd2ViQ29yZVBsYXllci0+
bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJFeGl0RnVsbHNjcmVlbigpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1QbGF5ZXI6Ok1QX1NUQVRFX0FDVElW
RToKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgICAgICBtX3Nob3dC
dWZmZXJpbmdJbWFnZSA9IGZhbHNlOwotICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgcGxhdGZvcm0gbGF5ZXIgZm9yIHZpZGVvIChj
cmVhdGUgaG9sZSBwdW5jaCByZWN0KS4KLSAgICAgICAgICAgIGlmICghbV9wbGF0Zm9ybUxheWVy
ICYmIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKLSAgICAgICAgICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXIgPSBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUobV93ZWJDb3JlUGxh
eWVyKTsKLSNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1Q
bGF5ZXI6Ok1QX1NUQVRFX1VOU1VQUE9SVEVEOgogICAgICAgICAgICAgYnJlYWs7CkBAIC02OTks
NyArNjYwLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uV2FpdE1ldGFkYXRhTm90aWZp
ZWQoYm9vbCBoYXNGaW5pc2hlZCwgaW50IHRpbWVXYWl0ZWQKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjp3YWl0TWV0YWRhdGFUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQog
ewogICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5pc01ldGFkYXRhUmVhZHkoKSkgewotICAgICAg
ICBjb25kaXRpb25hbGx5R29GdWxsc2NyZWVuQWZ0ZXJQbGF5KCk7CiAgICAgICAgIG1fd2FpdE1l
dGFkYXRhUG9wRGlhbG9nQ291bnRlciA9IDA7CiAgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBs
YXlXaXRoTWV0YWRhdGFSZWFkeSgpOwogICAgICAgICByZXR1cm47CkBAIC03MjEsNyArNjgxLDYg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQoVGltZXI8
TWVkaWFQbGF5ZXJQcml2YXRlPiopCiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChtX3BsYXRmb3Jt
UGxheWVyLT5pc01ldGFkYXRhUmVhZHkoKSkgewogICAgICAgICAgICAgbV9wbGF0Zm9ybVBsYXll
ci0+cGxheVdpdGhNZXRhZGF0YVJlYWR5KCk7Ci0gICAgICAgICAgICBjb25kaXRpb25hbGx5R29G
dWxsc2NyZWVuQWZ0ZXJQbGF5KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV93YWl0
TWV0YWRhdGFUaW1lci5zdGFydE9uZVNob3QoY2hlY2tNZXRhZGF0YVJlYWR5SW50ZXJ2YWwpOwog
ICAgIH0KQEAgLTc1OCwxMiArNzE3LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQXV0
aGVudGljYXRpb25OZWVkZWQoTU1SQXV0aENoYWxsZW5nZSYgYXV0aENoYWxsZW5nZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZnJhbWVWaWV3KCkgfHwgIWZyYW1lVmlldygp
LT5ob3N0V2luZG93KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1faXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5naW5nID0gdHJ1ZTsKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6
Omluc3RhbmNlKCktPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHVybCwgcHJvdGVjdGlvblNwYWNl
LCBjcmVkZW50aWFsLAotICAgICAgICB0aGlzLCBmcmFtZVZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSk7CisgICAgICAgIHRoaXMsIG1fd2ViQ29yZVBsYXllci0+bWVk
aWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUNoYWxsZW5nZVJl
c3VsdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNw
YWNlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlc3VsdCByZXN1bHQsIGNvbnN0IENyZWRlbnRp
YWwmIGNyZWRlbnRpYWwpCkBAIC03NzMsOCArNzI5LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6Om5vdGlmeUNoYWxsZW5nZVJlc3VsdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFByb3RlY3Rp
b24KICAgICBpZiAocmVzdWx0ICE9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU3VjY2VzcyB8fCAh
dXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wbGF0Zm9ybVBsYXllci0+
cmVsb2FkV2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCkudXRmOChTdHJpbmc6OlN0cmlj
dENvbnZlcnNpb24pLmRhdGEoKSwKLSAgICAgICAgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0Zjgo
U3RyaW5nOjpTdHJpY3RDb252ZXJzaW9uKS5kYXRhKCksCisgICAgbV9wbGF0Zm9ybVBsYXllci0+
cmVsb2FkV2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCkudXRmOCh0cnVlKS5kYXRhKCks
CisgICAgICAgIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KHRydWUpLmRhdGEoKSwKICAgICAg
ICAgc3RhdGljX2Nhc3Q8TU1SQXV0aENoYWxsZW5nZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihj
cmVkZW50aWFsLnBlcnNpc3RlbmNlKCkpKTsKIH0KIApAQCAtODU5LDYgKzgxNSwxMSBAQCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjpw
bGF0Zm9ybVdpbmRvdygpCiAgICAgcmV0dXJuIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJD
bGllbnQoKS0+bWVkaWFQbGF5ZXJIb3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5w
bGF0Zm9ybVdpbmRvdygpOwogfQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVySXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
K30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7CkBAIC04ODMsNyArODQ0LDcgQEAg
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBj
b25zdAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogc3RhdGljIGNvbnN0IGRv
dWJsZSBCdWZmZXJpbmdBbmltYXRpb25EZWxheSA9IDEuMCAvIDI0Owotc3RhdGljIGNoYXIqIHNf
YnVmZmVyaW5nSW1hZ2VEYXRhID0gMDsKK3N0YXRpYyB1bnNpZ25lZCogc19idWZmZXJpbmdJbWFn
ZURhdGEgPSAwOwogc3RhdGljIGludCBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggPSAwOwogc3RhdGlj
IGludCBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gMDsKIApAQCAtOTA3LDIzICs4NjgsMTkgQEAg
c3RhdGljIHZvaWQgbG9hZEJ1ZmZlcmluZ0ltYWdlRGF0YSgpCiAgICAgc3RhdGljIGJvb2wgbG9h
ZGVkID0gZmFsc2U7CiAgICAgaWYgKCFsb2FkZWQpIHsKICAgICAgICAgc3RhdGljIEltYWdlKiBi
dWZmZXJpbmdJY29uID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ2aWRidWZmZXIiKS5s
ZWFrUmVmKCk7Ci0gICAgICAgIE5hdGl2ZUltYWdlU2tpYSogbmF0aXZlSW1hZ2UgPSBidWZmZXJp
bmdJY29uLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBpZiAoIW5hdGl2
ZUltYWdlKQotICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghbmF0aXZlSW1hZ2Ut
PmlzRGF0YUNvbXBsZXRlKCkpCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0g
YnVmZmVyaW5nSWNvbi0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYg
KCFuYXRpdmVJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBsb2FkZWQgPSB0
cnVlOwotICAgICAgICBuYXRpdmVJbWFnZS0+Yml0bWFwKCkubG9ja1BpeGVscygpOworICAgICAg
ICBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggPSBidWZmZXJpbmdJY29uLT53aWR0aCgpOworICAgICAg
ICBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gYnVmZmVyaW5nSWNvbi0+aGVpZ2h0KCk7CisgICAg
ICAgIGludCBidWZTaXplID0gYnVmZmVyaW5nSWNvbi0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAg
c19idWZmZXJpbmdJbWFnZURhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KG1hbGxvYyhidWZT
aXplKSk7CiAKLSAgICAgICAgaW50IGJ1ZlNpemUgPSBuYXRpdmVJbWFnZS0+Yml0bWFwKCkud2lk
dGgoKSAqIG5hdGl2ZUltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSAqIDQ7Ci0gICAgICAgIHNfYnVm
ZmVyaW5nSW1hZ2VXaWR0aCA9IG5hdGl2ZUltYWdlLT5iaXRtYXAoKS53aWR0aCgpOwotICAgICAg
ICBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgp
OwotICAgICAgICBzX2J1ZmZlcmluZ0ltYWdlRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxs
b2MoYnVmU2l6ZSkpOwotICAgICAgICBtZW1jcHkoc19idWZmZXJpbmdJbWFnZURhdGEsIG5hdGl2
ZUltYWdlLT5iaXRtYXAoKS5nZXRQaXhlbHMoKSwgYnVmU2l6ZSk7CisgICAgICAgIG5hdGl2ZUlt
YWdlLT5yZWFkUGl4ZWxzKHNfYnVmZmVyaW5nSW1hZ2VEYXRhLCBzX2J1ZmZlcmluZ0ltYWdlV2lk
dGggKiBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0KTsKIAotICAgICAgICBuYXRpdmVJbWFnZS0+Yml0
bWFwKCkudW5sb2NrUGl4ZWxzKCk7CiAgICAgICAgIGJ1ZmZlcmluZ0ljb24tPmRlcmVmKCk7CiAg
ICAgfQogfQpAQCAtOTM5LDggKzg5Niw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZm
ZXJpbmdUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6c2V0QnVmZmVyaW5nKGJvb2wgYnVmZmVyaW5nKQogewotICAgIGlmICgh
aGFzVmlkZW8oKSkKKyAgICBpZiAoIW1fd2ViQ29yZVBsYXllciB8fCAhbV93ZWJDb3JlUGxheWVy
LT5tZWRpYVBsYXllckNsaWVudCgpIHx8ICFtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xp
ZW50KCktPm1lZGlhUGxheWVySXNWaWRlbygpKQogICAgICAgICBidWZmZXJpbmcgPSBmYWxzZTsg
Ly8gQnVmZmVyaW5nIGFuaW1hdGlvbiBub3QgdmlzaWJsZSBmb3IgYXVkaW8uCisKICAgICBpZiAo
YnVmZmVyaW5nICE9IG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7CiAgICAgICAgIG1fc2hvd0J1ZmZl
cmluZ0ltYWdlID0gYnVmZmVyaW5nOwogICAgICAgICBpZiAoYnVmZmVyaW5nKSB7CkBAIC05Njgs
NyArOTI2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlVGV4dHVyZUlkKCkKICAgICByZXR1
cm4gdGV4aWQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkcmF3QnVmZmVyaW5nQW5p
bWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGludCBwb3NpdGlvbkxv
Y2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpk
cmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGNvbnN0IEdyYXBoaWNzOjpHTEVTMlByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgaWYgKG1fc2hv
d0J1ZmZlcmluZ0ltYWdlICYmIHNfYnVmZmVyaW5nSW1hZ2VEYXRhICYmICFpc0Z1bGxzY3JlZW4o
KSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7
CkBAIC05OTcsMzYgKzk1NSw2OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHJhd0J1ZmZl
cmluZ0FuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cgogICAgICAgICB2
ZXJ0aWNlc1syXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KGJ4LCBieSkpOwog
ICAgICAgICB2ZXJ0aWNlc1szXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KGJ4
LCAtYnkpKTsKIAotICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlv
biwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB2ZXJ0aWNlcyk7Ci0gICAgICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
IHRleGNvb3Jkcyk7CisgICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKKyAgICAgICAgZ2xCbGVu
ZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgZ2xVbmlmb3Jt
MWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgMS4wKTsKKyAgICAgICAgZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHZlcnRpY2VzKTsKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0u
dGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7
CiAgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwogICAgIH0KIH0K
ICNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y29uZGl0aW9uYWxseUdvRnVsbHNj
cmVlbkFmdGVyUGxheSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25Db25kaXRpb25hbGx5
RW50ZXJGdWxsc2NyZWVuKCkKIHsKKyAgICBEb2N1bWVudCogb3duaW5nRG9jdW1lbnQgPSBtX3dl
YkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyT3duaW5nRG9jdW1l
bnQoKTsKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RGV2aWNlSW5mbyogaW5mbyA9IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpEZXZpY2VJbmZvOjppbnN0YW5jZSgpOwotICAgIGlmIChoYXNWaWRl
bygpICYmIG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJJ
c0Z1bGxzY3JlZW5QZXJtaXR0ZWQoKSAmJiBpbmZvLT5pc01vYmlsZSgpKSB7CisKKyAgICAvLyBE
b24ndCBhbGxvdyB2aWRlbyBpbiA8ZW1iZWQ+IGFuZCA8b2JqZWN0PiBjb250YWluZXJzIHRvIGdv
IGZ1bGxzY3JlZW4KKyAgICAvLyBvbiBwbGF5IGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBjdXJyZW50
bHkgd29yay4gRGV0ZWN0IHRoaXMgYnkgY2hlY2tpbmcKKyAgICAvLyBmb3IgTWVkaWFEb2N1bWVu
dCB3aXRoIGEgcGFyZW50IGRvY3VtZW50LgorICAgIGlmIChvd25pbmdEb2N1bWVudC0+aXNNZWRp
YURvY3VtZW50KCkgJiYgb3duaW5nRG9jdW1lbnQtPnBhcmVudERvY3VtZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChpbmZvLT5pc01vYmlsZSgpKSB7CiAgICAgICAgIC8vIFRoaXMg
aXMgYSBtb2JpbGUgZGV2aWNlIChzbWFsbCBzY3JlZW4pLCBub3QgYSB0YWJsZXQsIHNvIHdlCiAg
ICAgICAgIC8vIGVudGVyIGZ1bGxzY3JlZW4gdmlkZW8gb24gdXNlci1pbml0aWF0ZWQgcGxheXMu
CiAgICAgICAgIGJvb2wgbm90aGluZ0lzRnVsbHNjcmVlbiA9ICFtX3dlYkNvcmVQbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVySXNGdWxsc2NyZWVuKCk7CiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgICAgICBpZiAobV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXll
ckNsaWVudCgpLT5tZWRpYVBsYXllck93bmluZ0RvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVl
bigpKQorICAgICAgICBpZiAob3duaW5nRG9jdW1lbnQtPndlYmtpdElzRnVsbFNjcmVlbigpKQog
ICAgICAgICAgICAgbm90aGluZ0lzRnVsbHNjcmVlbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAg
IGlmIChub3RoaW5nSXNGdWxsc2NyZWVuICYmIGN1cnJlbnRUaW1lKCkgPT0gMC4wZikgewotICAg
ICAgICAgICAgLy8gT25seSBlbnRlciBmdWxsc2NyZWVuIHdoZW4gcGxheWluZyBmcm9tIHRoZSBi
ZWdpbm5pbmcuIERvaW5nCi0gICAgICAgICAgICAvLyBzbyBvbiBldmVyeSBwbGF5IGlzIHN1cmUg
dG8gYW5ub3kgdGhlIHVzZXIgd2hvIGRvZXMgbm90IHdhbnQKLSAgICAgICAgICAgIC8vIHRvIHdh
dGNoIHRoZSB2aWRlbyBmdWxsc2NyZWVuLiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBjYWxsCi0g
ICAgICAgICAgICAvLyB3aWxsIGZhaWwgaWYgd2UgYXJlIG5vdCBoZXJlIGR1ZSB0byBhIHVzZXIg
Z2VzdHVyZSwgYXMgcGVyIHRoZQotICAgICAgICAgICAgLy8gY2hlY2sgaW4gRG9jdW1lbnQ6OnJl
cXVlc3RGdWxsU2NyZWVuRm9yRWxlbWVudCgpIHRvIHByZXZlbnQKLSAgICAgICAgICAgIC8vIHBv
cHVwcy4KKyAgICAgICAgaWYgKG5vdGhpbmdJc0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBtX3dl
YkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRW50ZXJGdWxsc2Ny
ZWVuKCk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpv
bkV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXll
ckNsaWVudCgpLT5tZWRpYVBsYXllcklzRnVsbHNjcmVlbigpKQorICAgICAgICBtX3dlYkNvcmVQ
bGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRXhpdEZ1bGxzY3JlZW4oKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQ3JlYXRlSG9sZVB1bmNoUmVjdCgpCit7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIENyZWF0ZSBwbGF0Zm9y
bSBsYXllciBmb3IgdmlkZW8gKGNyZWF0ZSBob2xlIHB1bmNoIHJlY3QpLgorICAgIGlmICghbV9w
bGF0Zm9ybUxheWVyICYmIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkgeworICAgICAg
ICBtX3Nob3dCdWZmZXJpbmdJbWFnZSA9IGZhbHNlOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIg
PSBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUobV93ZWJDb3JlUGxheWVyKTsKKyAgICB9
CisjZW5kaWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uRGVzdHJveUhvbGVQdW5j
aFJlY3QoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBzZXRCdWZm
ZXJpbmcoZmFsc2UpOworICAgIC8vIFJlbW92ZSBtZWRpYSBwbGF5ZXIgZnJvbSBwbGF0Zm9ybSBs
YXllciAocmVtb3ZlIGhvbGUgcHVuY2ggcmVjdCkuCisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikg
eworICAgICAgICBzdGF0aWNfY2FzdDxWaWRlb0xheWVyV2ViS2l0VGhyZWFkKj4obV9wbGF0Zm9y
bUxheWVyLmdldCgpKS0+c2V0TWVkaWFQbGF5ZXIoMCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXll
ci5jbGVhcigpOworICAgIH0KKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQ
cml2YXRlQmxhY2tCZXJyeS5oCmluZGV4IGJhNGM2YTNhZDBlNWRkMTA2MTk4NzRiZThkYWI4YjY1
ZTk4YTZlYjguLmIzNDY1YmIxMTExOTM4ZDk5ODVjMzY3MDNhOTAyMTg5MjEyYWI0MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQ
bGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCkBAIC0yNiw4
ICsyNiwxMyBAQAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVBsYXllci5oPgogCiBuYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CisKIG5hbWVzcGFjZSBQbGF0Zm9ybSB7CiBjbGFzcyBJbnRSZWN0
OworCituYW1lc3BhY2UgR3JhcGhpY3MgeworY2xhc3MgR0xFUzJQcm9ncmFtOworfQogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU1LDcgKzYwLDcgQEAgcHVibGljOgogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OwotICAgIHZvaWQgZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7
CisgICAgdm9pZCBkcmF3QnVmZmVyaW5nQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0m
KTsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXkoKTsKQEAgLTExMiw2ICsxMTcsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmll
TG9hZFR5cGUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5n
KCk7CisKICAgICB2b2lkIHJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKTsKICAgICB2b2lkIHNldEZ1
bGxzY3JlZW5XZWJQYWdlQ2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNsaWVudCop
OwogICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBnZXRXaW5kb3co
KTsKQEAgLTE0Miw5ICsxNDksMTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IG9uQXV0aGVudGljYXRpb25OZWVkZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUkF1dGhDaGFs
bGVuZ2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgb25BdXRoZW50aWNhdGlvbkFjY2VwdGVkKGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpNTVJBdXRoQ2hhbGxlbmdlJikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIG9uQ29uZGl0aW9uYWxseUVudGVyRnVsbHNjcmVlbigpOworICAgIHZpcnR1YWwg
dm9pZCBvbkV4aXRGdWxsc2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIG9uQ3JlYXRlSG9sZVB1
bmNoUmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBvbkRlc3Ryb3lIb2xlUHVuY2hSZWN0KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2hhbGxlbmdlUmVzdWx0KGNvbnN0IEtVUkwmLCBjb25z
dCBQcm90ZWN0aW9uU3BhY2UmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlc3VsdCwgY29uc3Qg
Q3JlZGVudGlhbCYpOwogCisgICAgdmlydHVhbCBib29sIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc0VsZW1lbnRQYXVzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNU
YWJWaXNpYmxlKCkgY29uc3Q7CkBAIC0xNzQsMTAgKzE4Niw4IEBAIHByaXZhdGU6CiAgICAgVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX2J1ZmZlcmluZ1RpbWVyOwogICAgIFJlZlB0cjxQbGF0
Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CiAgICAgYm9vbCBtX3Nob3dCdWZmZXJpbmdJbWFn
ZTsKLSAgICBib29sIG1fbWVkaWFJc0J1ZmZlcmluZzsKICNlbmRpZgogCi0gICAgdm9pZCBjb25k
aXRpb25hbGx5R29GdWxsc2NyZWVuQWZ0ZXJQbGF5KCk7CiAgICAgdm9pZCB1c2VyRHJpdmVuU2Vl
a1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwogICAgIFRpbWVyPE1lZGlh
UGxheWVyUHJpdmF0ZT4gbV91c2VyRHJpdmVuU2Vla1RpbWVyOwogICAgIGZsb2F0IG1fbGFzdFNl
ZWtUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcAppbmRl
eCBjMjIyNTRjYjczNGNkOThhNjA3ZWY2ZTNkOWE2YWQzM2Q5MGFiNmQ3Li5hZjcxYzEwYmY2Zjk0
MGZjODZmZTFmMjUxMDdjZmI5ZDQ5MWUxNmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxh
eWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtNDEsNyArNDEsNyBAQCB2b2lkIFBsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkOjpzZXRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCiB7CiAgICAg
bV9wbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKICAgICBzZXROZWVkc1RleHR1cmUoaXNEcmF3YWJs
ZSgpICYmIHBsdWdpblZpZXcpOwotICAgIHNldExheWVyUHJvZ3JhbVNoYWRlcihMYXllclByb2dy
YW1TaGFkZXJSR0JBKTsKKyAgICBzZXRMYXllclByb2dyYW0oTGF5ZXJQcm9ncmFtUkdCQSk7CiAK
ICAgICBpZiAobV9wbHVnaW5WaWV3KQogICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1
cmUuY3BwCmluZGV4IDEzMjRkMTUzNjdlZjg5MDdjZDZjNTIyN2E4OTNhMzhiYzA1NjJkZjYuLmNl
ZjQ1NjM3NzM2MjlhZWU5MTZjMTJjOTExOGNlYzQwMWM2ZTg3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmNwcApA
QCAtMjUsMzYgKzI1LDIxIEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRleHR1
cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCiAKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxT
a0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogCi0jZGVmaW5lIERFQlVHX1RFWFRVUkVfVVBMT0FEUyAwCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgY29weUltYWdlRGF0YSh1bnNpZ25lZCBjaGFy
KiBkc3QsIGludCBkc3RTdHJpZGUsIGludCBkc3RYLCBpbnQgZHN0WSwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBpbnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwg
aW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBkc3QgKz0gKGRzdFkgKiBk
c3RTdHJpZGUpICsgKFRleHR1cmU6OmJ5dGVzUGVyUGl4ZWwoKSAqIGRzdFgpOwotICAgIHNyYyAr
PSAoc3JjWSAqIHNyY1N0cmlkZSkgKyAoVGV4dHVyZTo6Ynl0ZXNQZXJQaXhlbCgpICogc3JjWCk7
Ci0gICAgaW50IGxlbmd0aCA9IFRleHR1cmU6OmJ5dGVzUGVyUGl4ZWwoKSAqIHdpZHRoOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICBtZW1jcHkoZHN0
LCBzcmMsIGxlbmd0aCk7Ci0gICAgICAgIGRzdCArPSBkc3RTdHJpZGU7Ci0gICAgICAgIHNyYyAr
PSBzcmNTdHJpZGU7Ci0gICAgfQotfQotCiBUZXh0dXJlOjpUZXh0dXJlKGJvb2wgaXNDb2xvcikK
ICAgICA6IG1fcHJvdGVjdGlvbkNvdW50KDApCi0gICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwg
bV9oYW5kbGUoMCkKICAgICAsIG1faXNDb2xvcihpc0NvbG9yKQogICAgICwgbV9pc09wYXF1ZShm
YWxzZSkKKyAgICAsIG1fYnVmZmVyU2l6ZUluQnl0ZXMoMCkKIHsKLSAgICB0ZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZCgpLT5pbnN0YWxsKHRoaXMpOworICAgIHRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkKCktPmluc3RhbGwodGhpcywgSW50U2l6ZSgpLCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3NhcnkpOwogfQogCiBUZXh0dXJlOjp+VGV4
dHVyZSgpCkBAIC02MiwxMTEgKzQ3LDI5IEBAIFRleHR1cmU6On5UZXh0dXJlKCkKICAgICB0ZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlRGVzdHJveWVkKHRoaXMpOwogfQog
Ci12b2lkIFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IFNrQml0bWFwJiBjb250ZW50cywg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlLCBib29sIGlzT3Bh
cXVlKQordm9pZCBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhjb25zdCBUZXh0dXJlOjpIb3N0VHlw
ZSYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGls
ZSwgYm9vbCBpc09wYXF1ZSkKIHsKLSAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QoZGlydHlSZWN0
KTsKLQotICAgIHRpbGVEaXJ0eVJlY3QuaW50ZXJzZWN0KHRpbGUpOwotICAgIGlmICh0aWxlRGly
dHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc09wYXF1ZSA9IGlz
T3BhcXVlOwotCi0gICAgaW50IHN0cmlkZSA9IGJ5dGVzUGVyUGl4ZWwoKSAqIGNvbnRlbnRzLndp
ZHRoKCk7Ci0gICAgaW50IHggPSB0aWxlRGlydHlSZWN0LngoKSAtIGRpcnR5UmVjdC54KCk7Ci0g
ICAgaW50IHkgPSB0aWxlRGlydHlSZWN0LnkoKSAtIGRpcnR5UmVjdC55KCk7Ci0gICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKGNvbnRlbnRzKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29udGVudHMuZ2V0UGl4ZWxzKCkpOwotICAgIHBp
eGVscyArPSAoeSAqIHN0cmlkZSkgKyAoYnl0ZXNQZXJQaXhlbCgpICogeCk7Ci0gICAgaWYgKCFw
aXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgc3ViSW1hZ2UgPSB0aWxlLnNpemUo
KSA9PSBtX3NpemU7Ci0gICAgSW50U2l6ZSBzaXplID0gc3ViSW1hZ2UgPyB0aWxlRGlydHlSZWN0
LnNpemUoKSA6IHRpbGUuc2l6ZSgpOwotICAgIEludFNpemUgY29udGVudHNTaXplKEludFNpemUo
Y29udGVudHMud2lkdGgoKSwgY29udGVudHMuaGVpZ2h0KCkpKTsKLQotI2lmIERFQlVHX1RFWFRV
UkVfVVBMT0FEUwotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN1YkltYWdlID8gIlNVQklN
QUdFIiA6ICJJTUFHRSIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICB0aWxlID0gKHg9JWQseT0l
ZCx3aWR0aD0lZCxoZWlnaHQ9JWQpLCBtX3NpemUgPSAoJWR4JWQpXG4iLCB0aWxlLngoKSwgdGls
ZS55KCksIHRpbGUud2lkdGgoKSwgdGlsZS5oZWlnaHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIHRpbGVEaXJ0eVJlY3QgPSAoeD0l
ZCx5PSVkLHdpZHRoPSVkLGhlaWdodD0lZCksIGNvbnRlbnRzLnNpemUoKSA9ICglZHglZClcbiIs
IHRpbGVEaXJ0eVJlY3QueCgpLCB0aWxlRGlydHlSZWN0LnkoKSwgdGlsZURpcnR5UmVjdC53aWR0
aCgpLCB0aWxlRGlydHlSZWN0LmhlaWdodCgpLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVu
dHNTaXplLmhlaWdodCgpKTsKLSAgICBJbnRTaXplIHNpemVCZWZvcmVTaHVuayA9IHNpemU7Ci0j
ZW5kaWYKLQotICAgIHNpemUgPSBzaXplLnNocnVua1RvKGNvbnRlbnRzU2l6ZSk7Ci0KLSNpZiBE
RUJVR19URVhUVVJFX1VQTE9BRFMKLSAgICBpZiAoc2l6ZSAhPSBzaXplQmVmb3JlU2h1bmspCi0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBTSFJVTkshISEhXG4iKTsKLSNlbmRpZgotCi0gICAg
aWYgKCFoYXNUZXh0dXJlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IGhhdmUgYmVlbiBldmljdGVk
IGJ5IHRoZSBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCwKLSAgICAgICAgLy8gYXR0ZW1w
dCB0byBpbnN0YWxsIHVzIGFnYWluLgotICAgICAgICBpZiAoIXRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkKCktPmluc3RhbGwodGhpcykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7Ci0KLSAgICBB
U1NFUlQoc2l6ZS53aWR0aCgpID49IDApOwotICAgIGJvb2wgZG9lc1RpbGVTdHJpZGVFcXVhbFRl
eHR1cmVTdHJpZGUgPSBjb250ZW50cy53aWR0aCgpID09IHNpemUud2lkdGgoKTsKLQotICAgIE93
bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHRtcDsKLSAgICBpZiAoIWRvZXNUaWxlU3RyaWRlRXF1
YWxUZXh0dXJlU3RyaWRlKSB7Ci0jaWYgZGVmaW5lZChHTF9VTlBBQ0tfUk9XX0xFTkdUSCkKLSAg
ICAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgY29udGVudHMud2lkdGgo
KSk7Ci0jZWxzZQotICAgICAgICB0bXAgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFy
W3NpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclBpeGVsKCldKTsKLSAgICAg
ICAgY29weUltYWdlRGF0YSh0bXAuZ2V0KCksIGJ5dGVzUGVyUGl4ZWwoKSAqIHNpemUud2lkdGgo
KSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICBwaXhlbHMsIHN0cmlkZSwgMCwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICBwaXhlbHMgPSB0bXAuZ2V0KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoc3ViSW1hZ2Up
IHsKLSNpZiBERUJVR19URVhUVVJFX1VQTE9BRFMKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJn
bFRleFN1YkltYWdlMkQoJWQsICVkLCAlZCwgJWQpXG4iLCB0aWxlRGlydHlSZWN0LngoKSAtIHRp
bGUueCgpLCB0aWxlRGlydHlSZWN0LnkoKSAtIHRpbGUueSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgZG91YmxlIHQgPSBj
dXJyZW50VGltZSgpOwotI2VuZGlmCi0gICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgdGlsZURpcnR5UmVjdC54KCkgLSB0aWxl
LngoKSwgdGlsZURpcnR5UmVjdC55KCkgLSB0aWxlLnkoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0jaWYgREVCVUdfVEVYVFVSRV9V
UExPQURTCi0gICAgICAgIHQgPSBjdXJyZW50VGltZSgpIC0gdDsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgICAgdGltZSA9ICVmIHMgKCVkIGJ5dGVzKVxuIiwgdCwgc2l6ZS53aWR0aCgpKnNp
emUuaGVpZ2h0KCkqNCk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotI2lmIERFQlVHX1RFWFRVUkVf
VVBMT0FEUwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdsVGV4SW1hZ2UyRCglZCwgJWQpXG4i
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBkb3VibGUgdCA9IGN1cnJl
bnRUaW1lKCk7Ci0jZW5kaWYKLSAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IEdMX1JHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgcGl4ZWxzKTsKLSNpZiBERUJVR19URVhUVVJFX1VQTE9BRFMKLSAgICAgICAg
dCA9IGN1cnJlbnRUaW1lKCkgLSB0OwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICB0aW1l
ID0gJWYgcyAoJWQgYnl0ZXMpXG4iLCB0LCBzaXplLndpZHRoKCkqc2l6ZS5oZWlnaHQoKSo0KTsK
LSNlbmRpZgotICAgIH0KLQotI2lmIGRlZmluZWQoR0xfVU5QQUNLX1JPV19MRU5HVEgpCi0gICAg
aWYgKCFkb2VzVGlsZVN0cmlkZUVxdWFsVGV4dHVyZVN0cmlkZSkKLSAgICAgICAgZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7Ci0jZW5kaWYKLQotICAgIEludFNpemUgb2xk
U2l6ZSA9IG1fc2l6ZTsKLSAgICBtX3NpemUgPSB0aWxlLnNpemUoKTsKLSAgICBpZiAobV9zaXpl
ICE9IG9sZFNpemUpCi0gICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRl
eHR1cmVSZXNpemVkKHRoaXMsIG9sZFNpemUpOworICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKG1faGFuZGxlKTsK
KyAgICBtX2hhbmRsZSA9IGNvbnRlbnRzOworICAgIHNpemVfdCBuZXdCdWZmZXJTaXplSW5CeXRl
cyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6YnVmZmVyU2l6ZUluQnl0ZXMobV9o
YW5kbGUpOworICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVTaXpl
SW5CeXRlc0NoYW5nZWQodGhpcywgbmV3QnVmZmVyU2l6ZUluQnl0ZXMgLSBtX2J1ZmZlclNpemVJ
bkJ5dGVzKTsKKyAgICBtX2J1ZmZlclNpemVJbkJ5dGVzID0gbmV3QnVmZmVyU2l6ZUluQnl0ZXM7
CiB9CiAKIHZvaWQgVGV4dHVyZTo6c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKICAgICBtX2lzT3BhcXVlID0gIWNvbG9yLmhhc0FscGhhKCk7CiAgICAgUkdCQTMyIHJn
YmEgPSBjb2xvci5yZ2IoKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZUlkKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMSwg
MSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgJnJnYmEpOworCisgICAgaWYgKG1faGFu
ZGxlKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZm
ZXIobV9oYW5kbGUpOworCisgICAgbV9oYW5kbGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OmNyZWF0ZUJ1ZmZlcihJbnRTaXplKDEsIDEpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OkJhY2tlZFdoZW5OZWNlc3NhcnkpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdjID0gbG9ja0J1ZmZlckRyYXdh
YmxlKG1faGFuZGxlKTsKKyAgICBnYy0+c2V0RmlsbENvbG9yKHJnYmEpOworICAgIGdjLT5hZGRG
aWxsUmVjdChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRSZWN0KDAsIDAsIDEsIDEpKTsKKyAg
ICByZWxlYXNlQnVmZmVyRHJhd2FibGUobV9oYW5kbGUpOwogCiAgICAgSW50U2l6ZSBvbGRTaXpl
ID0gbV9zaXplOwogICAgIG1fc2l6ZSA9IEludFNpemUoMSwgMSk7CkBAIC0xNzQsMTIgKzc3LDEy
IEBAIHZvaWQgVGV4dHVyZTo6c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
ICAgICAgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZVJlc2l6ZWQo
dGhpcywgb2xkU2l6ZSk7CiB9CiAKLWJvb2wgVGV4dHVyZTo6cHJvdGVjdChjb25zdCBJbnRTaXpl
JiBzaXplKQorYm9vbCBUZXh0dXJlOjpwcm90ZWN0KGNvbnN0IEludFNpemUmIHNpemUsIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSB0eXBlKQogewogICAgIGlmICgh
aGFzVGV4dHVyZSgpKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGJlZW4gZXZpY3RlZCBieSB0
aGUgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQsCiAgICAgICAgIC8vIGF0dGVtcHQgdG8g
aW5zdGFsbCB1cyBhZ2Fpbi4KLSAgICAgICAgaWYgKCF0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZCgpLT5pbnN0YWxsKHRoaXMpKQorICAgICAgICBpZiAoIXRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkKCktPmluc3RhbGwodGhpcywgc2l6ZSwgdHlwZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xODgsMTIgKzkxLDggQEAgYm9vbCBUZXh0dXJlOjpwcm90
ZWN0KGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fc2l6ZSA9PSBzaXplKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIEludFNpemUgb2xkU2l6ZSA9IG1fc2l6ZTsKLSAgICBtX3Np
emUgPSBzaXplOwotICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVS
ZXNpemVkKHRoaXMsIG9sZFNpemUpOworICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
KCktPnJlc2l6ZVRleHR1cmUodGhpcywgc2l6ZSwgdHlwZSk7CiAKLSAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCAsIEdMX1JHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4dHVyZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmgK
aW5kZXggNmRjNGZkYmNjYzA3NTU2MDQwYmEwODgwYTRhN2I1OGI5MTMxMDMzMy4uZTUyOTQwODY0
YTA4MTVjMTg2MGEyOTExYzk2Y2U4ZWEzZWYyYTNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlLmgKQEAgLTIzLDExICsy
MywxMCBAQAogCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKLWNsYXNzIFNrQml0bWFwOwotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENvbG9yOwpAQCAtNDgsMTAgKzQ3LDEyIEBAIHB1YmxpYzoKIAogICAgIH5U
ZXh0dXJlKCk7CiAKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVJZDsgfQorICAgIHR5cGVkZWYgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpC
dWZmZXIqIEdwdUhhbmRsZTsKKyAgICB0eXBlZGVmIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBIb3N0VHlwZTsKIAotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX3RleHR1cmVJZDsgfQotICAgIGJvb2wgaGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dHVyZUlkOyB9CisgICAgR3B1SGFuZGxlIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFuZGxlOyB9CisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1faGFuZGxl
OyB9CisgICAgYm9vbCBoYXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KIAog
ICAgIGJvb2wgaXNDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xvcjsgfQogICAgIGJvb2wg
aXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CkBAIC01OSw5ICs2MCwxMSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1Byb3RlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdGVj
dGlvbkNvdW50ID4gMDsgfQogICAgIHZvaWQgcHJvdGVjdCgpIHsgKyttX3Byb3RlY3Rpb25Db3Vu
dDsgfQogICAgIHZvaWQgdW5wcm90ZWN0KCkgeyAtLW1fcHJvdGVjdGlvbkNvdW50OyB9Ci0gICAg
Ym9vbCBwcm90ZWN0KGNvbnN0IEludFNpemUmKTsKIAotICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
Y29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IEludFJlY3QmIHRpbGUsIGJvb2wgaXNPcGFxdWUpOworICAgIC8vIFRoaXMgd2lsbCBlbnN1cmUg
dGhlIHRleHR1cmUgaGFzIGJhY2tpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHNpemUKKyAgICBib29s
IHByb3RlY3QoY29uc3QgSW50U2l6ZSYsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
QnVmZmVyVHlwZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmFja2VkV2hlbk5l
Y2Vzc2FyeSk7CisKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IEhvc3RUeXBlJiBjb250
ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlLCBib29s
IGlzT3BhcXVlKTsKICAgICB2b2lkIHNldENvbnRlbnRzVG9Db2xvcihjb25zdCBDb2xvciYpOwog
CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkBAIC02OSwyNiAr
NzIsMzEgQEAgcHVibGljOgogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KICAgICBzdGF0aWMgaW50IGJ5dGVzUGVyUGl4ZWwoKSB7IHJldHVybiA0OyB9
CiAKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclNpemVJ
bkJ5dGVzOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkOwogCiAgICAgVGV4dHVyZShib29sIGlzQ29sb3IgPSBmYWxzZSk7Ci0KLSAg
ICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKKyAgICB2b2lkIHNldFRleHR1cmVJZChH
cHVIYW5kbGUgaWQpCiAgICAgewotICAgICAgICBtX3RleHR1cmVJZCA9IGlkOworICAgICAgICBt
X2hhbmRsZSA9IGlkOwogCiAgICAgICAgIC8vIFdlIGFzc3VtZSBpdCBpcyBhIG5ld2x5IGFsbG9j
YXRlZCB0ZXh0dXJlLAogICAgICAgICAvLyBhbmQgdGh1cyBlbXB0eSwgb3IgMCwgd2hpY2ggd291
bGQgb2YgY291cnNlCiAgICAgICAgIC8vIGJlIGVtcHR5LgogICAgICAgICBtX3NpemUgPSBJbnRT
aXplKCk7CisgICAgICAgIG1fYnVmZmVyU2l6ZUluQnl0ZXMgPSAwOwogICAgIH0KIAorICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKwogICAg
IGludCBtX3Byb3RlY3Rpb25Db3VudDsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICBH
cHVIYW5kbGUgbV9oYW5kbGU7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgYm9vbCBtX2lzQ29s
b3I7CiAgICAgYm9vbCBtX2lzT3BhcXVlOworICAgIHNpemVfdCBtX2J1ZmZlclNpemVJbkJ5dGVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1Ro
cmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1Rl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAppbmRleCBkNjVjNGRhZGRiYmIyNTk4ZWIw
ZmEyNDE3MWM0ZTZhZjE0ZGQ3NGM4Li44NjY3OWYzM2M1Yjk1YTZjZGNhNDFkNDUzZmZhNzBkYjUz
M2FjOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLmNwcApAQCAtMjQsNyArMjQsOCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPFNrQml0bWFwLmg+CisKK3VzaW5nIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyOwogCiAjZGVmaW5lIERFQlVHX1RFWFRV
UkVfTUVNT1JZX1VTQUdFIDAKIApAQCAtNTcsNDIgKzU4LDIzIEBAIFRleHR1cmVDYWNoZUNvbXBv
c2l0aW5nVGhyZWFkOjpUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpCiB7CiB9CiAKLXVu
c2lnbmVkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjphbGxvY2F0ZVRleHR1cmVJZCgp
CitUZXh0dXJlOjpHcHVIYW5kbGUgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OmFsbG9j
YXRlVGV4dHVyZUlkKGNvbnN0IEludFNpemUmIHNpemUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6QnVmZmVyVHlwZSB0eXBlKQogewotICAgIHVuc2lnbmVkIHRleGlkOwotICAgIGds
R2VuVGV4dHVyZXMoMSwgJnRleGlkKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHRleGlkKTsKLSAgICBpZiAoIWdsSXNUZXh0dXJlKHRleGlkKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KLSAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdv
cmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlzIHNldCB0byBHTF9DTEFNUF9UT19FREdFLgotICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICByZXR1cm4gdGV4aWQ7CisgICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlQnVmZmVyKHNpemUsIHR5cGUp
OwogfQogCi12b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpmcmVlVGV4dHVyZUlk
KHVuc2lnbmVkIGlkKQorc3RhdGljIHZvaWQgZnJlZVRleHR1cmVJZChUZXh0dXJlOjpHcHVIYW5k
bGUgaWQpCiB7Ci0gICAgaWYgKGlkKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZpZCk7
CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95QnVmZmVyKGlkKTsK
IH0KIAogdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6Y29sbGVjdEdhcmJhZ2Uo
KQogewotICAgIGludCBkZWx0YSA9IDA7Ci0KICAgICBmb3IgKEdhcmJhZ2U6Oml0ZXJhdG9yIGl0
ID0gbV9nYXJiYWdlLmJlZ2luKCk7IGl0ICE9IG1fZ2FyYmFnZS5lbmQoKTsgKytpdCkgewogICAg
ICAgICBab21iaWVUZXh0dXJlJiB6b21iaWUgPSAqaXQ7CiAgICAgICAgIGZyZWVUZXh0dXJlSWQo
em9tYmllLmlkKTsKLSAgICAgICAgZGVsdGEgKz0gem9tYmllLnNpemUud2lkdGgoKSAqIHpvbWJp
ZS5zaXplLmhlaWdodCgpICogVGV4dHVyZTo6Ynl0ZXNQZXJQaXhlbCgpOwogICAgIH0KICAgICBt
X2dhcmJhZ2UuY2xlYXIoKTsKLQotICAgIGlmIChkZWx0YSkKLSAgICAgICAgZGVjTWVtb3J5VXNh
Z2UoZGVsdGEpOwogfQogCiB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp0ZXh0
dXJlUmVzaXplZChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiBvbGRTaXplKQpAQCAt
MTAzLDYgKzg1LDEzIEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1
cmVSZXNpemVkKFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFNpCiAgICAgICAgIHBydW5lKCk7
CiB9CiAKK3ZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVTaXplSW5C
eXRlc0NoYW5nZWQoVGV4dHVyZSosIGludCBkZWx0YSkKK3sKKyAgICBpbmNNZW1vcnlVc2FnZShk
ZWx0YSk7CisgICAgaWYgKGRlbHRhID4gMCkKKyAgICAgICAgcHJ1bmUoKTsKK30KKwogdm9pZCBU
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZURlc3Ryb3llZChUZXh0dXJlKiB0
ZXh0dXJlKQogewogICAgIGlmICh0ZXh0dXJlLT5pc0NvbG9yKCkpIHsKQEAgLTExMCwyNyArOTks
NDUgQEAgdm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZURlc3Ryb3ll
ZChUZXh0dXJlKiB0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXZpY3Qo
bV90ZXh0dXJlcy5maW5kKHRleHR1cmUpKTsKKyAgICBUZXh0dXJlU2V0OjppdGVyYXRvciBpdCA9
IG1fdGV4dHVyZXMuZmluZCh0ZXh0dXJlKTsKKyAgICBldmljdChpdCk7CisgICAgbV90ZXh0dXJl
cy5yZW1vdmUoaXQpOwogfQogCi1ib29sIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpp
bnN0YWxsKFRleHR1cmUqIHRleHR1cmUpCitib29sIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjppbnN0YWxsKFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUsIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyVHlwZSB0eXBlKQogewogICAgIGlmICgh
dGV4dHVyZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIXRleHR1cmUtPmhhc1Rl
eHR1cmUoKSkgewotICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBhbGxvY2F0ZVRleHR1cmVJ
ZCgpOworICAgIGlmICghdGV4dHVyZS0+aGFzVGV4dHVyZSgpICYmICFzaXplLmlzRW1wdHkoKSkg
eworICAgICAgICBUZXh0dXJlOjpHcHVIYW5kbGUgdGV4dHVyZUlkID0gYWxsb2NhdGVUZXh0dXJl
SWQoc2l6ZSwgdHlwZSk7CiAgICAgICAgIGlmICghdGV4dHVyZUlkKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIHRleHR1cmUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOwor
ICAgICAgICB0ZXh0dXJlLT5zZXRTaXplKHNpemUpOworICAgICAgICB0ZXh0dXJlUmVzaXplZCh0
ZXh0dXJlLCBJbnRTaXplKCkpOwogICAgIH0KIAotICAgIGlmICghdGV4dHVyZS0+aXNDb2xvcigp
KSB7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlcy5jb250YWlucyh0ZXh0dXJlKSkKLSAgICAgICAg
ICAgIG1fdGV4dHVyZXMuYWRkKHRleHR1cmUpOwotICAgIH0KKyAgICBpZiAoIXRleHR1cmUtPmlz
Q29sb3IoKSkKKyAgICAgICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6cmVzaXplVGV4
dHVyZShUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiBzaXplLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUgdHlwZSkKK3sKKyAgICBJbnRTaXplIG9sZFNp
emUgPSB0ZXh0dXJlLT5zaXplKCk7CisKKyAgICAvLyBSZWFsbG9jYXRlIHRoZSBidWZmZXIKKyAg
ICBUZXh0dXJlOjpHcHVIYW5kbGUgdGV4dHVyZUlkID0gYWxsb2NhdGVUZXh0dXJlSWQoc2l6ZSwg
dHlwZSk7CisgICAgaWYgKCF0ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGZyZWVUZXh0dXJlSWQodGV4dHVyZS0+dGV4dHVyZUlkKCkpOworICAgIHRleHR1cmUtPnNldFRl
eHR1cmVJZCh0ZXh0dXJlSWQpOworICAgIHRleHR1cmUtPnNldFNpemUoc2l6ZSk7CisgICAgdGV4
dHVyZVJlc2l6ZWQodGV4dHVyZSwgb2xkU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTE0MCwxMiArMTQ3LDE2IEBAIHZvaWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OmV2
aWN0KGNvbnN0IFRleHR1cmVTZXQ6Oml0ZXJhdG9yJiBpdCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgVGV4dHVyZSogdGV4dHVyZSA9ICppdDsKLSAgICBpZiAodGV4dHVyZS0+aGFzVGV4dHVyZSgp
KQorICAgIGlmICh0ZXh0dXJlLT5oYXNUZXh0dXJlKCkpIHsKKyAgICAgICAgaW50IGRlbHRhID0g
MDsKKyAgICAgICAgZGVsdGEgKz0gdGV4dHVyZS0+d2lkdGgoKSAqIHRleHR1cmUtPmhlaWdodCgp
ICogVGV4dHVyZTo6Ynl0ZXNQZXJQaXhlbCgpOworICAgICAgICBkZWx0YSArPSB0ZXh0dXJlLT5z
aXplSW5CeXRlcygpOworICAgICAgICBpZiAoZGVsdGEpCisgICAgICAgICAgICBkZWNNZW1vcnlV
c2FnZShkZWx0YSk7CiAgICAgICAgIG1fZ2FyYmFnZS5hcHBlbmQoWm9tYmllVGV4dHVyZSh0ZXh0
dXJlKSk7CisgICAgfQogCiAgICAgdGV4dHVyZS0+c2V0VGV4dHVyZUlkKDApOwotCi0gICAgbV90
ZXh0dXJlcy5yZW1vdmUoaXQpOwogfQogCiB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjp0ZXh0dXJlQWNjZXNzZWQoVGV4dHVyZSogdGV4dHVyZSkKQEAgLTE3Myw3ICsxODQsNyBA
QCB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjpwcnVuZShzaXplX3QgbGltaXQp
CiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgZm9yIChUZXh0dXJlU2V0Ojpp
dGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gbV90ZXh0dXJlcy5lbmQoKTsg
KytpdCkgewogICAgICAgICAgICAgVGV4dHVyZSogdGV4dHVyZSA9ICppdDsKLSAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc1Byb3RlY3RlZCgpKQorICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlz
UHJvdGVjdGVkKCkgfHwgKHRleHR1cmUtPnNpemUoKS5pc0VtcHR5KCkgJiYgIXRleHR1cmUtPnNp
emVJbkJ5dGVzKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZXZp
Y3QoaXQpOwogICAgICAgICAgICAgZm91bmQgPSB0cnVlOwpAQCAtMTg2LDcgKzE5Nyw2IEBAIHZv
aWQgVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnBydW5lKHNpemVfdCBsaW1pdCkKIAog
dm9pZCBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6Y2xlYXIoKQogewotICAgIG1fY2Fj
aGUuY2xlYXIoKTsKICAgICBtX2NvbG9ycy5jbGVhcigpOwogICAgIGNvbGxlY3RHYXJiYWdlKCk7
CiB9CkBAIC0xOTksMzIgKzIwOSwxNSBAQCB2b2lkIFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkOjpzZXRNZW1vcnlVc2FnZShzaXplX3QgbWVtb3J5VXNhZ2UpCiAjZW5kaWYKIH0KIAotUGFz
c1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6dGV4dHVyZUZv
clRpbGVkQ29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgYm9vbCBpc09wYXF1ZSkKK1Bhc3NSZWZQ
dHI8VGV4dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JUaWxl
ZENvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RUeXBlJiBjb250ZW50cywgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGJvb2wgaXNPcGFxdWUpCiB7Ci0g
ICAgSGFzaE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD46Oml0ZXJhdG9yIGl0ID0gbV9jYWNo
ZS5hZGQoa2V5KGNvbnRlbnRzKSwgVGV4dHVyZU1hcCgpKS5pdGVyYXRvcjsKLSAgICBUZXh0dXJl
TWFwJiBtYXAgPSAoKml0KS52YWx1ZTsKLQotICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGp0ID0g
bWFwLmFkZChpbmRleCwgUmVmUHRyPFRleHR1cmU+KCkpLml0ZXJhdG9yOwotICAgIFJlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlID0gKCpqdCkudmFsdWU7Ci0gICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAg
ICAgIHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7Ci0jaWYgREVCVUdfVEVYVFVSRV9NRU1PUllf
VVNBR0UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0ZXh0dXJlIDB4JXggZm9y
IDB4JXgrJWQgQCAoJWQsICVkKVxuIiwgdGV4dHVyZS5nZXQoKSwgY29udGVudHMucGl4ZWxSZWYo
KSwgY29udGVudHMucGl4ZWxSZWZPZmZzZXQoKSwgaW5kZXguaSgpLCBpbmRleC5qKCkpOwotI2Vu
ZGlmCi0gICAgICAgIG1hcC5zZXQoaW5kZXgsIHRleHR1cmUpOwotICAgIH0KKyAgICBSZWZQdHI8
VGV4dHVyZT4gdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKIAogICAgIC8vIFByb3RlY3QgbmV3
bHkgY3JlYXRlZCB0ZXh0dXJlIGZyb20gYmVpbmcgZXZpY3RlZC4KICAgICBUZXh0dXJlUHJvdGVj
dG9yIHByb3RlY3Rvcih0ZXh0dXJlLmdldCgpKTsKIAotICAgIEludFNpemUgY29udGVudHNTaXpl
KGNvbnRlbnRzLndpZHRoKCksIGNvbnRlbnRzLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IGRpcnR5
UmVjdChJbnRQb2ludCgpLCBjb250ZW50c1NpemUpOwotICAgIGlmICh0aWxlUmVjdC5zaXplKCkg
IT0gdGV4dHVyZS0+c2l6ZSgpKSB7Ci0jaWYgREVCVUdfVEVYVFVSRV9NRU1PUllfVVNBR0UKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJVcGRhdGluZyB0ZXh0dXJlIDB4JXggZm9yIDB4JXgrJWQg
QCAoJWQsICVkKVxuIiwgdGV4dHVyZS5nZXQoKSwgY29udGVudHMucGl4ZWxSZWYoKSwgY29udGVu
dHMucGl4ZWxSZWZPZmZzZXQoKSwgaW5kZXguaSgpLCBpbmRleC5qKCkpOwotI2VuZGlmCi0gICAg
ICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGNvbnRlbnRzLCBkaXJ0eVJlY3QsIHRpbGVSZWN0
LCBpc09wYXF1ZSk7Ci0gICAgfQorICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGNvbnRlbnRz
LCB0aWxlUmVjdCwgdGlsZVJlY3QsIGlzT3BhcXVlKTsKKwogICAgIHJldHVybiB0ZXh0dXJlLnJl
bGVhc2UoKTsKIH0KIApAQCAtMjU0LDcgKzI0Nyw3IEBAIFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnRleHR1cmVGb3JDb2xvcihjb25zdCBDb2xvciYK
ICAgICByZXR1cm4gdGV4dHVyZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dHVyZT4g
VGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IFJlZlB0
cjxUZXh0dXJlPiYgdGV4dHVyZUluLCBjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGJvb2wgaXNPcGFxdWUp
CitQYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkOjp1cGRh
dGVDb250ZW50cyhjb25zdCBSZWZQdHI8VGV4dHVyZT4mIHRleHR1cmVJbiwgY29uc3QgVGV4dHVy
ZTo6SG9zdFR5cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0LCBib29sIGlzT3BhcXVlKQogewogICAgIFJlZlB0cjxUZXh0dXJlPiB0
ZXh0dXJlKHRleHR1cmVJbik7CiAKQEAgLTI2NiwzNiArMjU5LDEyIEBAIFBhc3NSZWZQdHI8VGV4
dHVyZT4gVGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQ6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0
IFJlZlB0cjxUCiAgICAgLy8gUHJvdGVjdCBuZXdseSBjcmVhdGVkIHRleHR1cmUgZnJvbSBiZWlu
ZyBldmljdGVkLgogICAgIFRleHR1cmVQcm90ZWN0b3IgcHJvdGVjdG9yKHRleHR1cmUuZ2V0KCkp
OwogCisvLyBUT0RPOiBpZiB0aGlzIGlzIGEgcGFydGlhbCB1cGRhdGUgd2UgbmVlZCB0byBibGl0
IHRoZSBidWZmZXIgb24gdG9wIG9mIHRoZSBvdGhlcgogICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRl
bnRzKGNvbnRlbnRzLCBkaXJ0eVJlY3QsIHRpbGVSZWN0LCBpc09wYXF1ZSk7CiAKICAgICByZXR1
cm4gdGV4dHVyZS5yZWxlYXNlKCk7CiB9CiAKLVRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFk
OjpDb250ZW50c0tleSBUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZDo6a2V5KGNvbnN0IFNr
Qml0bWFwJiBjb250ZW50cykKLXsKLSAgICAvLyBUaGUgcGl4ZWxSZWYgaXMgYW4gYWRkcmVzcywg
YW5kIGFkZHJlc3NlcyBjYW4gYmUgcmV1c2VkIGJ5IHRoZSBhbGxvY2F0b3IKLSAgICAvLyBzbyBp
dCdzIHVuc3VpdGFibGUgdG8gdXNlIGFzIGEga2V5LiBJbnN0ZWFkLCBncmFiIHRoZSBnZW5lcmF0
aW9uLCB3aGljaAotICAgIC8vIGlzIGdsb2JhbGx5IHVuaXF1ZSBhY2NvcmRpbmcgdG8gdGhlIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24gaW4KLSAgICAvLyBTa1BpeGVsUmVmLmNwcC4KLSAgICB1aW50
MzJfdCBnZW5lcmF0aW9uID0gY29udGVudHMuZ2V0R2VuZXJhdGlvbklEKCk7Ci0KLSAgICAvLyBJ
ZiB0aGUgZ2VuZXJhdGlvbiBpcyBlcXVhbCB0byB0aGUgZGVsZXRlZCB2YWx1ZSwgdXNlIHNvbWV0
aGluZyBlbHNlIHRoYXQKLSAgICAvLyBpcyB1bmxpa2VseSB0byBjb3JyZXNwb25kIHRvIGEgZ2Vu
ZXJhdGlvbiBjdXJyZW50bHkgaW4gdXNlIG9yIHNvb24gdG8gYmUKLSAgICAvLyBpbiB1c2UuCi0g
ICAgdWludDMyX3QgZGVsZXRlZFZhbHVlID0gMDsKLSAgICBIYXNoVHJhaXRzPHVpbnQzMl90Pjo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKGRlbGV0ZWRWYWx1ZSk7Ci0gICAgaWYgKGdlbmVyYXRpb24g
PT0gZGVsZXRlZFZhbHVlKSB7Ci0gICAgICAgIC8vIFRoaXMgc3RyYXRlZ3kgd29ya3MgYXMgbG9u
ZyBhcyB0aGUgZGVsZXRlZCB2YWx1ZSBpcyAtMS4KLSAgICAgICAgQVNTRVJUKGRlbGV0ZWRWYWx1
ZSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpKTsKLSAgICAgICAgZ2VuZXJhdGlvbiA9IGRl
bGV0ZWRWYWx1ZSAvIDI7Ci0gICAgfQotCi0gICAgLy8gTm93IHRoZSBnZW5lcmF0aW9uIGFsb25l
IGRvZXMgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSB0ZXh0dXJlIGNvbnRlbnRzLgotICAgIC8v
IFRoZSBzYW1lIHBpeGVscmVmIGNhbiBiZSByZXVzZWQgaW4gYW5vdGhlciBiaXRtYXAgYnV0IHdp
dGggYSBkaWZmZXJlbnQKLSAgICAvLyBvZmZzZXQgKHNvbWV3aGF0IGNvbnRyaXZlZCwgYnV0IHBv
c3NpYmxlKS4KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdGlvbiwgY29udGVudHMu
cGl4ZWxSZWZPZmZzZXQoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L1RleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgKaW5k
ZXggZGY3NzkyZmEyZjI3ZTMyMmNmYWMzNjI0Y2RjNGQwYjc2NTU1Y2Q2ZS4uZDk2MWY1MTE2NGFj
MWM5ZDk3MzBjODZmMzlhODMzNDU1YzY4MDQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9UZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVGV4
dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUg
IkxheWVyVGlsZUluZGV4LmgiCiAjaW5jbHVkZSAiVGV4dHVyZS5oIgogCisjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpA
QCAtNTAsMTEgKzUxLDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBSZXRyaWV2ZSBhIHRl
eHR1cmUgZnJvbSB0aGUgY2FjaGUuCi0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlRm9y
VGlsZWRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBUaWxlSW5kZXgmLCBib29sIGlzT3BhcXVlKTsKKyAgICBQYXNzUmVmUHRy
PFRleHR1cmU+IHRleHR1cmVGb3JUaWxlZENvbnRlbnRzKGNvbnN0IFRleHR1cmU6Okhvc3RUeXBl
JiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRpbGVJbmRleCYsIGJv
b2wgaXNPcGFxdWUpOwogICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZUZvckNvbG9yKGNv
bnN0IENvbG9yJik7CiAKICAgICAvLyBVcGRhdGUgY29udGVudHMgb2YgYW4gZXhpc3RpbmcgdGV4
dHVyZSwgb3IgY3JlYXRlIGEgbmV3IG9uZSBpZiB0ZXh0dXJlIGlzIDAuCi0gICAgUGFzc1JlZlB0
cjxUZXh0dXJlPiB1cGRhdGVDb250ZW50cyhjb25zdCBSZWZQdHI8VGV4dHVyZT4mLCBjb25zdCBT
a0JpdG1hcCYgY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QsIGJvb2wgaXNPcGFxdWUpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdXBk
YXRlQ29udGVudHMoY29uc3QgUmVmUHRyPFRleHR1cmU+JiwgY29uc3QgVGV4dHVyZTo6SG9zdFR5
cGUmIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBib29sIGlzT3BhcXVlKTsKIAogICAgIHNpemVfdCBtZW1vcnlVc2FnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWVtb3J5VXNhZ2U7IH0KICAgICBzaXplX3QgbWVtb3J5TGltaXQoKSBjb25z
dCB7IHJldHVybiBtX21lbW9yeUxpbWl0OyB9CkBAIC03NywzOCArNzgsMzggQEAgcHVibGljOgog
CiAgICAgdm9pZCB0ZXh0dXJlRGVzdHJveWVkKFRleHR1cmUqKTsKICAgICB2b2lkIHRleHR1cmVS
ZXNpemVkKFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBvbGRTaXplKTsKKyAgICB2b2lkIHRleHR1
cmVTaXplSW5CeXRlc0NoYW5nZWQoVGV4dHVyZSosIGludCBkZWx0YSk7CiAKICAgICAvLyBVbmRv
IHRoZSBlZmZlY3RzIG9mIGV2aWN0aW9uLCBpZiBwb3NzaWJsZS4KLSAgICBib29sIGluc3RhbGwo
VGV4dHVyZSopOworICAgIGJvb2wgaW5zdGFsbChUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgdGV4
dHVyZVNpemUgPSBJbnRTaXplKDAsIDApLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkJ1ZmZlclR5cGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJhY2tlZFdoZW5O
ZWNlc3NhcnkpOworICAgIGJvb2wgcmVzaXplVGV4dHVyZShUZXh0dXJlKiwgY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXJUeXBlID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCYWNrZWRXaGVuTmVjZXNzYXJ5KTsKIAog
cHJpdmF0ZToKICAgICBzdHJ1Y3QgWm9tYmllVGV4dHVyZSB7CiAgICAgICAgIGV4cGxpY2l0IFpv
bWJpZVRleHR1cmUoVGV4dHVyZSogdGV4dHVyZSkKICAgICAgICAgICAgIDogaWQodGV4dHVyZS0+
dGV4dHVyZUlkKCkpCiAgICAgICAgICAgICAsIHNpemUodGV4dHVyZS0+c2l6ZSgpKQorICAgICAg
ICAgICAgLCBzaXplSW5CeXRlcyh0ZXh0dXJlLT5zaXplSW5CeXRlcygpKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBpZDsKKyAgICAgICAgVGV4dHVyZTo6R3B1SGFu
ZGxlIGlkOwogICAgICAgICBJbnRTaXplIHNpemU7CisgICAgICAgIHNpemVfdCBzaXplSW5CeXRl
czsKICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8VGV4dHVyZSogPiBUZXh0dXJlU2V0
OwotICAgIHR5cGVkZWYgc3RkOjpwYWlyPHVpbnQzMl90LCBzaXplX3Q+IENvbnRlbnRzS2V5Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVN
YXA7CiAgICAgdHlwZWRlZiBWZWN0b3I8Wm9tYmllVGV4dHVyZT4gR2FyYmFnZTsKIAogICAgIFRl
eHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCk7CiAgICAgflRleHR1cmVDYWNoZUNvbXBvc2l0
aW5nVGhyZWFkKCk7CiAKLSAgICB1bnNpZ25lZCBhbGxvY2F0ZVRleHR1cmVJZCgpOwotICAgIHZv
aWQgZnJlZVRleHR1cmVJZCh1bnNpZ25lZCBpZCk7CisgICAgVGV4dHVyZTo6R3B1SGFuZGxlIGFs
bG9jYXRlVGV4dHVyZUlkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlclR5cGUpOwogCiAgICAgdm9pZCBpbmNNZW1vcnlVc2Fn
ZShpbnQgZGVsdGEpIHsgc2V0TWVtb3J5VXNhZ2UobWVtb3J5VXNhZ2UoKSArIGRlbHRhKTsgfQog
ICAgIHZvaWQgZGVjTWVtb3J5VXNhZ2UoaW50IGRlbHRhKSB7IHNldE1lbW9yeVVzYWdlKG1lbW9y
eVVzYWdlKCkgLSBkZWx0YSk7IH0KICAgICB2b2lkIHNldE1lbW9yeVVzYWdlKHNpemVfdCk7CiAK
LSAgICBDb250ZW50c0tleSBrZXkoY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzKTsKLQogICAgIHZv
aWQgZXZpY3QoY29uc3QgVGV4dHVyZVNldDo6aXRlcmF0b3ImKTsKIAogICAgIC8vIExSVSBzZXQg
b2Ygd2VhayBwb2ludGVycyB0byB0ZXh0dXJlcy4KQEAgLTExNiw4ICsxMTcsNiBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX21lbW9yeVVzYWdlOwogICAgIHNpemVfdCBtX21lbW9yeUxpbWl0Owog
Ci0gICAgLy8gTWFwIG9mIHJlZkNvdW50ZWQgcG9pbnRlcnMgdG8gdGV4dHVyZXMuCi0gICAgSGFz
aE1hcDxDb250ZW50c0tleSwgVGV4dHVyZU1hcD4gbV9jYWNoZTsKICAgICBzdHJ1Y3QgQ29sb3JI
YXNoIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29sb3ImIGtleSkgeyBy
ZXR1cm4gV1RGOjppbnRIYXNoKGtleS5yZ2IoKSk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tp
YS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L3NraWEvSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMjI0NmMwOWQ4NzdhMWFjMTE4ZmJlYzY4MTNlYWM5ZWQxM2Y3N2MwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9JbWFnZUJ1ZmZlckRhdGFTa2lh
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDExLCBSZXNlYXJjaCBJbiBNb3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
bWFnZUJ1ZmZlckRhdGFTa2lhX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhU2tpYV9oCi0KLSNp
bmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVk
ZSAiQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YSB7Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJE
YXRhKGNvbnN0IEludFNpemUmKTsKLQotICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Ci0g
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSBtX3BsYXRmb3JtQ29udGV4dDsKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgUmVmUHRyPENhbnZhc0xheWVyV2ViS2l0VGhyZWFkPiBt
X3BsYXRmb3JtTGF5ZXI7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0YVNraWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9za2lhL1BsYXRmb3JtU3VwcG9ydC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L3NraWEvUGxhdGZv
cm1TdXBwb3J0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljZWFkODI1NDc2
MThlNDllODg5MmZmYjNjMWZhZjUyYzJjNjZlMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L3NraWEvUGxhdGZvcm1TdXBwb3J0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFJlc2VhcmNoIEluIE1vdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdXBwb3J0LmgiCi0KLSNpbmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKLQotI2luY2x1ZGUg
PGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHVuaWNvZGUvdXRmMTYuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgc2V0Rm9udFJlbmRlclN0eWxlRGVmYXVsdHMo
Rm9udFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBzdHlsZS0+dXNlQml0bWFwcyA9IDI7Ci0g
ICAgc3R5bGUtPnVzZUF1dG9IaW50ID0gMjsKLSAgICBzdHlsZS0+dXNlSGludGluZyA9IDI7Ci0g
ICAgc3R5bGUtPmhpbnRTdHlsZSA9IDA7Ci0gICAgc3R5bGUtPnVzZUFudGlBbGlhcyA9IDI7Ci0g
ICAgc3R5bGUtPnVzZVN1YnBpeGVsUmVuZGVyaW5nID0gMjsKLX0KLQotdm9pZCBQbGF0Zm9ybVN1
cHBvcnQ6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNp
emVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiBvdXQpCi17Ci0gICAgYm9vbCBpc0JvbGQgPSBz
aXplQW5kU3R5bGUgJiAxOwotICAgIGJvb2wgaXNJdGFsaWMgPSBzaXplQW5kU3R5bGUgJiAyOwot
ICAgIGludCBwaXhlbFNpemUgPSBzaXplQW5kU3R5bGUgPj4gMjsKLQotICAgIEZjUGF0dGVybiog
cGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgpOwotICAgIEZjVmFsdWUgZmN2YWx1ZTsKLQotICAg
IGZjdmFsdWUudHlwZSA9IEZjVHlwZVN0cmluZzsKLSAgICBmY3ZhbHVlLnUucyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCAqPihmYW1pbHkpOwotICAgIEZjUGF0dGVybkFkZChwYXR0
ZXJuLCBGQ19GQU1JTFksIGZjdmFsdWUsIEZjRmFsc2UpOwotCi0gICAgZmN2YWx1ZS50eXBlID0g
RmNUeXBlSW50ZWdlcjsKLSAgICBmY3ZhbHVlLnUuaSA9IGlzQm9sZCA/IEZDX1dFSUdIVF9CT0xE
IDogRkNfV0VJR0hUX05PUk1BTDsKLSAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfV0VJR0hU
LCBmY3ZhbHVlLCBGY0ZhbHNlKTsKLQotICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZUludGVnZXI7
Ci0gICAgZmN2YWx1ZS51LmkgPSBpc0l0YWxpYyA/IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NMQU5U
X1JPTUFOOwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TTEFOVCwgZmN2YWx1ZSwgRmNG
YWxzZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVCb29sOwotICAgIGZjdmFsdWUudS5i
ID0gRmNUcnVlOwotICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TQ0FMQUJMRSwgZmN2YWx1
ZSwgRmNGYWxzZSk7Ci0KLSAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVEb3VibGU7Ci0gICAgZmN2
YWx1ZS51LmQgPSBwaXhlbFNpemU7Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NJWkUs
IGZjdmFsdWUsIEZjRmFsc2UpOwotCi0gICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4s
IEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwotCi0g
ICAgRmNSZXN1bHQgcmVzdWx0OwotICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgZm9udGNvbmZpZyBk
b24ndCBhY3R1YWxseSB3cml0ZSBhIHZhbHVlIGludG8gcmVzdWx0LgotICAgIC8vIEhvd2V2ZXIs
IGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIGRvY3VtZW50YXRpb24gaWYgcmVzdWx0IHNob3VsZCBi
ZSBhCi0gICAgLy8gbm9uLTAgcG9pbnRlcjogZnV0dXJlIHZlcnNpb25zIG1pZ2h0IGV4cGVjdCB0
byBiZSBhYmxlIHRvIHdyaXRlIHRvCi0gICAgLy8gaXQuIFNvIHdlIHBhc3MgaW4gYSB2YWxpZCBw
b2ludGVyIGFuZCBpZ25vcmUgaXQuCi0gICAgRmNQYXR0ZXJuKiBtYXRjaCA9IEZjRm9udE1hdGNo
KDAsIHBhdHRlcm4sICZyZXN1bHQpOwotICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7Ci0K
LSAgICBzZXRGb250UmVuZGVyU3R5bGVEZWZhdWx0cyhvdXQpOwotCi0gICAgaWYgKCFtYXRjaCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRmNCb29sIGJvb2xWYWx1ZTsKLSAgICBpbnQgaW50VmFs
dWU7Ci0KLSAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNfQU5USUFMSUFTLCAwLCAm
Ym9vbFZhbHVlKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBvdXQtPnVzZUFudGlBbGlhcyA9
IGJvb2xWYWx1ZTsKLSAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNfRU1CRURERURf
QklUTUFQLCAwLCAmYm9vbFZhbHVlKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBvdXQtPnVz
ZUJpdG1hcHMgPSBib29sVmFsdWU7Ci0gICAgaWYgKEZjUGF0dGVybkdldEJvb2wobWF0Y2gsIEZD
X0FVVE9ISU5ULCAwLCAmYm9vbFZhbHVlKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBvdXQt
PnVzZUF1dG9IaW50ID0gYm9vbFZhbHVlOwotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNo
LCBGQ19ISU5USU5HLCAwLCAmYm9vbFZhbHVlKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBv
dXQtPnVzZUhpbnRpbmcgPSBib29sVmFsdWU7Ci0KLSAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdl
cihtYXRjaCwgRkNfUkdCQSwgMCwgJmludFZhbHVlKSA9PSBGY1Jlc3VsdE1hdGNoKSB7Ci0gICAg
ICAgIHN3aXRjaCAoaW50VmFsdWUpIHsKLSAgICAgICAgY2FzZSBGQ19SR0JBX05PTkU6Ci0gICAg
ICAgICAgICBvdXQtPnVzZVN1YnBpeGVsUmVuZGVyaW5nID0gMDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEZDX1JHQkFfUkdCOgotICAgICAgICBjYXNlIEZDX1JHQkFfQkdSOgot
ICAgICAgICBjYXNlIEZDX1JHQkFfVlJHQjoKLSAgICAgICAgY2FzZSBGQ19SR0JBX1ZCR1I6Ci0g
ICAgICAgICAgICBvdXQtPnVzZVN1YnBpeGVsUmVuZGVyaW5nID0gMTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyBGQ19S
R0JBX1VOS05PV04uCi0gICAgICAgICAgICBvdXQtPnVzZVN1YnBpeGVsUmVuZGVyaW5nID0gMjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRmNQYXR0ZXJuRGVz
dHJveShtYXRjaCk7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L3NraWEvUGxhdGZvcm1T
dXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L3Nr
aWEvUGxhdGZvcm1TdXBwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYzA0
M2JkY2NiMDkyMTJmNWI1MDBmYTBmNTI0NjdjZWFlNWMzYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9za2lhL1BsYXRmb3JtU3VwcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxMSwgUmVzZWFyY2ggSW4gTW90aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGxhdGZvcm1TdXBwb3J0X2gKLSNkZWZpbmUgUGxh
dGZvcm1TdXBwb3J0X2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBGb250UmVuZGVyU3R5bGU7Ci0KLS8vIFRoaXMgaXMg
YSBtaW5pbWFsIHZlcnNpb24gb2YgdGhlIENocm9taXVtIFBsYXRmb3JtU3VwcG9ydC9XZWJGb250
SW5mbyBjbGFzc2VzIHVzZWQgZm9yIGZvbnQgc3VwcG9ydC4KLWNsYXNzIFBsYXRmb3JtU3VwcG9y
dCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29u
c3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3Vs
dCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>