<?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>87603</bug_id>
          
          <creation_ts>2012-05-27 15:07:18 -0700</creation_ts>
          <short_desc>[BlackBerry] WebOverlay API</short_desc>
          <delta_ts>2012-05-29 04:14:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>87602</dependson>
          <blocked>87604</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Arvid Nilsson">anilsson</reporter>
          <assigned_to name="Arvid Nilsson">anilsson</assigned_to>
          <cc>jpetsovits</cc>
    
    <cc>kpiascik</cc>
    
    <cc>manyoso</cc>
    
    <cc>mifenton</cc>
    
    <cc>mlattanzio</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634793</commentid>
    <comment_count>0</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 15:07:18 -0700</bug_when>
    <thetext>This new API makes it possible to leverage the awesomeness of the BlackBerry accelerated compositing implementation to draw, transform and fluidly animate overlays in the embedding library or application.

PR #156812</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634795</commentid>
    <comment_count>1</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 15:08:21 -0700</bug_when>
    <thetext>Please note that this has not been internally reviewed yet, so it needs actual review. And also, it has a dependency that needs to be landed first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634811</commentid>
    <comment_count>2</comment_count>
      <attachid>144249</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 16:28:16 -0700</bug_when>
    <thetext>Created attachment 144249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634820</commentid>
    <comment_count>3</comment_count>
      <attachid>144249</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-05-27 17:15:24 -0700</bug_when>
    <thetext>Comment on attachment 144249
Patch

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

A few nitpicks to fix before land, but it looks good overall. Please pre-fill Review by Antonio Gomes and set cq? only.

&gt; Source/WebKit/blackberry/Api/WebAnimation.cpp:2
&gt; + * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.

2012 only?

&gt; Source/WebKit/blackberry/Api/WebAnimation.cpp:37
&gt; +WebAnimation WebAnimation::fadeAnimation(const char* name, float from, float to, double duration)

would a WebString for &apos;name&apos; be better, since ::name returns a WebString?

&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:193
&gt; +    // Must be called on UI thread

should we ASSERT here so we know mis uses of this API?

&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:219
&gt; +    // Page might have changed if we were removed from the page and added to
&gt; +    // some other page

nit: misses a . at the end.

&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:399
&gt; +WebOverlayLayerCompositingThreadClient::~WebOverlayLayerCompositingThreadClient()
&gt; +{
&gt; +}

do we this needs this?

&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:685
&gt; +#else // USE(ACCELERATED_COMPOSITING)
&gt; +namespace BlackBerry {
&gt; +namespace WebKit {
&gt; +
&gt; +WebOverlay::WebOverlay()
&gt; +{
&gt; +}
&gt; +
&gt; +WebOverlay::~WebOverlay()
&gt; +{
&gt; +}
&gt; +
&gt; +Platform::FloatPoint WebOverlay::position() const
&gt; +{
&gt; +    return Platform::FloatPoint();
&gt; +}

not that it is wrong, but usually class definitions are unique, and #if #else #endif goes within the method bodies.

&gt; Source/WebKit/blackberry/Api/WebOverlay.h:62
&gt; +    // The position of the layer (the location of its top-left corner in its parent)

nit: dot at the end

&gt; Source/WebKit/blackberry/Api/WebOverlay.h:75
&gt; +    // Whether the layer is scaled together with the web page

ditto

&gt; Source/WebKit/blackberry/Api/WebOverlay.h:101
&gt; +    // Will result in a future call to WebOverlayClient::drawContents, if the layer draws custom contents

ditto

&gt; Source/WebKit/blackberry/Api/WebOverlayOverride.cpp:127
&gt; +#else // USE(ACCELERATED_COMPOSITING)
&gt; +namespace BlackBerry {
&gt; +namespace WebKit {
&gt; +
&gt; +WebOverlayOverride::WebOverlayOverride(WebOverlayPrivate*)
&gt; +{
&gt; +}
&gt; +
&gt; +WebOverlayOverride::~WebOverlayOverride()
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::setPosition(const Platform::FloatPoint&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::setAnchorPoint(const Platform::FloatPoint&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::setSize(const Platform::FloatSize&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::setTransform(const Platform::TransformationMatrix&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::setOpacity(float)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::addAnimation(const WebAnimation&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +void WebOverlayOverride::removeAnimation(const WebString&amp;)
&gt; +{
&gt; +}
&gt; +
&gt; +}
&gt; +}
&gt; +#endif // USE(ACCELERATED_COMPOSITING)

same as I said previously.

&gt; Source/WebKit/blackberry/Api/WebPage.h:343
&gt; +    // Adds an overlay that can be modified on the WebKit thread, and
&gt; +    // whose attributes can be overridden on the compositing thread

misses a dot

&gt; Source/WebKit/blackberry/Api/WebPage.h:347
&gt; +    // Adds an overlay that can only be modified on the compositing thread

misses a dot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634825</commentid>
    <comment_count>4</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 17:23:58 -0700</bug_when>
    <thetext>Thanks for the review!

The only point I disagree with is this - because WebPageCompositor.cpp already uses this strategy. If another strategy is desired, I think it should be some kind of WebPageCompositorNone.cpp and WebOverlayNone.cpp that the build system can use instead, when GLES2 and EGL are disabled. But I would prefer to.do that in another patch.


&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:685
&gt; +#else // USE(ACCELERATED_COMPOSITING)
&gt; +namespace BlackBerry {
&gt; +namespace WebKit {
&gt; +
&gt; +WebOverlay::WebOverlay()
&gt; +{
&gt; +}
&gt; +
&gt; +WebOverlay::~WebOverlay()
&gt; +{
&gt; +}
&gt; +
&gt; +Platform::FloatPoint WebOverlay::position() const
&gt; +{
&gt; +    return Platform::FloatPoint();
&gt; +}

not that it is wrong, but usually class definitions are unique, and #if #else #endif goes within the method bodies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634826</commentid>
    <comment_count>5</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-05-27 17:28:00 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks for the review!
&gt; 
&gt; The only point I disagree with is this - because WebPageCompositor.cpp already uses this strategy. If another strategy is desired, I think it should be some kind of WebPageCompositorNone.cpp and WebOverlayNone.cpp that the build system can use instead, when GLES2 and EGL are disabled. But I would prefer to.do that in another patch.
&gt; 

No strong preference.

would you like to get this patch landed as is, and we keep the bug opened to address the nitpicks in a follow up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635418</commentid>
    <comment_count>6</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-28 14:45:10 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Thanks for the review!
&gt; &gt; 
&gt; &gt; The only point I disagree with is this - because WebPageCompositor.cpp already uses this strategy. If another strategy is desired, I think it should be some kind of WebPageCompositorNone.cpp and WebOverlayNone.cpp that the build system can use instead, when GLES2 and EGL are disabled. But I would prefer to.do that in another patch.
&gt; &gt; 
&gt; 
&gt; No strong preference.
&gt; 
&gt; would you like to get this patch landed as is, and we keep the bug opened to address the nitpicks in a follow up?

I&apos;m uploading a new patch now, adressing all review comments except the #ifdef thing - the WebPageCompositor.cpp uses this strategy, we should change them both in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635419</commentid>
    <comment_count>7</comment_count>
      <attachid>144399</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-28 14:46:04 -0700</bug_when>
    <thetext>Created attachment 144399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635427</commentid>
    <comment_count>8</comment_count>
      <attachid>144399</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-28 14:58:15 -0700</bug_when>
    <thetext>Comment on attachment 144399
Patch

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

Looks good to me, maybe someone can cq+ it for you or you can decide to fix the Copyright thing first.

&gt; Source/WebKit/blackberry/Api/WebOverlay.cpp:2
&gt; + * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.

I am guessing this should be 2012 only...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635719</commentid>
    <comment_count>9</comment_count>
      <attachid>144475</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-29 01:35:31 -0700</bug_when>
    <thetext>Created attachment 144475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635720</commentid>
    <comment_count>10</comment_count>
      <attachid>144475</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-29 01:37:13 -0700</bug_when>
    <thetext>Comment on attachment 144475
Patch

Fixed year of copyright notice as Rob pointed out, should be good for CQ+ now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635843</commentid>
    <comment_count>11</comment_count>
      <attachid>144475</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-29 04:04:34 -0700</bug_when>
    <thetext>Comment on attachment 144475
Patch

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635852</commentid>
    <comment_count>12</comment_count>
      <attachid>144475</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 04:14:48 -0700</bug_when>
    <thetext>Comment on attachment 144475
Patch

Clearing flags on attachment: 144475

Committed r118750: &lt;http://trac.webkit.org/changeset/118750&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635853</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 04:14:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144249</attachid>
            <date>2012-05-27 16:28:16 -0700</date>
            <delta_ts>2012-05-28 14:45:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87603-20120528012815.patch</filename>
            <type>text/plain</type>
            <size>71572</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1MmVjNDhhNjdiZjczNzBm
MzA2Nzc3OGE1Yjg5MWYxN2E4NGY5NTQuLmMwMTY5MThlYjBlZTgyNjNlNTVmMWQ5MzA1MDc4NTZj
M2ZkMDIzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5p
bHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVy
bGF5IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgV2ViT3ZlcmxheSByZWxhdGVkIGZpbGVzIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKKyAgICAg
ICAgUFIgIzE1NjgxMgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgorCisy
MDEyLTA1LTI3ICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKwogICAgICAgICBb
QmxhY2tCZXJyeV0gQWRkIGEgZGVmYXVsdCB0YXAgaGlnaGxpZ2h0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzU2OQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwppbmRleCAxZGU1MmIzNTE5MDQ5MGYyODUzN2UwZGI5NGEzYzFlMmU3NzNjZDU1
Li44N2E2ZTRkZDZjZjIwZWIxZjEwNmQyY2JkYTU1ZDIwMGY1OGE0NjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5p
bHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVy
bGF5IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIG5ldyBBUEkgbWFrZXMgaXQgcG9zc2libGUgdG8gbGV2ZXJhZ2UgdGhlIEJsYWNrQmVycnkg
YWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gdG8gZHJhdywg
dHJhbnNmb3JtIGFuZCBmbHVpZGx5IGFuaW1hdGUKKyAgICAgICAgb3ZlcmxheXMgaW4gdGhlIGVt
YmVkZGluZyBsaWJyYXJ5IG9yIGFwcGxpY2F0aW9uLgorCisgICAgICAgIEEgV2ViT3ZlcmxheSBo
YXMgYW4gYWZmaW5pdHkgZm9yIHRoZSB0aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0ZWQuIElmCisg
ICAgICAgIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgV2ViS2l0IHRocmVhZCwgdXNlIFdlYlBh
Z2U6OmFkZE92ZXJsYXkoKSB0bworICAgICAgICBhZGQgaXQgdG8gdGhlIHBhZ2UsIGFuZCBtYW5p
cHVsYXRlIGl0IG9ubHkgZnJvbSB0aGUgV2ViS2l0IHRocmVhZCwgd2l0aAorICAgICAgICBleGNl
cHRpb24gb2YgdGhlICJvdmVycmlkZSIgZnVuY3Rpb25hbGl0eSB3aGljaCBjYW4gYmUgdXNlZCBm
cm9tIHRoZQorICAgICAgICBjb21wb3NpdGluZyB0aHJlYWQuIElmIHRoZSBjdXJyZW50IHRocmVh
ZCBpcyB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLAorICAgICAgICB1c2UgV2ViUGFnZTo6YWRkQ29t
cG9zaXRpbmdUaHJlYWRPdmVybGF5KCkgdG8gYWRkIGl0IHRvIHRoZSBwYWdlLCBhbmQKKyAgICAg
ICAgb25seSBtYW5pcHVsYXRlIGl0IG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCisKKyAgICAg
ICAgQSBXZWJPdmVybGF5IGNhbiBiZSBwYWludGVkIHVzaW5nIFNraWEsIG9yIGl0cyBjb250ZW50
cyBjYW4gYmUgc2V0IHRvCisgICAgICAgIGFuIGltYWdlIG9yIGEgc29saWQgY29sb3IuCisKKyAg
ICAgICAgUFIgIzE1NjgxMgorCisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5p
bWF0aW9uOjpmYWRlQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
QW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0
aW9uOjpXZWJBbmltYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmlt
YXRpb246On5XZWJBbmltYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJB
bmltYXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbl9wLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkFuaW1hdGlvblByaXZhdGUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmltYXRpb25Qcml2YXRlOjpXZWJBbmlt
YXRpb25Qcml2YXRlKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6
V2ViT3ZlcmxheSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6On5X
ZWJPdmVybGF5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cG9z
aXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFuY2hvclBv
aW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0QW5jaG9y
UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzaXplKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNpemVJc1NjYWxlSW52YXJpYW50
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZUlzU2Nh
bGVJbnZhcmlhbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5Ojp0
cmFuc2Zvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRU
cmFuc2Zvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvcGFj
aXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZEFuaW1hdGlv
bik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlbW92ZUFuaW1h
dGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnBhcmVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZENoaWxkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cmVtb3ZlRnJvbVBhcmVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRlbnRzVG9J
bWFnZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRl
bnRzVG9Db2xvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNl
dERyYXdzQ29udGVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6
OmludmFsaWRhdGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5Ojpz
ZXRDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvdmVy
cmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlc2V0T3Zl
cnJpZGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6
OnBhZ2UpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZTo6
b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZTo6ZHJhd0NvbnRlbnRzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGU6OnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4pOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6V2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cG9zaXRpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0UG9zaXRp
b24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktp
dFRocmVhZDo6YW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJP
dmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2l6ZSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFk
OjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGVXZWJLaXRUaHJlYWQ6OnNpemVJc1NjYWxlSW52YXJpYW50KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFNpemVJc1NjYWxl
SW52YXJpYW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGVXZWJLaXRUaHJlYWQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0
eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0
VGhyZWFkOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpyZW1vdmVBbmltYXRp
b24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktp
dFRocmVhZDo6YWRkQ2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50
c1RvSW1hZ2UpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZVdlYktpdFRocmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldERyYXdzQ29udGVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhy
ZWFkOjpjbGVhcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2
YXRlV2ViS2l0VGhyZWFkOjppbnZhbGlkYXRlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6Om5v
dGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJs
YXlQcml2YXRlV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OldlYk92
ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6On5XZWJPdmVy
bGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXREcmF3c0Nv
bnRlbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50
cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50c1RvQ29sb3IpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJD
b21wb3NpdGluZ1RocmVhZERlc3Ryb3llZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpsYXllclZpc2liaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6On5XZWJPdmVybGF5
UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q2xpZW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZUNvbXBvc2l0aW5nVGhyZWFkOjpwb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFBvc2l0aW9uKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1Ro
cmVhZDo6YW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNp
emUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkOjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
T3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2l6ZUlzU2NhbGVJbnZhcmlhbnQpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjpzZXRTaXplSXNTY2FsZUludmFyaWFudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5zZm9ybSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdU
aHJlYWQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6Om9wYWNpdHkpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRPcGFj
aXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21w
b3NpdGluZ1RocmVhZDo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6cmVtb3ZlQW5pbWF0aW9uKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGlu
Z1RocmVhZDo6YWRkQ2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZDo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6Y2xlYXIpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjppbnZhbGlkYXRl
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3Np
dGluZ1RocmVhZDo6cmVzZXRPdmVycmlkZXMpOgorICAgICAgICAqIEFwaS9XZWJPdmVybGF5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAq
IEFwaS9XZWJPdmVybGF5Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBBcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OldlYk92
ZXJsYXlPdmVycmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlP
dmVycmlkZTo6fldlYk92ZXJsYXlPdmVycmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYk92ZXJsYXlPdmVycmlkZTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRTaXplKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zvcm0p
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9w
YWNpdHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6
OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlP
dmVycmlkZTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheU92ZXJy
aWRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2ViT3Zlcmxh
eV9wLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OldlYk92ZXJsYXlQcml2YXRlKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6On5XZWJPdmVybGF5
UHJpdmF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRl
OjpzZXRQYWdlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGU6OnNldENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQ
cml2YXRlOjpsYXllckNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OmdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViT3Zl
cmxheVByaXZhdGVXZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6Z3JhcGhpY3NMYXllcik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2hvd1JlcGFpbnRD
b3VudGVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OmNvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
Yk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRMYXllcik6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50OjpzZXRDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6
OmNvbnRlbnRzKToKKyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQp
OgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6YWRkT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpyZW1vdmVPdmVybGF5KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6cmVtb3ZlQ29tcG9zaXRpbmdUaHJl
YWRPdmVybGF5KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cmVuZGVy
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2VDb21wb3NpdG9yUHJpdmF0ZTo6Y29tcG9zaXRlTGF5ZXJzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjphZGRPdmVy
bGF5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2
YXRlOjpyZW1vdmVPdmVybGF5KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3JfcC5o
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6
OmNvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYlBhZ2VDb21wb3Np
dG9yUHJpdmF0ZSk6CisKKzIwMTItMDUtMjcgIEFydmlkIE5pbHNzb24gIDxhbmlsc3NvbkByaW0u
Y29tPgorCiAgICAgICAgIFtCbGFja0JlcnJ5XSBBbHdheXMgY3JlYXRlIGEgY29tcG9zaXRvcgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1OTgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhMzkxZTFiOWRlODhhZGEx
MDE0ZmNmNzZhZWE3Yzk3MWI2ZTk4MTg3Li4yZmQzZWRjZmVlZjk3MjhlODQ3ZGFiODE2MjQ5ZDUx
MDQ1Zjk0M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNDcs
MTMgKzQ3LDE2IEBAIEFERF9ERUZJTklUSU9OUygtRFVTRVJfUFJPQ0VTU0VTKQogTElTVChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCiAg
ICAgYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKLSAgICBibGFja2JlcnJ5L0Fw
aS9XZWJTdHJpbmcuY3BwCisgICAgYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAogICAg
IGJsYWNrYmVycnkvQXBpL1dlYktpdE1JTUVUeXBlQ29udmVydGVyLmNwcAogICAgIGJsYWNrYmVy
cnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5
LmNwcAorICAgIGJsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAKICAgICBibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3Np
dG9yLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAK
ICAgICBibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9X
ZWJTdHJpbmcuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkvV2ViVmlld3BvcnRBcmd1bWVudHMuY3Bw
CiAgICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGEuY3BwCiAgICAgYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmU4OTJkMmZkYWRl
OTQ4ODVjNWVjNTAzZDY5ZTgxZmU2NWY5ZDRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJl
YWQuaCIKKyNpbmNsdWRlICJXZWJBbmltYXRpb25fcC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5o
IgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgorCituYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK1dlYkFuaW1hdGlvbiBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24oY29u
c3QgY2hhciogbmFtZSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBkdXJhdGlvbikKK3sK
KyAgICBXZWJBbmltYXRpb24gdG1wOworICAgIHRtcC5kLT5uYW1lID0gU3RyaW5nKG5hbWUpOwor
ICAgIHRtcC5kLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIHRtcC5kLT5h
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICB0bXAuZC0+a2V5ZnJhbWVzID0g
S2V5ZnJhbWVWYWx1ZUxpc3QoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHRtcC5kLT5r
ZXlmcmFtZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIGZyb20pKTsKKyAgICB0
bXAuZC0+a2V5ZnJhbWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgxLjAsIHRvKSk7
CisKKyAgICByZXR1cm4gdG1wOworfQorCitXZWJTdHJpbmcgV2ViQW5pbWF0aW9uOjpuYW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmFtZS5pbXBsKCk7Cit9CisKK1dlYkFuaW1hdGlvbjo6
V2ViQW5pbWF0aW9uKCkKKyAgICA6IGQobmV3IFdlYkFuaW1hdGlvblByaXZhdGUpCit7Cit9CisK
K1dlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYgbykKKzogZChu
ZXcgV2ViQW5pbWF0aW9uUHJpdmF0ZSkKK3sKKyAgICAqZCA9ICpvLmQ7Cit9CisKK1dlYkFuaW1h
dGlvbjo6fldlYkFuaW1hdGlvbigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisKK1dlYkFuaW1hdGlv
biYgV2ViQW5pbWF0aW9uOjpvcGVyYXRvcj0oY29uc3QgV2ViQW5pbWF0aW9uJiBvKQoreworICAg
ICpkID0gKm8uZDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODRkM2QzZTMwNWVkYzdiZTEzOGE3MWI5ZjdkY2M4ZWNiZWNmZDUwMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbl9oCisK
KyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb25Qcml2YXRlOworCisvKioKKyAqIFJlcHJlc2Vu
dHMgYW4gYW5pbWF0aW9uIHJ1bm5pbmcgb24gYW4gb3ZlcmxheS4KKyAqCisgKiBXZWJBbmltYXRp
b24gaXMgbm90IHRocmVhZCBzYWZlLCBidXQgaXQgaXMgcmVlbnRyYW50LiBUaGlzIG1lYW5zIHRo
YXQKKyAqIGluc3RhbmNlcyBjYW4gYmUgY3JlYXRlZCBvbiBkaWZmZXJlbnQgdGhyZWFkcywgYnV0
IG11c3QgYmUgdXNlZCBvbiB0aGUKKyAqIHRocmVhZCB3aGVyZSB0aGV5IHdlcmUgY3JlYXRlZC4K
KyAqLworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgV2ViQW5pbWF0aW9uIGZhZGVBbmltYXRpb24oY29uc3QgY2hhciogbmFtZSwgZmxv
YXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBkdXJhdGlvbik7CisKKyAgICBXZWJBbmltYXRpb24o
KTsKKyAgICBXZWJBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uJik7CisgICAgfldlYkFuaW1h
dGlvbigpOworCisgICAgV2ViQW5pbWF0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2ViQW5pbWF0aW9u
Jik7CisKKyAgICBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgZnJp
ZW5kIGNsYXNzIFdlYk92ZXJsYXk7CisgICAgZnJpZW5kIGNsYXNzIFdlYk92ZXJsYXlPdmVycmlk
ZTsKKyAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheVByaXZhdGU7CisKKyAgICBXZWJBbmltYXRp
b25Qcml2YXRlKiBkOworfTsKKworfQorfQorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uX3AuaCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uX3AuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wOGNhOWFmZjM0ZTU5OTFiNWQ4ZDk4MzZiNWM3MWU0ODllNjM4OTVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb25fcC5oCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBXZWJBbmltYXRpb25fcF9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbl9wX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxheWVyQW5pbWF0aW9uLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgewor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbjsKKworY2xhc3MgV2ViQW5p
bWF0aW9uUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViQW5pbWF0aW9uUHJpdmF0ZSgpCisgICAg
ICAgIDoga2V5ZnJhbWVzKFdlYkNvcmU6OkFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQorICAgIHsK
KyAgICB9CisKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QW5pbWF0aW9u
PiBhbmltYXRpb247CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3Qga2V5ZnJhbWVzOwor
fTsKKworfQorfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
ZW5kaWYgLy8gV2ViQW5pbWF0aW9uX3BfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU4MTU3MjZiNWI2Y2JiOWY0Yzk0OGQ3YTIzYWY1
OTE2MWMxZDMxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViT3ZlcmxheS5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViT3ZlcmxheS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJUZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIldlYkFuaW1hdGlvbl9wLmgiCisjaW5jbHVkZSAiV2ViT3ZlcmxheUNsaWVudC5o
IgorI2luY2x1ZGUgIldlYk92ZXJsYXlPdmVycmlkZS5oIgorI2luY2x1ZGUgIldlYk92ZXJsYXlf
cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VDb21wb3NpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiV2Vi
UGFnZUNvbXBvc2l0b3JfcC5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5o
PgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPFNrRGV2aWNlLmg+CisKK25hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworV2ViT3ZlcmxheTo6V2ViT3ZlcmxheSgpCisgICAgOiBkKDApCit7CisgICAg
aWYgKFBsYXRmb3JtOjp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVh
ZCgpKSB7CisgICAgICAgIGQgPSBuZXcgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ7Cisg
ICAgICAgIGQtPnEgPSB0aGlzOworICAgIH0gZWxzZSBpZiAoUGxhdGZvcm06OnVzZXJJbnRlcmZh
Y2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVhZCgpKSB7CisgICAgICAgIGQg
PSBuZXcgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDsKKyAgICAgICAgZC0+cSA9
IHRoaXM7CisgICAgfQorfQorCitXZWJPdmVybGF5OjpXZWJPdmVybGF5KEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWVudCkKKyAgICA6IGQoMCkKK3sKKyAgICBkID0gbmV3IFdlYk92ZXJsYXlQcml2
YXRlV2ViS2l0VGhyZWFkKGNsaWVudCk7CisgICAgZC0+cSA9IHRoaXM7Cit9CisKK1dlYk92ZXJs
YXk6On5XZWJPdmVybGF5KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworUGxhdGZvcm06OkZsb2F0
UG9pbnQgV2ViT3ZlcmxheTo6cG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBkLT5wb3Np
dGlvbigpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFBvc2l0aW9uKGNvbnN0IFBsYXRmb3Jt
OjpGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7
Cit9CisKK1BsYXRmb3JtOjpGbG9hdFBvaW50IFdlYk92ZXJsYXk6OmFuY2hvclBvaW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+YW5jaG9yUG9pbnQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5
OjpzZXRBbmNob3JQb2ludChjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYgYW5jaG9yKQorewor
ICAgIGQtPnNldEFuY2hvclBvaW50KGFuY2hvcik7Cit9CisKK1BsYXRmb3JtOjpGbG9hdFNpemUg
V2ViT3ZlcmxheTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnNpemUoKTsKK30KKwor
dm9pZCBXZWJPdmVybGF5OjpzZXRTaXplKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFNpemUmIHNpemUp
Cit7CisgICAgZC0+c2V0U2l6ZShzaXplKTsKK30KKworYm9vbCBXZWJPdmVybGF5OjpzaXplSXNT
Y2FsZUludmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnNpemVJc1NjYWxlSW52YXJp
YW50KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoYm9v
bCBpbnZhcmlhbnQpCit7CisgICAgZC0+c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoaW52YXJpYW50
KTsKK30KKworUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYk92ZXJsYXk6OnRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIFdlYkNvcmU6OlRyYW5m
b3JtYXRpb25NYXRyaXggaW50ZXJvcGVyYWJpbGl0eQorICAgIC8vIHdpdGggUGxhdGZvcm06OlRy
YW5zZm9ybWF0aW9uTWF0cml4CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0g
ZC0+dHJhbnNmb3JtKCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUGxhdGZv
cm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4odHJhbnNmb3JtKTsKK30KKwordm9pZCBXZWJPdmVy
bGF5OjpzZXRUcmFuc2Zvcm0oY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pCit7CisgICAgZC0+c2V0VHJhbnNmb3JtKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmPih0cmFuc2Zvcm0pKTsKK30KKworZmxvYXQgV2ViT3Zlcmxh
eTo6b3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm9wYWNpdHkoKTsKK30KKwordm9p
ZCBXZWJPdmVybGF5OjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgZC0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKK30KKwordm9pZCBXZWJPdmVybGF5OjphZGRBbmltYXRpb24oY29uc3Qg
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgZC0+YWRkQW5pbWF0aW9uKGFuaW1hdGlv
bi5kLT5uYW1lLCBhbmltYXRpb24uZC0+YW5pbWF0aW9uLmdldCgpLCBhbmltYXRpb24uZC0+a2V5
ZnJhbWVzKTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpyZW1vdmVBbmltYXRpb24oY29uc3QgV2Vi
U3RyaW5nJiBuYW1lKQoreworICAgIGQtPnJlbW92ZUFuaW1hdGlvbihTdHJpbmcoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPihuYW1lLmltcGwoKSkpKTsKK30KKworV2ViT3ZlcmxheSogV2ViT3Zlcmxh
eTo6cGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cGFyZW50OworfQorCitib29sIFdl
Yk92ZXJsYXk6OmFkZENoaWxkKFdlYk92ZXJsYXkqIG92ZXJsYXkpCit7CisgICAgaWYgKG92ZXJs
YXktPmQtPm5hdGl2ZVRocmVhZCAhPSBkLT5uYXRpdmVUaHJlYWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG92ZXJsYXktPmQtPnBhcmVudCA9IHRoaXM7CisgICAgZC0+YWRkQ2hpbGQo
b3ZlcmxheS0+ZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6cmVt
b3ZlRnJvbVBhcmVudCgpCit7CisgICAgZC0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIGQtPnBh
cmVudCA9IDA7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0Q29udGVudHNUb0ltYWdlKGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBpbWFnZVNpemUp
Cit7CisgICAgZC0+c2V0Q29udGVudHNUb0ltYWdlKGRhdGEsIGltYWdlU2l6ZSk7Cit9CisKK3Zv
aWQgV2ViT3ZlcmxheTo6c2V0Q29udGVudHNUb0NvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQoreworICAgIGQtPnNldENvbnRlbnRzVG9Db2xvcihDb2xvcihyLCBnLCBiLCBhKSk7Cit9
CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQor
eworICAgIGQtPnNldERyYXdzQ29udGVudChkcmF3c0NvbnRlbnQpOworfQorCit2b2lkIFdlYk92
ZXJsYXk6OmludmFsaWRhdGUoKQoreworICAgIGQtPmludmFsaWRhdGUoKTsKK30KKwordm9pZCBX
ZWJPdmVybGF5OjpzZXRDbGllbnQoV2ViT3ZlcmxheUNsaWVudCogY2xpZW50KQoreworICAgIGQt
PnNldENsaWVudChjbGllbnQpOworfQorCitXZWJPdmVybGF5T3ZlcnJpZGUqIFdlYk92ZXJsYXk6
Om92ZXJyaWRlKCkKK3sKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBvbiBVSSB0aHJlYWQKKyAgICBp
ZiAoIVBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJl
bnRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZC0+b3ZlcnJpZGUo
KTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpyZXNldE92ZXJyaWRlcygpCit7CisgICAgZC0+cmVz
ZXRPdmVycmlkZXMoKTsKK30KKworV2ViUGFnZVByaXZhdGUqIFdlYk92ZXJsYXlQcml2YXRlOjpw
YWdlKCkgY29uc3QKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICByZXR1cm4gbV9wYWdlOwor
CisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+ZC0+cGFnZSgpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK1dlYk92ZXJsYXlPdmVycmlkZSogV2ViT3ZlcmxheVByaXZhdGU6
Om92ZXJyaWRlKCkKK3sKKyAgICAvLyBQYWdlIG1pZ2h0IGhhdmUgY2hhbmdlZCBpZiB3ZSB3ZXJl
IHJlbW92ZWQgZnJvbSB0aGUgcGFnZSBhbmQgYWRkZWQgdG8KKyAgICAvLyBzb21lIG90aGVyIHBh
Z2UKKyAgICBpZiAobV9vdmVycmlkZSkKKyAgICAgICAgbV9vdmVycmlkZS0+ZC0+c2V0UGFnZShw
YWdlKCkpOworICAgIHJldHVybiBtX292ZXJyaWRlLmdldCgpOworfQorCit2b2lkIFdlYk92ZXJs
YXlQcml2YXRlOjpkcmF3Q29udGVudHMoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBpZiAoIWNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpZW50LT5kcmF3T3ZlcmxheUNvbnRlbnRz
KHEsIGNhbnZhcyk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGU6OnNjaGVkdWxlQ29tcG9z
aXRpbmdSdW4oKQoreworICAgIGlmIChXZWJQYWdlUHJpdmF0ZSogcGFnZSA9IHRoaXMtPnBhZ2Uo
KSkgeworICAgICAgICBpZiAoV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQqIGNvbXBvc2l0b3JDbGll
bnQgPSBwYWdlLT5jb21wb3NpdG9yKCktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBkb3VibGUg
YW5pbWF0aW9uVGltZSA9IGNvbXBvc2l0b3JDbGllbnQtPnJlcXVlc3RBbmltYXRpb25GcmFtZSgp
OworICAgICAgICAgICAgY29tcG9zaXRvckNsaWVudC0+aW52YWxpZGF0ZShhbmltYXRpb25UaW1l
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhZ2UtPmJsaXRW
aXNpYmxlQ29udGVudHMoKTsKKyAgICB9Cit9CisKK1dlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhy
ZWFkOjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZChHcmFwaGljc0xheWVyQ2xpZW50KiBj
bGllbnQpCisgICAgOiBtX2xheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShjbGllbnQgPyBjbGll
bnQgOiB0aGlzKSkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBtX2xheWVyLT5w
bGF0Zm9ybUxheWVyKCktPmxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKTsKK30KKworV2ViT3Zlcmxh
eU92ZXJyaWRlKiBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3ZlcnJpZGUoKQorewor
ICAgIGlmICghbV9vdmVycmlkZSkgeworICAgICAgICBXZWJPdmVybGF5UHJpdmF0ZSogdG1wID0g
bmV3IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQobV9sYXllckNvbXBvc2l0aW5n
VGhyZWFkLmdldCgpKTsKKyAgICAgICAgbV9vdmVycmlkZSA9IGFkb3B0UHRyKG5ldyBXZWJPdmVy
bGF5T3ZlcnJpZGUodG1wLCB0cnVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYk92ZXJsYXlQ
cml2YXRlOjpvdmVycmlkZSgpOworfQorCitGbG9hdFBvaW50IFdlYk92ZXJsYXlQcml2YXRlV2Vi
S2l0VGhyZWFkOjpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnBvc2l0
aW9uKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fbGF5ZXItPnNldFBvc2l0
aW9uKHBvc2l0aW9uKTsKK30KKworRmxvYXRQb2ludCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRo
cmVhZDo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQzRCBhbmNob3IgPSBt
X2xheWVyLT5hbmNob3JQb2ludCgpOworICAgIHJldHVybiBGbG9hdFBvaW50KGFuY2hvci54KCks
IGFuY2hvci55KCkpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3IpCit7CisgICAgbV9sYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKGFuY2hvci54KCksIGFuY2hvci55KCksIDApKTsK
K30KKworRmxvYXRTaXplIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzaXplKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+c2l6ZSgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQ
cml2YXRlV2ViS2l0VGhyZWFkOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBtX2xheWVyLT5zZXRTaXplKHNpemUpOworfQorCitib29sIFdlYk92ZXJsYXlQcml2YXRlV2Vi
S2l0VGhyZWFkOjpzaXplSXNTY2FsZUludmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKTsKK30KKwordm9p
ZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQo
Ym9vbCBpbnZhcmlhbnQpCit7CisgICAgbV9sYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRTaXpl
SXNTY2FsZUludmFyaWFudChpbnZhcmlhbnQpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBX
ZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllci0+dHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQoreworICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworfQorCitm
bG9hdCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXItPm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0
ZVdlYktpdFRocmVhZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1fbGF5ZXIt
PnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRU
aHJlYWQ6OmFkZEFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKQoreworICAgIEludFNpemUg
c2l6ZShtX2xheWVyLT5zaXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsK
KyAgICBtX2xheWVyLT5hZGRBbmltYXRpb24oa2V5ZnJhbWVzLCBzaXplLCBhbmltYXRpb24sIG5h
bWUsIDApOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1h
dGlvbihuYW1lKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6YWRk
Q2hpbGQoV2ViT3ZlcmxheVByaXZhdGUqIG92ZXJsYXkpCit7CisgICAgbV9sYXllci0+YWRkQ2hp
bGQoc3RhdGljX2Nhc3Q8V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQqPihvdmVybGF5KS0+
bV9sYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6
OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
K30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0Q29udGVudHNUb0lt
YWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGlt
YWdlU2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQ
cml2YXRlV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3ImKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRU
aHJlYWQ6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBtX2xheWVy
LT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6Y2xlYXIoKQoreworICAgIHNldFNpemUoRmxvYXRTaXplKDAsIDAp
KTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6aW52YWxpZGF0ZSgp
Cit7CisgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBpZiAoUGxhdGZv
cm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpCisgICAg
ICAgIG1fbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+Y2xlYXJPdmVycmlkZSgpOworICAgIGVsc2Ug
aWYgKFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJl
bnRUaHJlYWQoKSkgeworICAgICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmNsZWFyT3Zl
cnJpZGUoKTsKKyAgICAgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworICAgIH0KK30KKwor
dm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6bm90aWZ5U3luY1JlcXVpcmVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIGlmIChXZWJQYWdlUHJpdmF0ZSog
cGFnZSA9IHRoaXMtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+c2NoZWR1bGVSb290TGF5ZXJDb21t
aXQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiBjLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpCit7CisgICAgZHJhd0NvbnRlbnRzKGMucGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpKTsKK30KKworV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6Oldl
Yk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCkKKyAgICA6IG1fZHJhd3NDb250
ZW50KGZhbHNlKQorICAgICwgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkKDApCisgICAgLCBtX2Ns
aWVudCgwKQoreworfQorCitXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
fldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCkKK3sKK30KKwordm9pZCBX
ZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6c2V0RHJhd3NDb250ZW50KGJv
b2wgZHJhd3NDb250ZW50KQoreworICAgIG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50Owor
fQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjppbnZhbGlk
YXRlKCkKK3sKKyAgICBtX3RleHR1cmUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6c2V0Q29udGVudHMoY29uc3QgU2tCaXRtYXAmIGNv
bnRlbnRzKQoreworICAgIG1fY29udGVudHMgPSBjb250ZW50czsKKyAgICBtX2NvbG9yID0gQ29s
b3IoKTsKKyAgICBtX3RleHR1cmUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudDo6c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK3sKKyAgICBtX2NvbnRlbnRzID0gU2tCaXRtYXAoKTsKKyAgICBtX2NvbG9yID0gY29s
b3I7CisgICAgbV90ZXh0dXJlLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OmxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoV2Vi
Q29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmxheWVyVmlzaWJp
bGl0eUNoYW5nZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wgdmlzaWJsZSkKK3sKK30K
Kwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4
dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKK3sKKyAgICBpZiAobV9jb250
ZW50cy5pc051bGwoKSAmJiAhbV9jb2xvci5pc1ZhbGlkKCkgJiYgIW1fZHJhd3NDb250ZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV90ZXh0dXJlICYmIG1fdGV4dHVyZS0+dGV4dHVy
ZUlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbG9yLmlzVmFsaWQoKSkgewor
ICAgICAgICBtX3RleHR1cmUgPSB0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0
dXJlRm9yQ29sb3IobV9jb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgaWYgKCFtX2NsaWVudCB8fCAhbV9vd25lcikKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9jb250ZW50cy5pc051bGwoKSkgewor
ICAgICAgICAgICAgbV9jb250ZW50cy5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnLCBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmJvdW5kcygpLndpZHRoKCksIG1fbGF5ZXJD
b21wb3NpdGluZ1RocmVhZC0+Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgbV9jb250
ZW50cy5hbGxvY1BpeGVscygpOworICAgICAgICB9CisKKyAgICAgICAgU2tEZXZpY2UgZGV2aWNl
KG1fY29udGVudHMpOworICAgICAgICBTa0NhbnZhcyBjYW52YXMoJmRldmljZSk7CisgICAgICAg
IG1fY2xpZW50LT5kcmF3T3ZlcmxheUNvbnRlbnRzKG1fb3duZXIsICZjYW52YXMpOworICAgICAg
ICBjYW52YXMuZmx1c2goKTsKKyAgICB9CisKKyAgICBtX3RleHR1cmUgPSBUZXh0dXJlOjpjcmVh
dGUoKTsKKyAgICBtX3RleHR1cmUtPnByb3RlY3QoSW50U2l6ZShtX2NvbnRlbnRzLndpZHRoKCks
IG1fY29udGVudHMuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IGJpdG1hcFJlY3QoMCwgMCwgbV9j
b250ZW50cy53aWR0aCgpLCBtX2NvbnRlbnRzLmhlaWdodCgpKTsKKyAgICBtX3RleHR1cmUtPnVw
ZGF0ZUNvbnRlbnRzKG1fY29udGVudHMsIGJpdG1hcFJlY3QsIGJpdG1hcFJlY3QsIGZhbHNlKTsK
K30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1Rl
eHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgLypzY2FsZSovLCBp
bnQgcG9zaXRpb25Mb2NhdGlvbiwgaW50IHRleENvb3JkTG9jYXRpb24pCit7CisgICAgaWYgKCFt
X3RleHR1cmUgfHwgIW1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7
CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDIsIEdMX0ZMT0FU
LCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5kcygpKTsKKyAgICBmbG9h
dCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07CisgICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHRleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgMCwgdGV4Y29vcmRzKTsKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAw
LCA0KTsKK30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCit7CisgICAgbV90ZXh0dXJl
LmNsZWFyKCk7Cit9CisKK1dlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OldlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQoUGFzc1JlZlB0cjxMYXllckNvbXBvc2l0aW5n
VGhyZWFkPiBsYXllckNvbXBvc2l0aW5nVGhyZWFkKQorICAgIDogbV9sYXllckNvbXBvc2l0aW5n
VGhyZWFkQ2xpZW50KDApCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkID0gbGF5ZXJD
b21wb3NpdGluZ1RocmVhZDsKK30KKworV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCgpCisgICAgOiBtX2xheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQobmV3IFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50KQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZCA9IExheWVyQ29tcG9zaXRp
bmdUaHJlYWQ6OmNyZWF0ZShMYXllckRhdGE6OkN1c3RvbUxheWVyLCBtX2xheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQpOworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+c2V0
TGF5ZXIobV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpKTsKK30KKworV2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZDo6fldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJl
YWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+c2V0Q2xpZW50KDAs
IDApOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldENs
aWVudChXZWJPdmVybGF5Q2xpZW50KiBjbGllbnQpCit7CisgICAgV2ViT3ZlcmxheVByaXZhdGU6
OnNldENsaWVudChjbGllbnQpOworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+
c2V0Q2xpZW50KHEsIGNsaWVudCk7Cit9CisKK1dlYk92ZXJsYXlPdmVycmlkZSogV2ViT3Zlcmxh
eVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6b3ZlcnJpZGUoKQoreworICAgIGlmICghbV9vdmVy
cmlkZSkKKyAgICAgICAgbV9vdmVycmlkZSA9IGFkb3B0UHRyKG5ldyBXZWJPdmVybGF5T3ZlcnJp
ZGUodGhpcywgZmFsc2UpKTsKKworICAgIHJldHVybiBXZWJPdmVybGF5UHJpdmF0ZTo6b3ZlcnJp
ZGUoKTsKK30KKworRmxvYXRQb2ludCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFk
Ojpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC0+cG9zaXRpb24oKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK0Zsb2F0UG9pbnQgV2ViT3ZlcmxheVByaXZhdGVDb21w
b3NpdGluZ1RocmVhZDo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQtPmFuY2hvclBvaW50KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0QW5jaG9yUG9pbnQo
YW5jaG9yKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK0Zsb2F0U2l6ZSBX
ZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzaXplKCkgY29uc3QKK3sKKyAgICBJ
bnRTaXplIGJvdW5kcyA9IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+Ym91bmRzKCk7CisgICAg
cmV0dXJuIEZsb2F0U2l6ZShib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKK30KKwor
dm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldEJvdW5k
cyhJbnRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgIHNjaGVkdWxlQ29t
cG9zaXRpbmdSdW4oKTsKK30KKworYm9vbCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkOjpzaXplSXNTY2FsZUludmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJD
b21wb3NpdGluZ1RocmVhZC0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKTsKK30KKwordm9pZCBXZWJP
dmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRTaXplSXNTY2FsZUludmFyaWFudChi
b29sIGludmFyaWFudCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldFNpemVJ
c1NjYWxlSW52YXJpYW50KGludmFyaWFudCk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigp
OworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjp0cmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRp
bmdUaHJlYWQtPnRyYW5zZm9ybSgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9z
aXRpbmdUaHJlYWQ6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0VHJhbnNmb3JtKHRy
YW5zZm9ybSk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCitmbG9hdCBXZWJP
dmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5vcGFjaXR5KCk7Cit9CisKK3ZvaWQgV2Vi
T3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5
KQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
KyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZh
dGVDb21wb3NpdGluZ1RocmVhZDo6YWRkQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5p
bWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMpCit7
CisgICAgSW50U2l6ZSBib3hTaXplID0gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5ib3VuZHMo
KTsKKyAgICBSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGxheWVyQW5pbWF0aW9uID0gTGF5ZXJBbmlt
YXRpb246OmNyZWF0ZShrZXlmcmFtZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbmFtZSwgMC4wKTsK
KworICAgIC8vIEZJWE1FOiBVbmZvcnR1bmF0ZWx5IFdlYlBhZ2VDb21wb3NpdG9yQ2xpZW50Ojpy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdXNlcyBhIGRpZmZlcmVudCB0aW1lIGNvb3JkaW5hdGUgc3lz
dGVtCisgICAgLy8gdGhhbiBhY2NlbGVyYXRlZCBhbmltYXRpb25zLCBzbyB3ZSBjYW4ndCB1c2Ug
dGhlIHRpbWUgcmV0dXJuZWQgYnkgV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQ6OnJlcXVlc3RBbmlt
YXRpb25GcmFtZSgpCisgICAgLy8gZm9yIHN0YXJ0dGltZS4KKyAgICBsYXllckFuaW1hdGlvbi0+
c2V0U3RhcnRUaW1lKGN1cnJlbnRUaW1lKCkpOworCisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhy
ZWFkLT5hZGRBbmltYXRpb24obGF5ZXJBbmltYXRpb24uZ2V0KCkpOworICAgIHNjaGVkdWxlQ29t
cG9zaXRpbmdSdW4oKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbGF5ZXJD
b21wb3NpdGluZ1RocmVhZC0+cmVtb3ZlQW5pbWF0aW9uKG5hbWUpOworICAgIHNjaGVkdWxlQ29t
cG9zaXRpbmdSdW4oKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkOjphZGRDaGlsZChXZWJPdmVybGF5UHJpdmF0ZSogb3ZlcmxheSkKK3sKKyAgICBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQtPmFkZFN1YmxheWVyKG92ZXJsYXktPmxheWVyQ29tcG9zaXRpbmdU
aHJlYWQoKSk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAg
IGlmIChtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnN1cGVybGF5ZXIoKSA9PSBwYWdlKCktPm1f
Y29tcG9zaXRvci0+Y29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIoKSkKKyAgICAgICAgcGFn
ZSgpLT5tX2NvbXBvc2l0b3ItPnJlbW92ZU92ZXJsYXkobV9sYXllckNvbXBvc2l0aW5nVGhyZWFk
LmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+cmVt
b3ZlRnJvbVN1cGVybGF5ZXIoKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q29udGVudHNUb0lt
YWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSkK
K3sKKyAgICBjb25zdCBTa0JpdG1hcCYgb2xkQ29udGVudHMgPSBtX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQtPmNvbnRlbnRzKCk7CisgICAgaWYgKCFvbGRDb250ZW50cy5pc051bGwoKSkg
eworICAgICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2sob2xkQ29udGVudHMpOworICAgICAgICBp
ZiAoZGF0YSA9PSBvbGRDb250ZW50cy5nZXRQaXhlbHMoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBTa0JpdG1hcCBjb250ZW50czsKKyAgICBjb250ZW50cy5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXpl
LmhlaWdodCgpKTsKKyAgICBjb250ZW50cy5zZXRQaXhlbHMoY29uc3RfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSkpOworCisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5zZXRD
b250ZW50cyhjb250ZW50cyk7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXROZWVk
c1RleHR1cmUodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1Ro
cmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQtPnNldENvbnRlbnRzVG9Db2xvcihjb2xvcik7Cisg
ICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXROZWVkc1RleHR1cmUodHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0RHJhd3NDb250ZW50
KGJvb2wgZHJhd3NDb250ZW50KQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dC0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVudCk7CisgICAgbV9sYXllckNvbXBvc2l0aW5n
VGhyZWFkLT5zZXROZWVkc1RleHR1cmUodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZh
dGVDb21wb3NpdGluZ1RocmVhZDo6Y2xlYXIoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZC0+ZGVsZXRlVGV4dHVyZXMoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkOjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+aW52YWxpZGF0ZSgpOworICAgIHNjaGVkdWxl
Q29tcG9zaXRpbmdSdW4oKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjpyZXNldE92ZXJyaWRlcygpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFk
LT5jbGVhck92ZXJyaWRlKCk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit9
Cit9CisjZWxzZSAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCituYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViT3ZlcmxheTo6V2ViT3ZlcmxheSgp
Cit7Cit9CisKK1dlYk92ZXJsYXk6On5XZWJPdmVybGF5KCkKK3sKK30KKworUGxhdGZvcm06OkZs
b2F0UG9pbnQgV2ViT3ZlcmxheTo6cG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBQbGF0
Zm9ybTo6RmxvYXRQb2ludCgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFBvc2l0aW9uKGNv
bnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JikKK3sKK30KKworUGxhdGZvcm06OkZsb2F0UG9pbnQg
V2ViT3ZlcmxheTo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6
RmxvYXRQb2ludCgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldEFuY2hvclBvaW50KGNvbnN0
IFBsYXRmb3JtOjpGbG9hdFBvaW50JikKK3sKK30KKworUGxhdGZvcm06OkZsb2F0U2l6ZSBXZWJP
dmVybGF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm06OkZsb2F0U2l6ZSgp
OworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFNpemUoY29uc3QgUGxhdGZvcm06OkZsb2F0U2l6
ZSYpCit7Cit9CisKK1BsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJPdmVybGF5Ojp0
cmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXRUcmFuc2Zvcm0oY29uc3QgUGxhdGZv
cm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JikKK3sKK30KKworZmxvYXQgV2ViT3ZlcmxheTo6b3Bh
Y2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDEuMGY7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6
c2V0T3BhY2l0eShmbG9hdCkKK3sKK30KKworV2ViT3ZlcmxheSogV2ViT3ZlcmxheTo6cGFyZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBXZWJPdmVybGF5OjphZGRDaGls
ZChXZWJPdmVybGF5KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViT3Zlcmxh
eTo6cmVtb3ZlRnJvbVBhcmVudCgpCit7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6YWRkQW5pbWF0
aW9uKFdlYkFuaW1hdGlvbiopCit7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6cmVtb3ZlQW5pbWF0
aW9uKGNvbnN0IFdlYlN0cmluZyYpCit7Cit9CisKK30KK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYk92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zlcmxh
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ3NDBhNDYxNTZlYjMyNDRmMzNlMzYzNTI5ODQzMTMyODQ0OWM4ZDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJs
YXkuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaWZuZGVmIFdlYk92ZXJsYXlfaAorI2RlZmluZSBXZWJPdmVybGF5X2gKKworI2lu
Y2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKKyNpbmNsdWRlICJXZWJPdmVybGF5T3ZlcnJpZGUu
aCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudDsKK30KKworbmFtZXNwYWNl
IEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbjsK
K2NsYXNzIFdlYk92ZXJsYXlDbGllbnQ7CitjbGFzcyBXZWJPdmVybGF5T3ZlcnJpZGU7CitjbGFz
cyBXZWJPdmVybGF5UHJpdmF0ZTsKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJTdHJpbmc7CisK
Ky8qKgorICogUmVwcmVzZW50cyBhbiBvdmVybGF5IHRoYXQgaXMgcmVuZGVyZWQgc3VwZXJpbXBv
c2VkIG9uIGEgd2ViIHBhZ2UuCisgKgorICogVGhlIFdlYk92ZXJsYXkgaXMgbm90IHRocmVhZCBz
YWZlLCBidXQgaXQgaXMgcmVlbnRyYW50IHdoZW4gdXNlZCBvbiBlaXRoZXIKKyAqIHRoZSBXZWJL
aXQgb3IgdGhlIGNvbXBvc2l0aW5nIHRocmVhZC4gVGhpcyBtZWFucyB0aGF0IG92ZXJsYXlzIGNh
biBiZQorICogb24gZWl0aGVyIG9mIHRoZXNlIHRocmVhZHMsIGJ1dCBlYWNoIGluc3RhbmNlIG11
c3Qgb25seSBiZSB1c2VkIG9uIHRoZQorICogdGhyZWFkIHdoZXJlIGl0IHdhcyBjcmVhdGVkLiBU
aGUgb25seSBleGNlcHRpb24gaXMgdGhlIG92ZXJyaWRlIG1lY2hhbmlzbS4KKyAqCisgKiBUaGUg
V2ViT3ZlcmxheU92ZXJyaWRlIG9iamVjdCByZXR1cm5lZCBieSBXZWJPdmVybGF5OjpvdmVycmlk
ZSgpIGNhbiBiZSB1c2VkCisgKiB0byBvdmVycmlkZSB0aGUgdmFsdWVzIG9mIHNwZWNpZmljIHBy
b3BlcnRpZXMgZnJvbSB0aGUgVUkgdGhyZWFkLgorICoKKyAqIFRoZXkgaGF2ZSB0aGUgZm9sbG93
aW5nIHNlbWFudGljczogSWYgdGhleSBhcmUgY2FsbGVkIGZvciBhIHNwZWNpZmljIG92ZXJsYXkK
KyAqIG9uIHRoZSBVSSB0aHJlYWQsIHRoZSB2YWx1ZSBzZXQgd2lsbCBvdmVycmlkZSBhbnkgdmFs
dWUgc2V0IG9uIHRoZSBXSyB0aHJlYWQKKyAqIHVudGlsIHlvdSBjYWxsIHJlc2V0T3ZlcnJpZGVz
KCkuIHJlc2V0T3ZlcnJpZGVzKCkgaXMgdGhyZWFkIHNhZmUuCisgKi8KK2NsYXNzIEJMQUNLQkVS
UllfRVhQT1JUIFdlYk92ZXJsYXkgeworcHVibGljOgorICAgIFdlYk92ZXJsYXkoKTsKKyAgICBX
ZWJPdmVybGF5KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5X
ZWJPdmVybGF5KCk7CisKKyAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIGxheWVyICh0aGUgbG9j
YXRpb24gb2YgaXRzIHRvcC1sZWZ0IGNvcm5lciBpbiBpdHMgcGFyZW50KQorICAgIFBsYXRmb3Jt
OjpGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOworCisgICAgLy8gQW5jaG9yIHBvaW50OiAoMCwgMCkg
aXMgdG9wIGxlZnQsICgxLCAxKSBpcyBib3R0b20gcmlnaHQuIFRoZSBhbmNob3IgcG9pbnQKKyAg
ICAvLyBhZmZlY3RzIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybXMuCisgICAgUGxhdGZvcm06
OkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50
KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50Jik7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUg
bGF5ZXIuCisgICAgUGxhdGZvcm06OkZsb2F0U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFNpemUmKTsKKworICAgIC8vIFdoZXRoZXIgdGhl
IGxheWVyIGlzIHNjYWxlZCB0b2dldGhlciB3aXRoIHRoZSB3ZWIgcGFnZQorICAgIGJvb2wgc2l6
ZUlzU2NhbGVJbnZhcmlhbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVJc1NjYWxlSW52YXJp
YW50KGJvb2wpOworCisgICAgLy8gVHJhbnNmb3JtIGNhbiBiZSB1c2VkIHRvIHJvdGF0ZSB0aGUg
bGF5ZXIsIGFtb25nIG90aGVyIHRoaW5ncworICAgIFBsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBQbGF0
Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKworICAgIC8vIE9wYWNpdHkuIENhbiBhbHNv
IGJlIHVzZWQgdG8gdGVtcG9yYXJpbHkgaGlkZSBhIGxheWVyCisgICAgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0OworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisKKyAgICAvLyBBZGRzL3JlbW92
ZXMgYW4gYW5pbWF0aW9uCisgICAgLy8gTm90ZSB0aGF0IFdlYkFuaW1hdGlvbiBhbmQgV2ViU3Ry
aW5nIGFyZSBub3QgdGhyZWFkIHNhZmUgYW5kIGhhdmUgdG8gYmUKKyAgICAvLyBjcmVhdGVkIG9u
IHRoZSB0aHJlYWQgd2hlcmUgdGhleSdsbCBiZSB1c2VkLgorICAgIHZvaWQgYWRkQW5pbWF0aW9u
KGNvbnN0IFdlYkFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSk7CisKKyAgICBXZWJPdmVybGF5KiBwYXJlbnQoKSBjb25zdDsKKyAgICBi
b29sIGFkZENoaWxkKFdlYk92ZXJsYXkqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsK
KworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBpbWFnZVNpemUpOworICAgIHZvaWQgc2V0Q29udGVu
dHNUb0NvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKKyAgICB2b2lkIHNldERyYXdz
Q29udGVudChib29sKTsKKworICAgIC8vIFdpbGwgcmVzdWx0IGluIGEgZnV0dXJlIGNhbGwgdG8g
V2ViT3ZlcmxheUNsaWVudDo6ZHJhd0NvbnRlbnRzLCBpZiB0aGUgbGF5ZXIgZHJhd3MgY3VzdG9t
IGNvbnRlbnRzCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICAvLyBUaGUgY2xpZW50IGNh
biBiZSB1c2VkIHRvIGRyYXcgbGF5ZXIgY29udGVudHMgdXNpbmcgU2tpYQorICAgIHZvaWQgc2V0
Q2xpZW50KFdlYk92ZXJsYXlDbGllbnQqKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIFVJ
IHRocmVhZAorICAgIFdlYk92ZXJsYXlPdmVycmlkZSogb3ZlcnJpZGUoKTsKKworICAgIC8qKgor
ICAgICAqIFRocmVhZCBzYWZlLiBOZXh0IHRpbWUgdGhlIGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQg
b24gdGhlIFdLIHRocmVhZCwgbWFrZQorICAgICAqIHRob3NlIHZhbHVlcyBvdmVycmlkZSBhbnkg
c2V0IG9uIHRoZSBVSSB0aHJlYWQuCisgICAgICovCisgICAgdm9pZCByZXNldE92ZXJyaWRlcygp
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJQYWdlOworICAgIGZyaWVuZCBjbGFz
cyBXZWJPdmVybGF5UHJpdmF0ZTsKKworICAgIC8vIERpc2FibGUgY29weSBjb25zdHJ1Y3RvciBh
bmQgb3BlcmF0b3I9CisgICAgV2ViT3ZlcmxheShjb25zdCBXZWJPdmVybGF5Jik7CisgICAgV2Vi
T3ZlcmxheSYgb3BlcmF0b3I9KGNvbnN0IFdlYk92ZXJsYXkmKTsKKworICAgIFdlYk92ZXJsYXlQ
cml2YXRlKiBkOworfTsKKworfQorfQorCisjZW5kaWYgLy8gV2ViT3ZlcmxheV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheUNsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJmZWIyNjNjZDA0NWNkODIxZDc1OTFiZWVhNjY5M2U3OTg2YWI3N2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlDbGllbnQuaApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
Zm5kZWYgV2ViT3ZlcmxheUNsaWVudF9oCisjZGVmaW5lIFdlYk92ZXJsYXlDbGllbnRfaAorCisj
aW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgorCitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk92ZXJsYXk7
CisKKy8qKgorICovCitjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJPdmVybGF5Q2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJPdmVybGF5Q2xpZW50KCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd092ZXJsYXlDb250ZW50cyhXZWJPdmVybGF5KiwgU2tDYW52YXMqKSA9IDA7
Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBXZWJPdmVybGF5Q2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lZTgxM2Q1OWNmM2EyYjA3ZTcyMjhiMTJjMzQ4MTgwNmJkMzNkMTRiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUu
Y3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYk92ZXJsYXlPdmVycmlk
ZS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldlYkFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlvbl9wLmgiCisjaW5jbHVkZSAiV2ViT3Zl
cmxheV9wLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViT3ZlcmxheU92
ZXJyaWRlOjpXZWJPdmVybGF5T3ZlcnJpZGUoV2ViT3ZlcmxheVByaXZhdGUqIGQsIGJvb2wgb3du
ZWQpCisgICAgOiBkKGQpCisgICAgLCBtX293bmVkKG93bmVkKQoreworfQorCitXZWJPdmVybGF5
T3ZlcnJpZGU6On5XZWJPdmVybGF5T3ZlcnJpZGUoKQoreworICAgIGlmIChtX293bmVkKQorICAg
ICAgICBkZWxldGUgZDsKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFBvc2l0aW9u
KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkLT5zZXRQb3Np
dGlvbihwb3NpdGlvbik7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRBbmNob3JQ
b2ludChjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYgYW5jaG9yKQoreworICAgIGQtPnNldEFu
Y2hvclBvaW50KGFuY2hvcik7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRTaXpl
KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFNpemUmIHNpemUpCit7CisgICAgZC0+c2V0U2l6ZShzaXpl
KTsKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFRyYW5zZm9ybShjb25zdCBQbGF0
Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBkLT5zZXRUcmFu
c2Zvcm0ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCY+KHRyYW5z
Zm9ybSkpOworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KQoreworICAgIGQtPnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgV2ViT3Zl
cmxheU92ZXJyaWRlOjphZGRBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uJiBhbmltYXRpb24p
Cit7CisgICAgZC0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5kLT5uYW1lLCBhbmltYXRpb24uZC0+
YW5pbWF0aW9uLmdldCgpLCBhbmltYXRpb24uZC0+a2V5ZnJhbWVzKTsKK30KKwordm9pZCBXZWJP
dmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBXZWJTdHJpbmcmIG5hbWUpCit7
CisgICAgZC0+cmVtb3ZlQW5pbWF0aW9uKFN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG5h
bWUuaW1wbCgpKSkpOworfQorCit9Cit9CisjZWxzZSAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
T3ZlcmxheU92ZXJyaWRlOjpXZWJPdmVybGF5T3ZlcnJpZGUoV2ViT3ZlcmxheVByaXZhdGUqKQor
eworfQorCitXZWJPdmVybGF5T3ZlcnJpZGU6On5XZWJPdmVybGF5T3ZlcnJpZGUoKQoreworfQor
Cit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkZs
b2F0UG9pbnQmKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0QW5jaG9yUG9p
bnQoY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlP
dmVycmlkZTo6c2V0U2l6ZShjb25zdCBQbGF0Zm9ybTo6RmxvYXRTaXplJikKK3sKK30KKwordm9p
ZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFRyYW5zZm9ybShjb25zdCBQbGF0Zm9ybTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0T3Bh
Y2l0eShmbG9hdCkKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OmFkZEFuaW1hdGlv
bihjb25zdCBXZWJBbmltYXRpb24mKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6
cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0cmluZyYpCit7Cit9CisKK30KK30KKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5oIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWM5YTM0OTY0N2Vj
ZDk1Y2Q1MmM0NDlmZTEwMDRjNDg4ZjJkNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViT3Zl
cmxheU92ZXJyaWRlX2gKKyNkZWZpbmUgV2ViT3ZlcmxheU92ZXJyaWRlX2gKKworI2luY2x1ZGUg
IkJsYWNrQmVycnlHbG9iYWwuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1p
dGl2ZXMuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkFuaW1hdGlvbjsKK2NsYXNzIFdlYk92ZXJsYXlQcml2YXRlOworY2xhc3MgV2Vi
U3RyaW5nOworCisvKioKKyAqIENvbXBvc2l0aW5nIHRocmVhZCBvbmx5CisgKgorICogTm90ZSB0
aGF0IHRoZSBXZWJBbmltYXRpb24gYW5kIFdlYlN0cmluZyBjbGFzc2VzIGFyZSBub3QgdGhyZWFk
IHNhZmUsIGJ1dAorICogcmVlbnRyYW50LCBhbmQgaGF2ZSB0byBiZSBjcmVhdGVkIG9uIHRoZSB0
aHJlYWQgd2hlcmUgdGhleSdsbCBiZSB1c2VkLgorICovCitjbGFzcyBCTEFDS0JFUlJZX0VYUE9S
VCBXZWJPdmVybGF5T3ZlcnJpZGUgeworcHVibGljOgorICAgIC8vIERvbid0IHVzZSB0aGlzLCBj
YWxsIFdlYk92ZXJsYXk6Om92ZXJyaWRlKCkgaW5zdGVhZAorICAgIFdlYk92ZXJsYXlPdmVycmlk
ZShXZWJPdmVybGF5UHJpdmF0ZSosIGJvb2wgb3duZWQpOworICAgIH5XZWJPdmVybGF5T3ZlcnJp
ZGUoKTsKKworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50Jik7
CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFNpemUmKTsKKyAgICB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworCisgICAgdm9pZCBhZGRBbmltYXRpb24oY29uc3Qg
V2ViQW5pbWF0aW9uJik7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5n
JiBuYW1lKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheVByaXZhdGU7
CisKKyAgICAvLyBEaXNhYmxlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPQorICAgIFdl
Yk92ZXJsYXlPdmVycmlkZShjb25zdCBXZWJPdmVybGF5T3ZlcnJpZGUmKTsKKyAgICBXZWJPdmVy
bGF5T3ZlcnJpZGUmIG9wZXJhdG9yPShjb25zdCBXZWJPdmVybGF5T3ZlcnJpZGUmKTsKKworICAg
IFdlYk92ZXJsYXlQcml2YXRlKiBkOworICAgIGJvb2wgbV9vd25lZDsKK307CisKK30KK30KKwor
I2VuZGlmIC8vIFdlYk92ZXJsYXlPdmVycmlkZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJPdmVybGF5X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGZiNmUwYzBiYzNkYjEwODU5ZjY5NzRl
ZmU2ZmFmMzQzOGNlNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5X3AuaApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYk92ZXJsYXlfcF9oCisjZGVmaW5l
IFdlYk92ZXJsYXlfcF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJPdmVybGF5T3ZlcnJpZGUu
aCIKKworI2luY2x1ZGUgPFNrQml0bWFwLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2NsYXNzIFNrQ2Fu
dmFzOworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7Cit9CisK
K25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJP
dmVybGF5OworY2xhc3MgV2ViT3ZlcmxheUNsaWVudDsKK2NsYXNzIFdlYlBhZ2VQcml2YXRlOwor
CitjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViT3ZlcmxheVByaXZh
dGUoKQorICAgICAgICA6IHEoMCkKKyAgICAgICAgLCBwYXJlbnQoMCkKKyAgICAgICAgLCBtX3Bh
Z2UoMCkKKyAgICB7CisgICAgICAgIG5hdGl2ZVRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworICAg
IH0KKworICAgIHZpcnR1YWwgfldlYk92ZXJsYXlQcml2YXRlKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChwdGhyZWFkX3NlbGYoKSA9PSBkLT5uYXRpdmVUaHJlYWQpOworICAgIH0KKworICAgIFdl
YlBhZ2VQcml2YXRlKiBwYWdlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYWdlKFdlYlBhZ2VQcml2
YXRlKiBwYWdlKSB7IG1fcGFnZSA9IHBhZ2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGll
bnQoV2ViT3ZlcmxheUNsaWVudCogYykgeyBjbGllbnQgPSBjOyB9CisKKyAgICB2aXJ0dWFsIFdl
Yk92ZXJsYXlPdmVycmlkZSogb3ZlcnJpZGUoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRQb2ludCBwb3NpdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpID0gMDsKKworICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgPSAwOworCisgICAgdmlydHVh
bCBib29sIHNpemVJc1NjYWxlSW52YXJpYW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaXplSXNTY2FsZUludmFyaWFudChib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
JikgPSAwOworCisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
QW5pbWF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpBbmltYXRpb24qLCBj
b25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkKFdlYk92ZXJsYXlQcml2YXRlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVGcm9tUGFyZW50KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9J
bWFnZShjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBp
bWFnZVNpemUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQo
Ym9vbCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlKCkgPSAwOworICAgIHZvaWQgZHJhd0NvbnRlbnRzKFNrQ2FudmFzKik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRPdmVycmlkZXMoKSA9IDA7CisKKyAgICB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKKworICAgIC8vIE5ldmVyIDAKKyAgICBXZWJDb3JlOjpM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpOyB9CisKKyAgICAvLyBDYW4gYmUg
MAorICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcigpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKworICAgIFdlYk92ZXJsYXkqIHE7CisgICAgV2ViT3ZlcmxheUNs
aWVudCogY2xpZW50OworICAgIFdlYk92ZXJsYXkqIHBhcmVudDsKKyAgICBwdGhyZWFkX3QgbmF0
aXZlVGhyZWFkOworCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyQ29tcG9z
aXRpbmdUaHJlYWQ+IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZDsKKyAgICBPd25QdHI8V2ViT3Zl
cmxheU92ZXJyaWRlPiBtX292ZXJyaWRlOworICAgIFdlYlBhZ2VQcml2YXRlKiBtX3BhZ2U7Cit9
OworCitjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZCA6IHB1YmxpYyBXZWJPdmVy
bGF5UHJpdmF0ZSwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGlj
OgorICAgIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbGllbnQqID0gMCk7CisKKyAgICB2aXJ0dWFsIFdlYk92ZXJsYXlPdmVycmlkZSogb3ZlcnJp
ZGUoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
Jik7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworCisg
ICAgdmlydHVhbCBib29sIHNpemVJc1NjYWxlSW52YXJpYW50KCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFNpemVJc1NjYWxlSW52YXJpYW50KGJvb2wpOworCisgICAgdmlydHVhbCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uKGNvbnN0
IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpBbmltYXRpb24qLCBjb25zdCBXZWJDb3JlOjpL
ZXlmcmFtZVZhbHVlTGlzdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFdlYk92
ZXJsYXlQcml2YXRlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQgY2hhciog
ZGF0YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXplKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisgICAgdmlydHVh
bCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigp
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRPdmVycmlkZXMoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIEdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5DbGlwKTsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRD
b3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c1Zpc2libGUoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fbGF5ZXI7Cit9OworCisvLyBUaGUgTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dCdzIGxpZmUgY3ljbGUgaXMgdGllZCB0byB0aGUgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCwKKy8v
IHNvIGl0IG5lZWRzIHRvIGJlIGEgc2VwYXJhdGUgb2JqZWN0IGZyb20gdGhlIFdlYk92ZXJsYXlQ
cml2YXRlQ29tcG9zaXRpbmdUaHJlYWQuCitjbGFzcyBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dCgpOworICAgIHZpcnR1YWwgfldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
KCk7CisKKyAgICB2b2lkIHNldExheWVyKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQq
IGxheWVyKSB7IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZCA9IGxheWVyOyB9CisgICAgdm9pZCBz
ZXRDbGllbnQoV2ViT3ZlcmxheSogb3duZXIsIFdlYk92ZXJsYXlDbGllbnQqIGNsaWVudCkgeyBt
X293bmVyID0gb3duZXI7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd3NDb250ZW50OyB9CisgICAgdm9pZCBzZXREcmF3
c0NvbnRlbnQoYm9vbCk7CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBjb25zdCBTa0Jp
dG1hcCYgY29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzOyB9CisgICAgdm9pZCBz
ZXRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYpOworCisgICAgdm9pZCBzZXRDb250ZW50c1RvQ29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKworICAgIC8vIExheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3ll
ZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CisgICAgdmlydHVhbCB2b2lkIGxh
eWVyVmlzaWJpbGl0eUNoYW5nZWQoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJv
b2wgdmlzaWJsZSk7CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoV2Vi
Q29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4
dHVyZXMoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgaW50
IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlVGV4dHVyZXMoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOworCitw
cml2YXRlOgorICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgYm9v
bCBtX2RyYXdzQ29udGVudDsKKyAgICBTa0JpdG1hcCBtX2NvbnRlbnRzOworICAgIFdlYkNvcmU6
OkNvbG9yIG1fY29sb3I7CisgICAgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkOworICAgIFdlYk92ZXJsYXkqIG1fb3duZXI7CisgICAgV2Vi
T3ZlcmxheUNsaWVudCogbV9jbGllbnQ7Cit9OworCitjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZUNv
bXBvc2l0aW5nVGhyZWFkIDogcHVibGljIFdlYk92ZXJsYXlQcml2YXRlIHsKK3B1YmxpYzoKKyAg
ICBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKFBhc3NSZWZQdHI8V2ViQ29yZTo6
TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4pOworICAgIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRp
bmdUaHJlYWQoKTsKKyAgICB+V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCgpOwor
CisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChXZWJPdmVybGF5Q2xpZW50Kik7CisgICAgdmly
dHVhbCBXZWJPdmVybGF5T3ZlcnJpZGUqIG92ZXJyaWRlKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9z
aXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCisgICAgdmlydHVhbCBXZWJDb3Jl
OjpGbG9hdFBvaW50IGFuY2hvclBvaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RmxvYXRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaXplSXNTY2Fs
ZUludmFyaWFudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSXNTY2FsZUludmFy
aWFudChib29sKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgdmlydHVhbCBmbG9hdCBvcGFj
aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworCisgICAg
dmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29y
ZTo6QW5pbWF0aW9uKiwgY29uc3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChXZWJPdmVybGF5UHJpdmF0ZSopOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGltYWdlU2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Db2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9v
bCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0T3ZlcnJpZGVzKCk7CisKK3ByaXZhdGU6
CisgICAgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQqIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFdlYk92ZXJsYXlfcF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCBlM2Q2YzE0ZTVmMzJmZjI1N2JhNjJl
ODNlMTc2ODVjZDM2NmNjZmI0Li43NDY4MWRlYWJiMzkzM2FmYzFmZDIyOTY1ZmNkYWRhMDg1ZWU3
ZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTExNiw2
ICsxMTYsOCBAQAogI2luY2x1ZGUgIldlYkRPTURvY3VtZW50LmgiCiAjZW5kaWYKICNpbmNsdWRl
ICJXZWJLaXRWZXJzaW9uLmgiCisjaW5jbHVkZSAiV2ViT3ZlcmxheS5oIgorI2luY2x1ZGUgIldl
Yk92ZXJsYXlfcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJXZWJT
b2NrZXQuaCIKICNpbmNsdWRlICJXZWJWaWV3cG9ydEFyZ3VtZW50cy5oIgpAQCAtNjIwMCw2ICs2
MjAyLDQ2IEBAIHZvaWQgV2ViUGFnZTo6c2V0VGFwSGlnaGxpZ2h0KFdlYlRhcEhpZ2hsaWdodCog
dGFwSGlnaGxpZ2h0KQogICAgIGQtPm1fdGFwSGlnaGxpZ2h0ID0gYWRvcHRQdHIodGFwSGlnaGxp
Z2h0KTsKIH0KIAordm9pZCBXZWJQYWdlOjphZGRPdmVybGF5KFdlYk92ZXJsYXkqIG92ZXJsYXkp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChvdmVybGF5LT5k
LT5ncmFwaGljc0xheWVyKCkpIHsKKyAgICAgICAgb3ZlcmxheS0+ZC0+c2V0UGFnZShkKTsKKyAg
ICAgICAgZC0+b3ZlcmxheUxheWVyKCktPmFkZENoaWxkKG92ZXJsYXktPmQtPmdyYXBoaWNzTGF5
ZXIoKSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZTo6cmVtb3ZlT3ZlcmxheShX
ZWJPdmVybGF5KiBvdmVybGF5KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBpZiAob3ZlcmxheS0+ZC0+Z3JhcGhpY3NMYXllcigpID09IGQtPm92ZXJsYXlMYXllcigp
KSB7CisgICAgICAgIG92ZXJsYXktPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgb3Zlcmxh
eS0+ZC0+Y2xlYXIoKTsKKyAgICAgICAgb3ZlcmxheS0+ZC0+c2V0UGFnZSgwKTsKKyAgICB9Cisj
ZW5kaWYKK30KKwordm9pZCBXZWJQYWdlOjphZGRDb21wb3NpdGluZ1RocmVhZE92ZXJsYXkoV2Vi
T3ZlcmxheSogb3ZlcmxheSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgQVNTRVJUKHVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRo
cmVhZCgpKTsKKyAgICBvdmVybGF5LT5kLT5zZXRQYWdlKGQpOworICAgIGQtPmNvbXBvc2l0b3Io
KS0+YWRkT3ZlcmxheShvdmVybGF5LT5kLT5sYXllckNvbXBvc2l0aW5nVGhyZWFkKCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgV2ViUGFnZTo6cmVtb3ZlQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KFdl
Yk92ZXJsYXkqIG92ZXJsYXkpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIEFTU0VSVCh1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRU
aHJlYWQoKSk7CisgICAgZC0+Y29tcG9zaXRvcigpLT5yZW1vdmVPdmVybGF5KG92ZXJsYXktPmQt
PmxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSk7CisgICAgb3ZlcmxheS0+ZC0+Y2xlYXIoKTsKKyAg
ICBvdmVybGF5LT5kLT5zZXRQYWdlKDApOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZTo6cG9w
dXBPcGVuZWQoUGFnZVBvcHVwQmxhY2tCZXJyeSogd2ViUG9wdXApCiB7CiAgICAgQVNTRVJUKCFk
LT5tX3NlbGVjdFBvcHVwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKaW5k
ZXggZTljOTNjZjRmZTBmM2FhNDk5MmE4YmU4MTBlYjQ1MTRkMDc3NzRjZS4uN2YxMzU5NGJmY2U2
MDg0ZWY3OWZmNjI0Yjk4OTM4MWQxZmI0OTFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9XZWJQYWdlLmgKQEAgLTYyLDYgKzYyLDcgQEAgY2xhc3MgQmFja2luZ1N0b3JlOwogY2xhc3Mg
QmFja2luZ1N0b3JlQ2xpZW50OwogY2xhc3MgQmFja2luZ1N0b3JlUHJpdmF0ZTsKIGNsYXNzIFJl
bmRlclF1ZXVlOworY2xhc3MgV2ViT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2VDbGllbnQ7CiBjbGFz
cyBXZWJQYWdlQ29tcG9zaXRvcjsKIGNsYXNzIFdlYlBhZ2VHcm91cExvYWREZWZlcnJlcjsKQEAg
LTMzOCw2ICszMzksMTUgQEAgcHVibGljOgogICAgIFdlYlRhcEhpZ2hsaWdodCogdGFwSGlnaGxp
Z2h0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYXBIaWdobGlnaHQoV2ViVGFwSGlnaGxpZ2h0Kik7
CiAKKyAgICAvLyBBZGRzIGFuIG92ZXJsYXkgdGhhdCBjYW4gYmUgbW9kaWZpZWQgb24gdGhlIFdl
YktpdCB0aHJlYWQsIGFuZAorICAgIC8vIHdob3NlIGF0dHJpYnV0ZXMgY2FuIGJlIG92ZXJyaWRk
ZW4gb24gdGhlIGNvbXBvc2l0aW5nIHRocmVhZAorICAgIHZvaWQgYWRkT3ZlcmxheShXZWJPdmVy
bGF5Kik7CisgICAgdm9pZCByZW1vdmVPdmVybGF5KFdlYk92ZXJsYXkqKTsKKworICAgIC8vIEFk
ZHMgYW4gb3ZlcmxheSB0aGF0IGNhbiBvbmx5IGJlIG1vZGlmaWVkIG9uIHRoZSBjb21wb3NpdGlu
ZyB0aHJlYWQKKyAgICB2b2lkIGFkZENvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheShXZWJPdmVybGF5
Kik7CisgICAgdm9pZCByZW1vdmVDb21wb3NpdGluZ1RocmVhZE92ZXJsYXkoV2ViT3ZlcmxheSop
OworCiAgICAgLy8gUG9wdXAgY2xpZW50CiAgICAgdm9pZCBpbml0UG9wdXBXZWJWaWV3KEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZSopOwogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6
UGFnZVBvcHVwQmxhY2tCZXJyeSogd2ViUG9wdXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcAppbmRleCA4MzJiZGI4NzFmYThmMDRh
NGE2YzVmZTY0OTE0ZGU2NzFmNjhkNjY4Li5jZTgzMWIyZjc0M2QzZWI5ZjJiN2UxMmExYmE5MDJm
OTQ1NzU0M2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VDb21wb3NpdG9yLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFdlYlBhZ2VDb21wb3NpdG9y
UHJpdmF0ZTo6cHJlcGFyZUZyYW1lKGRvdWJsZSBhbmltYXRpb25UaW1lKQogICAgIC8vIFdlYlBh
Z2VDb21wb3NpdG9yIGlzIHVzZWQgdG8gcmVuZGVyIHRoZSB3ZWIgcGFnZS4gVGhlIHByZXNlbmNl
IG9mIGEKICAgICAvLyBXZWJQYWdlQ29tcG9zaXRvckNsaWVudCAobV9jbGllbnQpIGluZGljYXRl
cyB0aGlzIGlzIHRoZSBjYXNlLCBzbwogICAgIC8vIGNyZWF0ZSBhIExheWVyUmVuZGVyZXIgaWYg
dGhlcmUgYXJlIGxheWVycyBvciBpZiB0aGVyZSdzIGEgY2xpZW50LgotICAgIGlmICghbV9yb290
TGF5ZXIgJiYgIW1fb3ZlcmxheUxheWVyICYmICFtX2NsaWVudCkKKyAgICBpZiAoIW1fcm9vdExh
eWVyICYmICFtX292ZXJsYXlMYXllciAmJiAhbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXll
ciAmJiAhbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9sYXllclJlbmRl
cmVyKSB7CkBAIC0xMDEsNiArMTAxLDggQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6
OnByZXBhcmVGcmFtZShkb3VibGUgYW5pbWF0aW9uVGltZSkKICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5wcmVwYXJlRnJhbWUoYW5pbWF0aW9uVGltZSwgbV9yb290TGF5ZXIuZ2V0KCkpOwogICAg
IGlmIChtX292ZXJsYXlMYXllcikKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlRnJh
bWUoYW5pbWF0aW9uVGltZSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIGlmIChtX2NvbXBv
c2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXBh
cmVGcmFtZShhbmltYXRpb25UaW1lLCBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyLmdl
dCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbmRlcihjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUluLCBjb25zdCBGbG9hdFJlY3QmIHRyYW5zZm9ybWVk
Q29udGVudHMsIGNvbnN0IEZsb2F0UmVjdCYgLyp2aWV3cG9ydCovKQpAQCAtMTI4LDEwICsxMzAs
MTcgQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbmRlcihjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIGlmICghZHJhd3NSb290TGF5ZXIoKSkK
ICAgICAgICAgbV93ZWJQYWdlLT5tX2JhY2tpbmdTdG9yZS0+ZC0+Y29tcG9zaXRlQ29udGVudHMo
bV9sYXllclJlbmRlcmVyLmdldCgpLCB0cmFuc2Zvcm0sIGNvbnRlbnRzKTsKIAorICAgIGNvbXBv
c2l0ZUxheWVycyh0cmFuc2Zvcm0pOworfQorCit2b2lkIFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0
ZTo6Y29tcG9zaXRlTGF5ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
Cit7CiAgICAgaWYgKG1fcm9vdExheWVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBv
c2l0ZUxheWVycyh0cmFuc2Zvcm0sIG1fcm9vdExheWVyLmdldCgpKTsKICAgICBpZiAobV9vdmVy
bGF5TGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlTGF5ZXJzKHRyYW5z
Zm9ybSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIGlmIChtX2NvbXBvc2l0aW5nVGhyZWFk
T3ZlcmxheUxheWVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0
cmFuc2Zvcm0sIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuZ2V0KCkpOwogCiAgICAg
bV9sYXN0Q29tcG9zaXRpbmdSZXN1bHRzID0gbV9sYXllclJlbmRlcmVyLT5sYXN0UmVuZGVyaW5n
UmVzdWx0cygpOwogCkBAIC0xNDksNyArMTU4LDcgQEAgYm9vbCBXZWJQYWdlQ29tcG9zaXRvclBy
aXZhdGU6OmRyYXdzUm9vdExheWVyKCkgY29uc3QKIGJvb2wgV2ViUGFnZUNvbXBvc2l0b3JQcml2
YXRlOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
Y29udGVudHMpCiB7CiAgICAgLy8gSXMgdGhlcmUgYW55dGhpbmcgdG8gZHJhdz8KLSAgICBpZiAo
IW1fcm9vdExheWVyICYmICFtX292ZXJsYXlMYXllcikKKyAgICBpZiAoIW1fcm9vdExheWVyICYm
ICFtX292ZXJsYXlMYXllciAmJiAhbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcHJlcGFyZUZyYW1lIGNyZWF0ZXMgdGhlIExh
eWVyUmVuZGVyZXIgaWYgbmVlZGVkCkBAIC0xNzcsMTcgKzE4Niw3IEBAIGJvb2wgV2ViUGFnZUNv
bXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjCiAgICAgLy8gYXMgdGhlIGxhc3QgdHJhbnNmb3JtYXRpb24uCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gTGF5ZXJSZW5kZXJlcjo6b3J0aG9NYXRyaXgoMCwg
Y29udGVudHMud2lkdGgoKSwgY29udGVudHMuaGVpZ2h0KCksIDAsIC0xMDAwLCAxMDAwKTsKICAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QoLWNvbnRlbnRzLngoKSwgLWNvbnRlbnRzLnkoKSwgMCk7
Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBvc2l0
ZUxheWVycyh0cmFuc2Zvcm0sIG1fcm9vdExheWVyLmdldCgpKTsKLSAgICBpZiAobV9vdmVybGF5
TGF5ZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlTGF5ZXJzKHRyYW5zZm9y
bSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOwotCi0gICAgbV9sYXN0Q29tcG9zaXRpbmdSZXN1bHRz
ID0gbV9sYXllclJlbmRlcmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0cygpOwotCi0gICAgaWYgKG1f
bGFzdENvbXBvc2l0aW5nUmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZyYW1lKSB7Ci0gICAgICAgIFBs
YXRmb3JtOjpBbmltYXRpb25GcmFtZVJhdGVDb250cm9sbGVyOjppbnN0YW5jZSgpLT5hZGRDbGll
bnQodGhpcyk7Ci0gICAgICAgIG1fd2ViUGFnZS0+dXBkYXRlRGVsZWdhdGVkT3ZlcmxheXMoKTsK
LSAgICB9CisgICAgY29tcG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTIyOCw2ICsyMjcsMjQgQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6
OmNvbXBvc2l0b3JEZXN0cm95ZWQoKQogICAgIG1fY2xpZW50ID0gMDsKIH0KIAordm9pZCBXZWJQ
YWdlQ29tcG9zaXRvclByaXZhdGU6OmFkZE92ZXJsYXkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIpCit7CisgICAgaWYgKCFtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQorICAg
ICAgICBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyID0gTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6Q3VzdG9tTGF5ZXIsIDApOworICAgIG1fY29tcG9zaXRp
bmdUaHJlYWRPdmVybGF5TGF5ZXItPmFkZFN1YmxheWVyKGxheWVyKTsKK30KKwordm9pZCBXZWJQ
YWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbW92ZU92ZXJsYXkoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCkgIT0gbV9jb21wb3NpdGlu
Z1RocmVhZE92ZXJsYXlMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnJlbW92
ZUZyb21TdXBlcmxheWVyKCk7CisKKyAgICBpZiAobV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlM
YXllciAmJiBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyLT5nZXRTdWJsYXllcnMoKS5p
c0VtcHR5KCkpCisgICAgICAgIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuY2xlYXIo
KTsKK30KKwogV2ViUGFnZUNvbXBvc2l0b3I6OldlYlBhZ2VDb21wb3NpdG9yKFdlYlBhZ2UqIHBh
Z2UsIFdlYlBhZ2VDb21wb3NpdG9yQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgdXNpbmcgbmFtZXNw
YWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvcl9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAppbmRleCA0NzBiM2E1OWMwMjdhMzdkYzZhMWQ2
M2ZiNDc1ZmI2NjIyZGUzYzEzLi40ZDU2M2MyZmUxMTY4MjI2ZTUxMjdhY2I2ZGQ3OWJhMmY5Njhh
MDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21w
b3NpdG9yX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21w
b3NpdG9yX3AuaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6TGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogb3ZlcmxheUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5
TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldE92ZXJsYXlMYXllcihXZWJDb3JlOjpMYXllckNv
bXBvc2l0aW5nVGhyZWFkKik7CiAKKyAgICBXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
KiBjb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9z
aXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuZ2V0KCk7IH0KKwogICAgIGJvb2wgZHJhd3NSb290TGF5
ZXIoKSBjb25zdDsKICAgICB2b2lkIHNldERyYXdzUm9vdExheWVyKGJvb2wgZHJhd3NSb290TGF5
ZXIpIHsgbV9kcmF3c1Jvb3RMYXllciA9IGRyYXdzUm9vdExheWVyOyB9CiAKQEAgLTg5LDExICs5
MSwxNSBAQCBwdWJsaWM6CiAgICAgV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQqIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBjb21wb3NpdG9yRGVzdHJveWVkKCk7
CiAKKyAgICB2b2lkIGFkZE92ZXJsYXkoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCop
OworICAgIHZvaWQgcmVtb3ZlT3ZlcmxheShXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
Kik7CisKIHByb3RlY3RlZDoKICAgICBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGUoV2ViUGFnZVBy
aXZhdGUqLCBXZWJQYWdlQ29tcG9zaXRvckNsaWVudCopOwogCiBwcml2YXRlOgogICAgIHZvaWQg
YW5pbWF0aW9uRnJhbWVDaGFuZ2VkKCk7CisgICAgdm9pZCBjb21wb3NpdGVMYXllcnMoY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIFdlYlBhZ2VDb21wb3NpdG9y
Q2xpZW50KiBtX2NsaWVudDsKICAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwpAQCAtMTAx
LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXI+
IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZD4gbV9yb290TGF5ZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdU
aHJlYWQ+IG1fb3ZlcmxheUxheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllckNvbXBvc2l0
aW5nVGhyZWFkPiBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyOwogICAgIFdlYkNvcmU6
OkludFJlY3QgbV9sYXlvdXRSZWN0Rm9yQ29tcG9zaXRpbmc7CiAgICAgV2ViQ29yZTo6SW50U2l6
ZSBtX2NvbnRlbnRzU2l6ZUZvckNvbXBvc2l0aW5nOwogICAgIFdlYkNvcmU6OkxheWVyUmVuZGVy
aW5nUmVzdWx0cyBtX2xhc3RDb21wb3NpdGluZ1Jlc3VsdHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144399</attachid>
            <date>2012-05-28 14:46:04 -0700</date>
            <delta_ts>2012-05-29 01:35:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87603-20120528234602.patch</filename>
            <type>text/plain</type>
            <size>71500</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1MmVjNDhhNjdiZjczNzBm
MzA2Nzc3OGE1Yjg5MWYxN2E4NGY5NTQuLmMwMTY5MThlYjBlZTgyNjNlNTVmMWQ5MzA1MDc4NTZj
M2ZkMDIzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5p
bHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVy
bGF5IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgV2ViT3ZlcmxheSByZWxhdGVkIGZpbGVzIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKKyAgICAg
ICAgUFIgIzE1NjgxMgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgorCisy
MDEyLTA1LTI3ICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKwogICAgICAgICBb
QmxhY2tCZXJyeV0gQWRkIGEgZGVmYXVsdCB0YXAgaGlnaGxpZ2h0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzU2OQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwppbmRleCAxZGU1MmIzNTE5MDQ5MGYyODUzN2UwZGI5NGEzYzFlMmU3NzNjZDU1
Li44N2E2ZTRkZDZjZjIwZWIxZjEwNmQyY2JkYTU1ZDIwMGY1OGE0NjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5p
bHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVy
bGF5IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIG5ldyBBUEkgbWFrZXMgaXQgcG9zc2libGUgdG8gbGV2ZXJhZ2UgdGhlIEJsYWNrQmVycnkg
YWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gdG8gZHJhdywg
dHJhbnNmb3JtIGFuZCBmbHVpZGx5IGFuaW1hdGUKKyAgICAgICAgb3ZlcmxheXMgaW4gdGhlIGVt
YmVkZGluZyBsaWJyYXJ5IG9yIGFwcGxpY2F0aW9uLgorCisgICAgICAgIEEgV2ViT3ZlcmxheSBo
YXMgYW4gYWZmaW5pdHkgZm9yIHRoZSB0aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0ZWQuIElmCisg
ICAgICAgIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgV2ViS2l0IHRocmVhZCwgdXNlIFdlYlBh
Z2U6OmFkZE92ZXJsYXkoKSB0bworICAgICAgICBhZGQgaXQgdG8gdGhlIHBhZ2UsIGFuZCBtYW5p
cHVsYXRlIGl0IG9ubHkgZnJvbSB0aGUgV2ViS2l0IHRocmVhZCwgd2l0aAorICAgICAgICBleGNl
cHRpb24gb2YgdGhlICJvdmVycmlkZSIgZnVuY3Rpb25hbGl0eSB3aGljaCBjYW4gYmUgdXNlZCBm
cm9tIHRoZQorICAgICAgICBjb21wb3NpdGluZyB0aHJlYWQuIElmIHRoZSBjdXJyZW50IHRocmVh
ZCBpcyB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLAorICAgICAgICB1c2UgV2ViUGFnZTo6YWRkQ29t
cG9zaXRpbmdUaHJlYWRPdmVybGF5KCkgdG8gYWRkIGl0IHRvIHRoZSBwYWdlLCBhbmQKKyAgICAg
ICAgb25seSBtYW5pcHVsYXRlIGl0IG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCisKKyAgICAg
ICAgQSBXZWJPdmVybGF5IGNhbiBiZSBwYWludGVkIHVzaW5nIFNraWEsIG9yIGl0cyBjb250ZW50
cyBjYW4gYmUgc2V0IHRvCisgICAgICAgIGFuIGltYWdlIG9yIGEgc29saWQgY29sb3IuCisKKyAg
ICAgICAgUFIgIzE1NjgxMgorCisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5p
bWF0aW9uOjpmYWRlQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
QW5pbWF0aW9uOjpuYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0
aW9uOjpXZWJBbmltYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmlt
YXRpb246On5XZWJBbmltYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJB
bmltYXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbl9wLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkFuaW1hdGlvblByaXZhdGUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmltYXRpb25Qcml2YXRlOjpXZWJBbmlt
YXRpb25Qcml2YXRlKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6
V2ViT3ZlcmxheSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6On5X
ZWJPdmVybGF5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cG9z
aXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFuY2hvclBv
aW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0QW5jaG9y
UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzaXplKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNpemVJc1NjYWxlSW52YXJpYW50
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZUlzU2Nh
bGVJbnZhcmlhbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5Ojp0
cmFuc2Zvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRU
cmFuc2Zvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvcGFj
aXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZEFuaW1hdGlv
bik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlbW92ZUFuaW1h
dGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnBhcmVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZENoaWxkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cmVtb3ZlRnJvbVBhcmVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRlbnRzVG9J
bWFnZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRl
bnRzVG9Db2xvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNl
dERyYXdzQ29udGVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6
OmludmFsaWRhdGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5Ojpz
ZXRDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvdmVy
cmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlc2V0T3Zl
cnJpZGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6
OnBhZ2UpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZTo6
b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZTo6ZHJhd0NvbnRlbnRzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGU6OnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4pOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6V2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cG9zaXRpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0UG9zaXRp
b24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktp
dFRocmVhZDo6YW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJP
dmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2l6ZSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFk
OjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGVXZWJLaXRUaHJlYWQ6OnNpemVJc1NjYWxlSW52YXJpYW50KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFNpemVJc1NjYWxl
SW52YXJpYW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGVXZWJLaXRUaHJlYWQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0
eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0
VGhyZWFkOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpyZW1vdmVBbmltYXRp
b24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktp
dFRocmVhZDo6YWRkQ2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50
c1RvSW1hZ2UpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZVdlYktpdFRocmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldERyYXdzQ29udGVudCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhy
ZWFkOjpjbGVhcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2
YXRlV2ViS2l0VGhyZWFkOjppbnZhbGlkYXRlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6Om5v
dGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJs
YXlQcml2YXRlV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OldlYk92
ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6On5XZWJPdmVy
bGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXREcmF3c0Nv
bnRlbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50
cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50c1RvQ29sb3IpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJD
b21wb3NpdGluZ1RocmVhZERlc3Ryb3llZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpsYXllclZpc2liaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6On5XZWJPdmVybGF5
UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q2xpZW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZUNvbXBvc2l0aW5nVGhyZWFkOjpwb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFBvc2l0aW9uKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1Ro
cmVhZDo6YW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNp
emUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkOjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
T3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2l6ZUlzU2NhbGVJbnZhcmlhbnQpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjpzZXRTaXplSXNTY2FsZUludmFyaWFudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5zZm9ybSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdU
aHJlYWQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6Om9wYWNpdHkpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRPcGFj
aXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21w
b3NpdGluZ1RocmVhZDo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6cmVtb3ZlQW5pbWF0aW9uKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGlu
Z1RocmVhZDo6YWRkQ2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZDo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6Y2xlYXIpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjppbnZhbGlkYXRl
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3Np
dGluZ1RocmVhZDo6cmVzZXRPdmVycmlkZXMpOgorICAgICAgICAqIEFwaS9XZWJPdmVybGF5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAq
IEFwaS9XZWJPdmVybGF5Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBBcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OldlYk92
ZXJsYXlPdmVycmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlP
dmVycmlkZTo6fldlYk92ZXJsYXlPdmVycmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYk92ZXJsYXlPdmVycmlkZTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRTaXplKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zvcm0p
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9w
YWNpdHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6
OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlP
dmVycmlkZTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheU92ZXJy
aWRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2ViT3Zlcmxh
eV9wLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OldlYk92ZXJsYXlQcml2YXRlKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6On5XZWJPdmVybGF5
UHJpdmF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRl
OjpzZXRQYWdlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGU6OnNldENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQ
cml2YXRlOjpsYXllckNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OmdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViT3Zl
cmxheVByaXZhdGVXZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6Z3JhcGhpY3NMYXllcik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2hvd1JlcGFpbnRD
b3VudGVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OmNvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
Yk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRMYXllcik6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50OjpzZXRDbGllbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6
OmNvbnRlbnRzKToKKyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQp
OgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6YWRkT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpyZW1vdmVPdmVybGF5KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6cmVtb3ZlQ29tcG9zaXRpbmdUaHJl
YWRPdmVybGF5KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cmVuZGVy
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2VDb21wb3NpdG9yUHJpdmF0ZTo6Y29tcG9zaXRlTGF5ZXJzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjphZGRPdmVy
bGF5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2
YXRlOjpyZW1vdmVPdmVybGF5KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3JfcC5o
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6
OmNvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYlBhZ2VDb21wb3Np
dG9yUHJpdmF0ZSk6CisKKzIwMTItMDUtMjcgIEFydmlkIE5pbHNzb24gIDxhbmlsc3NvbkByaW0u
Y29tPgorCiAgICAgICAgIFtCbGFja0JlcnJ5XSBBbHdheXMgY3JlYXRlIGEgY29tcG9zaXRvcgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1OTgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhMzkxZTFiOWRlODhhZGEx
MDE0ZmNmNzZhZWE3Yzk3MWI2ZTk4MTg3Li4yZmQzZWRjZmVlZjk3MjhlODQ3ZGFiODE2MjQ5ZDUx
MDQ1Zjk0M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNDcs
MTMgKzQ3LDE2IEBAIEFERF9ERUZJTklUSU9OUygtRFVTRVJfUFJPQ0VTU0VTKQogTElTVChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCiAg
ICAgYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKLSAgICBibGFja2JlcnJ5L0Fw
aS9XZWJTdHJpbmcuY3BwCisgICAgYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAogICAg
IGJsYWNrYmVycnkvQXBpL1dlYktpdE1JTUVUeXBlQ29udmVydGVyLmNwcAogICAgIGJsYWNrYmVy
cnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5
LmNwcAorICAgIGJsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAKICAgICBibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3Np
dG9yLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAK
ICAgICBibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9X
ZWJTdHJpbmcuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkvV2ViVmlld3BvcnRBcmd1bWVudHMuY3Bw
CiAgICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGEuY3BwCiAgICAgYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiMGRkZDU2ODZl
MmVlNDljYTcxZmFiYTAyZTIzMTFmNDA4ZDE4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllckNv
bXBvc2l0aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNpbmNs
dWRlICJXZWJBbmltYXRpb25fcC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgorCituYW1lc3BhY2UgQmxhY2tC
ZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K1dlYkFuaW1hdGlvbiBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5n
JiBuYW1lLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIGR1cmF0aW9uKQoreworICAgIFdl
YkFuaW1hdGlvbiB0bXA7CisgICAgdG1wLmQtPm5hbWUgPSBTdHJpbmcobmFtZS5pbXBsKCkpOwor
ICAgIHRtcC5kLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIHRtcC5kLT5h
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICB0bXAuZC0+a2V5ZnJhbWVzID0g
S2V5ZnJhbWVWYWx1ZUxpc3QoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHRtcC5kLT5r
ZXlmcmFtZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIGZyb20pKTsKKyAgICB0
bXAuZC0+a2V5ZnJhbWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgxLjAsIHRvKSk7
CisKKyAgICByZXR1cm4gdG1wOworfQorCitXZWJTdHJpbmcgV2ViQW5pbWF0aW9uOjpuYW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmFtZS5pbXBsKCk7Cit9CisKK1dlYkFuaW1hdGlvbjo6
V2ViQW5pbWF0aW9uKCkKKyAgICA6IGQobmV3IFdlYkFuaW1hdGlvblByaXZhdGUpCit7Cit9CisK
K1dlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYgbykKKzogZChu
ZXcgV2ViQW5pbWF0aW9uUHJpdmF0ZSkKK3sKKyAgICAqZCA9ICpvLmQ7Cit9CisKK1dlYkFuaW1h
dGlvbjo6fldlYkFuaW1hdGlvbigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisKK1dlYkFuaW1hdGlv
biYgV2ViQW5pbWF0aW9uOjpvcGVyYXRvcj0oY29uc3QgV2ViQW5pbWF0aW9uJiBvKQoreworICAg
ICpkID0gKm8uZDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2U5Mjk3ZGI1MTljODk4ZDM5NGIzOTFlODE1MWRjYWVhZTY5YjI3Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbl9oCisK
KyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb25Qcml2YXRlOworCisvKioKKyAqIFJlcHJlc2Vu
dHMgYW4gYW5pbWF0aW9uIHJ1bm5pbmcgb24gYW4gb3ZlcmxheS4KKyAqCisgKiBXZWJBbmltYXRp
b24gaXMgbm90IHRocmVhZCBzYWZlLCBidXQgaXQgaXMgcmVlbnRyYW50LiBUaGlzIG1lYW5zIHRo
YXQKKyAqIGluc3RhbmNlcyBjYW4gYmUgY3JlYXRlZCBvbiBkaWZmZXJlbnQgdGhyZWFkcywgYnV0
IG11c3QgYmUgdXNlZCBvbiB0aGUKKyAqIHRocmVhZCB3aGVyZSB0aGV5IHdlcmUgY3JlYXRlZC4K
KyAqLworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgV2ViQW5pbWF0aW9uIGZhZGVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIGR1cmF0aW9uKTsKKworICAgIFdlYkFuaW1h
dGlvbigpOworICAgIFdlYkFuaW1hdGlvbihjb25zdCBXZWJBbmltYXRpb24mKTsKKyAgICB+V2Vi
QW5pbWF0aW9uKCk7CisKKyAgICBXZWJBbmltYXRpb24mIG9wZXJhdG9yPShjb25zdCBXZWJBbmlt
YXRpb24mKTsKKworICAgIFdlYlN0cmluZyBuYW1lKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheTsKKyAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheU92
ZXJyaWRlOworICAgIGZyaWVuZCBjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsKKworICAgIFdlYkFu
aW1hdGlvblByaXZhdGUqIGQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBXZWJBbmltYXRpb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb25f
cC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb25fcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA4Y2E5YWZmMzRlNTk5MWI1ZDhkOTgzNmI1YzcxZTQ4OWU2Mzg5NWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbl9wLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaWZuZGVmIFdlYkFuaW1hdGlvbl9wX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uX3BfaAorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQW5pbWF0aW9uLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGll
bnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQW5pbWF0aW9uOworCitjbGFzcyBX
ZWJBbmltYXRpb25Qcml2YXRlIHsKK3B1YmxpYzoKKyAgICBXZWJBbmltYXRpb25Qcml2YXRlKCkK
KyAgICAgICAgOiBrZXlmcmFtZXMoV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCisg
ICAgeworICAgIH0KKworICAgIFN0cmluZyBuYW1lOworICAgIFJlZlB0cjxXZWJDb3JlOjpBbmlt
YXRpb24+IGFuaW1hdGlvbjsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFt
ZXM7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNlbmRpZiAvLyBXZWJBbmltYXRpb25fcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTI0ZmViYzU1ZmZlZTFkMjIwNzQyZDJl
ZDk3Yjg5MTJkMWEyODgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5LmNwcApAQCAtMCwwICsxLDc0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJXZWJPdmVybGF5LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUg
IlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9u
LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uX3AuaCIKKyNpbmNsdWRlICJXZWJPdmVybGF5Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViT3ZlcmxheU92ZXJyaWRlLmgiCisjaW5jbHVkZSAiV2ViT3Zl
cmxheV9wLmgiCisjaW5jbHVkZSAiV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlQ29tcG9zaXRvcl9wLmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xp
ZW50Lmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8U2tEZXZpY2UuaD4KKwor
bmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitXZWJPdmVybGF5OjpXZWJPdmVybGF5KCkKKyAgICA6IGQoMCkKK3sK
KyAgICBpZiAoUGxhdGZvcm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50
VGhyZWFkKCkpIHsKKyAgICAgICAgZCA9IG5ldyBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVh
ZDsKKyAgICAgICAgZC0+cSA9IHRoaXM7CisgICAgfSBlbHNlIGlmIChQbGF0Zm9ybTo6dXNlcklu
dGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpIHsKKyAgICAg
ICAgZCA9IG5ldyBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOworICAgICAgICBk
LT5xID0gdGhpczsKKyAgICB9Cit9CisKK1dlYk92ZXJsYXk6OldlYk92ZXJsYXkoR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQorICAgIDogZCgwKQoreworICAgIGQgPSBuZXcgV2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQoY2xpZW50KTsKKyAgICBkLT5xID0gdGhpczsKK30KKworV2Vi
T3ZlcmxheTo6fldlYk92ZXJsYXkoKQoreworICAgIGRlbGV0ZSBkOworfQorCitQbGF0Zm9ybTo6
RmxvYXRQb2ludCBXZWJPdmVybGF5Ojpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQt
PnBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0UG9zaXRpb24oY29uc3QgUGxh
dGZvcm06OkZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGQtPnNldFBvc2l0aW9uKHBvc2l0
aW9uKTsKK30KKworUGxhdGZvcm06OkZsb2F0UG9pbnQgV2ViT3ZlcmxheTo6YW5jaG9yUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBkLT5hbmNob3JQb2ludCgpOworfQorCit2b2lkIFdlYk92
ZXJsYXk6OnNldEFuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBhbmNob3Ip
Cit7CisgICAgZC0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yKTsKK30KKworUGxhdGZvcm06OkZsb2F0
U2l6ZSBXZWJPdmVybGF5OjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+c2l6ZSgpOwor
fQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFNpemUoY29uc3QgUGxhdGZvcm06OkZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBkLT5zZXRTaXplKHNpemUpOworfQorCitib29sIFdlYk92ZXJsYXk6OnNp
emVJc1NjYWxlSW52YXJpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+c2l6ZUlzU2NhbGVJ
bnZhcmlhbnQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXRTaXplSXNTY2FsZUludmFyaWFu
dChib29sIGludmFyaWFudCkKK3sKKyAgICBkLT5zZXRTaXplSXNTY2FsZUludmFyaWFudChpbnZh
cmlhbnQpOworfQorCitQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXggV2ViT3ZlcmxheTo6
dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gV2ViQ29yZTo6
VHJhbmZvcm1hdGlvbk1hdHJpeCBpbnRlcm9wZXJhYmlsaXR5CisgICAgLy8gd2l0aCBQbGF0Zm9y
bTo6VHJhbnNmb3JtYXRpb25NYXRyaXgKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm0gPSBkLT50cmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBQ
bGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmPih0cmFuc2Zvcm0pOworfQorCit2b2lkIFdl
Yk92ZXJsYXk6OnNldFRyYW5zZm9ybShjb25zdCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSkKK3sKKyAgICBkLT5zZXRUcmFuc2Zvcm0ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCY+KHRyYW5zZm9ybSkpOworfQorCitmbG9hdCBXZWJP
dmVybGF5OjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+b3BhY2l0eSgpOworfQor
Cit2b2lkIFdlYk92ZXJsYXk6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBkLT5z
ZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OmFkZEFuaW1hdGlvbihj
b25zdCBXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKK3sKKyAgICBkLT5hZGRBbmltYXRpb24oYW5p
bWF0aW9uLmQtPm5hbWUsIGFuaW1hdGlvbi5kLT5hbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbi5k
LT5rZXlmcmFtZXMpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25z
dCBXZWJTdHJpbmcmIG5hbWUpCit7CisgICAgZC0+cmVtb3ZlQW5pbWF0aW9uKFN0cmluZyhQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+KG5hbWUuaW1wbCgpKSkpOworfQorCitXZWJPdmVybGF5KiBXZWJP
dmVybGF5OjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wYXJlbnQ7Cit9CisKK2Jv
b2wgV2ViT3ZlcmxheTo6YWRkQ2hpbGQoV2ViT3ZlcmxheSogb3ZlcmxheSkKK3sKKyAgICBpZiAo
b3ZlcmxheS0+ZC0+bmF0aXZlVGhyZWFkICE9IGQtPm5hdGl2ZVRocmVhZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgb3ZlcmxheS0+ZC0+cGFyZW50ID0gdGhpczsKKyAgICBkLT5hZGRD
aGlsZChvdmVybGF5LT5kKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJPdmVybGF5
OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBkLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAg
ZC0+cGFyZW50ID0gMDsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXRDb250ZW50c1RvSW1hZ2Uo
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3QgUGxhdGZvcm06OkludFNpemUmIGltYWdl
U2l6ZSkKK3sKKyAgICBkLT5zZXRDb250ZW50c1RvSW1hZ2UoZGF0YSwgaW1hZ2VTaXplKTsKK30K
Kwordm9pZCBXZWJPdmVybGF5OjpzZXRDb250ZW50c1RvQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpCit7CisgICAgZC0+c2V0Q29udGVudHNUb0NvbG9yKENvbG9yKHIsIGcsIGIsIGEp
KTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRl
bnQpCit7CisgICAgZC0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVudCk7Cit9CisKK3ZvaWQg
V2ViT3ZlcmxheTo6aW52YWxpZGF0ZSgpCit7CisgICAgZC0+aW52YWxpZGF0ZSgpOworfQorCit2
b2lkIFdlYk92ZXJsYXk6OnNldENsaWVudChXZWJPdmVybGF5Q2xpZW50KiBjbGllbnQpCit7Cisg
ICAgZC0+c2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK1dlYk92ZXJsYXlPdmVycmlkZSogV2ViT3Zl
cmxheTo6b3ZlcnJpZGUoKQoreworICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIFVJIHRocmVhZAor
ICAgIGlmICghUGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlz
Q3VycmVudFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBkLT5vdmVy
cmlkZSgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBk
LT5yZXNldE92ZXJyaWRlcygpOworfQorCitXZWJQYWdlUHJpdmF0ZSogV2ViT3ZlcmxheVByaXZh
dGU6OnBhZ2UoKSBjb25zdAoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIHJldHVybiBtX3Bh
Z2U7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICByZXR1cm4gcGFyZW50LT5kLT5wYWdlKCk7
CisKKyAgICByZXR1cm4gMDsKK30KKworV2ViT3ZlcmxheU92ZXJyaWRlKiBXZWJPdmVybGF5UHJp
dmF0ZTo6b3ZlcnJpZGUoKQoreworICAgIC8vIFBhZ2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIGlmIHdl
IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlIGFuZCBhZGRlZCB0bworICAgIC8vIHNvbWUgb3Ro
ZXIgcGFnZS4KKyAgICBpZiAobV9vdmVycmlkZSkKKyAgICAgICAgbV9vdmVycmlkZS0+ZC0+c2V0
UGFnZShwYWdlKCkpOworICAgIHJldHVybiBtX292ZXJyaWRlLmdldCgpOworfQorCit2b2lkIFdl
Yk92ZXJsYXlQcml2YXRlOjpkcmF3Q29udGVudHMoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBp
ZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpZW50LT5kcmF3T3ZlcmxheUNv
bnRlbnRzKHEsIGNhbnZhcyk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGU6OnNjaGVkdWxl
Q29tcG9zaXRpbmdSdW4oKQoreworICAgIGlmIChXZWJQYWdlUHJpdmF0ZSogcGFnZSA9IHRoaXMt
PnBhZ2UoKSkgeworICAgICAgICBpZiAoV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQqIGNvbXBvc2l0
b3JDbGllbnQgPSBwYWdlLT5jb21wb3NpdG9yKCktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBk
b3VibGUgYW5pbWF0aW9uVGltZSA9IGNvbXBvc2l0b3JDbGllbnQtPnJlcXVlc3RBbmltYXRpb25G
cmFtZSgpOworICAgICAgICAgICAgY29tcG9zaXRvckNsaWVudC0+aW52YWxpZGF0ZShhbmltYXRp
b25UaW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhZ2Ut
PmJsaXRWaXNpYmxlQ29udGVudHMoKTsKKyAgICB9Cit9CisKK1dlYk92ZXJsYXlQcml2YXRlV2Vi
S2l0VGhyZWFkOjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZChHcmFwaGljc0xheWVyQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX2xheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShjbGllbnQg
PyBjbGllbnQgOiB0aGlzKSkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBtX2xh
eWVyLT5wbGF0Zm9ybUxheWVyKCktPmxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKTsKK30KKworV2Vi
T3ZlcmxheU92ZXJyaWRlKiBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3ZlcnJpZGUo
KQoreworICAgIGlmICghbV9vdmVycmlkZSkgeworICAgICAgICBXZWJPdmVybGF5UHJpdmF0ZSog
dG1wID0gbmV3IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQobV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkLmdldCgpKTsKKyAgICAgICAgbV9vdmVycmlkZSA9IGFkb3B0UHRyKG5ldyBX
ZWJPdmVybGF5T3ZlcnJpZGUodG1wLCB0cnVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYk92
ZXJsYXlQcml2YXRlOjpvdmVycmlkZSgpOworfQorCitGbG9hdFBvaW50IFdlYk92ZXJsYXlQcml2
YXRlV2ViS2l0VGhyZWFkOjpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIt
PnBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNl
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fbGF5ZXItPnNl
dFBvc2l0aW9uKHBvc2l0aW9uKTsKK30KKworRmxvYXRQb2ludCBXZWJPdmVybGF5UHJpdmF0ZVdl
YktpdFRocmVhZDo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQzRCBhbmNo
b3IgPSBtX2xheWVyLT5hbmNob3JQb2ludCgpOworICAgIHJldHVybiBGbG9hdFBvaW50KGFuY2hv
ci54KCksIGFuY2hvci55KCkpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhy
ZWFkOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3IpCit7CisgICAgbV9s
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKGFuY2hvci54KCksIGFuY2hvci55KCks
IDApKTsKK30KKworRmxvYXRTaXplIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+c2l6ZSgpOworfQorCit2b2lkIFdlYk92
ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3sKKyAgICBtX2xheWVyLT5zZXRTaXplKHNpemUpOworfQorCitib29sIFdlYk92ZXJsYXlQcml2
YXRlV2ViS2l0VGhyZWFkOjpzaXplSXNTY2FsZUludmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKTsKK30K
Kwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0U2l6ZUlzU2NhbGVJbnZh
cmlhbnQoYm9vbCBpbnZhcmlhbnQpCit7CisgICAgbV9sYXllci0+cGxhdGZvcm1MYXllcigpLT5z
ZXRTaXplSXNTY2FsZUludmFyaWFudChpbnZhcmlhbnQpOworfQorCitUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6dHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllci0+dHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVBy
aXZhdGVXZWJLaXRUaHJlYWQ6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKQoreworICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwor
fQorCitmbG9hdCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJPdmVybGF5
UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1f
bGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OmFkZEFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKQoreworICAgIElu
dFNpemUgc2l6ZShtX2xheWVyLT5zaXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdo
dCgpKTsKKyAgICBtX2xheWVyLT5hZGRBbmltYXRpb24oa2V5ZnJhbWVzLCBzaXplLCBhbmltYXRp
b24sIG5hbWUsIDApOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpy
ZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92
ZUFuaW1hdGlvbihuYW1lKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVh
ZDo6YWRkQ2hpbGQoV2ViT3ZlcmxheVByaXZhdGUqIG92ZXJsYXkpCit7CisgICAgbV9sYXllci0+
YWRkQ2hpbGQoc3RhdGljX2Nhc3Q8V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQqPihvdmVy
bGF5KS0+bV9sYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRU
aHJlYWQ6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUZyb21QYXJl
bnQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0Q29udGVu
dHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGltYWdlU2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYk92
ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3Im
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBt
X2xheWVyLT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKK30KKwordm9pZCBXZWJPdmVy
bGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6Y2xlYXIoKQoreworICAgIHNldFNpemUoRmxvYXRTaXpl
KDAsIDApKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6aW52YWxp
ZGF0ZSgpCit7CisgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2Vi
T3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBpZiAo
UGxhdGZvcm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkp
CisgICAgICAgIG1fbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+Y2xlYXJPdmVycmlkZSgpOworICAg
IGVsc2UgaWYgKFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5p
c0N1cnJlbnRUaHJlYWQoKSkgeworICAgICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmNs
ZWFyT3ZlcnJpZGUoKTsKKyAgICAgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworICAgIH0K
K30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6bm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIGlmIChXZWJQYWdlUHJp
dmF0ZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+c2NoZWR1bGVSb290TGF5
ZXJDb21taXQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiBjLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpCit7CisgICAgZHJhd0NvbnRlbnRzKGMucGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpKTsKK30KKworV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KCkKKyAgICA6IG1fZHJh
d3NDb250ZW50KGZhbHNlKQorICAgICwgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkKDApCisgICAg
LCBtX2NsaWVudCgwKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgbV9k
cmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQ7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheUxheWVyQ29t
cG9zaXRpbmdUaHJlYWRDbGllbnQ6OmludmFsaWRhdGUoKQoreworICAgIG1fdGV4dHVyZS5jbGVh
cigpOworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojpz
ZXRDb250ZW50cyhjb25zdCBTa0JpdG1hcCYgY29udGVudHMpCit7CisgICAgbV9jb250ZW50cyA9
IGNvbnRlbnRzOworICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1fdGV4dHVyZS5jbGVhcigp
OworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRD
b250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIG1fY29udGVudHMgPSBT
a0JpdG1hcCgpOworICAgIG1fY29sb3IgPSBjb2xvcjsKKyAgICBtX3RleHR1cmUuY2xlYXIoKTsK
K30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJD
b21wb3NpdGluZ1RocmVhZERlc3Ryb3llZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
KikKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudDo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiwgYm9vbCB2aXNpYmxlKQoreworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50Ojp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKQoreworICAgIGlmIChtX2NvbnRlbnRzLmlzTnVsbCgpICYmICFtX2NvbG9yLmlz
VmFsaWQoKSAmJiAhbV9kcmF3c0NvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3RleHR1cmUgJiYgbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVGb3JDb2xvcihtX2NvbG9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2RyYXdzQ29udGVudCkgeworICAgICAgICBp
ZiAoIW1fY2xpZW50IHx8ICFtX293bmVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChtX2NvbnRlbnRzLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2NvbnRlbnRzLnNldENv
bmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC0+Ym91bmRzKCkud2lkdGgoKSwgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5ib3VuZHMoKS5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzLmFsbG9jUGl4ZWxzKCk7CisgICAgICAg
IH0KKworICAgICAgICBTa0RldmljZSBkZXZpY2UobV9jb250ZW50cyk7CisgICAgICAgIFNrQ2Fu
dmFzIGNhbnZhcygmZGV2aWNlKTsKKyAgICAgICAgbV9jbGllbnQtPmRyYXdPdmVybGF5Q29udGVu
dHMobV9vd25lciwgJmNhbnZhcyk7CisgICAgICAgIGNhbnZhcy5mbHVzaCgpOworICAgIH0KKwor
ICAgIG1fdGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZSgpOworICAgIG1fdGV4dHVyZS0+cHJvdGVj
dChJbnRTaXplKG1fY29udGVudHMud2lkdGgoKSwgbV9jb250ZW50cy5oZWlnaHQoKSkpOworICAg
IEludFJlY3QgYml0bWFwUmVjdCgwLCAwLCBtX2NvbnRlbnRzLndpZHRoKCksIG1fY29udGVudHMu
aGVpZ2h0KCkpOworICAgIG1fdGV4dHVyZS0+dXBkYXRlQ29udGVudHMobV9jb250ZW50cywgYml0
bWFwUmVjdCwgYml0bWFwUmVjdCwgZmFsc2UpOworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXIsIGRvdWJsZSAvKnNjYWxlKi8sIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4
Q29vcmRMb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdGV4dHVyZSB8fCAhbV90ZXh0dXJlLT50ZXh0
dXJlSWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIo
cG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRy
YW5zZm9ybWVkQm91bmRzKCkpOworICAgIGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAs
ICAwLCAxLCAgMSwgMSwgIDEsIDAgfTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29v
cmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgIGds
RHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworfQorCit2b2lkIFdlYk92ZXJsYXlM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKikKK3sKKyAgICBtX3RleHR1cmUuY2xlYXIoKTsKK30KKworV2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZChQYXNzUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IGxheWVyQ29tcG9zaXRpbmdUaHJl
YWQpCisgICAgOiBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoMCkKK3sKKyAgICBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBsYXllckNvbXBvc2l0aW5nVGhyZWFkOworfQorCitXZWJP
dmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0
aW5nVGhyZWFkKCkKKyAgICA6IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudChuZXcgV2Vi
T3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQpCit7CisgICAgbV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkID0gTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6
Q3VzdG9tTGF5ZXIsIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk7CisgICAgbV9sYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5zZXRMYXllcihtX2xheWVyQ29tcG9zaXRpbmdUaHJl
YWQuZ2V0KCkpOworfQorCitXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjp+V2Vi
T3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50LT5zZXRDbGllbnQoMCwgMCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q2xpZW50KFdlYk92ZXJsYXlDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICBXZWJPdmVybGF5UHJpdmF0ZTo6c2V0Q2xpZW50KGNsaWVudCk7CisgICAgbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5zZXRDbGllbnQocSwgY2xpZW50KTsKK30KKwor
V2ViT3ZlcmxheU92ZXJyaWRlKiBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpv
dmVycmlkZSgpCit7CisgICAgaWYgKCFtX292ZXJyaWRlKQorICAgICAgICBtX292ZXJyaWRlID0g
YWRvcHRQdHIobmV3IFdlYk92ZXJsYXlPdmVycmlkZSh0aGlzLCBmYWxzZSkpOworCisgICAgcmV0
dXJuIFdlYk92ZXJsYXlQcml2YXRlOjpvdmVycmlkZSgpOworfQorCitGbG9hdFBvaW50IFdlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5wb3NpdGlvbigpOworfQorCit2b2lkIFdl
Yk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0UG9z
aXRpb24ocG9zaXRpb24pOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKK30KKworRmxv
YXRQb2ludCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjphbmNob3JQb2ludCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+YW5jaG9yUG9p
bnQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3IpCit7CisgICAgbV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkLT5zZXRBbmNob3JQb2ludChhbmNob3IpOworICAgIHNjaGVkdWxlQ29tcG9z
aXRpbmdSdW4oKTsKK30KKworRmxvYXRTaXplIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdU
aHJlYWQ6OnNpemUoKSBjb25zdAoreworICAgIEludFNpemUgYm91bmRzID0gbV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkLT5ib3VuZHMoKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKGJvdW5kcy53aWR0
aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9z
aXRpbmdUaHJlYWQ6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIG1fbGF5
ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0Qm91bmRzKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKSk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCitib29sIFdl
Yk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNpemVJc1NjYWxlSW52YXJpYW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zaXplSXNTY2Fs
ZUludmFyaWFudCgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJl
YWQ6OnNldFNpemVJc1NjYWxlSW52YXJpYW50KGJvb2wgaW52YXJpYW50KQoreworICAgIG1fbGF5
ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoaW52YXJpYW50KTsK
KyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5zZm9ybSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+dHJhbnNmb3JtKCk7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBzY2hlZHVsZUNvbXBv
c2l0aW5nUnVuKCk7Cit9CisKK2Zsb2F0IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJl
YWQ6Om9wYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRpbmdUaHJl
YWQtPm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5n
VGhyZWFkLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdSdW4o
KTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjphZGRBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcykKK3sKKyAgICBJbnRTaXplIGJveFNpemUgPSBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQtPmJvdW5kcygpOworICAgIFJlZlB0cjxMYXllckFuaW1hdGlv
bj4gbGF5ZXJBbmltYXRpb24gPSBMYXllckFuaW1hdGlvbjo6Y3JlYXRlKGtleWZyYW1lcywgYm94
U2l6ZSwgYW5pbWF0aW9uLCBuYW1lLCAwLjApOworCisgICAgLy8gRklYTUU6IFVuZm9ydHVuYXRl
bHkgV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQ6OnJlcXVlc3RBbmltYXRpb25GcmFtZSB1c2VzIGEg
ZGlmZmVyZW50IHRpbWUgY29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAvLyB0aGFuIGFjY2VsZXJhdGVk
IGFuaW1hdGlvbnMsIHNvIHdlIGNhbid0IHVzZSB0aGUgdGltZSByZXR1cm5lZCBieSBXZWJQYWdl
Q29tcG9zaXRvckNsaWVudDo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKKyAgICAvLyBmb3Igc3Rh
cnR0aW1lLgorICAgIGxheWVyQW5pbWF0aW9uLT5zZXRTdGFydFRpbWUoY3VycmVudFRpbWUoKSk7
CisKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmFkZEFuaW1hdGlvbihsYXllckFuaW1h
dGlvbi5nZXQoKSk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdl
Yk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5yZW1vdmVBbmlt
YXRpb24obmFtZSk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdl
Yk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OmFkZENoaWxkKFdlYk92ZXJsYXlQcml2
YXRlKiBvdmVybGF5KQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+YWRkU3VibGF5
ZXIob3ZlcmxheS0+bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpKTsKKyAgICBzY2hlZHVsZUNvbXBv
c2l0aW5nUnVuKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZDo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC0+c3VwZXJsYXllcigpID09IHBhZ2UoKS0+bV9jb21wb3NpdG9yLT5jb21wb3NpdGluZ1RocmVh
ZE92ZXJsYXlMYXllcigpKQorICAgICAgICBwYWdlKCktPm1fY29tcG9zaXRvci0+cmVtb3ZlT3Zl
cmxheShtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOworICAgIHNj
aGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkOjpzZXRDb250ZW50c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplKQoreworICAgIGNvbnN0IFNrQml0bWFwJiBvbGRD
b250ZW50cyA9IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+Y29udGVudHMoKTsKKyAg
ICBpZiAoIW9sZENvbnRlbnRzLmlzTnVsbCgpKSB7CisgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMg
bG9jayhvbGRDb250ZW50cyk7CisgICAgICAgIGlmIChkYXRhID09IG9sZENvbnRlbnRzLmdldFBp
eGVscygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNrQml0bWFwIGNvbnRl
bnRzOworICAgIGNvbnRlbnRzLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcs
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRlbnRzLnNl
dFBpeGVscyhjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSk7CisKKyAgICBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWRDbGllbnQtPnNldENvbnRlbnRzKGNvbnRlbnRzKTsKKyAgICBtX2xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldE5lZWRzVGV4dHVyZSh0cnVlKTsKK30KKwordm9pZCBX
ZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRDb250ZW50c1RvQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+
c2V0Q29udGVudHNUb0NvbG9yKGNvbG9yKTsKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQt
PnNldE5lZWRzVGV4dHVyZSh0cnVlKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAg
bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250
ZW50KTsKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldE5lZWRzVGV4dHVyZSh0cnVl
KTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpjbGVhcigp
Cit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5kZWxldGVUZXh0dXJlcygpOworfQor
Cit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OmludmFsaWRhdGUoKQor
eworICAgIGlmICghbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5kcmF3c0NvbnRlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
LT5pbnZhbGlkYXRlKCk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lk
IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKCkKK3sK
KyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmNsZWFyT3ZlcnJpZGUoKTsKKyAgICBzY2hl
ZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK30KK30KKyNlbHNlIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJPdmVybGF5OjpXZWJPdmVybGF5KCkKK3sKK30KKworV2ViT3ZlcmxheTo6fldlYk92
ZXJsYXkoKQoreworfQorCitQbGF0Zm9ybTo6RmxvYXRQb2ludCBXZWJPdmVybGF5Ojpwb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpGbG9hdFBvaW50KCk7Cit9CisKK3Zv
aWQgV2ViT3ZlcmxheTo6c2V0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmKQor
eworfQorCitQbGF0Zm9ybTo6RmxvYXRQb2ludCBXZWJPdmVybGF5OjphbmNob3JQb2ludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpGbG9hdFBvaW50KCk7Cit9CisKK3ZvaWQgV2Vi
T3ZlcmxheTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmKQorewor
fQorCitQbGF0Zm9ybTo6RmxvYXRTaXplIFdlYk92ZXJsYXk6OnNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBQbGF0Zm9ybTo6RmxvYXRTaXplKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0
U2l6ZShjb25zdCBQbGF0Zm9ybTo6RmxvYXRTaXplJikKK3sKK30KKworUGxhdGZvcm06OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IFdlYk92ZXJsYXk6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFBsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCit2b2lkIFdlYk92ZXJs
YXk6OnNldFRyYW5zZm9ybShjb25zdCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKQor
eworfQorCitmbG9hdCBXZWJPdmVybGF5OjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
MS4wZjsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXRPcGFjaXR5KGZsb2F0KQoreworfQorCitX
ZWJPdmVybGF5KiBXZWJPdmVybGF5OjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiAwOwor
fQorCitib29sIFdlYk92ZXJsYXk6OmFkZENoaWxkKFdlYk92ZXJsYXkqKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKK30K
Kwordm9pZCBXZWJPdmVybGF5OjphZGRBbmltYXRpb24oV2ViQW5pbWF0aW9uKikKK3sKK30KKwor
dm9pZCBXZWJPdmVybGF5OjpyZW1vdmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJikKK3sKK30K
KworfQorfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5oIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlODBjNDIzMDli
YTVhYzkwY2YxYjViN2U5OWMxMGVkODJjOTk3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViT3ZlcmxheV9o
CisjZGVmaW5lIFdlYk92ZXJsYXlfaAorCisjaW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgor
I2luY2x1ZGUgIldlYk92ZXJsYXlPdmVycmlkZS5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0xheWVyQ2xpZW50OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViQW5pbWF0aW9uOworY2xhc3MgV2ViT3ZlcmxheUNsaWVudDsKK2Ns
YXNzIFdlYk92ZXJsYXlPdmVycmlkZTsKK2NsYXNzIFdlYk92ZXJsYXlQcml2YXRlOworY2xhc3Mg
V2ViUGFnZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIG92ZXJs
YXkgdGhhdCBpcyByZW5kZXJlZCBzdXBlcmltcG9zZWQgb24gYSB3ZWIgcGFnZS4KKyAqCisgKiBU
aGUgV2ViT3ZlcmxheSBpcyBub3QgdGhyZWFkIHNhZmUsIGJ1dCBpdCBpcyByZWVudHJhbnQgd2hl
biB1c2VkIG9uIGVpdGhlcgorICogdGhlIFdlYktpdCBvciB0aGUgY29tcG9zaXRpbmcgdGhyZWFk
LiBUaGlzIG1lYW5zIHRoYXQgb3ZlcmxheXMgY2FuIGJlCisgKiBvbiBlaXRoZXIgb2YgdGhlc2Ug
dGhyZWFkcywgYnV0IGVhY2ggaW5zdGFuY2UgbXVzdCBvbmx5IGJlIHVzZWQgb24gdGhlCisgKiB0
aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0ZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGUgb3Zl
cnJpZGUgbWVjaGFuaXNtLgorICoKKyAqIFRoZSBXZWJPdmVybGF5T3ZlcnJpZGUgb2JqZWN0IHJl
dHVybmVkIGJ5IFdlYk92ZXJsYXk6Om92ZXJyaWRlKCkgY2FuIGJlIHVzZWQKKyAqIHRvIG92ZXJy
aWRlIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWMgcHJvcGVydGllcyBmcm9tIHRoZSBVSSB0aHJlYWQu
CisgKgorICogVGhleSBoYXZlIHRoZSBmb2xsb3dpbmcgc2VtYW50aWNzOiBJZiB0aGV5IGFyZSBj
YWxsZWQgZm9yIGEgc3BlY2lmaWMgb3ZlcmxheQorICogb24gdGhlIFVJIHRocmVhZCwgdGhlIHZh
bHVlIHNldCB3aWxsIG92ZXJyaWRlIGFueSB2YWx1ZSBzZXQgb24gdGhlIFdLIHRocmVhZAorICog
dW50aWwgeW91IGNhbGwgcmVzZXRPdmVycmlkZXMoKS4gcmVzZXRPdmVycmlkZXMoKSBpcyB0aHJl
YWQgc2FmZS4KKyAqLworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViT3ZlcmxheSB7CitwdWJs
aWM6CisgICAgV2ViT3ZlcmxheSgpOworICAgIFdlYk92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYk92ZXJsYXkoKTsKKworICAgIC8vIFRoZSBw
b3NpdGlvbiBvZiB0aGUgbGF5ZXIgKHRoZSBsb2NhdGlvbiBvZiBpdHMgdG9wLWxlZnQgY29ybmVy
IGluIGl0cyBwYXJlbnQpLgorICAgIFBsYXRmb3JtOjpGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOwor
CisgICAgLy8gQW5jaG9yIHBvaW50OiAoMCwgMCkgaXMgdG9wIGxlZnQsICgxLCAxKSBpcyBib3R0
b20gcmlnaHQuIFRoZSBhbmNob3IgcG9pbnQKKyAgICAvLyBhZmZlY3RzIHRoZSBvcmlnaW4gb2Yg
dGhlIHRyYW5zZm9ybXMuCisgICAgUGxhdGZvcm06OkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBj
b25zdDsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50
Jik7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgbGF5ZXIuCisgICAgUGxhdGZvcm06OkZsb2F0
U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFBsYXRmb3JtOjpGbG9h
dFNpemUmKTsKKworICAgIC8vIFdoZXRoZXIgdGhlIGxheWVyIGlzIHNjYWxlZCB0b2dldGhlciB3
aXRoIHRoZSB3ZWIgcGFnZS4KKyAgICBib29sIHNpemVJc1NjYWxlSW52YXJpYW50KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRTaXplSXNTY2FsZUludmFyaWFudChib29sKTsKKworICAgIC8vIFRyYW5z
Zm9ybSBjYW4gYmUgdXNlZCB0byByb3RhdGUgdGhlIGxheWVyLCBhbW9uZyBvdGhlciB0aGluZ3Mu
CisgICAgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFBsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOworCisgICAgLy8gT3BhY2l0eS4gQ2FuIGFsc28gYmUgdXNlZCB0byB0ZW1wb3JhcmlseSBo
aWRlIGEgbGF5ZXIuCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0T3Bh
Y2l0eShmbG9hdCk7CisKKyAgICAvLyBBZGRzL3JlbW92ZXMgYW4gYW5pbWF0aW9uCisgICAgLy8g
Tm90ZSB0aGF0IFdlYkFuaW1hdGlvbiBhbmQgV2ViU3RyaW5nIGFyZSBub3QgdGhyZWFkIHNhZmUg
YW5kIGhhdmUgdG8gYmUKKyAgICAvLyBjcmVhdGVkIG9uIHRoZSB0aHJlYWQgd2hlcmUgdGhleSds
bCBiZSB1c2VkLgorICAgIHZvaWQgYWRkQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYpOwor
ICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7CisKKyAgICBX
ZWJPdmVybGF5KiBwYXJlbnQoKSBjb25zdDsKKyAgICBib29sIGFkZENoaWxkKFdlYk92ZXJsYXkq
KTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHZvaWQgc2V0Q29udGVudHNU
b0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXpl
JiBpbWFnZVNpemUpOworICAgIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKTsKKyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKworICAgIC8v
IFdpbGwgcmVzdWx0IGluIGEgZnV0dXJlIGNhbGwgdG8gV2ViT3ZlcmxheUNsaWVudDo6ZHJhd0Nv
bnRlbnRzLCBpZiB0aGUgbGF5ZXIgZHJhd3MgY3VzdG9tIGNvbnRlbnRzLgorICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgLy8gVGhlIGNsaWVudCBjYW4gYmUgdXNlZCB0byBkcmF3IGxheWVy
IGNvbnRlbnRzIHVzaW5nIFNraWEuCisgICAgdm9pZCBzZXRDbGllbnQoV2ViT3ZlcmxheUNsaWVu
dCopOworCisgICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gVUkgdGhyZWFkLgorICAgIFdlYk92ZXJs
YXlPdmVycmlkZSogb3ZlcnJpZGUoKTsKKworICAgIC8qKgorICAgICAqIFRocmVhZCBzYWZlLiBO
ZXh0IHRpbWUgdGhlIGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQgb24gdGhlIFdLIHRocmVhZCwgbWFr
ZQorICAgICAqIHRob3NlIHZhbHVlcyBvdmVycmlkZSBhbnkgc2V0IG9uIHRoZSBVSSB0aHJlYWQu
CisgICAgICovCisgICAgdm9pZCByZXNldE92ZXJyaWRlcygpOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBXZWJQYWdlOworICAgIGZyaWVuZCBjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsK
KworICAgIC8vIERpc2FibGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9LgorICAgIFdl
Yk92ZXJsYXkoY29uc3QgV2ViT3ZlcmxheSYpOworICAgIFdlYk92ZXJsYXkmIG9wZXJhdG9yPShj
b25zdCBXZWJPdmVybGF5Jik7CisKKyAgICBXZWJPdmVybGF5UHJpdmF0ZSogZDsKK307CisKK30K
K30KKworI2VuZGlmIC8vIFdlYk92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYk92ZXJsYXlDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmViMjYzY2QwNDVjZDgyMWQ3
NTkxYmVlYTY2OTNlNzk4NmFiNzdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5Q2xpZW50LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYk92ZXJsYXlDbGll
bnRfaAorI2RlZmluZSBXZWJPdmVybGF5Q2xpZW50X2gKKworI2luY2x1ZGUgIkJsYWNrQmVycnlH
bG9iYWwuaCIKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJPdmVybGF5OworCisvKioKKyAqLworY2xhc3Mg
QkxBQ0tCRVJSWV9FWFBPUlQgV2ViT3ZlcmxheUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+V2ViT3ZlcmxheUNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdPdmVybGF5
Q29udGVudHMoV2ViT3ZlcmxheSosIFNrQ2FudmFzKikgPSAwOworfTsKKworfQorfQorCisjZW5k
aWYgLy8gV2ViT3ZlcmxheUNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU4MTNkNTljZjNhMmIw
N2U3MjI4YjEyYzM0ODE4MDZiZDMzZDE0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmNwcApAQCAtMCwwICsxLDEyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJXZWJPdmVybGF5T3ZlcnJpZGUuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRl
ICJXZWJBbmltYXRpb25fcC5oIgorI2luY2x1ZGUgIldlYk92ZXJsYXlfcC5oIgorI2luY2x1ZGUg
IldlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVu
dC5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYk92ZXJsYXlPdmVycmlkZTo6V2ViT3ZlcmxheU92
ZXJyaWRlKFdlYk92ZXJsYXlQcml2YXRlKiBkLCBib29sIG93bmVkKQorICAgIDogZChkKQorICAg
ICwgbV9vd25lZChvd25lZCkKK3sKK30KKworV2ViT3ZlcmxheU92ZXJyaWRlOjp+V2ViT3Zlcmxh
eU92ZXJyaWRlKCkKK3sKKyAgICBpZiAobV9vd25lZCkKKyAgICAgICAgZGVsZXRlIGQ7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRQb3NpdGlvbihjb25zdCBQbGF0Zm9ybTo6Rmxv
YXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgZC0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworfQor
Cit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgUGxhdGZvcm06
OkZsb2F0UG9pbnQmIGFuY2hvcikKK3sKKyAgICBkLT5zZXRBbmNob3JQb2ludChhbmNob3IpOwor
fQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6c2V0U2l6ZShjb25zdCBQbGF0Zm9ybTo6Rmxv
YXRTaXplJiBzaXplKQoreworICAgIGQtPnNldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgV2ViT3Zl
cmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zvcm0oY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgZC0+c2V0VHJhbnNmb3JtKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmPih0cmFuc2Zvcm0pKTsKK30KKwordm9pZCBX
ZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBkLT5z
ZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6YWRkQW5p
bWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIGQtPmFkZEFuaW1h
dGlvbihhbmltYXRpb24uZC0+bmFtZSwgYW5pbWF0aW9uLmQtPmFuaW1hdGlvbi5nZXQoKSwgYW5p
bWF0aW9uLmQtPmtleWZyYW1lcyk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1v
dmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1lKQoreworICAgIGQtPnJlbW92ZUFuaW1h
dGlvbihTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihuYW1lLmltcGwoKSkpKTsKK30KKwor
fQorfQorI2Vsc2UgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorbmFtZXNwYWNlIEJs
YWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk92ZXJsYXlPdmVycmlkZTo6V2Vi
T3ZlcmxheU92ZXJyaWRlKFdlYk92ZXJsYXlQcml2YXRlKikKK3sKK30KKworV2ViT3ZlcmxheU92
ZXJyaWRlOjp+V2ViT3ZlcmxheU92ZXJyaWRlKCkKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3Zl
cnJpZGU6OnNldFBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JikKK3sKK30KKwor
dm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldEFuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpG
bG9hdFBvaW50JikKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFNpemUoY29u
c3QgUGxhdGZvcm06OkZsb2F0U2l6ZSYpCit7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRl
OjpzZXRUcmFuc2Zvcm0oY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JikKK3sK
K30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9wYWNpdHkoZmxvYXQpCit7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjphZGRBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9u
JikKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbihjb25z
dCBXZWJTdHJpbmcmKQoreworfQorCit9Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJP
dmVybGF5T3ZlcnJpZGUuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zlcmxh
eU92ZXJyaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDljOWEzNDk2NDdlY2Q5NWNkNTJjNDQ5ZmUxMDA0YzQ4
OGYyZDUzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViT3ZlcmxheU92ZXJyaWRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYk92ZXJsYXlPdmVycmlkZV9oCisjZGVm
aW5lIFdlYk92ZXJsYXlPdmVycmlkZV9oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgi
CisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb247
CitjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLyoqCisgKiBD
b21wb3NpdGluZyB0aHJlYWQgb25seQorICoKKyAqIE5vdGUgdGhhdCB0aGUgV2ViQW5pbWF0aW9u
IGFuZCBXZWJTdHJpbmcgY2xhc3NlcyBhcmUgbm90IHRocmVhZCBzYWZlLCBidXQKKyAqIHJlZW50
cmFudCwgYW5kIGhhdmUgdG8gYmUgY3JlYXRlZCBvbiB0aGUgdGhyZWFkIHdoZXJlIHRoZXknbGwg
YmUgdXNlZC4KKyAqLworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViT3ZlcmxheU92ZXJyaWRl
IHsKK3B1YmxpYzoKKyAgICAvLyBEb24ndCB1c2UgdGhpcywgY2FsbCBXZWJPdmVybGF5OjpvdmVy
cmlkZSgpIGluc3RlYWQKKyAgICBXZWJPdmVybGF5T3ZlcnJpZGUoV2ViT3ZlcmxheVByaXZhdGUq
LCBib29sIG93bmVkKTsKKyAgICB+V2ViT3ZlcmxheU92ZXJyaWRlKCk7CisKKyAgICB2b2lkIHNl
dFBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRBbmNo
b3JQb2ludChjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOworICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBQbGF0Zm9ybTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3Qg
UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5KGZs
b2F0KTsKKworICAgIHZvaWQgYWRkQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYpOworICAg
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFdlYk92ZXJsYXlQcml2YXRlOworCisgICAgLy8gRGlzYWJsZSBj
b3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0KKyAgICBXZWJPdmVybGF5T3ZlcnJpZGUoY29u
c3QgV2ViT3ZlcmxheU92ZXJyaWRlJik7CisgICAgV2ViT3ZlcmxheU92ZXJyaWRlJiBvcGVyYXRv
cj0oY29uc3QgV2ViT3ZlcmxheU92ZXJyaWRlJik7CisKKyAgICBXZWJPdmVybGF5UHJpdmF0ZSog
ZDsKKyAgICBib29sIG1fb3duZWQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBXZWJPdmVybGF5
T3ZlcnJpZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJP
dmVybGF5X3AuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9wLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODM2YmU3YzhhYThiZDI4MmNhZDU0ZDhhNjIyOGQ0Mzc1N2E1NDY2YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9w
LmgKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2lmbmRlZiBXZWJPdmVybGF5X3BfaAorI2RlZmluZSBXZWJPdmVybGF5X3BfaAorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJUZXh0
dXJlLmgiCisjaW5jbHVkZSAiV2ViT3ZlcmxheU92ZXJyaWRlLmgiCisKKyNpbmNsdWRlIDxTa0Jp
dG1hcC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFuaW1h
dGlvbjsKK2NsYXNzIEtleWZyYW1lVmFsdWVMaXN0OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViT3ZlcmxheTsKK2NsYXNzIFdlYk92
ZXJsYXlDbGllbnQ7CitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3MgV2ViT3ZlcmxheVBy
aXZhdGUgeworcHVibGljOgorICAgIFdlYk92ZXJsYXlQcml2YXRlKCkKKyAgICAgICAgOiBxKDAp
CisgICAgICAgICwgcGFyZW50KDApCisgICAgICAgICwgbV9wYWdlKDApCisgICAgeworICAgICAg
ICBuYXRpdmVUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5X
ZWJPdmVybGF5UHJpdmF0ZSgpCisgICAgeworICAgICAgICBBU1NFUlQocHRocmVhZF9zZWxmKCkg
PT0gZC0+bmF0aXZlVGhyZWFkKTsKKyAgICB9CisKKyAgICBXZWJQYWdlUHJpdmF0ZSogcGFnZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlUHJpdmF0ZSogcGFnZSkgeyBtX3BhZ2Ug
PSBwYWdlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFdlYk92ZXJsYXlDbGllbnQq
IGMpIHsgY2xpZW50ID0gYzsgfQorCisgICAgdmlydHVhbCBXZWJPdmVybGF5T3ZlcnJpZGUqIG92
ZXJyaWRlKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgYW5jaG9y
UG9pbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0
U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBzaXplSXNTY2FsZUlu
dmFyaWFudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUlzU2NhbGVJbnZh
cmlhbnQoYm9vbCkgPSAwOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKKworICAgIHZpcnR1
YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0
eShmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbihjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6QW5pbWF0aW9uKiwgY29uc3QgV2ViQ29yZTo6S2V5ZnJh
bWVWYWx1ZUxpc3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25z
dCBXVEY6OlN0cmluZyYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChXZWJPdmVy
bGF5UHJpdmF0ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQg
Y2hhciogZGF0YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXplKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Db2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpID0g
MDsKKyAgICB2b2lkIGRyYXdDb250ZW50cyhTa0NhbnZhcyopOworCisgICAgdmlydHVhbCB2b2lk
IHJlc2V0T3ZlcnJpZGVzKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nUnVu
KCk7CisKKyAgICAvLyBOZXZlciAwCisgICAgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGluZ1RocmVhZC5nZXQoKTsgfQorCisgICAgLy8gQ2FuIGJlIDAKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisK
KyAgICBXZWJPdmVybGF5KiBxOworICAgIFdlYk92ZXJsYXlDbGllbnQqIGNsaWVudDsKKyAgICBX
ZWJPdmVybGF5KiBwYXJlbnQ7CisgICAgcHRocmVhZF90IG5hdGl2ZVRocmVhZDsKKworcHJvdGVj
dGVkOgorICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQ7CisgICAgT3duUHRyPFdlYk92ZXJsYXlPdmVycmlkZT4gbV9vdmVy
cmlkZTsKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV9wYWdlOworfTsKKworY2xhc3MgV2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQgOiBwdWJsaWMgV2ViT3ZlcmxheVByaXZhdGUsIHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KiA9IDApOworCisg
ICAgdmlydHVhbCBXZWJPdmVybGF5T3ZlcnJpZGUqIG92ZXJyaWRlKCk7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCisgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFBvaW50IGFuY2hvclBvaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldEFuY2hvclBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKworICAgIHZpcnR1
YWwgV2ViQ29yZTo6RmxvYXRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaXpl
SXNTY2FsZUludmFyaWFudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSXNTY2Fs
ZUludmFyaWFudChib29sKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgdmlydHVhbCBmbG9h
dCBvcGFjaXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwor
CisgICAgdmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwg
V2ViQ29yZTo6QW5pbWF0aW9uKiwgY29uc3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChXZWJPdmVybGF5UHJpdmF0ZSopOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGltYWdlU2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Db2xv
cihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRl
bnQoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0T3ZlcnJpZGVzKCk7CisKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyLmdldCgpOyB9CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGluQ2xpcCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgY29udGVudHNWaXNpYmxlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCitw
cml2YXRlOgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2xheWVyOworfTsK
KworLy8gVGhlIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQncyBsaWZlIGN5Y2xlIGlzIHRp
ZWQgdG8gdGhlIExheWVyQ29tcG9zaXRpbmdUaHJlYWQsCisvLyBzbyBpdCBuZWVkcyB0byBiZSBh
IHNlcGFyYXRlIG9iamVjdCBmcm9tIHRoZSBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhy
ZWFkLgorY2xhc3MgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgOiBwdWJs
aWMgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCB7CitwdWJsaWM6CisgICAg
V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5X
ZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCgpIHsgfQorCisgICAgdm9pZCBz
ZXRMYXllcihXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikgeyBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQgPSBsYXllcjsgfQorICAgIHZvaWQgc2V0Q2xpZW50KFdlYk92ZXJs
YXkqIG93bmVyLCBXZWJPdmVybGF5Q2xpZW50KiBjbGllbnQpIHsgbV9vd25lciA9IG93bmVyOyBt
X2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdzQ29udGVudDsgfQorICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50czsgfQorICAgIHZvaWQgc2V0Q29udGVudHMoY29uc3Qg
U2tCaXRtYXAmKTsKKworICAgIHZvaWQgc2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJik7CisKKyAgICAvLyBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50CisgICAgdmly
dHVhbCB2b2lkIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoV2ViQ29yZTo6TGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopOworICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFu
Z2VkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpOworICAg
IHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKFdlYkNvcmU6OkxheWVyQ29tcG9z
aXRpbmdUaHJlYWQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9u
LCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVz
KFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6VGV4dHVyZT4gbV90ZXh0dXJlOworICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7
CisgICAgU2tCaXRtYXAgbV9jb250ZW50czsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2NvbG9yOwor
ICAgIFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1fbGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDsKKyAgICBXZWJPdmVybGF5KiBtX293bmVyOworICAgIFdlYk92ZXJsYXlDbGllbnQqIG1f
Y2xpZW50OworfTsKKworY2xhc3MgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCA6
IHB1YmxpYyBXZWJPdmVybGF5UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViT3ZlcmxheVByaXZh
dGVDb21wb3NpdGluZ1RocmVhZChQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdU
aHJlYWQ+KTsKKyAgICBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKCk7CisgICAg
fldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGllbnQoV2ViT3ZlcmxheUNsaWVudCopOworICAgIHZpcnR1YWwgV2ViT3ZlcmxheU92
ZXJyaWRlKiBvdmVycmlkZSgpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFBvaW50IHBv
c2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRQb2ludCBhbmNo
b3JQb2ludCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0U2l6ZSBz
aXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoYm9vbCk7CisKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRB
bmltYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkFuaW1hdGlvbiosIGNv
bnN0IFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFuaW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGQoV2ViT3ZlcmxheVByaXZhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJv
bVBhcmVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworCisgICAgdmlydHVh
bCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZp
cnR1YWwgdm9pZCByZXNldE92ZXJyaWRlcygpOworCitwcml2YXRlOgorICAgIFdlYk92ZXJsYXlM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KiBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNlbmRpZiAvLyBXZWJPdmVybGF5X3BfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViUGFnZS5jcHAKaW5kZXggZTNkNmMxNGU1ZjMyZmYyNTdiYTYyZTgzZTE3Njg1Y2QzNjZjY2Zi
NC4uNzQ2ODFkZWFiYjM5MzNhZmMxZmQyMjk2NWZjZGFkYTA4NWVlN2Q3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC0xMTYsNiArMTE2LDggQEAKICNpbmNs
dWRlICJXZWJET01Eb2N1bWVudC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiV2ViS2l0VmVyc2lvbi5o
IgorI2luY2x1ZGUgIldlYk92ZXJsYXkuaCIKKyNpbmNsdWRlICJXZWJPdmVybGF5X3AuaCIKICNp
bmNsdWRlICJXZWJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVk
ZSAiV2ViVmlld3BvcnRBcmd1bWVudHMuaCIKQEAgLTYyMDAsNiArNjIwMiw0NiBAQCB2b2lkIFdl
YlBhZ2U6OnNldFRhcEhpZ2hsaWdodChXZWJUYXBIaWdobGlnaHQqIHRhcEhpZ2hsaWdodCkKICAg
ICBkLT5tX3RhcEhpZ2hsaWdodCA9IGFkb3B0UHRyKHRhcEhpZ2hsaWdodCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZTo6YWRkT3ZlcmxheShXZWJPdmVybGF5KiBvdmVybGF5KQoreworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAob3ZlcmxheS0+ZC0+Z3JhcGhpY3NMYXllcigp
KSB7CisgICAgICAgIG92ZXJsYXktPmQtPnNldFBhZ2UoZCk7CisgICAgICAgIGQtPm92ZXJsYXlM
YXllcigpLT5hZGRDaGlsZChvdmVybGF5LT5kLT5ncmFwaGljc0xheWVyKCkpOworICAgIH0KKyNl
bmRpZgorfQorCit2b2lkIFdlYlBhZ2U6OnJlbW92ZU92ZXJsYXkoV2ViT3ZlcmxheSogb3Zlcmxh
eSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG92ZXJsYXkt
PmQtPmdyYXBoaWNzTGF5ZXIoKSA9PSBkLT5vdmVybGF5TGF5ZXIoKSkgeworICAgICAgICBvdmVy
bGF5LT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIG92ZXJsYXktPmQtPmNsZWFyKCk7Cisg
ICAgICAgIG92ZXJsYXktPmQtPnNldFBhZ2UoMCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQg
V2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KFdlYk92ZXJsYXkqIG92ZXJsYXkp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFTU0VSVCh1c2VySW50
ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgb3Zl
cmxheS0+ZC0+c2V0UGFnZShkKTsKKyAgICBkLT5jb21wb3NpdG9yKCktPmFkZE92ZXJsYXkob3Zl
cmxheS0+ZC0+bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFdl
YlBhZ2U6OnJlbW92ZUNvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheShXZWJPdmVybGF5KiBvdmVybGF5
KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBU1NFUlQodXNlcklu
dGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpOworICAgIGQt
PmNvbXBvc2l0b3IoKS0+cmVtb3ZlT3ZlcmxheShvdmVybGF5LT5kLT5sYXllckNvbXBvc2l0aW5n
VGhyZWFkKCkpOworICAgIG92ZXJsYXktPmQtPmNsZWFyKCk7CisgICAgb3ZlcmxheS0+ZC0+c2V0
UGFnZSgwKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhZ2U6OnBvcHVwT3BlbmVkKFBhZ2VQb3B1
cEJsYWNrQmVycnkqIHdlYlBvcHVwKQogewogICAgIEFTU0VSVCghZC0+bV9zZWxlY3RQb3B1cCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCmluZGV4IGU5YzkzY2Y0ZmUwZjNh
YTQ5OTJhOGJlODEwZWI0NTE0ZDA3Nzc0Y2UuLmEzMjczNTc2NmIwMTYzNmYyOGVmMzIzNzZmM2U1
ZWI4YzUxZDRhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCkBAIC02
Miw2ICs2Miw3IEBAIGNsYXNzIEJhY2tpbmdTdG9yZTsKIGNsYXNzIEJhY2tpbmdTdG9yZUNsaWVu
dDsKIGNsYXNzIEJhY2tpbmdTdG9yZVByaXZhdGU7CiBjbGFzcyBSZW5kZXJRdWV1ZTsKK2NsYXNz
IFdlYk92ZXJsYXk7CiBjbGFzcyBXZWJQYWdlQ2xpZW50OwogY2xhc3MgV2ViUGFnZUNvbXBvc2l0
b3I7CiBjbGFzcyBXZWJQYWdlR3JvdXBMb2FkRGVmZXJyZXI7CkBAIC0zMzgsNiArMzM5LDE1IEBA
IHB1YmxpYzoKICAgICBXZWJUYXBIaWdobGlnaHQqIHRhcEhpZ2hsaWdodCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0VGFwSGlnaGxpZ2h0KFdlYlRhcEhpZ2hsaWdodCopOwogCisgICAgLy8gQWRkcyBh
biBvdmVybGF5IHRoYXQgY2FuIGJlIG1vZGlmaWVkIG9uIHRoZSBXZWJLaXQgdGhyZWFkLCBhbmQK
KyAgICAvLyB3aG9zZSBhdHRyaWJ1dGVzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21wb3Np
dGluZyB0aHJlYWQuCisgICAgdm9pZCBhZGRPdmVybGF5KFdlYk92ZXJsYXkqKTsKKyAgICB2b2lk
IHJlbW92ZU92ZXJsYXkoV2ViT3ZlcmxheSopOworCisgICAgLy8gQWRkcyBhbiBvdmVybGF5IHRo
YXQgY2FuIG9ubHkgYmUgbW9kaWZpZWQgb24gdGhlIGNvbXBvc2l0aW5nIHRocmVhZC4KKyAgICB2
b2lkIGFkZENvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheShXZWJPdmVybGF5Kik7CisgICAgdm9pZCBy
ZW1vdmVDb21wb3NpdGluZ1RocmVhZE92ZXJsYXkoV2ViT3ZlcmxheSopOworCiAgICAgLy8gUG9w
dXAgY2xpZW50CiAgICAgdm9pZCBpbml0UG9wdXBXZWJWaWV3KEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZSopOwogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tC
ZXJyeSogd2ViUG9wdXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9XZWJQYWdlQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dl
YlBhZ2VDb21wb3NpdG9yLmNwcAppbmRleCA4MzJiZGI4NzFmYThmMDRhNGE2YzVmZTY0OTE0ZGU2
NzFmNjhkNjY4Li5jZTgzMWIyZjc0M2QzZWI5ZjJiN2UxMmExYmE5MDJmOTQ1NzU0M2ZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNw
cApAQCAtODMsNyArODMsNyBAQCB2b2lkIFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cHJlcGFy
ZUZyYW1lKGRvdWJsZSBhbmltYXRpb25UaW1lKQogICAgIC8vIFdlYlBhZ2VDb21wb3NpdG9yIGlz
IHVzZWQgdG8gcmVuZGVyIHRoZSB3ZWIgcGFnZS4gVGhlIHByZXNlbmNlIG9mIGEKICAgICAvLyBX
ZWJQYWdlQ29tcG9zaXRvckNsaWVudCAobV9jbGllbnQpIGluZGljYXRlcyB0aGlzIGlzIHRoZSBj
YXNlLCBzbwogICAgIC8vIGNyZWF0ZSBhIExheWVyUmVuZGVyZXIgaWYgdGhlcmUgYXJlIGxheWVy
cyBvciBpZiB0aGVyZSdzIGEgY2xpZW50LgotICAgIGlmICghbV9yb290TGF5ZXIgJiYgIW1fb3Zl
cmxheUxheWVyICYmICFtX2NsaWVudCkKKyAgICBpZiAoIW1fcm9vdExheWVyICYmICFtX292ZXJs
YXlMYXllciAmJiAhbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllciAmJiAhbV9jbGllbnQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9sYXllclJlbmRlcmVyKSB7CkBAIC0xMDEs
NiArMTAxLDggQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZShk
b3VibGUgYW5pbWF0aW9uVGltZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlRnJh
bWUoYW5pbWF0aW9uVGltZSwgbV9yb290TGF5ZXIuZ2V0KCkpOwogICAgIGlmIChtX292ZXJsYXlM
YXllcikKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlRnJhbWUoYW5pbWF0aW9uVGlt
ZSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIGlmIChtX2NvbXBvc2l0aW5nVGhyZWFkT3Zl
cmxheUxheWVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXBhcmVGcmFtZShhbmltYXRp
b25UaW1lLCBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyLmdldCgpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbmRlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybUluLCBjb25zdCBGbG9hdFJlY3QmIHRyYW5zZm9ybWVkQ29udGVudHMsIGNvbnN0
IEZsb2F0UmVjdCYgLyp2aWV3cG9ydCovKQpAQCAtMTI4LDEwICsxMzAsMTcgQEAgdm9pZCBXZWJQ
YWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbmRlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRSZWN0JgogICAgIGlmICghZHJhd3NSb290TGF5ZXIoKSkKICAgICAgICAgbV93ZWJQ
YWdlLT5tX2JhY2tpbmdTdG9yZS0+ZC0+Y29tcG9zaXRlQ29udGVudHMobV9sYXllclJlbmRlcmVy
LmdldCgpLCB0cmFuc2Zvcm0sIGNvbnRlbnRzKTsKIAorICAgIGNvbXBvc2l0ZUxheWVycyh0cmFu
c2Zvcm0pOworfQorCit2b2lkIFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6Y29tcG9zaXRlTGF5
ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CiAgICAgaWYgKG1f
cm9vdExheWVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0cmFu
c2Zvcm0sIG1fcm9vdExheWVyLmdldCgpKTsKICAgICBpZiAobV9vdmVybGF5TGF5ZXIpCiAgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSwgbV9vdmVybGF5
TGF5ZXIuZ2V0KCkpOworICAgIGlmIChtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQor
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0cmFuc2Zvcm0sIG1fY29t
cG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuZ2V0KCkpOwogCiAgICAgbV9sYXN0Q29tcG9zaXRp
bmdSZXN1bHRzID0gbV9sYXllclJlbmRlcmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0cygpOwogCkBA
IC0xNDksNyArMTU4LDcgQEAgYm9vbCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmRyYXdzUm9v
dExheWVyKCkgY29uc3QKIGJvb2wgV2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJz
KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY29udGVudHMpCiB7CiAg
ICAgLy8gSXMgdGhlcmUgYW55dGhpbmcgdG8gZHJhdz8KLSAgICBpZiAoIW1fcm9vdExheWVyICYm
ICFtX292ZXJsYXlMYXllcikKKyAgICBpZiAoIW1fcm9vdExheWVyICYmICFtX292ZXJsYXlMYXll
ciAmJiAhbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gcHJlcGFyZUZyYW1lIGNyZWF0ZXMgdGhlIExheWVyUmVuZGVyZXIgaWYg
bmVlZGVkCkBAIC0xNzcsMTcgKzE4Niw3IEBAIGJvb2wgV2ViUGFnZUNvbXBvc2l0b3JQcml2YXRl
OjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjCiAgICAg
Ly8gYXMgdGhlIGxhc3QgdHJhbnNmb3JtYXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtID0gTGF5ZXJSZW5kZXJlcjo6b3J0aG9NYXRyaXgoMCwgY29udGVudHMud2lkdGgo
KSwgY29udGVudHMuaGVpZ2h0KCksIDAsIC0xMDAwLCAxMDAwKTsKICAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlM2QoLWNvbnRlbnRzLngoKSwgLWNvbnRlbnRzLnkoKSwgMCk7Ci0gICAgaWYgKG1fcm9v
dExheWVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0cmFuc2Zv
cm0sIG1fcm9vdExheWVyLmdldCgpKTsKLSAgICBpZiAobV9vdmVybGF5TGF5ZXIpCi0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSwgbV9vdmVybGF5TGF5
ZXIuZ2V0KCkpOwotCi0gICAgbV9sYXN0Q29tcG9zaXRpbmdSZXN1bHRzID0gbV9sYXllclJlbmRl
cmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0cygpOwotCi0gICAgaWYgKG1fbGFzdENvbXBvc2l0aW5n
UmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZyYW1lKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpBbmltYXRp
b25GcmFtZVJhdGVDb250cm9sbGVyOjppbnN0YW5jZSgpLT5hZGRDbGllbnQodGhpcyk7Ci0gICAg
ICAgIG1fd2ViUGFnZS0+dXBkYXRlRGVsZWdhdGVkT3ZlcmxheXMoKTsKLSAgICB9CisgICAgY29t
cG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyOCw2
ICsyMjcsMjQgQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmNvbXBvc2l0b3JEZXN0
cm95ZWQoKQogICAgIG1fY2xpZW50ID0gMDsKIH0KIAordm9pZCBXZWJQYWdlQ29tcG9zaXRvclBy
aXZhdGU6OmFkZE92ZXJsYXkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCit7CisgICAg
aWYgKCFtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQorICAgICAgICBtX2NvbXBvc2l0
aW5nVGhyZWFkT3ZlcmxheUxheWVyID0gTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlKExh
eWVyRGF0YTo6Q3VzdG9tTGF5ZXIsIDApOworICAgIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5
TGF5ZXItPmFkZFN1YmxheWVyKGxheWVyKTsKK30KKwordm9pZCBXZWJQYWdlQ29tcG9zaXRvclBy
aXZhdGU6OnJlbW92ZU92ZXJsYXkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCit7Cisg
ICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCkgIT0gbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlM
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVy
KCk7CisKKyAgICBpZiAobV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllciAmJiBtX2NvbXBv
c2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyLT5nZXRTdWJsYXllcnMoKS5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuY2xlYXIoKTsKK30KKwogV2ViUGFn
ZUNvbXBvc2l0b3I6OldlYlBhZ2VDb21wb3NpdG9yKFdlYlBhZ2UqIHBhZ2UsIFdlYlBhZ2VDb21w
b3NpdG9yQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6
OlBsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlQ29tcG9zaXRvcl9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VD
b21wb3NpdG9yX3AuaAppbmRleCA0NzBiM2E1OWMwMjdhMzdkYzZhMWQ2M2ZiNDc1ZmI2NjIyZGUz
YzEzLi40ZDU2M2MyZmUxMTY4MjI2ZTUxMjdhY2I2ZGQ3OWJhMmY5NjhhMDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaApAQCAt
NjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogb3ZlcmxheUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5TGF5ZXIuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldE92ZXJsYXlMYXllcihXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
Kik7CiAKKyAgICBXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBjb21wb3NpdGluZ1Ro
cmVhZE92ZXJsYXlMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVy
bGF5TGF5ZXIuZ2V0KCk7IH0KKwogICAgIGJvb2wgZHJhd3NSb290TGF5ZXIoKSBjb25zdDsKICAg
ICB2b2lkIHNldERyYXdzUm9vdExheWVyKGJvb2wgZHJhd3NSb290TGF5ZXIpIHsgbV9kcmF3c1Jv
b3RMYXllciA9IGRyYXdzUm9vdExheWVyOyB9CiAKQEAgLTg5LDExICs5MSwxNSBAQCBwdWJsaWM6
CiAgICAgV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50OyB9CiAgICAgdm9pZCBjb21wb3NpdG9yRGVzdHJveWVkKCk7CiAKKyAgICB2b2lkIGFk
ZE92ZXJsYXkoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOworICAgIHZvaWQgcmVt
b3ZlT3ZlcmxheShXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CisKIHByb3RlY3Rl
ZDoKICAgICBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGUoV2ViUGFnZVByaXZhdGUqLCBXZWJQYWdl
Q29tcG9zaXRvckNsaWVudCopOwogCiBwcml2YXRlOgogICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVD
aGFuZ2VkKCk7CisgICAgdm9pZCBjb21wb3NpdGVMYXllcnMoY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKIAogICAgIFdlYlBhZ2VDb21wb3NpdG9yQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwpAQCAtMTAxLDYgKzEwNyw3IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXI+IG1fbGF5ZXJSZW5kZXJl
cjsKICAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9yb290TGF5
ZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IG1fb3Zlcmxh
eUxheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX2Nv
bXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9sYXlv
dXRSZWN0Rm9yQ29tcG9zaXRpbmc7CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2NvbnRlbnRzU2l6
ZUZvckNvbXBvc2l0aW5nOwogICAgIFdlYkNvcmU6OkxheWVyUmVuZGVyaW5nUmVzdWx0cyBtX2xh
c3RDb21wb3NpdGluZ1Jlc3VsdHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144475</attachid>
            <date>2012-05-29 01:35:31 -0700</date>
            <delta_ts>2012-05-29 04:14:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87603-20120529103529.patch</filename>
            <type>text/plain</type>
            <size>71476</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1MmVjNDhhNjdiZjczNzBm
MzA2Nzc3OGE1Yjg5MWYxN2E4NGY5NTQuLmM1NDU3YjNhMmZjNDliNGE0MTZhMTI2NTRiODE1Zjk5
MWExNTE5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5p
bHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVy
bGF5IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc2MDMKKworICAgICAgICBSZXZpZXdlZCBieSBSb2IgQnVpcy4KKworICAgICAgICBBZGQgV2Vi
T3ZlcmxheSByZWxhdGVkIGZpbGVzIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKKyAgICAgICAgUFIg
IzE1NjgxMgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgorCisyMDEyLTA1
LTI3ICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKwogICAgICAgICBbQmxhY2tC
ZXJyeV0gQWRkIGEgZGVmYXVsdCB0YXAgaGlnaGxpZ2h0CiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzU2OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwppbmRleCAxZGU1MmIzNTE5MDQ5MGYyODUzN2UwZGI5NGEzYzFlMmU3NzNjZDU1Li5mNGM1
NDdkYjBjMzU0OWFkZDBjMGE2NjU5MTBkODJkZTY4YzM3ZWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOTggQEAKIDIwMTItMDUtMjcgIEFydmlkIE5pbHNzb24g
IDxhbmlsc3NvbkByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBXZWJPdmVybGF5IEFQ
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc2MDMK
KworICAgICAgICBSZXZpZXdlZCBieSBSb2IgQnVpcy4KKworICAgICAgICBUaGlzIG5ldyBBUEkg
bWFrZXMgaXQgcG9zc2libGUgdG8gbGV2ZXJhZ2UgdGhlIEJsYWNrQmVycnkgYWNjZWxlcmF0ZWQK
KyAgICAgICAgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gdG8gZHJhdywgdHJhbnNmb3JtIGFu
ZCBmbHVpZGx5IGFuaW1hdGUKKyAgICAgICAgb3ZlcmxheXMgaW4gdGhlIGVtYmVkZGluZyBsaWJy
YXJ5IG9yIGFwcGxpY2F0aW9uLgorCisgICAgICAgIEEgV2ViT3ZlcmxheSBoYXMgYW4gYWZmaW5p
dHkgZm9yIHRoZSB0aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0ZWQuIElmCisgICAgICAgIHRoZSBj
dXJyZW50IHRocmVhZCBpcyB0aGUgV2ViS2l0IHRocmVhZCwgdXNlIFdlYlBhZ2U6OmFkZE92ZXJs
YXkoKSB0bworICAgICAgICBhZGQgaXQgdG8gdGhlIHBhZ2UsIGFuZCBtYW5pcHVsYXRlIGl0IG9u
bHkgZnJvbSB0aGUgV2ViS2l0IHRocmVhZCwgd2l0aAorICAgICAgICBleGNlcHRpb24gb2YgdGhl
ICJvdmVycmlkZSIgZnVuY3Rpb25hbGl0eSB3aGljaCBjYW4gYmUgdXNlZCBmcm9tIHRoZQorICAg
ICAgICBjb21wb3NpdGluZyB0aHJlYWQuIElmIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgY29t
cG9zaXRpbmcgdGhyZWFkLAorICAgICAgICB1c2UgV2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdUaHJl
YWRPdmVybGF5KCkgdG8gYWRkIGl0IHRvIHRoZSBwYWdlLCBhbmQKKyAgICAgICAgb25seSBtYW5p
cHVsYXRlIGl0IG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCisKKyAgICAgICAgQSBXZWJPdmVy
bGF5IGNhbiBiZSBwYWludGVkIHVzaW5nIFNraWEsIG9yIGl0cyBjb250ZW50cyBjYW4gYmUgc2V0
IHRvCisgICAgICAgIGFuIGltYWdlIG9yIGEgc29saWQgY29sb3IuCisKKyAgICAgICAgUFIgIzE1
NjgxMgorCisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0aW9uOjpmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0aW9uOjpu
YW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0aW9uOjpXZWJBbmlt
YXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmltYXRpb246On5XZWJB
bmltYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJBbmltYXRpb246Om9w
ZXJhdG9yPSk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbl9wLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkFuaW1hdGlvblByaXZhdGUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJBbmltYXRpb25Qcml2YXRlOjpXZWJBbmltYXRpb25Qcml2YXRl
KToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6V2ViT3ZlcmxheSk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6On5XZWJPdmVybGF5KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cG9zaXRpb24pOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRQb3NpdGlvbik6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFuY2hvclBvaW50KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0QW5jaG9yUG9pbnQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzaXplKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNpemVJc1NjYWxlSW52YXJpYW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5Ojp0cmFuc2Zvcm0pOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRUcmFuc2Zvcm0pOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvcGFjaXR5KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6c2V0T3BhY2l0eSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZEFuaW1hdGlvbik6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnBhcmVudCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmFkZENoaWxkKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldENvbnRlbnRzVG9Db2xvcik6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnNldERyYXdzQ29udGVu
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OmludmFsaWRhdGUp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpzZXRDbGllbnQpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpvdmVycmlkZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXk6OnJlc2V0T3ZlcnJpZGVzKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OnBhZ2UpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZTo6b3ZlcnJpZGUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZTo6ZHJhd0NvbnRl
bnRzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OnNj
aGVkdWxlQ29tcG9zaXRpbmdSdW4pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJP
dmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRo
cmVhZDo6b3ZlcnJpZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5
UHJpdmF0ZVdlYktpdFRocmVhZDo6cG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0UG9zaXRpb24pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6YW5j
aG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0
ZVdlYktpdFRocmVhZDo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2l6ZSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRTaXplKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJl
YWQ6OnNpemVJc1NjYWxlSW52YXJpYW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFNpemVJc1NjYWxlSW52YXJpYW50KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJl
YWQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQ
cml2YXRlV2ViS2l0VGhyZWFkOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0eSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRP
cGFjaXR5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQ6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6YWRk
Q2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdl
YktpdFRocmVhZDo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50c1RvSW1hZ2UpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVh
ZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
T3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpjbGVhcik6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhy
ZWFkOjppbnZhbGlkYXRlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6Om5vdGlmeVN5bmNSZXF1
aXJlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2Vi
S2l0VGhyZWFkOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OldlYk92ZXJsYXlMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
T3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6On5XZWJPdmVybGF5TGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92
ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXREcmF3c0NvbnRlbnQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92
ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50cyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50OjpzZXRDb250ZW50c1RvQ29sb3IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZERlc3Ryb3llZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1
cmVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQ6OmRlbGV0ZVRleHR1cmVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6V2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
Yk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6On5XZWJPdmVybGF5UHJpdmF0ZUNvbXBv
c2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVBy
aXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q2xpZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6b3ZlcnJpZGUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjpwb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJs
YXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFBvc2l0aW9uKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6YW5jaG9y
UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNv
bXBvc2l0aW5nVGhyZWFkOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNpemUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFk
OjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZh
dGVDb21wb3NpdGluZ1RocmVhZDo6c2l6ZUlzU2NhbGVJbnZhcmlhbnQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRT
aXplSXNTY2FsZUludmFyaWFudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92
ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFRy
YW5zZm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRl
Q29tcG9zaXRpbmdUaHJlYWQ6Om9wYWNpdHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRPcGFjaXR5KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVh
ZDo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zlcmxh
eVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6YWRk
Q2hpbGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJpdmF0ZUNv
bXBvc2l0aW5nVGhyZWFkOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVD
b21wb3NpdGluZ1RocmVhZDo6c2V0Q29udGVudHNUb0NvbG9yKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6c2V0RHJhd3ND
b250ZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVD
b21wb3NpdGluZ1RocmVhZDo6Y2xlYXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
cmVzZXRPdmVycmlkZXMpOgorICAgICAgICAqIEFwaS9XZWJPdmVybGF5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIEFwaS9XZWJPdmVy
bGF5Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2Vi
T3ZlcmxheU92ZXJyaWRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OldlYk92ZXJsYXlPdmVycmlk
ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlPdmVycmlkZTo6fldl
Yk92ZXJsYXlPdmVycmlkZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJs
YXlPdmVycmlkZTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJPdmVybGF5T3ZlcnJpZGU6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRTaXplKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9wYWNpdHkpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5T3ZlcnJpZGU6OmFkZEFuaW1hdGlv
bik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlPdmVycmlkZTo6cmVt
b3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheV9wLmg6IEFkZGVk
LgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViT3ZlcmxheVByaXZhdGU6OldlYk92ZXJsYXlQcml2YXRlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6On5XZWJPdmVybGF5UHJpdmF0ZSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlOjpzZXRQYWdlKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGU6OnNldENsaWVu
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlOjpsYXll
ckNvbXBvc2l0aW5nVGhyZWFkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3Zl
cmxheVByaXZhdGU6OmdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViT3ZlcmxheVByaXZhdGVX
ZWJLaXRUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6Z3JhcGhpY3NMYXllcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpub3RpZnlBbmltYXRpb25TdGFy
dGVkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJL
aXRUaHJlYWQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6
OmNvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRMYXllcik6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDbGll
bnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmNvbnRlbnRzKToK
KyAgICAgICAgKFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAq
IEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6
YWRkT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlOjpyZW1vdmVPdmVybGF5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZTo6cmVtb3ZlQ29tcG9zaXRpbmdUaHJlYWRPdmVybGF5KToK
KyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBB
cGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cmVuZGVyKToKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9y
UHJpdmF0ZTo6Y29tcG9zaXRlTGF5ZXJzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjphZGRPdmVybGF5KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpyZW1vdmVP
dmVybGF5KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3JfcC5oOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmNvbXBvc2l0aW5n
VGhyZWFkT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZSk6
CisKKzIwMTItMDUtMjcgIEFydmlkIE5pbHNzb24gIDxhbmlsc3NvbkByaW0uY29tPgorCiAgICAg
ICAgIFtCbGFja0JlcnJ5XSBBbHdheXMgY3JlYXRlIGEgY29tcG9zaXRvcgogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1OTgKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhMzkxZTFiOWRlODhhZGExMDE0ZmNmNzZhZWE3
Yzk3MWI2ZTk4MTg3Li4yZmQzZWRjZmVlZjk3MjhlODQ3ZGFiODE2MjQ5ZDUxMDQ1Zjk0M2IwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNDcsMTMgKzQ3LDE2IEBA
IEFERF9ERUZJTklUSU9OUygtRFVTRVJfUFJPQ0VTU0VTKQogTElTVChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCiAgICAgYmxhY2tiZXJy
eS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKLSAgICBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcu
Y3BwCisgICAgYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAogICAgIGJsYWNrYmVycnkv
QXBpL1dlYktpdE1JTUVUeXBlQ29udmVydGVyLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYktp
dFRleHRDb2RlYy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcAorICAgIGJs
YWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcAogICAg
IGJsYWNrYmVycnkvQXBpL1dlYlBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAKICAgICBibGFja2Jl
cnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3Bw
CiAgICAgYmxhY2tiZXJyeS9BcGkvV2ViVmlld3BvcnRBcmd1bWVudHMuY3BwCiAgICAgYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGEuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiMGRkZDU2ODZlMmVlNDljYTcxZmFi
YTAyZTIzMTFmNDA4ZDE4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIldlYkFuaW1hdGlvbi5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhy
ZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKyNpbmNsdWRlICJXZWJBbmlt
YXRpb25fcC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1l
c3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYkFuaW1hdGlv
biBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBmbG9h
dCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIGR1cmF0aW9uKQoreworICAgIFdlYkFuaW1hdGlvbiB0
bXA7CisgICAgdG1wLmQtPm5hbWUgPSBTdHJpbmcobmFtZS5pbXBsKCkpOworICAgIHRtcC5kLT5h
bmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIHRtcC5kLT5hbmltYXRpb24tPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICB0bXAuZC0+a2V5ZnJhbWVzID0gS2V5ZnJhbWVWYWx1
ZUxpc3QoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHRtcC5kLT5rZXlmcmFtZXMuaW5z
ZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIGZyb20pKTsKKyAgICB0bXAuZC0+a2V5ZnJh
bWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgxLjAsIHRvKSk7CisKKyAgICByZXR1
cm4gdG1wOworfQorCitXZWJTdHJpbmcgV2ViQW5pbWF0aW9uOjpuYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZC0+bmFtZS5pbXBsKCk7Cit9CisKK1dlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9u
KCkKKyAgICA6IGQobmV3IFdlYkFuaW1hdGlvblByaXZhdGUpCit7Cit9CisKK1dlYkFuaW1hdGlv
bjo6V2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYgbykKKzogZChuZXcgV2ViQW5pbWF0
aW9uUHJpdmF0ZSkKK3sKKyAgICAqZCA9ICpvLmQ7Cit9CisKK1dlYkFuaW1hdGlvbjo6fldlYkFu
aW1hdGlvbigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisKK1dlYkFuaW1hdGlvbiYgV2ViQW5pbWF0
aW9uOjpvcGVyYXRvcj0oY29uc3QgV2ViQW5pbWF0aW9uJiBvKQoreworICAgICpkID0gKm8uZDsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1l
c3BhY2UgQmxhY2tCZXJyeQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2U5Mjk3ZGI1MTljODk4ZDM5NGIzOTFlODE1MWRjYWVhZTY5YjI3MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmgKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZu
ZGVmIFdlYkFuaW1hdGlvbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbl9oCisKKyNpbmNsdWRlICJC
bGFja0JlcnJ5R2xvYmFsLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRp
dmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJBbmltYXRpb25Qcml2YXRlOworCisvKioKKyAqIFJlcHJlc2VudHMgYW4gYW5pbWF0
aW9uIHJ1bm5pbmcgb24gYW4gb3ZlcmxheS4KKyAqCisgKiBXZWJBbmltYXRpb24gaXMgbm90IHRo
cmVhZCBzYWZlLCBidXQgaXQgaXMgcmVlbnRyYW50LiBUaGlzIG1lYW5zIHRoYXQKKyAqIGluc3Rh
bmNlcyBjYW4gYmUgY3JlYXRlZCBvbiBkaWZmZXJlbnQgdGhyZWFkcywgYnV0IG11c3QgYmUgdXNl
ZCBvbiB0aGUKKyAqIHRocmVhZCB3aGVyZSB0aGV5IHdlcmUgY3JlYXRlZC4KKyAqLworY2xhc3Mg
QkxBQ0tCRVJSWV9FWFBPUlQgV2ViQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2Vi
QW5pbWF0aW9uIGZhZGVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBmbG9hdCBmcm9t
LCBmbG9hdCB0bywgZG91YmxlIGR1cmF0aW9uKTsKKworICAgIFdlYkFuaW1hdGlvbigpOworICAg
IFdlYkFuaW1hdGlvbihjb25zdCBXZWJBbmltYXRpb24mKTsKKyAgICB+V2ViQW5pbWF0aW9uKCk7
CisKKyAgICBXZWJBbmltYXRpb24mIG9wZXJhdG9yPShjb25zdCBXZWJBbmltYXRpb24mKTsKKwor
ICAgIFdlYlN0cmluZyBuYW1lKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xh
c3MgV2ViT3ZlcmxheTsKKyAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheU92ZXJyaWRlOworICAg
IGZyaWVuZCBjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsKKworICAgIFdlYkFuaW1hdGlvblByaXZh
dGUqIGQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBXZWJBbmltYXRpb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb25fcC5oIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb25fcC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4Y2E5
YWZmMzRlNTk5MWI1ZDhkOTgzNmI1YzcxZTQ4OWU2Mzg5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbl9wLmgKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdl
YkFuaW1hdGlvbl9wX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uX3BfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQW5pbWF0aW9uOworCitjbGFzcyBXZWJBbmltYXRpb25Q
cml2YXRlIHsKK3B1YmxpYzoKKyAgICBXZWJBbmltYXRpb25Qcml2YXRlKCkKKyAgICAgICAgOiBr
ZXlmcmFtZXMoV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCisgICAgeworICAgIH0K
KworICAgIFN0cmluZyBuYW1lOworICAgIFJlZlB0cjxXZWJDb3JlOjpBbmltYXRpb24+IGFuaW1h
dGlvbjsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7Cit9OworCit9
Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAv
LyBXZWJBbmltYXRpb25fcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYk92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVy
bGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45M2ZkN2EzZDEwNGEzNjQzOWM0YTFlOTMwNDI5ZjBhMmVjYmRm
Nzg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJP
dmVybGF5LmNwcApAQCAtMCwwICsxLDc0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJPdmVybGF5
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXll
cldlYktpdFRocmVhZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0
aW9uX3AuaCIKKyNpbmNsdWRlICJXZWJPdmVybGF5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViT3Zl
cmxheU92ZXJyaWRlLmgiCisjaW5jbHVkZSAiV2ViT3ZlcmxheV9wLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZUNvbXBvc2l0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ29tcG9zaXRvcl9wLmgi
CisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+CisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8U2tEZXZpY2UuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgewor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJPdmVy
bGF5OjpXZWJPdmVybGF5KCkKKyAgICA6IGQoMCkKK3sKKyAgICBpZiAoUGxhdGZvcm06OndlYktp
dFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpIHsKKyAgICAgICAgZCA9
IG5ldyBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDsKKyAgICAgICAgZC0+cSA9IHRoaXM7
CisgICAgfSBlbHNlIGlmIChQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGll
bnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpIHsKKyAgICAgICAgZCA9IG5ldyBXZWJPdmVybGF5UHJp
dmF0ZUNvbXBvc2l0aW5nVGhyZWFkOworICAgICAgICBkLT5xID0gdGhpczsKKyAgICB9Cit9CisK
K1dlYk92ZXJsYXk6OldlYk92ZXJsYXkoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAg
IDogZCgwKQoreworICAgIGQgPSBuZXcgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQoY2xp
ZW50KTsKKyAgICBkLT5xID0gdGhpczsKK30KKworV2ViT3ZlcmxheTo6fldlYk92ZXJsYXkoKQor
eworICAgIGRlbGV0ZSBkOworfQorCitQbGF0Zm9ybTo6RmxvYXRQb2ludCBXZWJPdmVybGF5Ojpw
b3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnBvc2l0aW9uKCk7Cit9CisKK3ZvaWQg
V2ViT3ZlcmxheTo6c2V0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIGQtPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKK30KKworUGxhdGZvcm06OkZs
b2F0UG9pbnQgV2ViT3ZlcmxheTo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBk
LT5hbmNob3JQb2ludCgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldEFuY2hvclBvaW50KGNv
bnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBhbmNob3IpCit7CisgICAgZC0+c2V0QW5jaG9yUG9p
bnQoYW5jaG9yKTsKK30KKworUGxhdGZvcm06OkZsb2F0U2l6ZSBXZWJPdmVybGF5OjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZC0+c2l6ZSgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNl
dFNpemUoY29uc3QgUGxhdGZvcm06OkZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBkLT5zZXRTaXpl
KHNpemUpOworfQorCitib29sIFdlYk92ZXJsYXk6OnNpemVJc1NjYWxlSW52YXJpYW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKTsKK30KKwordm9pZCBX
ZWJPdmVybGF5OjpzZXRTaXplSXNTY2FsZUludmFyaWFudChib29sIGludmFyaWFudCkKK3sKKyAg
ICBkLT5zZXRTaXplSXNTY2FsZUludmFyaWFudChpbnZhcmlhbnQpOworfQorCitQbGF0Zm9ybTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggV2ViT3ZlcmxheTo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gV2ViQ29yZTo6VHJhbmZvcm1hdGlvbk1hdHJpeCBpbnRl
cm9wZXJhYmlsaXR5CisgICAgLy8gd2l0aCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBkLT50cmFuc2Zvcm0oKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmPih0cmFuc2Zvcm0pOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFRyYW5zZm9ybShj
b25zdCBQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBk
LT5zZXRUcmFuc2Zvcm0ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCY+KHRyYW5zZm9ybSkpOworfQorCitmbG9hdCBXZWJPdmVybGF5OjpvcGFjaXR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZC0+b3BhY2l0eSgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldE9w
YWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBkLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIFdlYk92ZXJsYXk6OmFkZEFuaW1hdGlvbihjb25zdCBXZWJBbmltYXRpb24mIGFuaW1h
dGlvbikKK3sKKyAgICBkLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uLmQtPm5hbWUsIGFuaW1hdGlv
bi5kLT5hbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbi5kLT5rZXlmcmFtZXMpOworfQorCit2b2lk
IFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBXZWJTdHJpbmcmIG5hbWUpCit7Cisg
ICAgZC0+cmVtb3ZlQW5pbWF0aW9uKFN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG5hbWUu
aW1wbCgpKSkpOworfQorCitXZWJPdmVybGF5KiBXZWJPdmVybGF5OjpwYXJlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBkLT5wYXJlbnQ7Cit9CisKK2Jvb2wgV2ViT3ZlcmxheTo6YWRkQ2hpbGQo
V2ViT3ZlcmxheSogb3ZlcmxheSkKK3sKKyAgICBpZiAob3ZlcmxheS0+ZC0+bmF0aXZlVGhyZWFk
ICE9IGQtPm5hdGl2ZVRocmVhZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3Zlcmxh
eS0+ZC0+cGFyZW50ID0gdGhpczsKKyAgICBkLT5hZGRDaGlsZChvdmVybGF5LT5kKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sK
KyAgICBkLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgZC0+cGFyZW50ID0gMDsKK30KKwordm9p
ZCBXZWJPdmVybGF5OjpzZXRDb250ZW50c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgY29uc3QgUGxhdGZvcm06OkludFNpemUmIGltYWdlU2l6ZSkKK3sKKyAgICBkLT5zZXRDb250
ZW50c1RvSW1hZ2UoZGF0YSwgaW1hZ2VTaXplKTsKK30KKwordm9pZCBXZWJPdmVybGF5OjpzZXRD
b250ZW50c1RvQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgZC0+c2V0
Q29udGVudHNUb0NvbG9yKENvbG9yKHIsIGcsIGIsIGEpKTsKK30KKwordm9pZCBXZWJPdmVybGF5
OjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgZC0+c2V0RHJhd3ND
b250ZW50KGRyYXdzQ29udGVudCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6aW52YWxpZGF0ZSgp
Cit7CisgICAgZC0+aW52YWxpZGF0ZSgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldENsaWVu
dChXZWJPdmVybGF5Q2xpZW50KiBjbGllbnQpCit7CisgICAgZC0+c2V0Q2xpZW50KGNsaWVudCk7
Cit9CisKK1dlYk92ZXJsYXlPdmVycmlkZSogV2ViT3ZlcmxheTo6b3ZlcnJpZGUoKQoreworICAg
IC8vIE11c3QgYmUgY2FsbGVkIG9uIFVJIHRocmVhZAorICAgIGlmICghUGxhdGZvcm06OnVzZXJJ
bnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVhZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBkLT5vdmVycmlkZSgpOworfQorCit2b2lkIFdlYk92
ZXJsYXk6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBkLT5yZXNldE92ZXJyaWRlcygpOworfQor
CitXZWJQYWdlUHJpdmF0ZSogV2ViT3ZlcmxheVByaXZhdGU6OnBhZ2UoKSBjb25zdAoreworICAg
IGlmIChtX3BhZ2UpCisgICAgICAgIHJldHVybiBtX3BhZ2U7CisKKyAgICBpZiAocGFyZW50KQor
ICAgICAgICByZXR1cm4gcGFyZW50LT5kLT5wYWdlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
V2ViT3ZlcmxheU92ZXJyaWRlKiBXZWJPdmVybGF5UHJpdmF0ZTo6b3ZlcnJpZGUoKQoreworICAg
IC8vIFBhZ2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIGlmIHdlIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBw
YWdlIGFuZCBhZGRlZCB0bworICAgIC8vIHNvbWUgb3RoZXIgcGFnZS4KKyAgICBpZiAobV9vdmVy
cmlkZSkKKyAgICAgICAgbV9vdmVycmlkZS0+ZC0+c2V0UGFnZShwYWdlKCkpOworICAgIHJldHVy
biBtX292ZXJyaWRlLmdldCgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlOjpkcmF3Q29u
dGVudHMoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2xpZW50LT5kcmF3T3ZlcmxheUNvbnRlbnRzKHEsIGNhbnZhcyk7Cit9CisK
K3ZvaWQgV2ViT3ZlcmxheVByaXZhdGU6OnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKQoreworICAg
IGlmIChXZWJQYWdlUHJpdmF0ZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkgeworICAgICAgICBpZiAo
V2ViUGFnZUNvbXBvc2l0b3JDbGllbnQqIGNvbXBvc2l0b3JDbGllbnQgPSBwYWdlLT5jb21wb3Np
dG9yKCktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBkb3VibGUgYW5pbWF0aW9uVGltZSA9IGNv
bXBvc2l0b3JDbGllbnQtPnJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworICAgICAgICAgICAgY29t
cG9zaXRvckNsaWVudC0+aW52YWxpZGF0ZShhbmltYXRpb25UaW1lKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhZ2UtPmJsaXRWaXNpYmxlQ29udGVudHMoKTsK
KyAgICB9Cit9CisKK1dlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZChHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2xh
eWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShjbGllbnQgPyBjbGllbnQgOiB0aGlzKSkKK3sKKyAg
ICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBtX2xheWVyLT5wbGF0Zm9ybUxheWVyKCktPmxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQoKTsKK30KKworV2ViT3ZlcmxheU92ZXJyaWRlKiBXZWJPdmVy
bGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6b3ZlcnJpZGUoKQoreworICAgIGlmICghbV9vdmVycmlk
ZSkgeworICAgICAgICBXZWJPdmVybGF5UHJpdmF0ZSogdG1wID0gbmV3IFdlYk92ZXJsYXlQcml2
YXRlQ29tcG9zaXRpbmdUaHJlYWQobV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpKTsKKyAg
ICAgICAgbV9vdmVycmlkZSA9IGFkb3B0UHRyKG5ldyBXZWJPdmVybGF5T3ZlcnJpZGUodG1wLCB0
cnVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYk92ZXJsYXlQcml2YXRlOjpvdmVycmlkZSgp
OworfQorCitGbG9hdFBvaW50IFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpwb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnBvc2l0aW9uKCk7Cit9CisKK3ZvaWQg
V2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQoreworICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKK30K
KworRmxvYXRQb2ludCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6YW5jaG9yUG9pbnQo
KSBjb25zdAoreworICAgIEZsb2F0UG9pbnQzRCBhbmNob3IgPSBtX2xheWVyLT5hbmNob3JQb2lu
dCgpOworICAgIHJldHVybiBGbG9hdFBvaW50KGFuY2hvci54KCksIGFuY2hvci55KCkpOworfQor
Cit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50JiBhbmNob3IpCit7CisgICAgbV9sYXllci0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDNEKGFuY2hvci54KCksIGFuY2hvci55KCksIDApKTsKK30KKworRmxvYXRTaXplIFdl
Yk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci0+c2l6ZSgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFk
OjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2xheWVyLT5zZXRTaXpl
KHNpemUpOworfQorCitib29sIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpzaXplSXNT
Y2FsZUludmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKS0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0
ZVdlYktpdFRocmVhZDo6c2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoYm9vbCBpbnZhcmlhbnQpCit7
CisgICAgbV9sYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRTaXplSXNTY2FsZUludmFyaWFudChp
bnZhcmlhbnQpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJPdmVybGF5UHJpdmF0ZVdl
YktpdFRocmVhZDo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+dHJh
bnNmb3JtKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1f
bGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworfQorCitmbG9hdCBXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6b3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIt
Pm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1fbGF5ZXItPnNldE9wYWNpdHkob3BhY2l0
eSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OmFkZEFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIG5hbWUsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYga2V5ZnJhbWVzKQoreworICAgIEludFNpemUgc2l6ZShtX2xheWVyLT5zaXpl
KCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBtX2xheWVyLT5hZGRB
bmltYXRpb24oa2V5ZnJhbWVzLCBzaXplLCBhbmltYXRpb24sIG5hbWUsIDApOworfQorCit2b2lk
IFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFkOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihuYW1lKTsKK30KKwor
dm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6YWRkQ2hpbGQoV2ViT3ZlcmxheVBy
aXZhdGUqIG92ZXJsYXkpCit7CisgICAgbV9sYXllci0+YWRkQ2hpbGQoc3RhdGljX2Nhc3Q8V2Vi
T3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQqPihvdmVybGF5KS0+bV9sYXllci5nZXQoKSk7Cit9
CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnJlbW92ZUZyb21QYXJlbnQo
KQoreworICAgIG1fbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKK30KKwordm9pZCBXZWJPdmVy
bGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6c2V0Q29udGVudHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGltYWdlU2l6ZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlV2ViS2l0VGhyZWFk
OjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQ6OnNldERyYXdzQ29u
dGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBtX2xheWVyLT5zZXREcmF3c0NvbnRlbnQo
ZHJhd3NDb250ZW50KTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6
Y2xlYXIoKQoreworICAgIHNldFNpemUoRmxvYXRTaXplKDAsIDApKTsKK30KKwordm9pZCBXZWJP
dmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9sYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJl
YWQ6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBpZiAoUGxhdGZvcm06OndlYktpdFRocmVhZE1l
c3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpCisgICAgICAgIG1fbGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKS0+Y2xlYXJPdmVycmlkZSgpOworICAgIGVsc2UgaWYgKFBsYXRmb3JtOjp1c2Vy
SW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSkgeworICAg
ICAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmNsZWFyT3ZlcnJpZGUoKTsKKyAgICAgICAg
c2NoZWR1bGVDb21wb3NpdGluZ1J1bigpOworICAgIH0KK30KKwordm9pZCBXZWJPdmVybGF5UHJp
dmF0ZVdlYktpdFRocmVhZDo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKQoreworICAgIGlmIChXZWJQYWdlUHJpdmF0ZSogcGFnZSA9IHRoaXMtPnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+c2NoZWR1bGVSb290TGF5ZXJDb21taXQoKTsKK30KKwordm9pZCBX
ZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCit7Cisg
ICAgZHJhd0NvbnRlbnRzKGMucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKK30KKworV2Vi
T3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OldlYk92ZXJsYXlMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50KCkKKyAgICA6IG1fZHJhd3NDb250ZW50KGZhbHNlKQorICAgICwg
bV9sYXllckNvbXBvc2l0aW5nVGhyZWFkKDApCisgICAgLCBtX2NsaWVudCgwKQoreworfQorCit2
b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXREcmF3c0NvbnRl
bnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgbV9kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRl
bnQ7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6Omlu
dmFsaWRhdGUoKQoreworICAgIG1fdGV4dHVyZS5jbGVhcigpOworfQorCit2b2lkIFdlYk92ZXJs
YXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50cyhjb25zdCBTa0JpdG1h
cCYgY29udGVudHMpCit7CisgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOworICAgIG1fY29sb3Ig
PSBDb2xvcigpOworICAgIG1fdGV4dHVyZS5jbGVhcigpOworfQorCit2b2lkIFdlYk92ZXJsYXlM
YXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQoreworICAgIG1fY29udGVudHMgPSBTa0JpdG1hcCgpOworICAgIG1fY29sb3Ig
PSBjb2xvcjsKKyAgICBtX3RleHR1cmUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3ll
ZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKK3sKKyAgICBkZWxldGUgdGhpczsK
K30KKwordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6bGF5ZXJW
aXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQor
eworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojp1cGxv
YWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQoreworICAgIGlmICht
X2NvbnRlbnRzLmlzTnVsbCgpICYmICFtX2NvbG9yLmlzVmFsaWQoKSAmJiAhbV9kcmF3c0NvbnRl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3RleHR1cmUgJiYgbV90ZXh0dXJlLT50
ZXh0dXJlSWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29sb3IuaXNWYWxpZCgp
KSB7CisgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCkt
PnRleHR1cmVGb3JDb2xvcihtX2NvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX2RyYXdzQ29udGVudCkgeworICAgICAgICBpZiAoIW1fY2xpZW50IHx8ICFtX293bmVy
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2NvbnRlbnRzLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBtX2NvbnRlbnRzLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+Ym91bmRzKCkud2lkdGgoKSwgbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICBt
X2NvbnRlbnRzLmFsbG9jUGl4ZWxzKCk7CisgICAgICAgIH0KKworICAgICAgICBTa0RldmljZSBk
ZXZpY2UobV9jb250ZW50cyk7CisgICAgICAgIFNrQ2FudmFzIGNhbnZhcygmZGV2aWNlKTsKKyAg
ICAgICAgbV9jbGllbnQtPmRyYXdPdmVybGF5Q29udGVudHMobV9vd25lciwgJmNhbnZhcyk7Cisg
ICAgICAgIGNhbnZhcy5mbHVzaCgpOworICAgIH0KKworICAgIG1fdGV4dHVyZSA9IFRleHR1cmU6
OmNyZWF0ZSgpOworICAgIG1fdGV4dHVyZS0+cHJvdGVjdChJbnRTaXplKG1fY29udGVudHMud2lk
dGgoKSwgbV9jb250ZW50cy5oZWlnaHQoKSkpOworICAgIEludFJlY3QgYml0bWFwUmVjdCgwLCAw
LCBtX2NvbnRlbnRzLndpZHRoKCksIG1fY29udGVudHMuaGVpZ2h0KCkpOworICAgIG1fdGV4dHVy
ZS0+dXBkYXRlQ29udGVudHMobV9jb250ZW50cywgYml0bWFwUmVjdCwgYml0bWFwUmVjdCwgZmFs
c2UpOworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojpk
cmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSAvKnNjYWxl
Ki8sIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbikKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZSB8fCAhbV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUtPnRleHR1cmVJ
ZCgpKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkpOworICAg
IGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAsICAwLCAxLCAgMSwgMSwgIDEsIDAgfTsK
KyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQs
IEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpOworfQorCit2b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50OjpkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKK3sKKyAgICBtX3Rl
eHR1cmUuY2xlYXIoKTsKK30KKworV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZChQYXNzUmVmUHRyPExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ+IGxheWVyQ29tcG9zaXRpbmdUaHJlYWQpCisgICAgOiBtX2xheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQoMCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBs
YXllckNvbXBvc2l0aW5nVGhyZWFkOworfQorCitXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5n
VGhyZWFkOjpXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKCkKKyAgICA6IG1fbGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudChuZXcgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkID0gTGF5ZXJDb21w
b3NpdGluZ1RocmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6Q3VzdG9tTGF5ZXIsIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudCk7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
LT5zZXRMYXllcihtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkpOworfQorCitXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjp+V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGlu
Z1RocmVhZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5zZXRDbGll
bnQoMCwgMCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6
c2V0Q2xpZW50KFdlYk92ZXJsYXlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBXZWJPdmVybGF5UHJp
dmF0ZTo6c2V0Q2xpZW50KGNsaWVudCk7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50LT5zZXRDbGllbnQocSwgY2xpZW50KTsKK30KKworV2ViT3ZlcmxheU92ZXJyaWRlKiBXZWJP
dmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpvdmVycmlkZSgpCit7CisgICAgaWYgKCFt
X292ZXJyaWRlKQorICAgICAgICBtX292ZXJyaWRlID0gYWRvcHRQdHIobmV3IFdlYk92ZXJsYXlP
dmVycmlkZSh0aGlzLCBmYWxzZSkpOworCisgICAgcmV0dXJuIFdlYk92ZXJsYXlQcml2YXRlOjpv
dmVycmlkZSgpOworfQorCitGbG9hdFBvaW50IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdU
aHJlYWQ6OnBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0aW5n
VGhyZWFkLT5wb3NpdGlvbigpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRp
bmdUaHJlYWQ6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAg
IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIHNj
aGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKK30KKworRmxvYXRQb2ludCBXZWJPdmVybGF5UHJpdmF0
ZUNvbXBvc2l0aW5nVGhyZWFkOjphbmNob3JQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+YW5jaG9yUG9pbnQoKTsKK30KKwordm9pZCBXZWJPdmVy
bGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50JiBhbmNob3IpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRBbmNob3JQ
b2ludChhbmNob3IpOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKK30KKworRmxvYXRT
aXplIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNpemUoKSBjb25zdAorewor
ICAgIEludFNpemUgYm91bmRzID0gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5ib3VuZHMoKTsK
KyAgICByZXR1cm4gRmxvYXRTaXplKGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwor
fQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0
Qm91bmRzKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgc2NoZWR1
bGVDb21wb3NpdGluZ1J1bigpOworfQorCitib29sIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRp
bmdUaHJlYWQ6OnNpemVJc1NjYWxlSW52YXJpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkLT5zaXplSXNTY2FsZUludmFyaWFudCgpOworfQorCit2b2lk
IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6OnNldFNpemVJc1NjYWxlSW52YXJp
YW50KGJvb2wgaW52YXJpYW50KQoreworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0
U2l6ZUlzU2NhbGVJbnZhcmlhbnQoaW52YXJpYW50KTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5n
UnVuKCk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9z
aXRpbmdUaHJlYWQ6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZC0+dHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheVByaXZhdGVD
b21wb3NpdGluZ1RocmVhZDo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRUcmFuc2Zv
cm0odHJhbnNmb3JtKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK2Zsb2F0
IFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRpbmdUaHJlYWQ6Om9wYWNpdHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPm9wYWNpdHkoKTsKK30KKwordm9p
ZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5zZXRPcGFjaXR5KG9wYWNp
dHkpOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKK30KKwordm9pZCBXZWJPdmVybGF5
UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjphZGRBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1l
LCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1l
cykKK3sKKyAgICBJbnRTaXplIGJveFNpemUgPSBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPmJv
dW5kcygpOworICAgIFJlZlB0cjxMYXllckFuaW1hdGlvbj4gbGF5ZXJBbmltYXRpb24gPSBMYXll
ckFuaW1hdGlvbjo6Y3JlYXRlKGtleWZyYW1lcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBuYW1lLCAw
LjApOworCisgICAgLy8gRklYTUU6IFVuZm9ydHVuYXRlbHkgV2ViUGFnZUNvbXBvc2l0b3JDbGll
bnQ6OnJlcXVlc3RBbmltYXRpb25GcmFtZSB1c2VzIGEgZGlmZmVyZW50IHRpbWUgY29vcmRpbmF0
ZSBzeXN0ZW0KKyAgICAvLyB0aGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMsIHNvIHdlIGNhbid0
IHVzZSB0aGUgdGltZSByZXR1cm5lZCBieSBXZWJQYWdlQ29tcG9zaXRvckNsaWVudDo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkKKyAgICAvLyBmb3Igc3RhcnR0aW1lLgorICAgIGxheWVyQW5pbWF0
aW9uLT5zZXRTdGFydFRpbWUoY3VycmVudFRpbWUoKSk7CisKKyAgICBtX2xheWVyQ29tcG9zaXRp
bmdUaHJlYWQtPmFkZEFuaW1hdGlvbihsYXllckFuaW1hdGlvbi5nZXQoKSk7CisgICAgc2NoZWR1
bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRp
bmdUaHJlYWQ6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9s
YXllckNvbXBvc2l0aW5nVGhyZWFkLT5yZW1vdmVBbmltYXRpb24obmFtZSk7CisgICAgc2NoZWR1
bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9zaXRp
bmdUaHJlYWQ6OmFkZENoaWxkKFdlYk92ZXJsYXlQcml2YXRlKiBvdmVybGF5KQoreworICAgIG1f
bGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+YWRkU3VibGF5ZXIob3ZlcmxheS0+bGF5ZXJDb21wb3Np
dGluZ1RocmVhZCgpKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9CisKK3ZvaWQg
V2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZDo6cmVtb3ZlRnJvbVBhcmVudCgpCit7
CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c3VwZXJsYXllcigpID09IHBhZ2Uo
KS0+bV9jb21wb3NpdG9yLT5jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcigpKQorICAgICAg
ICBwYWdlKCktPm1fY29tcG9zaXRvci0+cmVtb3ZlT3ZlcmxheShtX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWQuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFk
LT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsK
K30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXRDb250ZW50
c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplKQoreworICAgIGNvbnN0IFNrQml0bWFwJiBvbGRDb250ZW50cyA9IG1fbGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudC0+Y29udGVudHMoKTsKKyAgICBpZiAoIW9sZENvbnRlbnRzLmlzTnVs
bCgpKSB7CisgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhvbGRDb250ZW50cyk7CisgICAg
ICAgIGlmIChkYXRhID09IG9sZENvbnRlbnRzLmdldFBpeGVscygpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFNrQml0bWFwIGNvbnRlbnRzOworICAgIGNvbnRlbnRzLnNldENv
bmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFn
ZVNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRlbnRzLnNldFBpeGVscyhjb25zdF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKSk7CisKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQt
PnNldENvbnRlbnRzKGNvbnRlbnRzKTsKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNl
dE5lZWRzVGV4dHVyZSh0cnVlKTsKK30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0
aW5nVGhyZWFkOjpzZXRDb250ZW50c1RvQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAg
IG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC0+c2V0Q29udGVudHNUb0NvbG9yKGNvbG9y
KTsKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQtPnNldE5lZWRzVGV4dHVyZSh0cnVlKTsK
K30KKwordm9pZCBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpzZXREcmF3c0Nv
bnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKKyAgICBtX2xheWVyQ29tcG9z
aXRpbmdUaHJlYWQtPnNldE5lZWRzVGV4dHVyZSh0cnVlKTsKK30KKwordm9pZCBXZWJPdmVybGF5
UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkOjpjbGVhcigpCit7CisgICAgbV9sYXllckNvbXBvc2l0
aW5nVGhyZWFkLT5kZWxldGVUZXh0dXJlcygpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRl
Q29tcG9zaXRpbmdUaHJlYWQ6OmludmFsaWRhdGUoKQoreworICAgIGlmICghbV9sYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50LT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LT5pbnZhbGlkYXRlKCk7CisgICAgc2No
ZWR1bGVDb21wb3NpdGluZ1J1bigpOworfQorCit2b2lkIFdlYk92ZXJsYXlQcml2YXRlQ29tcG9z
aXRpbmdUaHJlYWQ6OnJlc2V0T3ZlcnJpZGVzKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWQtPmNsZWFyT3ZlcnJpZGUoKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7Cit9
CisKK30KK30KKyNlbHNlIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK25hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJPdmVybGF5OjpXZWJPdmVy
bGF5KCkKK3sKK30KKworV2ViT3ZlcmxheTo6fldlYk92ZXJsYXkoKQoreworfQorCitQbGF0Zm9y
bTo6RmxvYXRQb2ludCBXZWJPdmVybGF5Ojpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFBsYXRmb3JtOjpGbG9hdFBvaW50KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0UG9zaXRp
b24oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmKQoreworfQorCitQbGF0Zm9ybTo6RmxvYXRQ
b2ludCBXZWJPdmVybGF5OjphbmNob3JQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRm
b3JtOjpGbG9hdFBvaW50KCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0QW5jaG9yUG9pbnQo
Y29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmKQoreworfQorCitQbGF0Zm9ybTo6RmxvYXRTaXpl
IFdlYk92ZXJsYXk6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6RmxvYXRT
aXplKCk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheTo6c2V0U2l6ZShjb25zdCBQbGF0Zm9ybTo6Rmxv
YXRTaXplJikKK3sKK30KKworUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYk92ZXJs
YXk6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpOworfQorCit2b2lkIFdlYk92ZXJsYXk6OnNldFRyYW5zZm9ybShjb25zdCBQ
bGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKQoreworfQorCitmbG9hdCBXZWJPdmVybGF5
OjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMS4wZjsKK30KKwordm9pZCBXZWJPdmVy
bGF5OjpzZXRPcGFjaXR5KGZsb2F0KQoreworfQorCitXZWJPdmVybGF5KiBXZWJPdmVybGF5Ojpw
YXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitib29sIFdlYk92ZXJsYXk6OmFk
ZENoaWxkKFdlYk92ZXJsYXkqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJP
dmVybGF5OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKK30KKwordm9pZCBXZWJPdmVybGF5OjphZGRB
bmltYXRpb24oV2ViQW5pbWF0aW9uKikKK3sKK30KKwordm9pZCBXZWJPdmVybGF5OjpyZW1vdmVB
bmltYXRpb24oY29uc3QgV2ViU3RyaW5nJikKK3sKK30KKworfQorfQorI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViT3ZlcmxheS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJP
dmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlODBjNDIzMDliYTVhYzkwY2YxYjViN2U5OWMxMGVkODJj
OTk3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
T3ZlcmxheS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpZm5kZWYgV2ViT3ZlcmxheV9oCisjZGVmaW5lIFdlYk92ZXJsYXlfaAor
CisjaW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgorI2luY2x1ZGUgIldlYk92ZXJsYXlPdmVy
cmlkZS5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50OworfQorCituYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQW5pbWF0
aW9uOworY2xhc3MgV2ViT3ZlcmxheUNsaWVudDsKK2NsYXNzIFdlYk92ZXJsYXlPdmVycmlkZTsK
K2NsYXNzIFdlYk92ZXJsYXlQcml2YXRlOworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlN0cmlu
ZzsKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIG92ZXJsYXkgdGhhdCBpcyByZW5kZXJlZCBzdXBl
cmltcG9zZWQgb24gYSB3ZWIgcGFnZS4KKyAqCisgKiBUaGUgV2ViT3ZlcmxheSBpcyBub3QgdGhy
ZWFkIHNhZmUsIGJ1dCBpdCBpcyByZWVudHJhbnQgd2hlbiB1c2VkIG9uIGVpdGhlcgorICogdGhl
IFdlYktpdCBvciB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgb3Zlcmxh
eXMgY2FuIGJlCisgKiBvbiBlaXRoZXIgb2YgdGhlc2UgdGhyZWFkcywgYnV0IGVhY2ggaW5zdGFu
Y2UgbXVzdCBvbmx5IGJlIHVzZWQgb24gdGhlCisgKiB0aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0
ZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGUgb3ZlcnJpZGUgbWVjaGFuaXNtLgorICoKKyAq
IFRoZSBXZWJPdmVybGF5T3ZlcnJpZGUgb2JqZWN0IHJldHVybmVkIGJ5IFdlYk92ZXJsYXk6Om92
ZXJyaWRlKCkgY2FuIGJlIHVzZWQKKyAqIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZXMgb2Ygc3BlY2lm
aWMgcHJvcGVydGllcyBmcm9tIHRoZSBVSSB0aHJlYWQuCisgKgorICogVGhleSBoYXZlIHRoZSBm
b2xsb3dpbmcgc2VtYW50aWNzOiBJZiB0aGV5IGFyZSBjYWxsZWQgZm9yIGEgc3BlY2lmaWMgb3Zl
cmxheQorICogb24gdGhlIFVJIHRocmVhZCwgdGhlIHZhbHVlIHNldCB3aWxsIG92ZXJyaWRlIGFu
eSB2YWx1ZSBzZXQgb24gdGhlIFdLIHRocmVhZAorICogdW50aWwgeW91IGNhbGwgcmVzZXRPdmVy
cmlkZXMoKS4gcmVzZXRPdmVycmlkZXMoKSBpcyB0aHJlYWQgc2FmZS4KKyAqLworY2xhc3MgQkxB
Q0tCRVJSWV9FWFBPUlQgV2ViT3ZlcmxheSB7CitwdWJsaWM6CisgICAgV2ViT3ZlcmxheSgpOwor
ICAgIFdlYk92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZpcnR1
YWwgfldlYk92ZXJsYXkoKTsKKworICAgIC8vIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgKHRo
ZSBsb2NhdGlvbiBvZiBpdHMgdG9wLWxlZnQgY29ybmVyIGluIGl0cyBwYXJlbnQpLgorICAgIFBs
YXRmb3JtOjpGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOworCisgICAgLy8gQW5jaG9yIHBvaW50OiAo
MCwgMCkgaXMgdG9wIGxlZnQsICgxLCAxKSBpcyBib3R0b20gcmlnaHQuIFRoZSBhbmNob3IgcG9p
bnQKKyAgICAvLyBhZmZlY3RzIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybXMuCisgICAgUGxh
dGZvcm06OkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50Jik7CisKKyAgICAvLyBUaGUgc2l6ZSBv
ZiB0aGUgbGF5ZXIuCisgICAgUGxhdGZvcm06OkZsb2F0U2l6ZSBzaXplKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTaXplKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFNpemUmKTsKKworICAgIC8vIFdoZXRo
ZXIgdGhlIGxheWVyIGlzIHNjYWxlZCB0b2dldGhlciB3aXRoIHRoZSB3ZWIgcGFnZS4KKyAgICBi
b29sIHNpemVJc1NjYWxlSW52YXJpYW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplSXNTY2Fs
ZUludmFyaWFudChib29sKTsKKworICAgIC8vIFRyYW5zZm9ybSBjYW4gYmUgdXNlZCB0byByb3Rh
dGUgdGhlIGxheWVyLCBhbW9uZyBvdGhlciB0aGluZ3MuCisgICAgUGxhdGZvcm06OlRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFBsYXRmb3JtOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgLy8gT3BhY2l0eS4g
Q2FuIGFsc28gYmUgdXNlZCB0byB0ZW1wb3JhcmlseSBoaWRlIGEgbGF5ZXIuCisgICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisKKyAgICAvLyBB
ZGRzL3JlbW92ZXMgYW4gYW5pbWF0aW9uCisgICAgLy8gTm90ZSB0aGF0IFdlYkFuaW1hdGlvbiBh
bmQgV2ViU3RyaW5nIGFyZSBub3QgdGhyZWFkIHNhZmUgYW5kIGhhdmUgdG8gYmUKKyAgICAvLyBj
cmVhdGVkIG9uIHRoZSB0aHJlYWQgd2hlcmUgdGhleSdsbCBiZSB1c2VkLgorICAgIHZvaWQgYWRk
QW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7CisKKyAgICBXZWJPdmVybGF5KiBwYXJlbnQoKSBjb25z
dDsKKyAgICBib29sIGFkZENoaWxkKFdlYk92ZXJsYXkqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21Q
YXJlbnQoKTsKKworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBpbWFnZVNpemUpOworICAgIHZvaWQg
c2V0Q29udGVudHNUb0NvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKKyAgICB2b2lk
IHNldERyYXdzQ29udGVudChib29sKTsKKworICAgIC8vIFdpbGwgcmVzdWx0IGluIGEgZnV0dXJl
IGNhbGwgdG8gV2ViT3ZlcmxheUNsaWVudDo6ZHJhd0NvbnRlbnRzLCBpZiB0aGUgbGF5ZXIgZHJh
d3MgY3VzdG9tIGNvbnRlbnRzLgorICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgLy8gVGhl
IGNsaWVudCBjYW4gYmUgdXNlZCB0byBkcmF3IGxheWVyIGNvbnRlbnRzIHVzaW5nIFNraWEuCisg
ICAgdm9pZCBzZXRDbGllbnQoV2ViT3ZlcmxheUNsaWVudCopOworCisgICAgLy8gTXVzdCBiZSBj
YWxsZWQgb24gVUkgdGhyZWFkLgorICAgIFdlYk92ZXJsYXlPdmVycmlkZSogb3ZlcnJpZGUoKTsK
KworICAgIC8qKgorICAgICAqIFRocmVhZCBzYWZlLiBOZXh0IHRpbWUgdGhlIGF0dHJpYnV0ZXMg
YXJlIGNoYW5nZWQgb24gdGhlIFdLIHRocmVhZCwgbWFrZQorICAgICAqIHRob3NlIHZhbHVlcyBv
dmVycmlkZSBhbnkgc2V0IG9uIHRoZSBVSSB0aHJlYWQuCisgICAgICovCisgICAgdm9pZCByZXNl
dE92ZXJyaWRlcygpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJQYWdlOworICAg
IGZyaWVuZCBjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsKKworICAgIC8vIERpc2FibGUgY29weSBj
b25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9LgorICAgIFdlYk92ZXJsYXkoY29uc3QgV2ViT3Zlcmxh
eSYpOworICAgIFdlYk92ZXJsYXkmIG9wZXJhdG9yPShjb25zdCBXZWJPdmVybGF5Jik7CisKKyAg
ICBXZWJPdmVybGF5UHJpdmF0ZSogZDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFdlYk92ZXJs
YXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZmViMjYzY2QwNDVjZDgyMWQ3NTkxYmVlYTY2OTNlNzk4NmFiNzdiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5
Q2xpZW50LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaWZuZGVmIFdlYk92ZXJsYXlDbGllbnRfaAorI2RlZmluZSBXZWJPdmVybGF5
Q2xpZW50X2gKKworI2luY2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKKworY2xhc3MgU2tDYW52
YXM7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJPdmVybGF5OworCisvKioKKyAqLworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViT3Zl
cmxheUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViT3ZlcmxheUNsaWVudCgpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGRyYXdPdmVybGF5Q29udGVudHMoV2ViT3ZlcmxheSosIFNr
Q2FudmFzKikgPSAwOworfTsKKworfQorfQorCisjZW5kaWYgLy8gV2ViT3ZlcmxheUNsaWVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVy
cmlkZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlk
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWU4MTNkNTljZjNhMmIwN2U3MjI4YjEyYzM0ODE4MDZiZDMzZDE0
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zl
cmxheU92ZXJyaWRlLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJP
dmVybGF5T3ZlcnJpZGUuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
bmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJBbmltYXRpb25fcC5oIgorI2lu
Y2x1ZGUgIldlYk92ZXJsYXlfcC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgorCituYW1lc3BhY2UgQmxhY2tC
ZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K1dlYk92ZXJsYXlPdmVycmlkZTo6V2ViT3ZlcmxheU92ZXJyaWRlKFdlYk92ZXJsYXlQcml2YXRl
KiBkLCBib29sIG93bmVkKQorICAgIDogZChkKQorICAgICwgbV9vd25lZChvd25lZCkKK3sKK30K
KworV2ViT3ZlcmxheU92ZXJyaWRlOjp+V2ViT3ZlcmxheU92ZXJyaWRlKCkKK3sKKyAgICBpZiAo
bV9vd25lZCkKKyAgICAgICAgZGVsZXRlIGQ7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRl
OjpzZXRQb3NpdGlvbihjb25zdCBQbGF0Zm9ybTo6RmxvYXRQb2ludCYgcG9zaXRpb24pCit7Cisg
ICAgZC0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVycmlk
ZTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmIGFuY2hvcikKK3sK
KyAgICBkLT5zZXRBbmNob3JQb2ludChhbmNob3IpOworfQorCit2b2lkIFdlYk92ZXJsYXlPdmVy
cmlkZTo6c2V0U2l6ZShjb25zdCBQbGF0Zm9ybTo6RmxvYXRTaXplJiBzaXplKQoreworICAgIGQt
PnNldFNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zv
cm0oY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7Cisg
ICAgZC0+c2V0VHJhbnNmb3JtKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmPih0cmFuc2Zvcm0pKTsKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldE9w
YWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBkLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6YWRkQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlv
biYgYW5pbWF0aW9uKQoreworICAgIGQtPmFkZEFuaW1hdGlvbihhbmltYXRpb24uZC0+bmFtZSwg
YW5pbWF0aW9uLmQtPmFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9uLmQtPmtleWZyYW1lcyk7Cit9
CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3QgV2ViU3Ry
aW5nJiBuYW1lKQoreworICAgIGQtPnJlbW92ZUFuaW1hdGlvbihTdHJpbmcoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPihuYW1lLmltcGwoKSkpKTsKK30KKworfQorfQorI2Vsc2UgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYk92ZXJsYXlPdmVycmlkZTo6V2ViT3ZlcmxheU92ZXJyaWRlKFdlYk92ZXJs
YXlQcml2YXRlKikKK3sKK30KKworV2ViT3ZlcmxheU92ZXJyaWRlOjp+V2ViT3ZlcmxheU92ZXJy
aWRlKCkKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFBvc2l0aW9uKGNvbnN0
IFBsYXRmb3JtOjpGbG9hdFBvaW50JikKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6
OnNldEFuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JikKK3sKK30KKwordm9p
ZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnNldFNpemUoY29uc3QgUGxhdGZvcm06OkZsb2F0U2l6ZSYp
Cit7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpzZXRUcmFuc2Zvcm0oY29uc3QgUGxh
dGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JikKK3sKK30KKwordm9pZCBXZWJPdmVybGF5T3Zl
cnJpZGU6OnNldE9wYWNpdHkoZmxvYXQpCit7Cit9CisKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRl
OjphZGRBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uJikKK3sKK30KKwordm9pZCBXZWJPdmVy
bGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBXZWJTdHJpbmcmKQoreworfQorCit9
Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuaCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDljOWEzNDk2NDdlY2Q5NWNkNTJjNDQ5ZmUxMDA0YzQ4OGYyZDUzOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIFdlYk92ZXJsYXlPdmVycmlkZV9oCisjZGVmaW5lIFdlYk92ZXJsYXlPdmVycmlkZV9o
CisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb247CitjbGFzcyBXZWJPdmVybGF5UHJpdmF0
ZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLyoqCisgKiBDb21wb3NpdGluZyB0aHJlYWQgb25seQor
ICoKKyAqIE5vdGUgdGhhdCB0aGUgV2ViQW5pbWF0aW9uIGFuZCBXZWJTdHJpbmcgY2xhc3NlcyBh
cmUgbm90IHRocmVhZCBzYWZlLCBidXQKKyAqIHJlZW50cmFudCwgYW5kIGhhdmUgdG8gYmUgY3Jl
YXRlZCBvbiB0aGUgdGhyZWFkIHdoZXJlIHRoZXknbGwgYmUgdXNlZC4KKyAqLworY2xhc3MgQkxB
Q0tCRVJSWV9FWFBPUlQgV2ViT3ZlcmxheU92ZXJyaWRlIHsKK3B1YmxpYzoKKyAgICAvLyBEb24n
dCB1c2UgdGhpcywgY2FsbCBXZWJPdmVybGF5OjpvdmVycmlkZSgpIGluc3RlYWQKKyAgICBXZWJP
dmVybGF5T3ZlcnJpZGUoV2ViT3ZlcmxheVByaXZhdGUqLCBib29sIG93bmVkKTsKKyAgICB+V2Vi
T3ZlcmxheU92ZXJyaWRlKCk7CisKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFBsYXRmb3Jt
OjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBQbGF0Zm9ybTo6
RmxvYXRQb2ludCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBQbGF0Zm9ybTo6RmxvYXRTaXpl
Jik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKworICAgIHZvaWQgYWRkQW5p
bWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNv
bnN0IFdlYlN0cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYk92
ZXJsYXlQcml2YXRlOworCisgICAgLy8gRGlzYWJsZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVy
YXRvcj0KKyAgICBXZWJPdmVybGF5T3ZlcnJpZGUoY29uc3QgV2ViT3ZlcmxheU92ZXJyaWRlJik7
CisgICAgV2ViT3ZlcmxheU92ZXJyaWRlJiBvcGVyYXRvcj0oY29uc3QgV2ViT3ZlcmxheU92ZXJy
aWRlJik7CisKKyAgICBXZWJPdmVybGF5UHJpdmF0ZSogZDsKKyAgICBib29sIG1fb3duZWQ7Cit9
OworCit9Cit9CisKKyNlbmRpZiAvLyBXZWJPdmVybGF5T3ZlcnJpZGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5X3AuaCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM2YmU3YzhhYThi
ZDI4MmNhZDU0ZDhhNjIyOGQ0Mzc1N2E1NDY2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9wLmgKQEAgLTAsMCArMSwyNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJPdmVybGF5
X3BfaAorI2RlZmluZSBXZWJPdmVybGF5X3BfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViT3Zl
cmxheU92ZXJyaWRlLmgiCisKKyNpbmNsdWRlIDxTa0JpdG1hcC5oPgorI2luY2x1ZGUgPHB0aHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CitjbGFzcyBTa0NhbnZhczsKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIEtleWZyYW1lVmFs
dWVMaXN0OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViT3ZlcmxheTsKK2NsYXNzIFdlYk92ZXJsYXlDbGllbnQ7CitjbGFzcyBXZWJQ
YWdlUHJpdmF0ZTsKKworY2xhc3MgV2ViT3ZlcmxheVByaXZhdGUgeworcHVibGljOgorICAgIFdl
Yk92ZXJsYXlQcml2YXRlKCkKKyAgICAgICAgOiBxKDApCisgICAgICAgICwgcGFyZW50KDApCisg
ICAgICAgICwgbV9wYWdlKDApCisgICAgeworICAgICAgICBuYXRpdmVUaHJlYWQgPSBwdGhyZWFk
X3NlbGYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJPdmVybGF5UHJpdmF0ZSgpCisgICAg
eworICAgICAgICBBU1NFUlQocHRocmVhZF9zZWxmKCkgPT0gZC0+bmF0aXZlVGhyZWFkKTsKKyAg
ICB9CisKKyAgICBXZWJQYWdlUHJpdmF0ZSogcGFnZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UGFn
ZShXZWJQYWdlUHJpdmF0ZSogcGFnZSkgeyBtX3BhZ2UgPSBwYWdlOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2xpZW50KFdlYk92ZXJsYXlDbGllbnQqIGMpIHsgY2xpZW50ID0gYzsgfQorCisg
ICAgdmlydHVhbCBXZWJPdmVybGF5T3ZlcnJpZGUqIG92ZXJyaWRlKCk7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9IDA7CisKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9
IDA7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBzaXplSXNTY2FsZUludmFyaWFudCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUlzU2NhbGVJbnZhcmlhbnQoYm9vbCkgPSAwOworCisgICAg
dmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpID0gMDsKKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGFkZEFuaW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6
QW5pbWF0aW9uKiwgY29uc3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChXZWJPdmVybGF5UHJpdmF0ZSopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvSW1hZ2UoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgaW1hZ2VTaXplKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9Db2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RHJhd3NDb250ZW50KGJvb2wpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpID0gMDsKKyAgICB2b2lkIGRyYXdDb250ZW50
cyhTa0NhbnZhcyopOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0T3ZlcnJpZGVzKCkgPSAwOwor
CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7CisKKyAgICAvLyBOZXZlciAwCisg
ICAgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKTsgfQorCisg
ICAgLy8gQ2FuIGJlIDAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBXZWJPdmVybGF5KiBxOworICAg
IFdlYk92ZXJsYXlDbGllbnQqIGNsaWVudDsKKyAgICBXZWJPdmVybGF5KiBwYXJlbnQ7CisgICAg
cHRocmVhZF90IG5hdGl2ZVRocmVhZDsKKworcHJvdGVjdGVkOgorICAgIFJlZlB0cjxXZWJDb3Jl
OjpMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CisgICAg
T3duUHRyPFdlYk92ZXJsYXlPdmVycmlkZT4gbV9vdmVycmlkZTsKKyAgICBXZWJQYWdlUHJpdmF0
ZSogbV9wYWdlOworfTsKKworY2xhc3MgV2ViT3ZlcmxheVByaXZhdGVXZWJLaXRUaHJlYWQgOiBw
dWJsaWMgV2ViT3ZlcmxheVByaXZhdGUsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBXZWJPdmVybGF5UHJpdmF0ZVdlYktpdFRocmVhZChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50KiA9IDApOworCisgICAgdmlydHVhbCBXZWJPdmVybGF5T3Zl
cnJpZGUqIG92ZXJyaWRlKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9z
aXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFBvaW50IGFuY2hv
clBvaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRTaXplIHNp
emUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaXplSXNTY2FsZUludmFyaWFudCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSXNTY2FsZUludmFyaWFudChib29sKTsKKworICAg
IHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOworCisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIGFkZEFu
aW1hdGlvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6QW5pbWF0aW9uKiwgY29u
c3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
QW5pbWF0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZChXZWJPdmVybGF5UHJpdmF0ZSopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGltYWdlU2l6ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Db2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmly
dHVhbCB2b2lkIHJlc2V0T3ZlcnJpZGVzKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9
CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1l
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGlu
Q2xpcCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29udGVudHNWaXNpYmxlKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50
UmVjdCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBtX2xheWVyOworfTsKKworLy8gVGhlIExheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQncyBsaWZlIGN5Y2xlIGlzIHRpZWQgdG8gdGhlIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQsCisvLyBzbyBpdCBuZWVkcyB0byBiZSBhIHNlcGFyYXRlIG9iamVjdCBmcm9tIHRo
ZSBXZWJPdmVybGF5UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkLgorY2xhc3MgV2ViT3ZlcmxheUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudCB7CitwdWJsaWM6CisgICAgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5XZWJPdmVybGF5TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudCgpIHsgfQorCisgICAgdm9pZCBzZXRMYXllcihXZWJDb3JlOjpMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiBsYXllcikgeyBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQgPSBsYXll
cjsgfQorICAgIHZvaWQgc2V0Q2xpZW50KFdlYk92ZXJsYXkqIG93bmVyLCBXZWJPdmVybGF5Q2xp
ZW50KiBjbGllbnQpIHsgbV9vd25lciA9IG93bmVyOyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisg
ICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQor
ICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwor
CisgICAgY29uc3QgU2tCaXRtYXAmIGNvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
czsgfQorICAgIHZvaWQgc2V0Q29udGVudHMoY29uc3QgU2tCaXRtYXAmKTsKKworICAgIHZvaWQg
c2V0Q29udGVudHNUb0NvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisKKyAgICAvLyBMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGxheWVyQ29tcG9zaXRp
bmdUaHJlYWREZXN0cm95ZWQoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOworICAg
IHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKFdlYkNvcmU6OkxheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpOworICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0
dXJlc0lmTmVlZGVkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmVzKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBk
b3VibGUgc2NhbGUsIGludCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZT4gbV90
ZXh0dXJlOworICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CisgICAgU2tCaXRtYXAgbV9jb250ZW50
czsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2NvbG9yOworICAgIFdlYkNvcmU6OkxheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZDsKKyAgICBXZWJPdmVybGF5KiBt
X293bmVyOworICAgIFdlYk92ZXJsYXlDbGllbnQqIG1fY2xpZW50OworfTsKKworY2xhc3MgV2Vi
T3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZCA6IHB1YmxpYyBXZWJPdmVybGF5UHJpdmF0
ZSB7CitwdWJsaWM6CisgICAgV2ViT3ZlcmxheVByaXZhdGVDb21wb3NpdGluZ1RocmVhZChQYXNz
UmVmUHRyPFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ+KTsKKyAgICBXZWJPdmVybGF5
UHJpdmF0ZUNvbXBvc2l0aW5nVGhyZWFkKCk7CisgICAgfldlYk92ZXJsYXlQcml2YXRlQ29tcG9z
aXRpbmdUaHJlYWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoV2ViT3ZlcmxheUNs
aWVudCopOworICAgIHZpcnR1YWwgV2ViT3ZlcmxheU92ZXJyaWRlKiBvdmVycmlkZSgpOworCisg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKworICAg
IHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisKKyAgICB2aXJ0dWFs
IGJvb2wgc2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZUlzU2NhbGVJbnZhcmlhbnQoYm9vbCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRU
cmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKworICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb24oY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFdlYkNvcmU6OkFuaW1hdGlvbiosIGNvbnN0IFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoV2ViT3ZlcmxheVByaXZh
dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RHJhd3NDb250ZW50KGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCByZXNldE92ZXJyaWRl
cygpOworCitwcml2YXRlOgorICAgIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xp
ZW50KiBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ7Cit9OworCit9Cit9CisKKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBXZWJPdmVybGF5
X3BfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggZTNkNmMx
NGU1ZjMyZmYyNTdiYTYyZTgzZTE3Njg1Y2QzNjZjY2ZiNC4uNzQ2ODFkZWFiYjM5MzNhZmMxZmQy
Mjk2NWZjZGFkYTA4NWVlN2Q3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2UuY3BwCkBAIC0xMTYsNiArMTE2LDggQEAKICNpbmNsdWRlICJXZWJET01Eb2N1bWVudC5oIgog
I2VuZGlmCiAjaW5jbHVkZSAiV2ViS2l0VmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYk92ZXJsYXku
aCIKKyNpbmNsdWRlICJXZWJPdmVybGF5X3AuaCIKICNpbmNsdWRlICJXZWJQYWdlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSAiV2ViVmlld3BvcnRBcmd1bWVudHMu
aCIKQEAgLTYyMDAsNiArNjIwMiw0NiBAQCB2b2lkIFdlYlBhZ2U6OnNldFRhcEhpZ2hsaWdodChX
ZWJUYXBIaWdobGlnaHQqIHRhcEhpZ2hsaWdodCkKICAgICBkLT5tX3RhcEhpZ2hsaWdodCA9IGFk
b3B0UHRyKHRhcEhpZ2hsaWdodCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6YWRkT3ZlcmxheShXZWJP
dmVybGF5KiBvdmVybGF5KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICBpZiAob3ZlcmxheS0+ZC0+Z3JhcGhpY3NMYXllcigpKSB7CisgICAgICAgIG92ZXJsYXktPmQt
PnNldFBhZ2UoZCk7CisgICAgICAgIGQtPm92ZXJsYXlMYXllcigpLT5hZGRDaGlsZChvdmVybGF5
LT5kLT5ncmFwaGljc0xheWVyKCkpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2U6
OnJlbW92ZU92ZXJsYXkoV2ViT3ZlcmxheSogb3ZlcmxheSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG92ZXJsYXktPmQtPmdyYXBoaWNzTGF5ZXIoKSA9PSBk
LT5vdmVybGF5TGF5ZXIoKSkgeworICAgICAgICBvdmVybGF5LT5yZW1vdmVGcm9tUGFyZW50KCk7
CisgICAgICAgIG92ZXJsYXktPmQtPmNsZWFyKCk7CisgICAgICAgIG92ZXJsYXktPmQtPnNldFBh
Z2UoMCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZTo6YWRkQ29tcG9zaXRpbmdU
aHJlYWRPdmVybGF5KFdlYk92ZXJsYXkqIG92ZXJsYXkpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIEFTU0VSVCh1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVu
dCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgb3ZlcmxheS0+ZC0+c2V0UGFnZShkKTsKKyAg
ICBkLT5jb21wb3NpdG9yKCktPmFkZE92ZXJsYXkob3ZlcmxheS0+ZC0+bGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2U6OnJlbW92ZUNvbXBvc2l0aW5n
VGhyZWFkT3ZlcmxheShXZWJPdmVybGF5KiBvdmVybGF5KQoreworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBBU1NFUlQodXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGll
bnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpOworICAgIGQtPmNvbXBvc2l0b3IoKS0+cmVtb3ZlT3Zl
cmxheShvdmVybGF5LT5kLT5sYXllckNvbXBvc2l0aW5nVGhyZWFkKCkpOworICAgIG92ZXJsYXkt
PmQtPmNsZWFyKCk7CisgICAgb3ZlcmxheS0+ZC0+c2V0UGFnZSgwKTsKKyNlbmRpZgorfQorCiB2
b2lkIFdlYlBhZ2U6OnBvcHVwT3BlbmVkKFBhZ2VQb3B1cEJsYWNrQmVycnkqIHdlYlBvcHVwKQog
ewogICAgIEFTU0VSVCghZC0+bV9zZWxlY3RQb3B1cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViUGFnZS5oCmluZGV4IGU5YzkzY2Y0ZmUwZjNhYTQ5OTJhOGJlODEwZWI0NTE0ZDA3Nzc0
Y2UuLmEzMjczNTc2NmIwMTYzNmYyOGVmMzIzNzZmM2U1ZWI4YzUxZDRhMTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCkBAIC02Miw2ICs2Miw3IEBAIGNsYXNzIEJhY2tp
bmdTdG9yZTsKIGNsYXNzIEJhY2tpbmdTdG9yZUNsaWVudDsKIGNsYXNzIEJhY2tpbmdTdG9yZVBy
aXZhdGU7CiBjbGFzcyBSZW5kZXJRdWV1ZTsKK2NsYXNzIFdlYk92ZXJsYXk7CiBjbGFzcyBXZWJQ
YWdlQ2xpZW50OwogY2xhc3MgV2ViUGFnZUNvbXBvc2l0b3I7CiBjbGFzcyBXZWJQYWdlR3JvdXBM
b2FkRGVmZXJyZXI7CkBAIC0zMzgsNiArMzM5LDE1IEBAIHB1YmxpYzoKICAgICBXZWJUYXBIaWdo
bGlnaHQqIHRhcEhpZ2hsaWdodCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGFwSGlnaGxpZ2h0KFdl
YlRhcEhpZ2hsaWdodCopOwogCisgICAgLy8gQWRkcyBhbiBvdmVybGF5IHRoYXQgY2FuIGJlIG1v
ZGlmaWVkIG9uIHRoZSBXZWJLaXQgdGhyZWFkLCBhbmQKKyAgICAvLyB3aG9zZSBhdHRyaWJ1dGVz
IGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21wb3NpdGluZyB0aHJlYWQuCisgICAgdm9pZCBh
ZGRPdmVybGF5KFdlYk92ZXJsYXkqKTsKKyAgICB2b2lkIHJlbW92ZU92ZXJsYXkoV2ViT3Zlcmxh
eSopOworCisgICAgLy8gQWRkcyBhbiBvdmVybGF5IHRoYXQgY2FuIG9ubHkgYmUgbW9kaWZpZWQg
b24gdGhlIGNvbXBvc2l0aW5nIHRocmVhZC4KKyAgICB2b2lkIGFkZENvbXBvc2l0aW5nVGhyZWFk
T3ZlcmxheShXZWJPdmVybGF5Kik7CisgICAgdm9pZCByZW1vdmVDb21wb3NpdGluZ1RocmVhZE92
ZXJsYXkoV2ViT3ZlcmxheSopOworCiAgICAgLy8gUG9wdXAgY2xpZW50CiAgICAgdm9pZCBpbml0
UG9wdXBXZWJWaWV3KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSopOwogICAgIHZvaWQgcG9w
dXBPcGVuZWQoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tCZXJyeSogd2ViUG9wdXApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcAppbmRl
eCA4MzJiZGI4NzFmYThmMDRhNGE2YzVmZTY0OTE0ZGU2NzFmNjhkNjY4Li5jZTgzMWIyZjc0M2Qz
ZWI5ZjJiN2UxMmExYmE5MDJmOTQ1NzU0M2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lk
IFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cHJlcGFyZUZyYW1lKGRvdWJsZSBhbmltYXRpb25U
aW1lKQogICAgIC8vIFdlYlBhZ2VDb21wb3NpdG9yIGlzIHVzZWQgdG8gcmVuZGVyIHRoZSB3ZWIg
cGFnZS4gVGhlIHByZXNlbmNlIG9mIGEKICAgICAvLyBXZWJQYWdlQ29tcG9zaXRvckNsaWVudCAo
bV9jbGllbnQpIGluZGljYXRlcyB0aGlzIGlzIHRoZSBjYXNlLCBzbwogICAgIC8vIGNyZWF0ZSBh
IExheWVyUmVuZGVyZXIgaWYgdGhlcmUgYXJlIGxheWVycyBvciBpZiB0aGVyZSdzIGEgY2xpZW50
LgotICAgIGlmICghbV9yb290TGF5ZXIgJiYgIW1fb3ZlcmxheUxheWVyICYmICFtX2NsaWVudCkK
KyAgICBpZiAoIW1fcm9vdExheWVyICYmICFtX292ZXJsYXlMYXllciAmJiAhbV9jb21wb3NpdGlu
Z1RocmVhZE92ZXJsYXlMYXllciAmJiAhbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghbV9sYXllclJlbmRlcmVyKSB7CkBAIC0xMDEsNiArMTAxLDggQEAgdm9pZCBXZWJQYWdl
Q29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZShkb3VibGUgYW5pbWF0aW9uVGltZSkKICAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlRnJhbWUoYW5pbWF0aW9uVGltZSwgbV9yb290
TGF5ZXIuZ2V0KCkpOwogICAgIGlmIChtX292ZXJsYXlMYXllcikKICAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5wcmVwYXJlRnJhbWUoYW5pbWF0aW9uVGltZSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkp
OworICAgIGlmIChtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnByZXBhcmVGcmFtZShhbmltYXRpb25UaW1lLCBtX2NvbXBvc2l0aW5nVGhy
ZWFkT3ZlcmxheUxheWVyLmdldCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZh
dGU6OnJlbmRlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlw
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUluLCBjb25zdCBGbG9h
dFJlY3QmIHRyYW5zZm9ybWVkQ29udGVudHMsIGNvbnN0IEZsb2F0UmVjdCYgLyp2aWV3cG9ydCov
KQpAQCAtMTI4LDEwICsxMzAsMTcgQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnJl
bmRlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIGlmICgh
ZHJhd3NSb290TGF5ZXIoKSkKICAgICAgICAgbV93ZWJQYWdlLT5tX2JhY2tpbmdTdG9yZS0+ZC0+
Y29tcG9zaXRlQ29udGVudHMobV9sYXllclJlbmRlcmVyLmdldCgpLCB0cmFuc2Zvcm0sIGNvbnRl
bnRzKTsKIAorICAgIGNvbXBvc2l0ZUxheWVycyh0cmFuc2Zvcm0pOworfQorCit2b2lkIFdlYlBh
Z2VDb21wb3NpdG9yUHJpdmF0ZTo6Y29tcG9zaXRlTGF5ZXJzKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCit7CiAgICAgaWYgKG1fcm9vdExheWVyKQogICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0cmFuc2Zvcm0sIG1fcm9vdExheWVyLmdldCgp
KTsKICAgICBpZiAobV9vdmVybGF5TGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29t
cG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOworICAgIGlmICht
X2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmNvbXBvc2l0ZUxheWVycyh0cmFuc2Zvcm0sIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5
ZXIuZ2V0KCkpOwogCiAgICAgbV9sYXN0Q29tcG9zaXRpbmdSZXN1bHRzID0gbV9sYXllclJlbmRl
cmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0cygpOwogCkBAIC0xNDksNyArMTU4LDcgQEAgYm9vbCBX
ZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmRyYXdzUm9vdExheWVyKCkgY29uc3QKIGJvb2wgV2Vi
UGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgY29udGVudHMpCiB7CiAgICAgLy8gSXMgdGhlcmUgYW55dGhpbmcg
dG8gZHJhdz8KLSAgICBpZiAoIW1fcm9vdExheWVyICYmICFtX292ZXJsYXlMYXllcikKKyAgICBp
ZiAoIW1fcm9vdExheWVyICYmICFtX292ZXJsYXlMYXllciAmJiAhbV9jb21wb3NpdGluZ1RocmVh
ZE92ZXJsYXlMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcHJlcGFyZUZy
YW1lIGNyZWF0ZXMgdGhlIExheWVyUmVuZGVyZXIgaWYgbmVlZGVkCkBAIC0xNzcsMTcgKzE4Niw3
IEBAIGJvb2wgV2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjCiAgICAgLy8gYXMgdGhlIGxhc3QgdHJhbnNmb3Jt
YXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gTGF5ZXJSZW5kZXJl
cjo6b3J0aG9NYXRyaXgoMCwgY29udGVudHMud2lkdGgoKSwgY29udGVudHMuaGVpZ2h0KCksIDAs
IC0xMDAwLCAxMDAwKTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QoLWNvbnRlbnRzLngoKSwg
LWNvbnRlbnRzLnkoKSwgMCk7Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmNvbXBvc2l0ZUxheWVycyh0cmFuc2Zvcm0sIG1fcm9vdExheWVyLmdldCgpKTsK
LSAgICBpZiAobV9vdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9z
aXRlTGF5ZXJzKHRyYW5zZm9ybSwgbV9vdmVybGF5TGF5ZXIuZ2V0KCkpOwotCi0gICAgbV9sYXN0
Q29tcG9zaXRpbmdSZXN1bHRzID0gbV9sYXllclJlbmRlcmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0
cygpOwotCi0gICAgaWYgKG1fbGFzdENvbXBvc2l0aW5nUmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZy
YW1lKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpBbmltYXRpb25GcmFtZVJhdGVDb250cm9sbGVyOjpp
bnN0YW5jZSgpLT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIG1fd2ViUGFnZS0+dXBkYXRlRGVs
ZWdhdGVkT3ZlcmxheXMoKTsKLSAgICB9CisgICAgY29tcG9zaXRlTGF5ZXJzKHRyYW5zZm9ybSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyOCw2ICsyMjcsMjQgQEAgdm9pZCBXZWJQYWdl
Q29tcG9zaXRvclByaXZhdGU6OmNvbXBvc2l0b3JEZXN0cm95ZWQoKQogICAgIG1fY2xpZW50ID0g
MDsKIH0KIAordm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmFkZE92ZXJsYXkoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCit7CisgICAgaWYgKCFtX2NvbXBvc2l0aW5nVGhyZWFk
T3ZlcmxheUxheWVyKQorICAgICAgICBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVyID0g
TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6Y3JlYXRlKExheWVyRGF0YTo6Q3VzdG9tTGF5ZXIsIDAp
OworICAgIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXItPmFkZFN1YmxheWVyKGxheWVy
KTsKK30KKwordm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbW92ZU92ZXJsYXkoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyLT5zdXBlcmxheWVy
KCkgIT0gbV9jb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisKKyAgICBpZiAobV9jb21wb3Np
dGluZ1RocmVhZE92ZXJsYXlMYXllciAmJiBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxheWVy
LT5nZXRTdWJsYXllcnMoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fY29tcG9zaXRpbmdUaHJlYWRP
dmVybGF5TGF5ZXIuY2xlYXIoKTsKK30KKwogV2ViUGFnZUNvbXBvc2l0b3I6OldlYlBhZ2VDb21w
b3NpdG9yKFdlYlBhZ2UqIHBhZ2UsIFdlYlBhZ2VDb21wb3NpdG9yQ2xpZW50KiBjbGllbnQpCiB7
CiAgICAgdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvcl9wLmggYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAppbmRleCA0NzBi
M2E1OWMwMjdhMzdkYzZhMWQ2M2ZiNDc1ZmI2NjIyZGUzYzEzLi40ZDU2M2MyZmUxMTY4MjI2ZTUx
MjdhY2I2ZGQ3OWJhMmY5NjhhMDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAg
ICAgV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogb3ZlcmxheUxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVybGF5TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldE92ZXJsYXlMYXll
cihXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKKyAgICBXZWJDb3JlOjpMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKiBjb21wb3NpdGluZ1RocmVhZE92ZXJsYXlMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9zaXRpbmdUaHJlYWRPdmVybGF5TGF5ZXIuZ2V0KCk7IH0KKwogICAg
IGJvb2wgZHJhd3NSb290TGF5ZXIoKSBjb25zdDsKICAgICB2b2lkIHNldERyYXdzUm9vdExheWVy
KGJvb2wgZHJhd3NSb290TGF5ZXIpIHsgbV9kcmF3c1Jvb3RMYXllciA9IGRyYXdzUm9vdExheWVy
OyB9CiAKQEAgLTg5LDExICs5MSwxNSBAQCBwdWJsaWM6CiAgICAgV2ViUGFnZUNvbXBvc2l0b3JD
bGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBjb21w
b3NpdG9yRGVzdHJveWVkKCk7CiAKKyAgICB2b2lkIGFkZE92ZXJsYXkoV2ViQ29yZTo6TGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopOworICAgIHZvaWQgcmVtb3ZlT3ZlcmxheShXZWJDb3JlOjpMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKik7CisKIHByb3RlY3RlZDoKICAgICBXZWJQYWdlQ29tcG9zaXRv
clByaXZhdGUoV2ViUGFnZVByaXZhdGUqLCBXZWJQYWdlQ29tcG9zaXRvckNsaWVudCopOwogCiBw
cml2YXRlOgogICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVDaGFuZ2VkKCk7CisgICAgdm9pZCBjb21w
b3NpdGVMYXllcnMoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAg
IFdlYlBhZ2VDb21wb3NpdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBXZWJQYWdlUHJpdmF0ZSog
bV93ZWJQYWdlOwpAQCAtMTAxLDYgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNv
cmU6OkxheWVyUmVuZGVyZXI+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBSZWZQdHI8V2ViQ29yZTo6
TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9yb290TGF5ZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6
OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IG1fb3ZlcmxheUxheWVyOworICAgIFJlZlB0cjxXZWJD
b3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBtX2NvbXBvc2l0aW5nVGhyZWFkT3ZlcmxheUxh
eWVyOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9sYXlvdXRSZWN0Rm9yQ29tcG9zaXRpbmc7CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX2NvbnRlbnRzU2l6ZUZvckNvbXBvc2l0aW5nOwogICAgIFdl
YkNvcmU6OkxheWVyUmVuZGVyaW5nUmVzdWx0cyBtX2xhc3RDb21wb3NpdGluZ1Jlc3VsdHM7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>