<?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>239717</bug_id>
          
          <creation_ts>2022-04-25 06:46:44 -0700</creation_ts>
          <short_desc>[LBSE] Fix origin of transformations in SVG</short_desc>
          <delta_ts>2022-04-27 04:16:21 -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>SVG</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>237711</dependson>
          <blocked>90738</blocked>
    
    <blocked>239743</blocked>
    
    <blocked>239764</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1864080</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 06:46:44 -0700</bug_when>
    <thetext>Ticket 237711 laid the groundwork for SVG transforms in LBSE, however there are still issues:

- SVG transforms specified alone on SVG elements, w/o any additional style/perspective related property such as transform-box / transform-origin / ...
  does not trigger layer creation (StyleAdjuster needs to consult SVG transforms as well, as special case, to determine if the animatedLocalTransform() is non-identity). This was missing.

- Switching on/off transforms for a SVG element, was not tracking updates to both &apos;HasSVGTransform&apos; / &apos;HasTransformRelatedProperty&apos; flags correctly, fix that.

And finally an important change with respect to LBSE downstream. In previous approach, the role of &apos;offsetFromAncestor&apos; was changed for SVG, in e.g. paintLayerByApplyingTransform(). It did not measure the offsetFromAncestor in the same coordinate space as CSS. CSS layout does not consider transformations, everything is laid out as it&apos;s untransformed, and transforms are merely a painting effect. This is true for SVG on shape-level, but not for containers, since SVG containers are the union of the bounds of the children, mapped through the child transformations.

When SVGContainerLayout positions container children relative to itself, to &quot;mimic&quot; nested absolute positioned CSS boxes, it subtracts the container objectBoundingBox() location from the locations of the children. That is easy to implement, one doesn&apos;t need new geometry but can rely on objectBoundingBox(). However this makes SVG container &apos;internal boundaries&apos; dependent on the transformations of the children. Therefore one needs to relayout the whole tree upwards, if the transformation changes in a non-accelerated way (SVGTransformList manipulation, SVG DOM, SMIL &lt;animateTransform&gt;, ...). Furthermore one needs to adapt RenderLayer to change the transformation style from &quot;M * T&quot; to &quot;T * M&quot;, where T is the translation due to offsetFromAncestor() and M the user-defined transformation matrix.

This works fine, but there is a less-intrusive approach:
Compute a new geometry &apos;objectBoundingBoxWithoutTransformations&apos; that is the same as objectBoundingBox(), but does not map contains children through their transformations. Change SVGContainerLayout to subtract that location instead of objectBoundingBox() location. This way the boundaries stay independent of the transformation. Hit-testing / painting via layers, still does respect the transformations, if present. This slightly changed approach, is way less confusing in the end, since the &quot;M * T&quot; logic (first translate to offsetFromAncestor, then apply transformation matrix, can stay as-is).

Patch for this approach will follow, that fixes most transform tests in LBSE, that are testable at present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864083</commentid>
    <comment_count>1</comment_count>
      <attachid>458267</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 06:55:18 -0700</bug_when>
    <thetext>Created attachment 458267
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864188</commentid>
    <comment_count>2</comment_count>
      <attachid>458267</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-04-25 12:18:16 -0700</bug_when>
    <thetext>Comment on attachment 458267
Patch, v1

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:3549
&gt; +#endif

I think a lambda is nicer here.

&gt; Source/WebCore/style/StyleAdjuster.cpp:374
&gt; +#endif

I think a lambda is nicer here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864204</commentid>
    <comment_count>3</comment_count>
      <attachid>458267</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-04-25 13:27:43 -0700</bug_when>
    <thetext>Comment on attachment 458267
Patch, v1

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

&gt; Source/WebCore/rendering/RenderElement.cpp:2437
&gt; +        if (isSVGLayerAwareRenderer() &amp;&amp; !isSVGRoot() &amp;&amp; document().settings().layerBasedSVGEngineEnabled())

It seems a bit more logical to do the isSVGRoot check last.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864258</commentid>
    <comment_count>4</comment_count>
      <attachid>458305</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 15:29:36 -0700</bug_when>
    <thetext>Created attachment 458305
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864261</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 15:35:19 -0700</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:3549
&gt; &gt; +#endif
&gt; 
&gt; I think a lambda is nicer here.
Good idea, fixed.

&gt; &gt; Source/WebCore/style/StyleAdjuster.cpp:374
&gt; &gt; +#endif
&gt; 
&gt; I think a lambda is nicer here.
Fixed as well.

(In reply to Rob Buis from comment #3)
&gt; &gt; Source/WebCore/rendering/RenderElement.cpp:2437
&gt; &gt; +        if (isSVGLayerAwareRenderer() &amp;&amp; !isSVGRoot() &amp;&amp; document().settings().layerBasedSVGEngineEnabled())
&gt; 
&gt; It seems a bit more logical to do the isSVGRoot check last.

Hmm, I disagree. isSVGLayerAwareRenderer() contains an explicit &apos;||.isSVGRoot()&apos; condition, so it returns true for RenderSVGRoot. I really meant to check here: &quot;all layer aware renderers, except RenderSVGRoot&quot; (--&gt; &quot;isSVGLayerAwareRenderer() &amp;&amp; !isSVGRoot()&quot;). Note, that if &apos;isSVGRoot()&apos; evaluates to true, that means LBSE must be enabled, otherwise we&apos;d see a LegacyRenderSVGRoot, not a RenderSVGRoot.

You could argue about testing: &quot;if (document().settings().layerBasedSVGEngineEnabled() &amp;&amp; isSVGLayerAwareRenderer() &amp;&amp; !isSVGRoot())&quot; though ;-) I left it as-is, if you&apos;re ok with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864286</commentid>
    <comment_count>6</comment_count>
      <attachid>458310</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:33:30 -0700</bug_when>
    <thetext>Created attachment 458310
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864295</commentid>
    <comment_count>7</comment_count>
      <attachid>458314</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-25 16:53:29 -0700</bug_when>
    <thetext>Created attachment 458314
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864431</commentid>
    <comment_count>8</comment_count>
      <attachid>458314</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-04-26 07:17:40 -0700</bug_when>
    <thetext>Comment on attachment 458314
Patch, v4

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

&gt; Source/WebCore/rendering/RenderObject.h:377
&gt; +    // Their laid out in such a way that transformations do NOT affect layout, as in HTML/CSS world, but take affect during

Their -&gt; They are</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864761</commentid>
    <comment_count>9</comment_count>
      <attachid>458434</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-27 02:59:18 -0700</bug_when>
    <thetext>Created attachment 458434
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864768</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-27 04:15:53 -0700</bug_when>
    <thetext>Committed r293504 (250035@main): &lt;https://commits.webkit.org/250035@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 458434.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1864769</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-27 04:16:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/92390068&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458267</attachid>
            <date>2022-04-25 06:55:18 -0700</date>
            <delta_ts>2022-04-25 15:30:17 -0700</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-239717-20220425065516.patch</filename>
            <type>text/plain</type>
            <size>46067</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY4YWIxOTE2YjhmY2I2
ZDgzOTQxMmM4ODFhZWJiNDRlOWJlMmYyMy4uODg0MDNmYjlmYzk5ZTFmYTEzNGE5YWFlMTQ3ZDY1
ZmNmNzJmNWFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIyLTA0LTI1ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBGaXggb3JpZ2luIG9mIHRyYW5zZm9ybWF0aW9ucyBpbiBTVkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTcxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0aGUgbWFqb3JpdHkgb2YgU1ZHIHRy
YW5zZm9ybSBpc3N1ZXMgaW4gTEJTRS4gd2Via2l0Lm9yZy9iLzIzNzcxMSBsYWlkIHRoZSBncm91
bmR3b3JrIGZvciBTVkcKKyAgICAgICAgdHJhbnNmb3JtcyBpbiBMQlNFLCBob3dldmVyIHRoZXJl
IGFyZSBzdGlsbCBpc3N1ZXM6CisKKyAgICAgICAgLSBTVkcgdHJhbnNmb3JtcyBzcGVjaWZpZWQg
YWxvbmUgb24gU1ZHIGVsZW1lbnRzLCB3L28gYW55IGFkZGl0aW9uYWwgc3R5bGUvcGVyc3BlY3Rp
dmUgcmVsYXRlZCBwcm9wZXJ0eQorICAgICAgICAgIHN1Y2ggYXMgdHJhbnNmb3JtLWJveCAvIHRy
YW5zZm9ybS1vcmlnaW4gLyAuLi4gZG8gbm90IHRyaWdnZXIgbGF5ZXIgY3JlYXRpb24sIGZpeCBi
eSBhZGFwdGluZyBTdHlsZUFkanVzdGVyLgorCisgICAgICAgIC0gU3dpdGNoaW5nIG9uL29mZiB0
cmFuc2Zvcm1zIGZvciBhIFNWRyBlbGVtZW50LCB3YXMgbm90IHRyYWNraW5nIHVwZGF0ZXMgdG8g
Ym90aCAnSGFzU1ZHVHJhbnNmb3JtJyBhbmQKKyAgICAgICAgICAnSGFzVHJhbnNmb3JtUmVsYXRl
ZFByb3BlcnR5JyBmbGFncyBjb3JyZWN0bHksIGZpeCB0aGF0LgorCisgICAgICAgIC0gTW9kaWZ5
IFNWR0NvbnRhaW5lckxheW91dCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgb24gdGhlIGNoaWxkcmVu
IHRyYW5zZm9ybWF0aW9ucyB3aGVuIGNvbXB1dGluZyBjb250YWluZXIKKyAgICAgICAgICBib3Vu
ZGFyaWVzLiBMYXlvdXQgaXMgaW52YXJpYW50IHVuZGVyIHRyYW5zZm9ybWF0aW9uIGNoYW5nZXMg
bm93LCBqdXN0IGFzIGZvciBDU1MuIFRoaXMgYXZvaWRzIHJlLWxheW91dHMKKyAgICAgICAgICB3
aGVuIGNoYW5naW5nIHRoZSBTVkcgdHJhbnNmb3JtYXRpb25zIGluIG5vbi1hY2NlbGVyYXRkIHdh
eXMsIHN1Y2ggYXMgYnkgU1ZHVHJhbnNmb3JtTGlzdCBtYW5pcHVsYXRpb24sCisgICAgICAgICAg
U01JTCA8YW5pbWF0ZVRyYW5zZm9ybT4gZXRjLgorCisgICAgICAgICAgLT4gU1ZHIHRyYW5zZm9y
bXMgYXJlIG5vdyBoYW5kbGVkIGp1c3QgbGlrZSBDU1MgdHJhbnNmb3Jtcy4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2luZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3Jt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpyZW5kZXJlckxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6Om5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5
b3V0TG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdDo6c2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9iamVjdEJv
dW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6
bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0UmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0Q3VycmVudFNWR0xheW91dFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmZyYW1lUmVjdEVx
dWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5
b3V0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnBhaW50aW5nTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9m
ZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Omxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBk
YXRlRnJvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0NvbnRhaW5lckxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlv
dXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSk6
CisgICAgICAgIChXZWJDb3JlOjpsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkFk
anVzdGVyOjphZGp1c3QgY29uc3QpOgorCiAyMDIyLTA0LTI1ICBaaXJhbiBTdW4gIDx6c3VuQGln
YWxpYS5jb20+CiAKICAgICAgICAgVUEgc3R5bGVzaGVldCBzaG91bGQgaW5jbHVkZSB0YWJsZSB7
IHRleHQtaW5kZW50OiBpbml0aWFsIH0gdG8gY29uZm9ybSB3aXRoIEhUTUwgc3RhbmRhcmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiNzZlMTgxZTZh
MjAwZDcwOGNmODQ2NGY1MGQ4MGU1MGIwM2UxYWNhLi42ODBjZTVjNzZjYTZhZDZhMzdjYWE3M2Iw
YTliNWNhMGEwYmViMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCkBAIC0yNDE4LDIxICsyNDE4LDQzIEBAIEZsb2F0UmVjdCBSZW5kZXJFbGVtZW50Ojpy
ZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKICAgICBpZiAoIWlzPFNW
R0VsZW1lbnQ+KGVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvIGFs
aWduUmVmZXJlbmNlQm94ID0gWyZdKEZsb2F0UmVjdCByZWZlcmVuY2VCb3gpIHsKKyAgICAgICAg
Ly8gVGhlIENTUyBib3JkZXJCb3hSZWN0KCkgaXMgZGVmaW5lZCB0byBzdGFydCBhdCBhbiBvcmln
aW4gb2YgKDAsIDApLgorICAgICAgICAvLyBBIHBvc3NpYmxlIHNoaWZ0IG9mIGEgQ1NTIGJveCAo
ZS5nLiBkdWUgdG8gbm9uLXN0YXRpYyBwb3NpdGlvbiArIHRvcC9sZWZ0IHByb3BlcnRpZXMpCisg
ICAgICAgIC8vIGRvZXMgbm90IGVmZmVjdCB0aGUgYm9yZGVyQm94UmVjdCgpIGxvY2F0aW9uLiBU
aGUgbG9jYXRpb24gaW5mb3JtYXRpb24KKyAgICAgICAgLy8gaXMgcHJvcGFnYXRlZCB1cG9uIHBh
aW50IHRpbWUsIGUuZy4gdmlhICdwYWludE9mZnNldCcgd2hlbiBjYWxsaW5nIFJlbmRlck9iamVj
dDo6cGFpbnQoKSwKKyAgICAgICAgLy8gb3IgYnkgYWx0ZXJpbmcgdGhlIFJlbmRlckxheWVyIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRvIGluY2x1ZGUgdGhlICdvZmZzZXRGcm9tQW5jZXN0b3InCisg
ICAgICAgIC8vIHJpZ2h0IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHdoZW4gQ1NTIHRy
YW5zZm9ybWF0aW9ucyBhcmUgcHJlc2VudCAoc2VlIFJlbmRlckxheWVyCisgICAgICAgIC8vIHBh
aW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgZm9yIGRldGFpbHMpLgorICAgICAgICAvLwor
ICAgICAgICAvLyBUbyBtaW1pYyB0aGUgZXhwZWN0YXRpb24gZm9yIFNWRywgJ2ZpbGwtYm94JyBt
dXN0IGJlaGF2ZSB0aGUgc2FtZTogaWYgd2UnZCBpbmNsdWRlCisgICAgICAgIC8vIHRoZSAncmVm
ZXJlbmNlQm94JyBsb2NhdGlvbiBpbiB0aGUgcmV0dXJuZWQgcmVjdCwgd2UnZCBhcHBseSB0aGUg
KHgsIHkpIGxvY2F0aW9uCisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZvciB0aGUgU1ZHIHJlbmRl
cmVyIHR3aWNlLiBXZSB3b3VsZCBzaGlmdCB0aGUgJ3RyYW5zZm9ybS1vcmlnaW4nIGJ5ICh4LCB5
KQorICAgICAgICAvLyBhbmQgYXQgdGhlIHNhbWUgdGltZSBhbHRlciB0aGUgQ1RNIGluIFJlbmRl
ckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSgpIGJ5CisgICAgICAgIC8vIGlu
Y2x1ZGluZyBhIHRyYW5zbGF0aW9uIHRvIHRoZSBlbmNsb3NpbmcgdHJhbnNmb3JtZWQgYW5jZXN0
b3IgKCdvZmZzZXRGcm9tQW5jZXN0b3InKS4KKyAgICAgICAgLy8gQXZvaWQgdGhhdCwgYW5kIG1v
dmUgYnkgLW5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpLgorI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorICAgICAgICBpZiAoaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAh
aXNTVkdSb290KCkgJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVF
bmFibGVkKCkpCisgICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KC1kb3duY2FzdDxSZW5k
ZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3g7CisgICAgfTsKKwogICAgIHN3aXRj
aCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICBjYXNl
IENTU0JveFR5cGU6OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94
OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIG9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChvYmplY3RCb3Vu
ZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKICAgICBjYXNlIENT
U0JveFR5cGU6Ok1hcmdpbkJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKLSAg
ICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJl
ZmVyZW5jZUJveChzdHJva2VCb3VuZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OlZp
ZXdCb3g6CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11
dGFibGUgU1ZHTGVuZ3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVh
dGVkIFJlbmRlclNWR1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCiAg
ICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQo
ZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3Bv
cnRTaXplKTsKLSAgICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICAgICAg
cmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KHsgeyB9LCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCBjMmRlMGI2ZDVmZDZmZDgyMTAyZjcwYmNjYzE5YmE3NjkzZGFlYzY3
Li5hZGY5YWM5ZTcwODc2NDExYTQzYjFkZWU4MDg0NzI2Mjc0M2MzMDUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMg
U2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKIAogREVGSU5FX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0g
ICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRl
clZpZXcoKSkKLSAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdC5pc01lZGlhKCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVy
LmlzUmVuZGVyVmlldygpKQorICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXIu
aXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NT
U1N0YWNraW5nQ29udGV4dChmYWxzZSkKICAgICAsIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdD
b250ZXh0KGZhbHNlKQpAQCAtMzQzLDcgKzM0Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAg
LCBtX2hhc05vdElzb2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50c1N0YXR1c0RpcnR5KGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX3JlcGFpbnRSZWN0c1ZhbGlkKGZhbHNlKQotICAgICwgbV9yZW5kZXJl
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAg
ICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsK
QEAgLTM1Myw5ICszNTMsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIGlmIChpc1JlbmRlclZp
ZXdMYXllcigpKQogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCku
Zmlyc3RDaGlsZCgpKSB7CisgICAgaWYgKCFyZW5kZXJlci5maXJzdENoaWxkKCkpIHsKICAgICAg
ICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVmlz
aWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxp
dHk6OlZpc2libGU7CisgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlci5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KIH0KIApAQCAt
NTUyLDkgKzU1Miw2IEBAIHN0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5k
ZXJlcigpOwogICAgIHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
KQotI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAgICB8fCByZW5kZXJl
ci5oYXNTVkdUcmFuc2Zvcm0oKQotI2VuZGlmCiAgICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQ
YXRoKCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKICAgICAgICAgfHwgcmVuZGVy
ZXIuaGFzTWFzaygpCkBAIC0zNTQ1LDE5ICszNTQyLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5n
SW5mbywgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRT
aXplJiB0cmFuc2xhdGlvbk9mZnNldCkKIHsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyAgICBib29sIHVzZXNTVkdTdWJ0cmVlVHJhbnNmb3JtUnVsZXMgPSByZW5kZXJlcigp
LmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpICYmIHJl
bmRlcmVyKCkuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhcmVuZGVyZXIoKS5pc1NWR1Jv
b3QoKTsKKyNlbHNlCisgICAgYm9vbCB1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzID0gZmFs
c2U7CisjZW5kaWYKKwogICAgIC8vIFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBw
b3NpdGlvbiBvZiB0aGUgbGF5ZXIgaW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZSwgYnV0
IHByZXNlcnZpbmcKICAgICAvLyB0aGUgYWNjdW11bGF0ZWQgZXJyb3IgZm9yIHN1Yi1waXhlbCBs
YXlvdXQuCisgICAgLy8gTm90ZTogVGhlIHBpeGVsLXNuYXBwaW5nIGxvZ2ljIGlzIGRpc2FibGVk
IGZvciB0aGUgd2hvbGUgU1ZHIHJlbmRlciB0cmVlLCBleGNlcHQgdGhlIG91dGVybW9zdCA8c3Zn
Pi4KICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVBhcmVudCA9IG9m
ZnNldEZyb21BbmNlc3RvcihwYWludGluZ0luZm8ucm9vdExheWVyKTsKICAgICBvZmZzZXRGcm9t
UGFyZW50ICs9IHRyYW5zbGF0aW9uT2Zmc2V0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybShyZW5kZXJhYmxlVHJhbnNmb3JtKHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKSk7
CiAgICAgLy8gQWRkIHRoZSBzdWJwaXhlbCBhY2N1bXVsYXRpb24gdG8gdGhlIGN1cnJlbnQgbGF5
ZXIncyBvZmZzZXQgc28gdGhhdCB3ZSBjYW4gYWx3YXlzIHNuYXAgdGhlIHRyYW5zbGF0ZVJpZ2h0
IHZhbHVlIHRvIHdoZXJlIHRoZSByZW5kZXJlcigpIGlzIHN1cHBvc2VkIHRvIGJlIHBhaW50aW5n
LgogICAgIExheW91dFNpemUgb2Zmc2V0Rm9yVGhpc0xheWVyID0gb2Zmc2V0RnJvbVBhcmVudCAr
IHBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldDsKLSAgICBGbG9hdFNpemUgZGV2aWNlUGl4ZWxT
bmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyID0gdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2aWNl
UGl4ZWxzKHRvTGF5b3V0UG9pbnQob2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKKyAgICBGbG9hdFNpemUgYWxpZ25lZE9mZnNldEZvclRoaXNMYXllciA9IHVzZXNTVkdT
dWJ0cmVlVHJhbnNmb3JtUnVsZXMgPyBvZmZzZXRGb3JUaGlzTGF5ZXIgOiB0b0Zsb2F0U2l6ZShy
b3VuZFBvaW50VG9EZXZpY2VQaXhlbHModG9MYXlvdXRQb2ludChvZmZzZXRGb3JUaGlzTGF5ZXIp
LCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgIC8vIFdlIGhhbmRsZSBhY2N1bXVsYXRlZCBzdWJw
aXhlbHMgdGhyb3VnaCBuZXN0ZWQgbGF5ZXJzIGhlcmUuIFNpbmNlIHRoZSBjb250ZXh0IGdldHMg
dHJhbnNsYXRlZCB0byBkZXZpY2UgcGl4ZWxzLAogICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlz
IGFkZCB0aGUgZGVsdGEgdG8gdGhlIGFjY3VtdWxhdGVkIHBpeGVscyBjb21pbmcgZnJvbSBhbmNl
c3RvciBsYXllcnMuCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250ZXh0IHRvIHRo
ZSBzbmFwcGluZyBwb3NpdGlvbiB0byBhdm9pZCBvZmYtZGV2aWNlLXBpeGVsIHBvc2l0aW5nLgot
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodChkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGb3JU
aGlzTGF5ZXIud2lkdGgoKSwgZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLmhl
aWdodCgpKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQoYWxpZ25lZE9mZnNldEZvclRo
aXNMYXllci53aWR0aCgpLCBhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyLmhlaWdodCgpKTsKICAg
ICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgogICAgIGF1dG8gb2xkVHJhbnNmb3JtID0gY29udGV4
dC5nZXRDVE0oKTsKICAgICBhdXRvIGFmZmluZVRyYW5zZm9ybSA9IHRyYW5zZm9ybS50b0FmZmlu
ZVRyYW5zZm9ybSgpOwpAQCAtMzU2Nyw3ICszNTcxLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QKICAgICAgICAgcGFpbnRpbmdJbmZvLmV2ZW50UmVnaW9uQ29udGV4dC0+cHVzaFRyYW5zZm9y
bShhZmZpbmVUcmFuc2Zvcm0pOwogCiAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9v
dCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgotICAgIExheW91dFNpemUgYWRqdXN0ZWRTdWJwaXhl
bE9mZnNldCA9IG9mZnNldEZvclRoaXNMYXllciAtIExheW91dFNpemUoZGV2aWNlUGl4ZWxTbmFw
cGVkT2Zmc2V0Rm9yVGhpc0xheWVyKTsKKyAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxP
ZmZzZXQ7CisgICAgaWYgKCF1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzICYmICFyZW5kZXJl
cigpLmlzU1ZHUm9vdCgpKQorICAgICAgICBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0ID0gb2Zmc2V0
Rm9yVGhpc0xheWVyIC0gTGF5b3V0U2l6ZShhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyKTsKKwog
ICAgIExheWVyUGFpbnRpbmdJbmZvIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvKHBhaW50aW5nSW5m
byk7CiAgICAgdHJhbnNmb3JtZWRQYWludGluZ0luZm8ucm9vdExheWVyID0gdGhpczsKICAgICB0
cmFuc2Zvcm1lZFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCA9IExheW91dFJlY3QoZW5jbG9z
ZVJlY3RUb0RldmljZVBpeGVscyh2YWx1ZU9yRGVmYXVsdCh0cmFuc2Zvcm0uaW52ZXJzZSgpKS5t
YXBSZWN0KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGRldmljZVNjYWxlRmFjdG9yKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDdkM2NiMTU3ZDBmYmYy
MDJlYTdkOGE2NDkyM2Y4MDRkZjMwOTFjNzIuLjgwNDc2MWE4ZjkyMDAwNGU4ZmRkNDI3ZTE4ZDRh
Nzk4NDUxMzFiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC05
ODQsNyArOTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCk7CiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCiAgICAgICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIo
KSkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJl
bmRlcmVyKCkpLmxheW91dExvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlv
bigpOwogI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIExheW91dFBvaW50KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXgg
MDFiOThhZjQ4MWVlZmYyN2I0NjBhYTQ2YmFkYWMwZWFkZjdkMTJlMC4uZmRkNDNlMDM0MzIxNDdk
ZDlhMmZhOWQ0ZWYxNGNlZTY5ZTM2MmMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMTI5LDYgKzEyOSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgICAgICBsYXllcigpLT53aWxsUmVtb3ZlQ2hp
bGRXaXRoQmxlbmRNb2RlKCk7CiAjZW5kaWYKICAgICAgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRl
ZFByb3BlcnR5KGZhbHNlKTsgLy8gQWxsIHRyYW5zZm9ybS1yZWxhdGVkIHByb3BlcnRpZXMgZm9y
Y2UgbGF5ZXJzLCBzbyB3ZSBrbm93IHdlIGRvbid0IGhhdmUgb25lIG9yIHRoZSBvYmplY3QgZG9l
c24ndCBzdXBwb3J0IHRoZW0uCisgICAgICAgIHNldEhhc1NWR1RyYW5zZm9ybShmYWxzZSk7IC8v
IFNhbWUgcmVhc29uIGFzIGZvciBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKS4KICAg
ICAgICAgc2V0SGFzUmVmbGVjdGlvbihmYWxzZSk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUg
YWJvdXQgdG8gYmUgZGVzdHJveWVkIHNlbGYtcGFpbnRpbmcgbGF5ZXIgd2hlbiBzdHlsZSBjaGFu
Z2UgYWxzbyB0cmlnZ2VycyByZXBhaW50LgpAQCAtMzU2LDYgKzM1NywxMyBAQCB2b2lkIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OmFwcGx5U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0sCiAKICAgICBzdHlsZS51bmFwcGx5VHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9y
bSwgb3JpZ2luVHJhbnNsYXRlKTsKIH0KKwordm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1
cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhjb25zdCBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBo
aWNzRWxlbWVudCkKK3sKKyAgICBib29sIGhhc1NWR1RyYW5zZm9ybSA9ICFncmFwaGljc0VsZW1l
bnQuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKKyAgICBzZXRIYXNUcmFu
c2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
KSB8fCBoYXNTVkdUcmFuc2Zvcm0pOworICAgIHNldEhhc1NWR1RyYW5zZm9ybShoYXNTVkdUcmFu
c2Zvcm0pOworfQogI2VuZGlmCiAKIGJvb2wgcmVuZGVyZXJOZWVkc1BpeGVsU25hcHBpbmcoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCAwNmFjNzhjM2ZlM2Nl
YzUwMmZkNzAzZDQ3YWFjMzc1NjA0ZTA3YTI0Li5jOGI3MGVkODkzZjBmZDdmMDFlMDZiNWVlZTE5
ODEyNTEwNjgwMGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKQEAgLTc4LDYgKzc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIG1h
cExvY2FsVG9TVkdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0
b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9k
ZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKIAogICAgIHZvaWQgYXBwbHlTVkdUcmFuc2Zvcm0o
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBTVkdHcmFwaGljc0VsZW1lbnQmLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHls
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVIYXNT
VkdUcmFuc2Zvcm1GbGFncyhjb25zdCBTVkdHcmFwaGljc0VsZW1lbnQmKTsKKworICAgIExheW91
dFBvaW50IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZsb29yZWRM
YXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKS5taW5Y
TWluWUNvcm5lcigpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91
dExvY2F0aW9uKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHsgfTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0
UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgdXBk
YXRlTGF5ZXJUcmFuc2Zvcm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAppbmRleCAzNjhjM2QxN2IzYjYwYjc1MjI5ZDZkM2FjNDc4YzBjZWFiZGRiM2RjLi5lOTBlOTA0
OGFlODU0ZTFjMzE3ZmYyMzRiZmFkMjY0ZjZlZTU5NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCkBAIC0zNjcsNiArMzY3LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICAvLyBUaGUgb2JqZWN0Qm91bmRpbmdCb3ggb2YgYSBTVkcgY29u
dGFpbmVyIGlzIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbnMgYXBwbGllZCBvbiBpdHMg
Y2hpbGRyZW4gLS0gdGhlIGNvbnRhaW5lcgorICAgIC8vIGJvdW5kaW5nIGJveCBpcyBhIHVuaW9u
IG9mIGFsbCBjaGlsZCBib3VuZGluZyBib3hlcywgbWFwcGVkIHRocm91Z2ggdGhlaXIgdHJhbnNm
b3JtYXRpb24gbWF0cmljZXMuCisgICAgLy8KKyAgICAvLyBUaGlzIG1ldGhvZCBpZ25vcmVzIGFs
bCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNvbXB1dGVzIHRoZSBvYmplY3RCb3VuZGluZ0JveCwgd2l0
aG91dCBtYXBwaW5nIHRocm91Z2ggdGhlIGNoaWxkCisgICAgLy8gdHJhbnNmb3JtYXRpb24gbWF0
cmljZXMuIFRoZSBTVkcgcmVuZGVyIHRyZWUgaXMgY29uc3RydWN0ZWQgaW4gc3VjaCBhIHdheSwg
dGhhdCBpdCBjYW4gYmUgbWFwcGVkIHRvIENTUyBlcXVpdmFsZW50czoKKyAgICAvLyBUaGUgU1ZH
IHJlbmRlciB0cmVlIHVuZGVybmVhdGggdGhlIG91dGVybW9zdCA8c3ZnPiBiZWhhdmVzIGFzIGEg
c2V0IG9mIGFic29sdXRlbHkgcG9zaXRpb25lZCwgcG9zc2libHkgbmVzdGVkLCBib3hlcy4KKyAg
ICAvLyBUaGVpciBsYWlkIG91dCBpbiBzdWNoIGEgd2F5IHRoYXQgdHJhbnNmb3JtYXRpb25zIGRv
IE5PVCBhZmZlY3QgbGF5b3V0LCBhcyBpbiBIVE1ML0NTUyB3b3JsZCwgYnV0IHRha2UgYWZmZWN0
IGR1cmluZworICAgIC8vIHBhaW50aW5nLCBoaXQtdGVzdGluZyBldGMuIFRoaXMgYWxsb3dzIHRv
IG1pbmltaXplIHRoZSBhbW91bnQgb2YgcmUtbGF5b3V0cyB3aGVuIGFuaW1hdGluZyB0cmFuc2Zv
cm1hdGlvbnMgaW4gU1ZHCisgICAgLy8gKG5vdCB1c2luZyBDU1MgQW5pbWF0aW9ucy9UcmFuc2l0
aW9ucyAvIFdlYiBBbmltYXRpb25zLCBidXQgZS5nLiBTTUlMLCA8YW5pbWF0ZVRyYW5zZm9ybT4s
IEpTLCAuLi4pLgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91
dFRyYW5zZm9ybWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7IH0K
KyNlbmRpZgorCiAgICAgLy8gUmV0dXJucyB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIGVuY2xvc2lu
ZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAogICAgIC8vIHJlc3BlY3RpbmcgY2xpcHBpbmcs
IG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0aCBhbmQgbWFya2VycwogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2Nr
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKaW5kZXgg
OWU5OWFlMDY0NjBmOTg5YzhhYTE3NjhiZmU1OWI1Yjk3OWM5OTVhNC4uZjcyMGNhMDUyNzNhYmY1
Y2IyMjBiMjA0NzNhMWJkM2Y0MDNiMWU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQmxvY2suaApAQCAtNDgsNiArNDgsOSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgZmluYWw7CiAKKyAgICBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBsb2NhdGlvbigpOyB9CisgICAgdm9pZCBzZXRDdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBmaW5hbCB7
IHNldExvY2F0aW9uKGxvY2F0aW9uKTsgfQorCiAgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZs
b3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZp
c2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRl
eHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZp
c2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcAppbmRleCAzNDVkNjM2MTM0ZDVmZGJjZjkyNjdiZmNkYWNjNGNmNjJjYjNjNmM3Li4yMWZl
ZTU1NDY0YWJmMzJhMzk0YTBmNzBmN2JmOTQ1ZDA4NmNjMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0xMTksMTkg
KzExOSwxNCBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4oKQogCiAg
ICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlz
KTsKICAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0
Qm91bmRpbmdCb3hEZWNvcmF0aW9uLCAmbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkKTsKLSAgICBt
X3N0cm9rZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3Jh
dGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdC
b3hEZWNvcmF0aW9uKTsKLSAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9v
YmplY3RCb3VuZGluZ0JveCkpOwogCi0gICAgY29udGFpbmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRy
ZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCk7Ci19CisgICAgY29uc3RleHByIGF1dG8gb2JqZWN0Qm91
bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8IFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5zZm9ybWF0aW9uczsKKyAg
ICBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IGJvdW5kaW5nQm94
Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94
RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlvbnMpOwogCi12b2lkIFJlbmRlclNWR0NvbnRh
aW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOworICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOworICAgIHNldEN1cnJlbnRT
VkdMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveFdpdGhv
dXRUcmFuc2Zvcm1hdGlvbnMpKTsKIAotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVu
ZGVyTGF5ZXIgY2hhbmdlcwotICAgIC8vIGlmIChoYXNMYXllcigpKQotICAgIC8vICAgICBsYXll
cigpLT5zZXRJc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQodHJ1ZSk7CisgICAgY29udGFp
bmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCk7CiB9CiAKIGJv
b2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpzZWxmV2lsbFBhaW50KCkKQEAgLTE2NSw3ICsxNjAsNyBA
QCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigp
OworICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgY3VycmVudFNW
R0xheW91dExvY2F0aW9uKCk7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
OjpNYXNrKSB7CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3Vw
cG9ydCBjaGFuZ2VzCiAgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygq
dGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTE4NSw3ICsxODAsNyBA
QCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZgogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKLSAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxh
eW91dExvY2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRP
ZmZzZXQgKyBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKIAogICAgIGF1dG8gdmlzdWFsT3Zl
cmZsb3dSZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOwogICAgIHZpc3VhbE92
ZXJmbG93UmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAppbmRleCBlMzQ4MmFiOWYwM2Ex
NWY5MzFhMjk5NjlkMWY2NTQwNjYwNWY1N2JiLi5mZDQyNWEzMGM0OGVkZDIyMTc3ODY1NTdhYWU1
ZmIwYjI2MmU3N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgKQEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNP
YmplY3RCb3VuZGluZ0JveFZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0Jv
eFZhbGlkOyB9CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IG9iamVjdEJv
dW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
b2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOyB9CiAgICAgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGlu
Z0JveDsgfQogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBh
aW50Qm91bmRpbmdCb3goKnRoaXMpOyB9CiAKQEAgLTQ5LDggKzUwLDYgQEAgcHJvdGVjdGVkOgog
ICAgIEFTQ0lJTGl0ZXJhbCByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJl
bmRlclNWR0NvbnRhaW5lciJfczsgfQogICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7Ci0KICAgICB2
b2lkIGxheW91dCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRDaGlsZHJlbigp
OwogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpA
QCAtNjIsNiArNjEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG1fb2JqZWN0Qm91bmRpbmdC
b3hWYWxpZCB7IGZhbHNlIH07CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Cisg
ICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOwog
ICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKaW5kZXggMjAwMDE0Nzc1
Y2VlODI1ZDFkYWZiYTRkOTQwZTJiOGQwMjMyNzU0Mi4uOGM5YzY1YWMyNGM5ZDI0MjViNjNkZjQ3
M2UyZTg5Y2MyNzVmOWU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZS5oCkBAIC01MSw2ICs1MSw5IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWw7CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWw7CiAKKyAgICBMYXlvdXRQb2ludCBj
dXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAg
ICB2b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYpIGZp
bmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIExheW91dFJlY3QgY2xpcHBlZE92
ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RD
b250ZXh0KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRl
JiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBm
aW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKaW5kZXggYzk2OTVlNmI2YTQzZjljZjRmZjAzOTVhYzM2MWE0MzI2MWRi
OGUyMy4uNmZmZWU5OTcxODJlOWVlNzIwNTJhOWFmMDc5NjkyMTg5MGMzYzMyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKQEAgLTYxLDEyICs2MSw4IEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZy
b21TdHlsZSgpCiB7CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxl
KCk7CiAKLSAgICBib29sIGhhc1NWR1RyYW5zZm9ybSA9IGZhbHNlOwogICAgIGlmIChpczxTVkdH
cmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpCi0gICAgICAgIGhhc1NWR1RyYW5zZm9ybSA9ICFk
b3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkuYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSgpLmlzSWRlbnRpdHkoKTsKLQotICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0
eShzdHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IGhhc1NWR1RyYW5zZm9y
bSk7Ci0gICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGhhc1NWR1RyYW5zZm9ybSk7CisgICAgICAgIHVw
ZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oZWxl
bWVudCgpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94
UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVy
Qm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKQEAgLTE0MSw3ICsxMzcsNyBA
QCBMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWlu
dChjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJl
Y3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9uKCksIGxheW91
dFNpemUoKSkpKTsKKyAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChh
Y2N1bXVsYXRlZE9mZnNldCArIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpLCBtX2xheW91dFJlY3Qu
c2l6ZSgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5k
ZXggYmMxMTI0NTA0M2M5ZDFlNTRlYjBjYzRjYzJjMTQ4YzlhOWIyMzhjMy4uYWU4OWI4ZGVhYzk4
YjJkZTViYzk5MTc2YTI5OGE0MzMyODQ0N2RjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtNTgsMjYgKzU4LDIxIEBA
IHB1YmxpYzoKIAogICAgIGlubGluZSBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CiAKKyAg
ICBMYXlvdXRSZWN0IGN1cnJlbnRTVkdMYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlv
dXRSZWN0OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdChjb25zdCBMYXlvdXRS
ZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVjdCA9IGxheW91dFJlY3Q7IH0KKworICAgIExh
eW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0
TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBmaW5hbCB7IG1fbGF5b3V0UmVj
dC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKwogICAgIC8vIE1pbWljIHRoZSBSZW5kZXJCb3gg
YWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2FtZSB0ZXJtaW5vbG9neSB0aGUgcGFpbnRpbmcg
LyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBpcwogICAgIC8vIHNpbWlsYXIgdG8gcmVhZCBj
b21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBzdWNoIGFzIFJlbmRlckJveCAmIGZyaWVuZHMu
CiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJu
IHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0LnNpemUoKSB9OyB9CiAgICAgTGF5b3V0UmVj
dCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0
RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RFcXVpdmFsZW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0KICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQogCi0gICAgdm9pZCBhcHBs
eVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25z
dCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQotCi0gICAgTGF5b3V0UmVjdCBs
YXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0gICAgdm9pZCBzZXRM
YXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0g
bGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9p
bnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2Nh
dGlvbik7IH0KLQotICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQo
b2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KLSAgICBMYXlvdXRQb2lu
dCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigp
OyB9Ci0gICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KLSAgICBMYXlvdXRTaXpl
IGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6ZSgpOyB9Ci0KICAg
ICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25P
ZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnko
Y3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOyB9CiAgICAgRmxvYXRSZWN0IGJvcmRlckJveFJl
Y3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIFJlbmRlckJv
eDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgPSBSZW5kZXJCb3g6OkNhY2hlUmVuZGVyQm94
RnJhZ21lbnRJbmZvKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQp
IGNvbnN0OwogICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNv
bnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdt
ZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92
ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCByZWxldmFuY3kpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRleCBhOWI5MzMy
MmIwYThmMjQ2ZTAyYzU2MDM2MjVkZjMzNDZkM2RmYmNjLi4yMmEwMGNmNDQ5M2NiNGJkMTkzMjYw
YjExOTdkNDMyY2NjN2Y3MzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTE5Niw2ICsxOTYsMTAgQEAgdm9pZCBSZW5kZXJTVkdSb290
OjpsYXlvdXQoKQogCiAgICAgICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdC
b3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pOworCisgICAgICAg
IGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zv
cm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERl
Y29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJ
Z25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0
VHJhbnNmb3JtYXRpb25zID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVk
Qm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0
aW9ucyk7CisKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0
YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAgICAgfQogCkBAIC0zOTcsNiArNDAx
LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUoKQogICAgIFJlbmRlclJl
cGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAogICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOwor
ICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpOwogCiAgICAgaWYgKHNob3VsZEFw
cGx5Vmlld3BvcnRDbGlwKCkpCiAgICAgICAgIHNldEhhc05vblZpc2libGVPdmVyZmxvdygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAppbmRleCBlN2Y3
MTU1MzI2N2ViMjM5ODAwNThkMTdlZDA4ZGM4MjAxODAwMDhmLi5jMGQxY2NkZGEzODY4OWY3MmRj
ZmIzZWExNDAzMjNmYjcxMmE1MDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91
bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAg
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9u
czsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCkBAIC0xMjMsNiAr
MTI0LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9jb250YWluZXJTaXplOwogICAgIEZs
b2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5k
aW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsKICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3Vu
ZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV92aWV3Qm94VHJhbnNmb3JtOwogICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCmluZGV4IGNh
YWY2YjM1YjBlMDUyMDAzZGY5MjAxZWVjMDAwNGQ1NDM1MWY0MDYuLmUyNjE2MDg2MjBiYWI5NDA0
NmI4MGNlOWU2OWQwODgzZTVlMGQ0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBSZW5kZXJT
VkdTaGFwZTo6bGF5b3V0KCkKICAgICAgICAgdXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOwogCiAg
ICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRMYXlvdXRSZWN0
KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91bmRpbmdCb3gpKTsKKyAgICAgICAgc2V0Q3Vy
cmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVjdChtX2ZpbGxCb3VuZGluZ0JveCkp
OwogICAgIH0KIAogICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CkBAIC0yODgsNyArMjg4LDcg
QEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24o
KTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1
cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR01hc2so
KnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0zMDgsNyArMzA4LDcg
QEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4dCgpKTsKIAotICAgIGF1dG8gY29vcmRpbmF0
ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIGZsb29yZWRM
YXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLmxvY2F0aW9uKCkpOworICAgIGF1dG8gY29v
cmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5v
bWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkudHJhbnNs
YXRlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbi53aWR0aCgpLCBjb29yZGluYXRl
U3lzdGVtT3JpZ2luVHJhbnNsYXRpb24uaGVpZ2h0KCkpOwogCiAgICAgaWYgKHN0eWxlKCkuc3Zn
U3R5bGUoKS5zaGFwZVJlbmRlcmluZygpID09IFNoYXBlUmVuZGVyaW5nOjpDcmlzcEVkZ2VzKQpA
QCAtMzQ1LDcgKzM0NSw3IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAgICAgaWYgKGhpdFRl
c3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbGF5b3V0TG9j
YXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCAr
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byBsb2NhbFBvaW50ID0gbG9j
YXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwogICAgIGF1dG8gYm91bmRpbmdCb3hUb3BMZWZ0Q29y
bmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3Ju
ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAppbmRleCBiMDBmYjUwYWE5ZTAw
MDE3OTdmYzk1NTA4NTg2YTZiMjE0MDc3Zjc5Li4wZGViMGUzN2JiYzNkZmVlZTA5OTIwMGJmZDVj
NWIwMDQ4YzljYzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKQEAgLTk3LDgg
Kzk3LDEwIEBAIHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJv
bVN0eWxlKCkKIHsKICAgICBSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0ZUZyb21TdHlsZSgpOwog
Ci0gICAgaWYgKGFzc29jaWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgpKSkKKyAgICBp
ZiAoYXNzb2NpYXRlZFVzZUVsZW1lbnQoZ3JhcGhpY3NFbGVtZW50KCkpKSB7CiAgICAgICAgIHNl
dEhhc1NWR1RyYW5zZm9ybSgpOworICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVy
dHkoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6
YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8
UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4gb3B0aW9ucykgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uY3BwCmluZGV4IDc5ODA5OGRlYjJjOTg1NDY1YjkxNjA3ODY0Nzk0Yzg2ZWZi
NDY3MzMuLjRkYjVjODIxNmZmYTA4MTg1ZDAwMDU5M2Y3ZTUyMWJkNTExNmUyYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmNwcApAQCAtMTc1LDggKzE3NSwxMCBAQCBGbG9hdFJlY3QgU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0JvdW5kaW5nQm94
QwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbikgJiYgaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihj
aGlsZCkpCiAgICAgICAgICAgICBjaGlsZEJvdW5kaW5nQm94Q29tcHV0YXRpb24uYWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKHsgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRo
RmlsdGVyQm94IH0sIGNoaWxkQm94KTsKIAotICAgICAgICBpZiAoYXV0byBsYXllclRyYW5zZm9y
bSA9IHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkKGNoaWxkKSkKLSAgICAgICAgICAgIGNo
aWxkQm94ID0gbGF5ZXJUcmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAgICAgICBpZiAo
IW9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRpb25z
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1hdGlv
bk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICAgICAgY2hpbGRCb3ggPSBsYXll
clRyYW5zZm9ybS0+bWFwUmVjdChjaGlsZEJveCk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAo
b3B0aW9ucyA9PSBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pCiAgICAgICAgICAgICB1bml0
ZUJvdW5kaW5nQm94UmVzcGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNoaWxkLCBjaGls
ZEJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5oCmluZGV4IDgzZGE2M2JkNmYwOTgyZWM2N2ZhNWIzYmM5NDZi
ZDg4MmQyNTlkNDQuLjkzODU0MTFkOGM4ZmM3NzMzMzMzZTEyZjgxZTJiMDhjMTNkYWU5NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBJZ2FsaWEgUy5MLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxNSArMzUsMTYgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24oY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYpOwogICAgIH5TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKCkgPSBkZWZhdWx0OwogCi0gICAg
ZW51bSBjbGFzcyBEZWNvcmF0aW9uT3B0aW9uIDogdWludDhfdCB7CisgICAgZW51bSBjbGFzcyBE
ZWNvcmF0aW9uT3B0aW9uIDogdWludDE2X3QgewogICAgICAgICBJbmNsdWRlRmlsbFNoYXBlICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMCwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgZmlsbCcg
ICAgICovCiAgICAgICAgIEluY2x1ZGVTdHJva2VTaGFwZSAgICAgICAgICAgICAgICAgID0gMSA8
PCAxLCAvKiBjb3JyZXNwb25kcyB0byAnYm9vbCBzdHJva2UnICAgKi8KICAgICAgICAgSW5jbHVk
ZU1hcmtlcnMgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsIC8qIGNvcnJlc3BvbmRzIHRv
ICdib29sIG1hcmtlcnMnICAqLwogICAgICAgICBJbmNsdWRlQ2xpcHBlcnMgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMywgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgY2xpcHBlcnMnICovCiAg
ICAgICAgIEluY2x1ZGVNYXNrZXJzICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA0LCAvKiBX
ZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KICAgICAgICAgSW5jbHVkZU91dGxpbmUg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDUsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRl
cm5hbCAgICAqLwotICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9
IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCi0gICAgICAgIE92
ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNoaWxkcmVuID0gMSA8PCA3ICAvKiBXZWJLaXQgZXh0
ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KKyAgICAgICAgSWdub3JlVHJhbnNmb3JtYXRpb25zICAg
ICAgICAgICAgICAgPSAxIDw8IDYsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAq
LworICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNywg
LyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIE92ZXJyaWRlQm94
V2l0aEZpbHRlckJveEZvckNoaWxkcmVuID0gMSA8PCA4ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0g
aW50ZXJuYWwgICAgKi8KICAgICB9OwogCiAgICAgdXNpbmcgRGVjb3JhdGlvbk9wdGlvbnMgPSBP
cHRpb25TZXQ8RGVjb3JhdGlvbk9wdGlvbj47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKaW5kZXggODEzYzNlY2VmOTM4YmRhNDg2
NDQ0ZDRhZjcwOGQ5N2NiNzNjZWFlMC4uODMyODJjZjAzMTY2ZTgyZGM0ZDI2MDY5MTAwOTI0ZmIy
ODUwZTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250
YWluZXJMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29u
dGFpbmVyTGF5b3V0LmNwcApAQCAtMTIwLDQxICsxMjAsNiBAQCB2b2lkIFNWR0NvbnRhaW5lckxh
eW91dDo6bGF5b3V0Q2hpbGRyZW4oYm9vbCBjb250YWluZXJOZWVkc0xheW91dCkKICAgICAgICAg
QVNTRVJUKGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuaXNFbXB0eSgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9i
amVjdD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KHJlbmRlcmVyKS5sYXlvdXRMb2NhdGlvbigpOwotCi0gICAgaWYgKGlzPFJlbmRlclNW
R0Jsb2NrPihyZW5kZXJlcikpIC8vIDxmb3JlaWduT2JqZWN0PiAvIDx0ZXh0PgotICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKS5sb2NhdGlvbigpOwotCi0g
ICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVuZGVyZXIpKSAvLyA8dHNwYW4+IC8gPHRleHRQ
YXRoPgotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldExheW91dExvY2F0aW9u
Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIG5l
d0xvY2F0aW9uKQotewotICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIp
KSB7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikuc2V0
TGF5b3V0TG9jYXRpb24obmV3TG9jYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+Ci0gICAgaWYgKGlzPFJlbmRlclNWR0Jsb2Nr
PihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVy
KS5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgotICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmU+KHJl
bmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0Nv
bnRhaW5lcigpCiB7CiAgICAgaWYgKG1fcG9zaXRpb25lZENoaWxkcmVuLmlzRW1wdHkoKSkKQEAg
LTE3Nyw0MCArMTQyLDM2IEBAIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxk
cmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCiAgICAgfTsKIAogICAgIC8vIEFycmFuZ2UgbGF5b3V0
IGxvY2F0aW9uIGZvciBhbGwgY2hpbGQgcmVuZGVyZXJzIHJlbGF0aXZlIHRvIHRoZSBjb250YWlu
ZXIgbGF5b3V0IGxvY2F0aW9uLgotICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRpb24gPSBmbG9v
cmVkTGF5b3V0UG9pbnQobV9jb250YWluZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGls
ZHJlbikgeworICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRpb24gPSBtX2NvbnRhaW5lci5ub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKKyAgICBmb3IgKFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IGNoaWxkIDogbV9wb3NpdGlvbmVkQ2hpbGRyZW4pIHsKICAgICAgICAgdmVyaWZ5UG9zaXRpb25l
ZENoaWxkUmVuZGVyZXJFeHBlY3RhdGlvbihjaGlsZCk7CiAKLSAgICAgICAgYXV0byBvYmplY3RC
b3VuZGluZ0JveENoaWxkID0gY2hpbGQub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgYXV0
byBsYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveENo
aWxkLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlv
biA9IHRvTGF5b3V0UG9pbnQobGF5b3V0TG9jYXRpb24gLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7
Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9t
UmVuZGVyZXIoY2hpbGQpOwotICAgICAgICBpZiAoY3VycmVudExheW91dExvY2F0aW9uID09IGRl
c2lyZWRMYXlvdXRMb2NhdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzZXRM
YXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKGNoaWxkLCBkZXNpcmVkTGF5b3V0TG9jYXRpb24pOwor
ICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlvbiA9IHRvTGF5b3V0UG9pbnQoY2hpbGQu
bm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7CisgICAg
ICAgIGlmIChjaGlsZC5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSAhPSBkZXNpcmVkTGF5b3V0
TG9jYXRpb24pCisgICAgICAgICAgICBjaGlsZC5zZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24o
ZGVzaXJlZExheW91dExvY2F0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHQ29udGFpbmVyTGF5
b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9u
Q29uc2lzdGVuY3koY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCiB7CiAg
ICAgaWYgKHJlbmRlcmVyLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkgJiYgIXJlbmRlcmVyLmlz
U1ZHUm9vdCgpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0
TG9jYXRpb25Gcm9tUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBhdXRvIGN1cnJlbnRMYXlv
dXRMb2NhdGlvbiA9IHJlbmRlcmVyLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAg
ICAgIGF1dG8gZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9IGN1cnJlbnRMYXlvdXRMb2NhdGlvbjsK
LSAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJFbGVt
ZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9y
c09mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsKICAgICAgICAgICAg
IEFTU0VSVChhbmNlc3Rvci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKTsKICAgICAgICAgICAg
IGlmIChhbmNlc3Rvci5pc1NWR1Jvb3QoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGV4cGVjdGVkTGF5b3V0TG9jYXRpb24ubW92ZUJ5KGxheW91dExvY2F0aW9uRnJvbVJl
bmRlcmVyKGFuY2VzdG9yKSk7CisgICAgICAgICAgICBleHBlY3RlZExheW91dExvY2F0aW9uLm1v
dmVCeShhbmNlc3Rvci5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChy
ZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBh
dXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IHJlbmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2Nh
dGlvbigpOwogICAgICAgICBpZiAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9PSBpbml0aWFsTGF5
b3V0TG9jYXRpb24pIHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcsIHN0cmVhbSA8
PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJlciA8PCAiICgi
IDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKS5jaGFyYWN0ZXJzKCkgPDwgIikiCi0gICAgICAgICAg
ICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBvYmplY3RCb3Vu
ZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGFyZSBpbiBzeW5jLiIpOworICAgICAgICAgICAgICAg
IDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgY3VycmVudFNWR0xheW91
dExvY2F0aW9uIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uIGFyZSBpbiBzeW5jLiIpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNWRywgc3RyZWFtIDw8
ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwgJnJlbmRlcmVyIDw8ICIgKCIg
PDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3RlcnMoKSA8PCAiKSIKLSAgICAgICAgICAg
ICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIG9iamVjdEJvdW5k
aW5nQm94IC8gbGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5j
IGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxh
eW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5jIGR1
ZSB0byBwYXJ0aWFsIGxheW91dD8iCiAgICAgICAgICAgICAgICAgPDwgIiBjdXJyZW50TGF5b3V0
TG9jYXRpb249IiA8PCBjdXJyZW50TGF5b3V0TG9jYXRpb24KICAgICAgICAgICAgICAgICA8PCAi
ICAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbj0iIDw8IGV4cGVjdGVkTGF5b3V0TG9jYXRpb24KICAg
ICAgICAgICAgICAgICA8PCAiICE9IGluaXRpYWxMYXlvdXRMb2NhdGlvbj0iIDw8IGluaXRpYWxM
YXlvdXRMb2NhdGlvbiA8PCAiKSIKQEAgLTIyNCw3ICsxODUsNyBAQCB2b2lkIFNWR0NvbnRhaW5l
ckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJFbGVt
ZW50JiByZQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsK
ICAgICAgICAgaWYgKGNoaWxkLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNoaWxkKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaAppbmRleCBl
YzEzMDkzNTEyNmNmN2VjZTE1OTk5MmE4ZGI3MWMxMTY3MzAyNmU3Li41MzQ0MDFjY2Q0ZmI4Yzhl
ZmMyMjU3OGZhZGJmMDYxZDFmMmZlODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwogCi0gICAg
c3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJF
bGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5j
eShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgdHJhbnNm
b3JtVG9Sb290Q2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKTsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggZjJjMDc2ZjdiNzcy
ZDExNWU0ZWVmNmE4MDZmYmFiYjI1ZjU1ZmU5My4uMDZlNzRiOWMzNmE4ZmZkYzdmMWViOTE5MzNk
OGRhNDliMjRiODlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1
c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAg
LTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHR3JhcGhpY3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzY0LDEzICszNjUs
MjEgQEAgdm9pZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2UKICAgICBlbHNlCiAgICAgICAgIHN0eWxlLnNl
dFVzZWRaSW5kZXgoc3R5bGUuc3BlY2lmaWVkWkluZGV4KCkpOwogCisgICAgLy8gRm9yIFNWRyBj
b21wYXRpYmlsaXR5IHB1cnBvc2VzIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlICdhbmltYXRlZExv
Y2FsVHJhbnNmb3JtJyBiZXNpZGVzIHRoZSBSZW5kZXJTdHlsZSB0byBxdWVyeQorICAgIC8vIGlm
IGFuIGVsZW1lbnQgaGFzIGEgdHJhbnNmb3JtLiBTVkcgdHJhbnNmb3JtcyBhcmUgbm90IHN0b3Jl
ZCBvbiB0aGUgUmVuZGVyU3R5bGUsIGFuZCB0aHVzIHdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgaGVy
ZS4KKyAgICBib29sIGhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSA9IHN0eWxlLmhhc1RyYW5z
Zm9ybVJlbGF0ZWRQcm9wZXJ0eSgpOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgIGlmICghaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5ICYmIGlzPFNWR0dyYXBoaWNz
RWxlbWVudD4obV9lbGVtZW50KSAmJiBtX2VsZW1lbnQtPmRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpKQorICAgICAgICBoYXNUcmFuc2Zvcm1SZWxhdGVk
UHJvcGVydHkgPSAhZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PigqbV9lbGVtZW50KS5hbmlt
YXRlZExvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpOworI2VuZGlmCisKICAgICAvLyBBdXRv
IHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBv
YmplY3RzLiBUaGlzIHByZXZlbnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNo
b3VsZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNw
YXJlbnQKICAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWluZGV4
IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tz
L3JlZmxlY3Rpb25zLgogICAgIGlmIChzdHlsZS5oYXNBdXRvVXNlZFpJbmRleCgpKSB7CiAgICAg
ICAgIGlmICgobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9l
bGVtZW50KQogICAgICAgICAgICAgfHwgc3R5bGUuaGFzT3BhY2l0eSgpCi0gICAgICAgICAgICB8
fCBzdHlsZS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQorICAgICAgICAgICAgfHwgaGFz
VHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5CiAgICAgICAgICAgICB8fCBzdHlsZS5oYXNNYXNrKCkK
ICAgICAgICAgICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKICAgICAgICAgICAgIHx8IHN0eWxlLmJv
eFJlZmxlY3QoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458305</attachid>
            <date>2022-04-25 15:29:36 -0700</date>
            <delta_ts>2022-04-25 16:33:25 -0700</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-239717-20220425152935.patch</filename>
            <type>text/plain</type>
            <size>46409</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVhMGFiNzcyZWM4NGE2
NjIzNTNkOTQwNzc5NTEzOWNiNGU4Y2M4ZC4uNjFhOTI1MzAzYWQ4ZDNkM2JjMTkyYmRlY2MwOTc3
Zjk4YjhhNGZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIyLTA0LTI1ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBGaXggb3JpZ2luIG9mIHRyYW5zZm9ybWF0aW9ucyBpbiBTVkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTcxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0aGUgbWFqb3JpdHkgb2YgU1ZHIHRy
YW5zZm9ybSBpc3N1ZXMgaW4gTEJTRS4gd2Via2l0Lm9yZy9iLzIzNzcxMSBsYWlkIHRoZSBncm91
bmR3b3JrIGZvciBTVkcKKyAgICAgICAgdHJhbnNmb3JtcyBpbiBMQlNFLCBob3dldmVyIHRoZXJl
IGFyZSBzdGlsbCBpc3N1ZXM6CisKKyAgICAgICAgLSBTVkcgdHJhbnNmb3JtcyBzcGVjaWZpZWQg
YWxvbmUgb24gU1ZHIGVsZW1lbnRzLCB3L28gYW55IGFkZGl0aW9uYWwgc3R5bGUvcGVyc3BlY3Rp
dmUgcmVsYXRlZCBwcm9wZXJ0eQorICAgICAgICAgIHN1Y2ggYXMgdHJhbnNmb3JtLWJveCAvIHRy
YW5zZm9ybS1vcmlnaW4gLyAuLi4gZG8gbm90IHRyaWdnZXIgbGF5ZXIgY3JlYXRpb24sIGZpeCBi
eSBhZGFwdGluZyBTdHlsZUFkanVzdGVyLgorCisgICAgICAgIC0gU3dpdGNoaW5nIG9uL29mZiB0
cmFuc2Zvcm1zIGZvciBhIFNWRyBlbGVtZW50LCB3YXMgbm90IHRyYWNraW5nIHVwZGF0ZXMgdG8g
Ym90aCAnSGFzU1ZHVHJhbnNmb3JtJyBhbmQKKyAgICAgICAgICAnSGFzVHJhbnNmb3JtUmVsYXRl
ZFByb3BlcnR5JyBmbGFncyBjb3JyZWN0bHksIGZpeCB0aGF0LgorCisgICAgICAgIC0gTW9kaWZ5
IFNWR0NvbnRhaW5lckxheW91dCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgb24gdGhlIGNoaWxkcmVu
IHRyYW5zZm9ybWF0aW9ucyB3aGVuIGNvbXB1dGluZyBjb250YWluZXIKKyAgICAgICAgICBib3Vu
ZGFyaWVzLiBMYXlvdXQgaXMgaW52YXJpYW50IHVuZGVyIHRyYW5zZm9ybWF0aW9uIGNoYW5nZXMg
bm93LCBqdXN0IGFzIGZvciBDU1MuIFRoaXMgYXZvaWRzIHJlLWxheW91dHMKKyAgICAgICAgICB3
aGVuIGNoYW5naW5nIHRoZSBTVkcgdHJhbnNmb3JtYXRpb25zIGluIG5vbi1hY2NlbGVyYXRkIHdh
eXMsIHN1Y2ggYXMgYnkgU1ZHVHJhbnNmb3JtTGlzdCBtYW5pcHVsYXRpb24sCisgICAgICAgICAg
U01JTCA8YW5pbWF0ZVRyYW5zZm9ybT4gZXRjLgorCisgICAgICAgICAgLT4gU1ZHIHRyYW5zZm9y
bXMgYXJlIG5vdyBoYW5kbGVkIGp1c3QgbGlrZSBDU1MgdHJhbnNmb3Jtcy4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2luZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3Jt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpyZW5kZXJlckxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6Om5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5
b3V0TG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdDo6c2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9iamVjdEJv
dW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6
bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjdXJyZW50U1ZHTGF5b3V0UmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0Q3VycmVudFNWR0xheW91dFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmZyYW1lUmVjdEVx
dWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TGF5
b3V0TG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnBhaW50aW5nTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9m
ZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Omxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBk
YXRlRnJvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0NvbnRhaW5lckxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlv
dXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSk6
CisgICAgICAgIChXZWJDb3JlOjpsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkFk
anVzdGVyOjphZGp1c3QgY29uc3QpOgorCiAyMDIyLTA0LTI1ICBDaHJpcyBGbGVpemFjaCAgPGNm
bGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IERvbid0IGV4cG9zZSBhcmlhLXJvbGVk
ZXNjcmlwdGlvbiB2YWx1ZSBvbiAiZ2VuZXJpYyIgZWxlbWVudHMgKGUuZy4gZGl2IGFuZCBzcGFu
KSB1bmxlc3MgZXhwbGljaXQgcm9sZSB2YWx1ZSBpcyBhbHNvIGRlZmluZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiNzZlMTgxZTZhMjAwZDcwOGNm
ODQ2NGY1MGQ4MGU1MGIwM2UxYWNhLi42ODBjZTVjNzZjYTZhZDZhMzdjYWE3M2IwYTliNWNhMGEw
YmViMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBA
IC0yNDE4LDIxICsyNDE4LDQzIEBAIEZsb2F0UmVjdCBSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VC
b3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKICAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+
KGVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvIGFsaWduUmVmZXJl
bmNlQm94ID0gWyZdKEZsb2F0UmVjdCByZWZlcmVuY2VCb3gpIHsKKyAgICAgICAgLy8gVGhlIENT
UyBib3JkZXJCb3hSZWN0KCkgaXMgZGVmaW5lZCB0byBzdGFydCBhdCBhbiBvcmlnaW4gb2YgKDAs
IDApLgorICAgICAgICAvLyBBIHBvc3NpYmxlIHNoaWZ0IG9mIGEgQ1NTIGJveCAoZS5nLiBkdWUg
dG8gbm9uLXN0YXRpYyBwb3NpdGlvbiArIHRvcC9sZWZ0IHByb3BlcnRpZXMpCisgICAgICAgIC8v
IGRvZXMgbm90IGVmZmVjdCB0aGUgYm9yZGVyQm94UmVjdCgpIGxvY2F0aW9uLiBUaGUgbG9jYXRp
b24gaW5mb3JtYXRpb24KKyAgICAgICAgLy8gaXMgcHJvcGFnYXRlZCB1cG9uIHBhaW50IHRpbWUs
IGUuZy4gdmlhICdwYWludE9mZnNldCcgd2hlbiBjYWxsaW5nIFJlbmRlck9iamVjdDo6cGFpbnQo
KSwKKyAgICAgICAgLy8gb3IgYnkgYWx0ZXJpbmcgdGhlIFJlbmRlckxheWVyIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRvIGluY2x1ZGUgdGhlICdvZmZzZXRGcm9tQW5jZXN0b3InCisgICAgICAgIC8v
IHJpZ2h0IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHdoZW4gQ1NTIHRyYW5zZm9ybWF0
aW9ucyBhcmUgcHJlc2VudCAoc2VlIFJlbmRlckxheWVyCisgICAgICAgIC8vIHBhaW50TGF5ZXJC
eUFwcGx5aW5nVHJhbnNmb3JtKCkgZm9yIGRldGFpbHMpLgorICAgICAgICAvLworICAgICAgICAv
LyBUbyBtaW1pYyB0aGUgZXhwZWN0YXRpb24gZm9yIFNWRywgJ2ZpbGwtYm94JyBtdXN0IGJlaGF2
ZSB0aGUgc2FtZTogaWYgd2UnZCBpbmNsdWRlCisgICAgICAgIC8vIHRoZSAncmVmZXJlbmNlQm94
JyBsb2NhdGlvbiBpbiB0aGUgcmV0dXJuZWQgcmVjdCwgd2UnZCBhcHBseSB0aGUgKHgsIHkpIGxv
Y2F0aW9uCisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZvciB0aGUgU1ZHIHJlbmRlcmVyIHR3aWNl
LiBXZSB3b3VsZCBzaGlmdCB0aGUgJ3RyYW5zZm9ybS1vcmlnaW4nIGJ5ICh4LCB5KQorICAgICAg
ICAvLyBhbmQgYXQgdGhlIHNhbWUgdGltZSBhbHRlciB0aGUgQ1RNIGluIFJlbmRlckxheWVyOjpw
YWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSgpIGJ5CisgICAgICAgIC8vIGluY2x1ZGluZyBh
IHRyYW5zbGF0aW9uIHRvIHRoZSBlbmNsb3NpbmcgdHJhbnNmb3JtZWQgYW5jZXN0b3IgKCdvZmZz
ZXRGcm9tQW5jZXN0b3InKS4KKyAgICAgICAgLy8gQXZvaWQgdGhhdCwgYW5kIG1vdmUgYnkgLW5v
bWluYWxTVkdMYXlvdXRMb2NhdGlvbigpLgorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorICAgICAgICBpZiAoaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhaXNTVkdSb290
KCkgJiYgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkp
CisgICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KC1kb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqdGhpcykubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiByZWZlcmVuY2VCb3g7CisgICAgfTsKKwogICAgIHN3aXRjaCAoYm94VHlw
ZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICBjYXNlIENTU0JveFR5
cGU6OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94OgogICAgIGNh
c2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94
KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJveChvYmplY3RCb3VuZGluZ0JveCgp
KTsKICAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKICAgICBjYXNlIENTU0JveFR5cGU6
Ok1hcmdpbkJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKLSAgICAgICAgcmV0
dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgICAgIHJldHVybiBhbGlnblJlZmVyZW5jZUJv
eChzdHJva2VCb3VuZGluZ0JveCgpKTsKICAgICBjYXNlIENTU0JveFR5cGU6OlZpZXdCb3g6CiAg
ICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11dGFibGUgU1ZH
TGVuZ3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVhdGVkIFJlbmRl
clNWR1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCiAgICAgICAgIEZs
b2F0U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQoZG93bmNhc3Q8
U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsK
LSAgICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICAgICAgcmV0dXJuIGFs
aWduUmVmZXJlbmNlQm94KHsgeyB9LCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCBjMmRlMGI2ZDVmZDZmZDgyMTAyZjcwYmNjYzE5YmE3NjkzZGFlYzY3Li45MDM5ZDEx
MjRhZTllMzVlOTJhZjU0ZDdjYTMwZmE5ZmE5M2RiNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMgU2Nyb2xsaW5n
U2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKIAogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lz
UmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkK
LSAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5p
c01lZGlhKCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXIpCisgICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyLmlzUmVuZGVy
VmlldygpKQorICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXIuaXNNZWRpYSgp
KQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5n
Q29udGV4dChmYWxzZSkKICAgICAsIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KGZh
bHNlKQpAQCAtMzQzLDcgKzM0Myw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2hhc05v
dElzb2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50c1N0YXR1c0RpcnR5KGZhbHNlKQogI2VuZGlmCiAg
ICAgLCBtX3JlcGFpbnRSZWN0c1ZhbGlkKGZhbHNlKQotICAgICwgbV9yZW5kZXJlcihyZW5kZXJl
ckxheWVyTW9kZWxPYmplY3QpCisgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQogewogICAgIHNl
dElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJc0NT
U1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKQEAgLTM1Myw5
ICszNTMsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigp
KQogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
ID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkuZmlyc3RDaGls
ZCgpKSB7CisgICAgaWYgKCFyZW5kZXJlci5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbV92aXNp
YmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1faGFzVmlzaWJsZUNvbnRl
bnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGU7CisgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlci5zdHlsZSgpLnZpc2li
aWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KIH0KIApAQCAtNTUyLDkgKzU1
Miw2IEBAIHN0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5kZXJlcigpOwog
ICAgIHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotI2lmIEVO
QUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAgICB8fCByZW5kZXJlci5oYXNTVkdU
cmFuc2Zvcm0oKQotI2VuZGlmCiAgICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQYXRoKCkKICAg
ICAgICAgfHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKICAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFz
aygpCkBAIC0zNTQ1LDE5ICszNTQyLDI3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJD
b250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAKIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgT3B0
aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRTaXplJiB0cmFu
c2xhdGlvbk9mZnNldCkKIHsKKyAgICBhdXRvIHVzZXNTVkdTdWJ0cmVlVHJhbnNmb3JtUnVsZXMg
PSBbXShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgeworI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIuZG9jdW1l
bnQoKS5zZXR0aW5ncygpLmxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkgJiYgcmVuZGVyZXIu
aXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAhcmVuZGVyZXIuaXNTVkdSb290KCk7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBUaGlzIGludm9sdmVz
IHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50
IGNvb3JkaW5hdGUgc3BhY2UsIGJ1dCBwcmVzZXJ2aW5nCiAgICAgLy8gdGhlIGFjY3VtdWxhdGVk
IGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgorICAgIC8vIE5vdGU6IFRoZSBwaXhlbC1zbmFw
cGluZyBsb2dpYyBpcyBkaXNhYmxlZCBmb3IgdGhlIHdob2xlIFNWRyByZW5kZXIgdHJlZSwgZXhj
ZXB0IHRoZSBvdXRlcm1vc3QgPHN2Zz4uCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBMYXlvdXRTaXpl
IG9mZnNldEZyb21QYXJlbnQgPSBvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZvLnJvb3RM
YXllcik7CiAgICAgb2Zmc2V0RnJvbVBhcmVudCArPSB0cmFuc2xhdGlvbk9mZnNldDsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGlu
Z0luZm8ucGFpbnRCZWhhdmlvcikpOwogICAgIC8vIEFkZCB0aGUgc3VicGl4ZWwgYWNjdW11bGF0
aW9uIHRvIHRoZSBjdXJyZW50IGxheWVyJ3Mgb2Zmc2V0IHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBz
bmFwIHRoZSB0cmFuc2xhdGVSaWdodCB2YWx1ZSB0byB3aGVyZSB0aGUgcmVuZGVyZXIoKSBpcyBz
dXBwb3NlZCB0byBiZSBwYWludGluZy4KICAgICBMYXlvdXRTaXplIG9mZnNldEZvclRoaXNMYXll
ciA9IG9mZnNldEZyb21QYXJlbnQgKyBwYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQ7Ci0gICAg
RmxvYXRTaXplIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllciA9IHRvRmxvYXRT
aXplKHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG9mZnNldEZvclRoaXNM
YXllciksIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgRmxvYXRTaXplIGFsaWduZWRPZmZzZXRG
b3JUaGlzTGF5ZXIgPSB1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzKHJlbmRlcmVyKCkpID8g
b2Zmc2V0Rm9yVGhpc0xheWVyIDogdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2aWNlUGl4ZWxz
KHRvTGF5b3V0UG9pbnQob2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsK
ICAgICAvLyBXZSBoYW5kbGUgYWNjdW11bGF0ZWQgc3VicGl4ZWxzIHRocm91Z2ggbmVzdGVkIGxh
eWVycyBoZXJlLiBTaW5jZSB0aGUgY29udGV4dCBnZXRzIHRyYW5zbGF0ZWQgdG8gZGV2aWNlIHBp
eGVscywKICAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBhZGQgdGhlIGRlbHRhIHRvIHRoZSBh
Y2N1bXVsYXRlZCBwaXhlbHMgY29taW5nIGZyb20gYW5jZXN0b3IgbGF5ZXJzLgogICAgIC8vIFRy
YW5zbGF0ZSB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgc25hcHBpbmcgcG9zaXRpb24gdG8g
YXZvaWQgb2ZmLWRldmljZS1waXhlbCBwb3NpdGluZy4KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
UmlnaHQoZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRoKCksIGRldmlj
ZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CisgICAgdHJhbnNmb3Jt
LnRyYW5zbGF0ZVJpZ2h0KGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIud2lkdGgoKSwgYWxpZ25l
ZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CiAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9y
bS4KICAgICBhdXRvIG9sZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgYXV0byBh
ZmZpbmVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTM1Njcs
NyArMzU3MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5z
Zm9ybShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIHBhaW50aW5nSW5m
by5ldmVudFJlZ2lvbkNvbnRleHQtPnB1c2hUcmFuc2Zvcm0oYWZmaW5lVHJhbnNmb3JtKTsKIAog
ICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1
cy4KLSAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZzZXRGb3JUaGlz
TGF5ZXIgLSBMYXlvdXRTaXplKGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllcik7
CisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0OworICAgIGlmICghdXNlc1NW
R1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSAmJiAhcmVuZGVyZXIoKS5pc1NWR1Jv
b3QoKSkKKyAgICAgICAgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldCA9IG9mZnNldEZvclRoaXNMYXll
ciAtIExheW91dFNpemUoYWxpZ25lZE9mZnNldEZvclRoaXNMYXllcik7CisKICAgICBMYXllclBh
aW50aW5nSW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8pOwogICAgIHRy
YW5zZm9ybWVkUGFpbnRpbmdJbmZvLnJvb3RMYXllciA9IHRoaXM7CiAgICAgdHJhbnNmb3JtZWRQ
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QgPSBMYXlvdXRSZWN0KGVuY2xvc2VSZWN0VG9EZXZp
Y2VQaXhlbHModmFsdWVPckRlZmF1bHQodHJhbnNmb3JtLmludmVyc2UoKSkubWFwUmVjdChwYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA3ZDNjYjE1N2QwZmJmMjAyZWE3ZDhhNjQ5
MjNmODA0ZGYzMDkxYzcyLi44MDQ3NjFhOGY5MjAwMDRlOGZkZDQyN2UxOGQ0YTc5ODQ1MTMxYjlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtOTg0LDcgKzk4NCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5sb2NhdGlvbigpOwogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQog
ICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKS5s
YXlvdXRMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01v
ZGVsT2JqZWN0PihyZW5kZXJlcigpKS5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICNlbmRp
ZgogCiAgICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDAxYjk4YWY0ODFl
ZWZmMjdiNDYwYWE0NmJhZGFjMGVhZGY3ZDEyZTAuLjExNDA2ODE5YzU4MjgzOTNlOWM3MWM4ZjFl
NmFlMDFlMWQ5ZmJlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTEyOSw2ICsxMjksOSBAQCB2b2lkIFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdAogICAgICAgICAgICAgbGF5ZXIoKS0+d2lsbFJlbW92ZUNoaWxkV2l0aEJsZW5k
TW9kZSgpOwogI2VuZGlmCiAgICAgICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShm
YWxzZSk7IC8vIEFsbCB0cmFuc2Zvcm0tcmVsYXRlZCBwcm9wZXJ0aWVzIGZvcmNlIGxheWVycywg
c28gd2Uga25vdyB3ZSBkb24ndCBoYXZlIG9uZSBvciB0aGUgb2JqZWN0IGRvZXNuJ3Qgc3VwcG9y
dCB0aGVtLgorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBzZXRI
YXNTVkdUcmFuc2Zvcm0oZmFsc2UpOyAvLyBTYW1lIHJlYXNvbiBhcyBmb3Igc2V0SGFzVHJhbnNm
b3JtUmVsYXRlZFByb3BlcnR5KCkuCisjZW5kaWYKICAgICAgICAgc2V0SGFzUmVmbGVjdGlvbihm
YWxzZSk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIHNl
bGYtcGFpbnRpbmcgbGF5ZXIgd2hlbiBzdHlsZSBjaGFuZ2UgYWxzbyB0cmlnZ2VycyByZXBhaW50
LgpAQCAtMzU2LDYgKzM1OSwxMyBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmFwcGx5
U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sCiAKICAgICBzdHls
ZS51bmFwcGx5VHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9ybSwgb3JpZ2luVHJhbnNsYXRlKTsKIH0K
Kwordm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFn
cyhjb25zdCBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNzRWxlbWVudCkKK3sKKyAgICBib29s
IGhhc1NWR1RyYW5zZm9ybSA9ICFncmFwaGljc0VsZW1lbnQuYW5pbWF0ZWRMb2NhbFRyYW5zZm9y
bSgpLmlzSWRlbnRpdHkoKTsKKyAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5
bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBoYXNTVkdUcmFuc2Zvcm0pOwor
ICAgIHNldEhhc1NWR1RyYW5zZm9ybShoYXNTVkdUcmFuc2Zvcm0pOworfQogI2VuZGlmCiAKIGJv
b2wgcmVuZGVyZXJOZWVkc1BpeGVsU25hcHBpbmcoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaAppbmRleCAwNmFjNzhjM2ZlM2NlYzUwMmZkNzAzZDQ3YWFjMzc1NjA0ZTA3
YTI0Li5jOGI3MGVkODkzZjBmZDdmMDFlMDZiNWVlZTE5ODEyNTEwNjgwMGRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAgLTc4
LDYgKzc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcExvY2FsVG9TVkdDb250YWluZXIoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0
YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25z
dDsKIAogICAgIHZvaWQgYXBwbHlTVkdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBT
VkdHcmFwaGljc0VsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0
aW9uPikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhjb25zdCBT
VkdHcmFwaGljc0VsZW1lbnQmKTsKKworICAgIExheW91dFBvaW50IG5vbWluYWxTVkdMYXlvdXRM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGlu
Z0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKS5taW5YTWluWUNvcm5lcigpKTsgfQorICAgIHZp
cnR1YWwgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAzNjhjM2QxN2IzYjYwYjc1
MjI5ZDZkM2FjNDc4YzBjZWFiZGRiM2RjLi5lOTBlOTA0OGFlODU0ZTFjMzE3ZmYyMzRiZmFkMjY0
ZjZlZTU5NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0z
NjcsNiArMzY3LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAvLyBU
aGUgb2JqZWN0Qm91bmRpbmdCb3ggb2YgYSBTVkcgY29udGFpbmVyIGlzIGFmZmVjdGVkIGJ5IHRo
ZSB0cmFuc2Zvcm1hdGlvbnMgYXBwbGllZCBvbiBpdHMgY2hpbGRyZW4gLS0gdGhlIGNvbnRhaW5l
cgorICAgIC8vIGJvdW5kaW5nIGJveCBpcyBhIHVuaW9uIG9mIGFsbCBjaGlsZCBib3VuZGluZyBi
b3hlcywgbWFwcGVkIHRocm91Z2ggdGhlaXIgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMuCisgICAg
Ly8KKyAgICAvLyBUaGlzIG1ldGhvZCBpZ25vcmVzIGFsbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNv
bXB1dGVzIHRoZSBvYmplY3RCb3VuZGluZ0JveCwgd2l0aG91dCBtYXBwaW5nIHRocm91Z2ggdGhl
IGNoaWxkCisgICAgLy8gdHJhbnNmb3JtYXRpb24gbWF0cmljZXMuIFRoZSBTVkcgcmVuZGVyIHRy
ZWUgaXMgY29uc3RydWN0ZWQgaW4gc3VjaCBhIHdheSwgdGhhdCBpdCBjYW4gYmUgbWFwcGVkIHRv
IENTUyBlcXVpdmFsZW50czoKKyAgICAvLyBUaGUgU1ZHIHJlbmRlciB0cmVlIHVuZGVybmVhdGgg
dGhlIG91dGVybW9zdCA8c3ZnPiBiZWhhdmVzIGFzIGEgc2V0IG9mIGFic29sdXRlbHkgcG9zaXRp
b25lZCwgcG9zc2libHkgbmVzdGVkLCBib3hlcy4KKyAgICAvLyBUaGVpciBsYWlkIG91dCBpbiBz
dWNoIGEgd2F5IHRoYXQgdHJhbnNmb3JtYXRpb25zIGRvIE5PVCBhZmZlY3QgbGF5b3V0LCBhcyBp
biBIVE1ML0NTUyB3b3JsZCwgYnV0IHRha2UgYWZmZWN0IGR1cmluZworICAgIC8vIHBhaW50aW5n
LCBoaXQtdGVzdGluZyBldGMuIFRoaXMgYWxsb3dzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2Yg
cmUtbGF5b3V0cyB3aGVuIGFuaW1hdGluZyB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCisgICAgLy8g
KG5vdCB1c2luZyBDU1MgQW5pbWF0aW9ucy9UcmFuc2l0aW9ucyAvIFdlYiBBbmltYXRpb25zLCBi
dXQgZS5nLiBTTUlMLCA8YW5pbWF0ZVRyYW5zZm9ybT4sIEpTLCAuLi4pLgorICAgIHZpcnR1YWwg
RmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7IH0KKyNlbmRpZgorCiAgICAgLy8gUmV0dXJu
cyB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIGVuY2xvc2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29u
dGVudAogICAgIC8vIHJlc3BlY3RpbmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNp
dHksIHN0cm9rZS13aWR0aCBhbmQgbWFya2VycwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKaW5kZXggOWU5OWFlMDY0NjBmOTg5YzhhYTE3Njhi
ZmU1OWI1Yjk3OWM5OTVhNC4uYzE0NmRkYWVmMjBiNTNjNGQ0MWE1OTQ4NGE5NzRjYWRmY2Q2ZjM1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9j
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaApA
QCAtNDgsNiArNDgsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogCisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgTGF5b3V0UG9pbnQgY3VycmVudFNW
R0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbG9jYXRpb24oKTsgfQorICAg
IHZvaWQgc2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2Nh
dGlvbikgZmluYWwgeyBzZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKyNlbmRpZgorCiAgICAgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWlu
ZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFp
bmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVj
dCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RD
b250ZXh0KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAppbmRleCAzNDVkNjM2MTM0ZDVmZGJjZjkyNjdiZmNk
YWNjNGNmNjJjYjNjNmM3Li4yMWZlZTU1NDY0YWJmMzJhMzk0YTBmNzBmN2JmOTQ1ZDA4NmNjMzQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCkBAIC0xMTksMTkgKzExOSwxNCBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6
bGF5b3V0Q2hpbGRyZW4oKQogCiAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGlu
Z0JveENvbXB1dGF0aW9uKCp0aGlzKTsKICAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gYm91bmRp
bmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uLCAmbV9vYmplY3RCb3Vu
ZGluZ0JveFZhbGlkKTsKLSAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21w
dXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNvcmF0aW9uKTsKLSAgICBzZXRMYXlvdXRSZWN0KGVu
Y2xvc2luZ0xheW91dFJlY3QobV9vYmplY3RCb3VuZGluZ0JveCkpOwogCi0gICAgY29udGFpbmVy
TGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCk7Ci19CisgICAgY29u
c3RleHByIGF1dG8gb2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0
aW9ucyA9IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3Jh
dGlvbiB8IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb246Oklnbm9y
ZVRyYW5zZm9ybWF0aW9uczsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9y
bWF0aW9ucyA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlvbnMpOwog
Ci12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOworICAgIG1fc3Ryb2tlQm91
bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGlu
Z0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRp
b24pOworICAgIHNldEN1cnJlbnRTVkdMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9v
YmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMpKTsKIAotICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyTGF5ZXIgY2hhbmdlcwotICAgIC8vIGlmIChoYXNMYXll
cigpKQotICAgIC8vICAgICBsYXllcigpLT5zZXRJc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRl
eHQodHJ1ZSk7CisgICAgY29udGFpbmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRv
Q29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpzZWxmV2lsbFBhaW50
KCkKQEAgLTE2NSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZz
ZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7CiAgICAgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CiAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0g
VXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCiAgICAgICAgIC8vIFNWR1JlbmRlclN1
cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0
KTsKQEAgLTE4NSw3ICsxODAsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogCiBib29sIFJl
bmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBh
Y2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsK
IAogICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZh
bGVudCgpOwogICAgIHZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIu
aAppbmRleCBlMzQ4MmFiOWYwM2ExNWY5MzFhMjk5NjlkMWY2NTQwNjYwNWY1N2JiLi5mZDQyNWEz
MGM0OGVkZDIyMTc3ODY1NTdhYWU1ZmIwYjI2MmU3N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKQEAgLTQwLDYgKzQwLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNPYmplY3RCb3VuZGluZ0JveFZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkOyB9CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Cisg
ICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRp
b25zOyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOyB9CiAKQEAgLTQ5LDgg
KzUwLDYgQEAgcHJvdGVjdGVkOgogICAgIEFTQ0lJTGl0ZXJhbCByZW5kZXJOYW1lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciJfczsgfQogICAgIGJvb2wgY2Fu
SGF2ZUNoaWxkcmVuKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXRDaGlsZHJlbigpOwogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pIG92ZXJyaWRlOwpAQCAtNjIsNiArNjEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBi
b29sIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCB7IGZhbHNlIH07CiAgICAgRmxvYXRSZWN0IG1f
b2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRo
b3V0VHJhbnNmb3JtYXRpb25zOwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94Owog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lLmgKaW5kZXggMjAwMDE0Nzc1Y2VlODI1ZDFkYWZiYTRkOTQwZTJiOGQwMjMyNzU0Mi4uNTRh
NWExN2U4ZTBhZjZjZTEzNzBiZWY3OWFiZmY1YmU5OWExYzI0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCkBAIC01MSw2ICs1MSwxMSBAQCBw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsOwog
ICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFs
OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgTGF5b3V0UG9pbnQg
Y3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Cisg
ICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKSBm
aW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisjZW5kaWYKKwogICAgIExheW91dFJlY3Qg
Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlz
aWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWlu
ZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5z
Zm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVk
KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggYzk2OTVlNmI2YTQzZjljZjRmZjAzOTVhYzM2
MWE0MzI2MWRiOGUyMy4uNmZmZWU5OTcxODJlOWVlNzIwNTJhOWFmMDc5NjkyMTg5MGMzYzMyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAKQEAgLTYxLDEyICs2MSw4IEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRl
RnJvbVN0eWxlKCk7CiAKLSAgICBib29sIGhhc1NWR1RyYW5zZm9ybSA9IGZhbHNlOwogICAgIGlm
IChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpCi0gICAgICAgIGhhc1NWR1RyYW5z
Zm9ybSA9ICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkuYW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKLQotICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eShzdHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IGhhc1NW
R1RyYW5zZm9ybSk7Ci0gICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGhhc1NWR1RyYW5zZm9ybSk7Cisg
ICAgICAgIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGRvd25jYXN0PFNWR0dyYXBoaWNzRWxl
bWVudD4oZWxlbWVudCgpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKQEAgLTE0MSw3
ICsxMzcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAgICByZWN0cy5hcHBlbmQoc25h
cHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9u
KCksIGxheW91dFNpemUoKSkpKTsKKyAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5
b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpLCBtX2xh
eW91dFJlY3Quc2l6ZSgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmgKaW5kZXggYmMxMTI0NTA0M2M5ZDFlNTRlYjBjYzRjYzJjMTQ4YzlhOWIyMzhjMy4uYWU4
OWI4ZGVhYzk4YjJkZTViYzk5MTc2YTI5OGE0MzMyODQ0N2RjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtNTgsMjYg
KzU4LDIxIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29u
c3Q7CiAKKyAgICBMYXlvdXRSZWN0IGN1cnJlbnRTVkdMYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdChjb25z
dCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVjdCA9IGxheW91dFJlY3Q7IH0K
KworICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgdm9pZCBzZXRDdXJyZW50
U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBmaW5hbCB7IG1f
bGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKwogICAgIC8vIE1pbWljIHRoZSBS
ZW5kZXJCb3ggYWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2FtZSB0ZXJtaW5vbG9neSB0aGUg
cGFpbnRpbmcgLyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBpcwogICAgIC8vIHNpbWlsYXIg
dG8gcmVhZCBjb21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBzdWNoIGFzIFJlbmRlckJveCAm
IGZyaWVuZHMuCiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpIGNvbnN0
IHsgcmV0dXJuIHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0LnNpemUoKSB9OyB9CiAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBib3Jk
ZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RFcXVpdmFs
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0KICAgICBMYXlvdXRSZWN0IHZp
c3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQogCi0gICAg
dm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQmIHBv
aW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQotCi0gICAgTGF5
b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0gICAg
dm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9sYXlv
dXRSZWN0ID0gbGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29uc3Qg
TGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihs
YXlvdXRMb2NhdGlvbik7IH0KLQotICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVkTGF5
b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KLSAgICBM
YXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5s
b2NhdGlvbigpOyB9Ci0gICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KLSAgICBM
YXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6ZSgp
OyB9Ci0KICAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIHZvaWQgYXBwbHlUb3BMZWZ0
TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyBwb2lu
dC5tb3ZlQnkoY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOyB9CiAgICAgRmxvYXRSZWN0IGJv
cmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVudENvbnRhaW5lcios
IFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgPSBSZW5kZXJCb3g6OkNhY2hl
UmVuZGVyQm94RnJhZ21lbnRJbmZvKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3Zl
cmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0Jh
Y2tncm91bmQpIGNvbnN0OwogICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxk
TGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIHsg
cmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCByZWxldmFuY3kpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRl
eCBhOWI5MzMyMmIwYThmMjQ2ZTAyYzU2MDM2MjVkZjMzNDZkM2RmYmNjLi4yMmEwMGNmNDQ5M2Ni
NGJkMTkzMjYwYjExOTdkNDMyY2NjN2Y3MzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTE5Niw2ICsxOTYsMTAgQEAgdm9pZCBSZW5k
ZXJTVkdSb290OjpsYXlvdXQoKQogCiAgICAgICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24g
Ym91bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdC
b3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChT
VkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pOwor
CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhv
dXRUcmFuc2Zvcm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3Vu
ZGluZ0JveERlY29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9u
T3B0aW9uOjpJZ25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdC
b3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRl
RGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRy
YW5zZm9ybWF0aW9ucyk7CisKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5n
Qm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAgICAgfQogCkBAIC0z
OTcsNiArNDAxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tU3R5bGUoKQogICAg
IFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAogICAgIHNldEhhc1NWR1RyYW5z
Zm9ybSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpOwogCiAgICAgaWYg
KHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCiAgICAgICAgIHNldEhhc05vblZpc2libGVPdmVy
ZmxvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApp
bmRleCBlN2Y3MTU1MzI2N2ViMjM5ODAwNThkMTdlZDA4ZGM4MjAxODAwMDhmLi5jMGQxY2NkZGEz
ODY4OWY3MmRjZmIzZWExNDAzMjNmYjcxMmE1MDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0Jv
eDsgfQorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlv
bnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5z
Zm9ybWF0aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICBGbG9hdFJlY3QgcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCkBA
IC0xMjMsNiArMTI0LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9jb250YWluZXJTaXpl
OwogICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX29i
amVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsKICAgICBGbG9hdFJlY3QgbV9z
dHJva2VCb3VuZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV92aWV3Qm94VHJhbnNmb3Jt
OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zv
cm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3Bw
CmluZGV4IGNhYWY2YjM1YjBlMDUyMDAzZGY5MjAxZWVjMDAwNGQ1NDM1MWY0MDYuLmUyNjE2MDg2
MjBiYWI5NDA0NmI4MGNlOWU2OWQwODgzZTVlMGQ0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9p
ZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKICAgICAgICAgdXBkYXRlU2hhcGVGcm9tRWxlbWVu
dCgpOwogCiAgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRM
YXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91bmRpbmdCb3gpKTsKKyAgICAg
ICAgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVjdChtX2ZpbGxCb3Vu
ZGluZ0JveCkpOwogICAgIH0KIAogICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CkBAIC0yODgs
NyArMjg4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbGF5b3V0
TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCAr
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNW
R1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjpwYWlu
dFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0zMDgs
NyArMzA4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIAogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4dCgpKTsKIAotICAgIGF1dG8g
Y29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9mZnNldCAt
IGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLmxvY2F0aW9uKCkpOworICAg
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQYWludE9m
ZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIHBhaW50SW5mby5jb250ZXh0
KCkudHJhbnNsYXRlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbi53aWR0aCgpLCBj
b29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24uaGVpZ2h0KCkpOwogCiAgICAgaWYgKHN0
eWxlKCkuc3ZnU3R5bGUoKS5zaGFwZVJlbmRlcmluZygpID09IFNoYXBlUmVuZGVyaW5nOjpDcmlz
cEVkZ2VzKQpAQCAtMzQ1LDcgKzM0NSw3IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAgICAg
aWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRl
ZE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byBsb2NhbFBv
aW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwogICAgIGF1dG8gYm91bmRpbmdCb3hU
b3BMZWZ0Q29ybmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWlu
WE1pbllDb3JuZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAppbmRleCBiMDBm
YjUwYWE5ZTAwMDE3OTdmYzk1NTA4NTg2YTZiMjE0MDc3Zjc5Li4wZGViMGUzN2JiYzNkZmVlZTA5
OTIwMGJmZDVjNWIwMDQ4YzljYzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAK
QEAgLTk3LDggKzk3LDEwIEBAIHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6
dXBkYXRlRnJvbVN0eWxlKCkKIHsKICAgICBSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0ZUZyb21T
dHlsZSgpOwogCi0gICAgaWYgKGFzc29jaWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgp
KSkKKyAgICBpZiAoYXNzb2NpYXRlZFVzZUVsZW1lbnQoZ3JhcGhpY3NFbGVtZW50KCkpKSB7CiAg
ICAgICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcjo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBP
cHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4gb3B0aW9ucykg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCmluZGV4IDc5ODA5OGRlYjJjOTg1NDY1YjkxNjA3ODY0
Nzk0Yzg2ZWZiNDY3MzMuLjRkYjVjODIxNmZmYTA4MTg1ZDAwMDU5M2Y3ZTUyMWJkNTExNmUyYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmNwcApAQCAtMTc1LDggKzE3NSwxMCBAQCBGbG9hdFJlY3QgU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0Jv
dW5kaW5nQm94QwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9u
OjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbikgJiYgaXM8UmVuZGVyU1ZHQ29u
dGFpbmVyPihjaGlsZCkpCiAgICAgICAgICAgICBjaGlsZEJvdW5kaW5nQm94Q29tcHV0YXRpb24u
YWRqdXN0Qm94Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKHsgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJp
ZGVCb3hXaXRoRmlsdGVyQm94IH0sIGNoaWxkQm94KTsKIAotICAgICAgICBpZiAoYXV0byBsYXll
clRyYW5zZm9ybSA9IHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkKGNoaWxkKSkKLSAgICAg
ICAgICAgIGNoaWxkQm94ID0gbGF5ZXJUcmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAg
ICAgICBpZiAoIW9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SWdub3JlVHJhbnNm
b3JtYXRpb25zKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm1hdGlvbk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICAgICAgY2hpbGRC
b3ggPSBsYXllclRyYW5zZm9ybS0+bWFwUmVjdChjaGlsZEJveCk7CisgICAgICAgIH0KIAogICAg
ICAgICBpZiAob3B0aW9ucyA9PSBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pCiAgICAgICAg
ICAgICB1bml0ZUJvdW5kaW5nQm94UmVzcGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNo
aWxkLCBjaGlsZEJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oCmluZGV4IDgzZGE2M2JkNmYwOTgyZWM2N2Zh
NWIzYmM5NDZiZDg4MmQyNTlkNDQuLjkzODU0MTFkOGM4ZmM3NzMzMzMzZTEyZjgxZTJiMDhjMTNk
YWU5NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBJZ2Fs
aWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxNSArMzUsMTYgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24oY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYpOwogICAgIH5TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKCkgPSBkZWZhdWx0
OwogCi0gICAgZW51bSBjbGFzcyBEZWNvcmF0aW9uT3B0aW9uIDogdWludDhfdCB7CisgICAgZW51
bSBjbGFzcyBEZWNvcmF0aW9uT3B0aW9uIDogdWludDE2X3QgewogICAgICAgICBJbmNsdWRlRmls
bFNoYXBlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwgLyogY29ycmVzcG9uZHMgdG8gJ2Jv
b2wgZmlsbCcgICAgICovCiAgICAgICAgIEluY2x1ZGVTdHJva2VTaGFwZSAgICAgICAgICAgICAg
ICAgID0gMSA8PCAxLCAvKiBjb3JyZXNwb25kcyB0byAnYm9vbCBzdHJva2UnICAgKi8KICAgICAg
ICAgSW5jbHVkZU1hcmtlcnMgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsIC8qIGNvcnJl
c3BvbmRzIHRvICdib29sIG1hcmtlcnMnICAqLwogICAgICAgICBJbmNsdWRlQ2xpcHBlcnMgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMywgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgY2xpcHBl
cnMnICovCiAgICAgICAgIEluY2x1ZGVNYXNrZXJzICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCA0LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KICAgICAgICAgSW5jbHVk
ZU91dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDUsIC8qIFdlYktpdCBleHRlbnNp
b24gLSBpbnRlcm5hbCAgICAqLwotICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAg
ICAgICAgICA9IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCi0g
ICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNoaWxkcmVuID0gMSA8PCA3ICAvKiBX
ZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KKyAgICAgICAgSWdub3JlVHJhbnNmb3Jt
YXRpb25zICAgICAgICAgICAgICAgPSAxIDw8IDYsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRl
cm5hbCAgICAqLworICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9
IDEgPDwgNywgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIE92
ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNoaWxkcmVuID0gMSA8PCA4ICAvKiBXZWJLaXQgZXh0
ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KICAgICB9OwogCiAgICAgdXNpbmcgRGVjb3JhdGlvbk9w
dGlvbnMgPSBPcHRpb25TZXQ8RGVjb3JhdGlvbk9wdGlvbj47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKaW5kZXggODEzYzNlY2Vm
OTM4YmRhNDg2NDQ0ZDRhZjcwOGQ5N2NiNzNjZWFlMC4uODMyODJjZjAzMTY2ZTgyZGM0ZDI2MDY5
MTAwOTI0ZmIyODUwZTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcApAQCAtMTIwLDQxICsxMjAsNiBAQCB2b2lkIFNWR0Nv
bnRhaW5lckxheW91dDo6bGF5b3V0Q2hpbGRyZW4oYm9vbCBjb250YWluZXJOZWVkc0xheW91dCkK
ICAgICAgICAgQVNTRVJUKGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuaXNFbXB0eSgp
KTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbkZyb21SZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJT
VkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
U1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXlvdXRMb2NhdGlvbigpOwotCi0gICAgaWYgKGlz
PFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikpIC8vIDxmb3JlaWduT2JqZWN0PiAvIDx0ZXh0Pgot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKS5sb2NhdGlv
bigpOwotCi0gICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVuZGVyZXIpKSAvLyA8dHNwYW4+
IC8gPHRleHRQYXRoPgotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldExheW91
dExvY2F0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0
UG9pbnQmIG5ld0xvY2F0aW9uKQotewotICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4o
cmVuZGVyZXIpKSB7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5k
ZXJlcikuc2V0TGF5b3V0TG9jYXRpb24obmV3TG9jYXRpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+Ci0gICAgaWYgKGlzPFJlbmRl
clNWR0Jsb2NrPihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+
KHJlbmRlcmVyKS5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgotICAgIGlmIChpczxSZW5kZXJTVkdJ
bmxpbmU+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVs
YXRpdmVUb0NvbnRhaW5lcigpCiB7CiAgICAgaWYgKG1fcG9zaXRpb25lZENoaWxkcmVuLmlzRW1w
dHkoKSkKQEAgLTE3Nyw0MCArMTQyLDM2IEBAIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3Np
dGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCiAgICAgfTsKIAogICAgIC8vIEFycmFu
Z2UgbGF5b3V0IGxvY2F0aW9uIGZvciBhbGwgY2hpbGQgcmVuZGVyZXJzIHJlbGF0aXZlIHRvIHRo
ZSBjb250YWluZXIgbGF5b3V0IGxvY2F0aW9uLgotICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRp
b24gPSBmbG9vcmVkTGF5b3V0UG9pbnQobV9jb250YWluZXIub2JqZWN0Qm91bmRpbmdCb3goKS5t
aW5YTWluWUNvcm5lcigpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0
aW9uZWRDaGlsZHJlbikgeworICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRpb24gPSBtX2NvbnRh
aW5lci5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKKyAgICBmb3IgKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIGNoaWxkIDogbV9wb3NpdGlvbmVkQ2hpbGRyZW4pIHsKICAgICAgICAgdmVyaWZ5
UG9zaXRpb25lZENoaWxkUmVuZGVyZXJFeHBlY3RhdGlvbihjaGlsZCk7CiAKLSAgICAgICAgYXV0
byBvYmplY3RCb3VuZGluZ0JveENoaWxkID0gY2hpbGQub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAg
ICAgICAgYXV0byBsYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3Vu
ZGluZ0JveENoaWxkLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBhdXRvIGRlc2lyZWRMYXlv
dXRMb2NhdGlvbiA9IHRvTGF5b3V0UG9pbnQobGF5b3V0TG9jYXRpb24gLSBwYXJlbnRMYXlvdXRM
b2NhdGlvbik7Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9j
YXRpb25Gcm9tUmVuZGVyZXIoY2hpbGQpOwotICAgICAgICBpZiAoY3VycmVudExheW91dExvY2F0
aW9uID09IGRlc2lyZWRMYXlvdXRMb2NhdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzZXRMYXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKGNoaWxkLCBkZXNpcmVkTGF5b3V0TG9j
YXRpb24pOworICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlvbiA9IHRvTGF5b3V0UG9p
bnQoY2hpbGQubm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgLSBwYXJlbnRMYXlvdXRMb2NhdGlv
bik7CisgICAgICAgIGlmIChjaGlsZC5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSAhPSBkZXNp
cmVkTGF5b3V0TG9jYXRpb24pCisgICAgICAgICAgICBjaGlsZC5zZXRDdXJyZW50U1ZHTGF5b3V0
TG9jYXRpb24oZGVzaXJlZExheW91dExvY2F0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHQ29u
dGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91
dExvY2F0aW9uQ29uc2lzdGVuY3koY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVy
ZXIpCiB7CiAgICAgaWYgKHJlbmRlcmVyLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkgJiYgIXJl
bmRlcmVyLmlzU1ZHUm9vdCgpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9u
ID0gbGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBhdXRvIGN1
cnJlbnRMYXlvdXRMb2NhdGlvbiA9IHJlbmRlcmVyLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigp
OwogCiAgICAgICAgIGF1dG8gZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9IGN1cnJlbnRMYXlvdXRM
b2NhdGlvbjsKLSAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxS
ZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6
IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsKICAg
ICAgICAgICAgIEFTU0VSVChhbmNlc3Rvci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKTsKICAg
ICAgICAgICAgIGlmIChhbmNlc3Rvci5pc1NWR1Jvb3QoKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGV4cGVjdGVkTGF5b3V0TG9jYXRpb24ubW92ZUJ5KGxheW91dExvY2F0
aW9uRnJvbVJlbmRlcmVyKGFuY2VzdG9yKSk7CisgICAgICAgICAgICBleHBlY3RlZExheW91dExv
Y2F0aW9uLm1vdmVCeShhbmNlc3Rvci5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlv
dXRQb2ludChyZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwor
ICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IHJlbmRlcmVyLm5vbWluYWxTVkdM
YXlvdXRMb2NhdGlvbigpOwogICAgICAgICBpZiAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9PSBp
bml0aWFsTGF5b3V0TG9jYXRpb24pIHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcs
IHN0cmVhbSA8PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJl
ciA8PCAiICgiIDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKS5jaGFyYWN0ZXJzKCkgPDwgIikiCi0g
ICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBv
YmplY3RCb3VuZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGFyZSBpbiBzeW5jLiIpOworICAgICAg
ICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgY3VycmVu
dFNWR0xheW91dExvY2F0aW9uIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uIGFyZSBpbiBzeW5j
LiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNWRywg
c3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwgJnJlbmRlcmVy
IDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3RlcnMoKSA8PCAiKSIKLSAg
ICAgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIG9i
amVjdEJvdW5kaW5nQm94IC8gbGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91
dCBvZiBzeW5jIGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCisgICAgICAgICAgICAgICAgPDwgIiAt
IHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBjdXJyZW50U1ZHTGF5b3V0TG9jYXRp
b24gLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91dCBv
ZiBzeW5jIGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCiAgICAgICAgICAgICAgICAgPDwgIiBjdXJy
ZW50TGF5b3V0TG9jYXRpb249IiA8PCBjdXJyZW50TGF5b3V0TG9jYXRpb24KICAgICAgICAgICAg
ICAgICA8PCAiICAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbj0iIDw8IGV4cGVjdGVkTGF5b3V0TG9j
YXRpb24KICAgICAgICAgICAgICAgICA8PCAiICE9IGluaXRpYWxMYXlvdXRMb2NhdGlvbj0iIDw8
IGluaXRpYWxMYXlvdXRMb2NhdGlvbiA8PCAiKSIKQEAgLTIyNCw3ICsxODUsNyBAQCB2b2lkIFNW
R0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBS
ZW5kZXJFbGVtZW50JiByZQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5k
ZXJlcikpIHsKICAgICAgICAgaWYgKGNoaWxkLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNoaWxkKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxh
eW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQu
aAppbmRleCBlYzEzMDkzNTEyNmNmN2VjZTE1OTk5MmE4ZGI3MWMxMTY3MzAyNmU3Li41MzQ0MDFj
Y2Q0ZmI4YzhlZmMyMjU3OGZhZGJmMDYxZDFmMmZlODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigp
OwogCi0gICAgc3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25z
dCBSZW5kZXJFbGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25D
b25zaXN0ZW5jeShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgc3RhdGljIGJv
b2wgdHJhbnNmb3JtVG9Sb290Q2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggZjJj
MDc2ZjdiNzcyZDExNWU0ZWVmNmE4MDZmYmFiYjI1ZjU1ZmU5My4uMGFmMTZlMmE5MTk1MDFmM2Jm
YjhiYjNmYzMwNmE0ZTc5ZDlmNWQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVBZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rl
ci5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzY0
LDEzICszNjUsMjcgQEAgdm9pZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2UKICAgICBlbHNlCiAgICAgICAg
IHN0eWxlLnNldFVzZWRaSW5kZXgoc3R5bGUuc3BlY2lmaWVkWkluZGV4KCkpOwogCisgICAgLy8g
Rm9yIFNWRyBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlICdh
bmltYXRlZExvY2FsVHJhbnNmb3JtJyBiZXNpZGVzIHRoZSBSZW5kZXJTdHlsZSB0byBxdWVyeQor
ICAgIC8vIGlmIGFuIGVsZW1lbnQgaGFzIGEgdHJhbnNmb3JtLiBTVkcgdHJhbnNmb3JtcyBhcmUg
bm90IHN0b3JlZCBvbiB0aGUgUmVuZGVyU3R5bGUsIGFuZCB0aHVzIHdlIG5lZWQgYSBzcGVjaWFs
IGNhc2UgaGVyZS4KKyAgICBhdXRvIGhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSA9IFtdKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgeworICAgICAg
ICBpZiAoc3R5bGUuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAg
ICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNl
ZFNWR0VuZ2luZUVuYWJsZWQoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgICAgICAgICAgcmV0dXJuICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KCplbGVtZW50
KS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpOworI2VuZGlmCisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAw
IGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiBUaGlzIHByZXZl
bnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSBibGVuZGVkIGFz
IGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNwYXJlbnQKICAgICAvLyBvYmpl
Y3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWluZGV4IGFsc28gYmVjb21lcyAwIGZv
ciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3JlZmxlY3Rpb25zLgogICAg
IGlmIChzdHlsZS5oYXNBdXRvVXNlZFpJbmRleCgpKSB7CiAgICAgICAgIGlmICgobV9lbGVtZW50
ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9lbGVtZW50KQogICAgICAgICAg
ICAgfHwgc3R5bGUuaGFzT3BhY2l0eSgpCi0gICAgICAgICAgICB8fCBzdHlsZS5oYXNUcmFuc2Zv
cm1SZWxhdGVkUHJvcGVydHkoKQorICAgICAgICAgICAgfHwgaGFzVHJhbnNmb3JtUmVsYXRlZFBy
b3BlcnR5KHN0eWxlLCBtX2VsZW1lbnQpCiAgICAgICAgICAgICB8fCBzdHlsZS5oYXNNYXNrKCkK
ICAgICAgICAgICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKICAgICAgICAgICAgIHx8IHN0eWxlLmJv
eFJlZmxlY3QoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458310</attachid>
            <date>2022-04-25 16:33:30 -0700</date>
            <delta_ts>2022-04-25 17:00:27 -0700</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-239717-20220425163328.patch</filename>
            <type>text/plain</type>
            <size>49306</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMyOTgxNjY4ZTIxMjRh
ZTIxNGJhNzE2NjllZTg2ZWEyOTUxYjA5Ni4uMmRiZWQwMTBlNmM3YWIyNGNmZmRjYTY3NTU2MTY0
NDc4ZmU0ZjdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMi0wNC0yNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gRml4IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk3MTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGhlIG1ham9yaXR5IG9mIFNWRyB0
cmFuc2Zvcm0gaXNzdWVzIGluIExCU0UuIHdlYmtpdC5vcmcvYi8yMzc3MTEgbGFpZCB0aGUgZ3Jv
dW5kd29yayBmb3IgU1ZHCisgICAgICAgIHRyYW5zZm9ybXMgaW4gTEJTRSwgaG93ZXZlciB0aGVy
ZSBhcmUgc3RpbGwgaXNzdWVzOgorCisgICAgICAgIC0gU1ZHIHRyYW5zZm9ybXMgc3BlY2lmaWVk
IGFsb25lIG9uIFNWRyBlbGVtZW50cywgdy9vIGFueSBhZGRpdGlvbmFsIHN0eWxlL3BlcnNwZWN0
aXZlIHJlbGF0ZWQgcHJvcGVydHkKKyAgICAgICAgICBzdWNoIGFzIHRyYW5zZm9ybS1ib3ggLyB0
cmFuc2Zvcm0tb3JpZ2luIC8gLi4uIGRvIG5vdCB0cmlnZ2VyIGxheWVyIGNyZWF0aW9uLCBmaXgg
YnkgYWRhcHRpbmcgU3R5bGVBZGp1c3Rlci4KKworICAgICAgICAtIFN3aXRjaGluZyBvbi9vZmYg
dHJhbnNmb3JtcyBmb3IgYSBTVkcgZWxlbWVudCwgd2FzIG5vdCB0cmFja2luZyB1cGRhdGVzIHRv
IGJvdGggJ0hhc1NWR1RyYW5zZm9ybScgYW5kCisgICAgICAgICAgJ0hhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eScgZmxhZ3MgY29ycmVjdGx5LCBmaXggdGhhdCBieSBpbnRyb2R1Y2luZyBhbiAn
dXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MnIGhlbHBlci4KKworICAgICAgICAtIE1vZGlmeSBT
VkdDb250YWluZXJMYXlvdXQgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IG9uIHRoZSBjaGlsZHJlbiB0
cmFuc2Zvcm1hdGlvbnMgd2hlbiBjb21wdXRpbmcgY29udGFpbmVyCisgICAgICAgICAgYm91bmRh
cmllcy4gSW4gdGhlIGxlZ2FjeSBlbmdpbmUsIHdlIGFsd2F5cyBoYXZlIHRvIG1hcmsgdGhlIHdo
b2xlIGFuY2VzdG9yIGNoYWluIGFzICduZWVkIHRvIHJlY29tcHV0ZSBib3VuZGFyaWVzJworICAg
ICAgICAgIGFuZCBpbnZva2luZyBhIHJlLWxheW91dCwgdG8gcGVyZm9ybSB0aGUgcmVjb21wdXRh
dGlvbi4gVGhpcyBjaGFuZ2UgYXZvaWRzIHRoZSBpbnZhbGlkYXRpb24gb2YgdGhlIHdob2xlIGFu
Y2VzdG9yCisgICAgICAgICAgY2hhaW4sIHdoZW4gYW4gZWxlbWVudHMgdHJhbnNmb3JtIGNoYW5n
ZXMgaW4gYSBub24tYWNjZWxlcmF0ZWQgd2F5IChlLmcuIFNWR1RyYW5zZm9ybUxpc3QgbWFuaXB1
bGF0aW9uLCBTTUlMCisgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0+IC8gPGFuaW1hdGU+IC8g
PHNldD4pLiBJbiBDU1MgdHJhbnNmb3JtYXRpb25zIGRvIG5vdCBhZmZlY3QgbGF5b3V0LCBvbmx5
IGhpdC10ZXN0aW5nIGFuZCBwYWludGluZy4KKworICAgICAgICAgIC0+IFNWRy9DU1MgdHJhbnNm
b3JtcyBhcHBsaWVkIG9uIFNWRyBlbGVtZW50cyBpcyBjb25jZXB0dWFsbHkgZXF1aXZhbGVudCB0
byBDU1MgdHJhbnNmb3JtYXRpb25zIG9uIENTUyBib3hlcyBub3cuCisgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb24gY2hhbmdlcyBubyBsb25nZXIgYWZmZWN0IHRoZSAnaW50ZXJuYWwgZ2VvbWV0
cnknIChvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSkuCisgICAgICAg
ICAgICAgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRp
b24oKSBhcmUgY29tcHV0ZWQgdXNpbmcgdGhlICdpbnRlcm5hbCBnZW9tZXRyeScgYW5kIHVzZWQK
KyAgICAgICAgICAgICB0aHJvdWdob3V0IGxheW91dC4KKworICAgICAgICAgIFRoaXMgYXZvaWRz
IG1vc3Qgb2YgdGhlIFJlbmRlckxheWVyIC8gUmVuZGVyTGF5ZXJCYWNraW5nIHNwZWNpZmljIGNo
YW5nZXMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIGRvd25zdHJlYW0KKyAgICAgICAgICBMQlNF
IGltcGxlbWVudGF0aW9uLCB3aGlsZSBhbHNvIHNvbHZpbmcgYW4gaW1wb3J0YW50IGRlc2lnbiBp
c3N1ZTogbm8gYmFjay1zcGxhc2ggZnJvbSBjaGlsZHJlbiB0byBwYXJlbnRzLgorICAgICAgICAg
IExhcmdlLCBkZWVwIG5lc3RlZCBkb2N1bWVudHMgLS0gYXMgc2VlbiBpbiB0aGUgd2lsZCAtLSB3
aWxsIGJlbmVmaXQgdGhlIG1vc3QsIGF2b2lkaW5nIHRoZSBmcmVxdWVudCBhbmNlc3RvcgorICAg
ICAgICAgIHdhbGtzIHRvIG1hcmsgdGhlIGNvbnRhaW5pbmcgYmxvY2sgLyBwYXJlbnQgaGllcmFj
aHkgZm9yIHJlLWxheW91dC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBjaGFuZ2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJTRSBpcyBy
ZWFkeSBzb29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkNyZWF0ZVN0
YWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXll
ckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlcmVyTG9jYXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVj
dEluU1ZHQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OnVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJNb2RlbE9iamVjdDo6bm9taW5hbFNWR0xheW91dExvY2F0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzZXRD
dXJyZW50U1ZHTGF5b3V0TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3hX
aXRob3V0VHJhbnNmb3JtYXRpb25zIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXRDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZnJhbWVSZWN0RXF1aXZhbGVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUb3BM
ZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cGFp
bnRpbmdMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bGF5b3V0TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uT2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlv
dXRTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpoYW5kbGVS
b290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29udGFp
bmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lz
dGVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcik6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaDoK
KyAgICAgICAgKiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpBZGp1c3Rlcjo6YWRqdXN0IGNvbnN0KToKKwogMjAyMi0wNC0yNSAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVxdWVzdCBp
bnRlcmNlcHRpb24gc2hvdWxkIG5vdCBiZSBndWFyZGVkIGJhc2VkIG9uIHNlcnZpY2Ugd29ya2Vy
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGI3NmUx
ODFlNmEyMDBkNzA4Y2Y4NDY0ZjUwZDgwZTUwYjAzZTFhY2EuLjY4MGNlNWM3NmNhNmFkNmEzN2Nh
YTczYjBhOWI1Y2EwYTBiZWIyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKQEAgLTI0MTgsMjEgKzI0MTgsNDMgQEAgRmxvYXRSZWN0IFJlbmRlckVsZW1l
bnQ6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogICAgIGlmICgh
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1
dG8gYWxpZ25SZWZlcmVuY2VCb3ggPSBbJl0oRmxvYXRSZWN0IHJlZmVyZW5jZUJveCkgeworICAg
ICAgICAvLyBUaGUgQ1NTIGJvcmRlckJveFJlY3QoKSBpcyBkZWZpbmVkIHRvIHN0YXJ0IGF0IGFu
IG9yaWdpbiBvZiAoMCwgMCkuCisgICAgICAgIC8vIEEgcG9zc2libGUgc2hpZnQgb2YgYSBDU1Mg
Ym94IChlLmcuIGR1ZSB0byBub24tc3RhdGljIHBvc2l0aW9uICsgdG9wL2xlZnQgcHJvcGVydGll
cykKKyAgICAgICAgLy8gZG9lcyBub3QgZWZmZWN0IHRoZSBib3JkZXJCb3hSZWN0KCkgbG9jYXRp
b24uIFRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgICAvLyBpcyBwcm9wYWdhdGVkIHVw
b24gcGFpbnQgdGltZSwgZS5nLiB2aWEgJ3BhaW50T2Zmc2V0JyB3aGVuIGNhbGxpbmcgUmVuZGVy
T2JqZWN0OjpwYWludCgpLAorICAgICAgICAvLyBvciBieSBhbHRlcmluZyB0aGUgUmVuZGVyTGF5
ZXIgVHJhbnNmb3JtYXRpb25NYXRyaXggdG8gaW5jbHVkZSB0aGUgJ29mZnNldEZyb21BbmNlc3Rv
cicKKyAgICAgICAgLy8gcmlnaHQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgd2hlbiBD
U1MgdHJhbnNmb3JtYXRpb25zIGFyZSBwcmVzZW50IChzZWUgUmVuZGVyTGF5ZXIKKyAgICAgICAg
Ly8gcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oKSBmb3IgZGV0YWlscykuCisgICAgICAg
IC8vCisgICAgICAgIC8vIFRvIG1pbWljIHRoZSBleHBlY3RhdGlvbiBmb3IgU1ZHLCAnZmlsbC1i
b3gnIG11c3QgYmVoYXZlIHRoZSBzYW1lOiBpZiB3ZSdkIGluY2x1ZGUKKyAgICAgICAgLy8gdGhl
ICdyZWZlcmVuY2VCb3gnIGxvY2F0aW9uIGluIHRoZSByZXR1cm5lZCByZWN0LCB3ZSdkIGFwcGx5
IHRoZSAoeCwgeSkgbG9jYXRpb24KKyAgICAgICAgLy8gaW5mb3JtYXRpb24gZm9yIHRoZSBTVkcg
cmVuZGVyZXIgdHdpY2UuIFdlIHdvdWxkIHNoaWZ0IHRoZSAndHJhbnNmb3JtLW9yaWdpbicgYnkg
KHgsIHkpCisgICAgICAgIC8vIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGFsdGVyIHRoZSBDVE0gaW4g
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgYnkKKyAgICAgICAg
Ly8gaW5jbHVkaW5nIGEgdHJhbnNsYXRpb24gdG8gdGhlIGVuY2xvc2luZyB0cmFuc2Zvcm1lZCBh
bmNlc3RvciAoJ29mZnNldEZyb21BbmNlc3RvcicpLgorICAgICAgICAvLyBBdm9pZCB0aGF0LCBh
bmQgbW92ZSBieSAtbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkuCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGlmIChpc1NWR0xheWVyQXdhcmVSZW5kZXJlcigp
ICYmICFpc1NWR1Jvb3QoKSAmJiBkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0Vu
Z2luZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlQnkoLWRvd25jYXN0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24o
KSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKKyAgICB9OworCiAgICAg
c3dpdGNoIChib3hUeXBlKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAg
IGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRp
bmdCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgotICAgICAgICByZXR1cm4gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgcmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KG9iamVj
dEJvdW5kaW5nQm94KCkpOwogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgogICAgIGNh
c2UgQ1NTQm94VHlwZTo6TWFyZ2luQm94OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94
OgotICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmV0dXJuIGFs
aWduUmVmZXJlbmNlQm94KHN0cm9rZUJvdW5kaW5nQm94KCkpOwogICAgIGNhc2UgQ1NTQm94VHlw
ZTo6Vmlld0JveDoKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbTogQ2FjaGUgdGhl
IGltbXV0YWJsZSBTVkdMZW5ndGhDb250ZXh0IHBlciBTVkdFbGVtZW50LCB0byBhdm9pZCB0aGUg
cmVwZWF0ZWQgUmVuZGVyU1ZHUm9vdCBzaXplIHF1ZXJpZXMgaW4gZGV0ZXJtaW5lVmlld3BvcnQo
KS4KICAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKICAgICAgICAgU1ZHTGVuZ3RoQ29u
dGV4dChkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVWaWV3cG9ydCh2
aWV3cG9ydFNpemUpOwotICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6ZSB9OworICAg
ICAgICByZXR1cm4gYWxpZ25SZWZlcmVuY2VCb3goeyB7IH0sIHZpZXdwb3J0U2l6ZSB9KTsKICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IGMyZGUwYjZkNWZkNmZkODIxMDJmNzBiY2NjMTliYTc2OTNk
YWVjNjcuLjkwMzlkMTEyNGFlOWUzNWU5MmFmNTRkN2NhMzBmYTlmYTkzZGI2OTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzAyLDkgKzMwMiw5IEBAIHN0
YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQogCiBERUZJTkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVyTGF5ZXI6OlJl
bmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVj
dCkKLSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0Lmlz
UmVuZGVyVmlldygpKQotICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVu
ZGVyZXIuaXNSZW5kZXJWaWV3KCkpCisgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dChyZW5k
ZXJlci5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBt
X2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQogICAgICwgbV9pc09wcG9ydHVuaXN0aWNTdGFj
a2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zNDMsNyArMzQzLDcgQEAgUmVuZGVyTGF5ZXI6OlJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkK
ICAgICAsIG1faGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzU3RhdHVzRGlydHkoZmFs
c2UpCiAjZW5kaWYKICAgICAsIG1fcmVwYWludFJlY3RzVmFsaWQoZmFsc2UpCi0gICAgLCBtX3Jl
bmRlcmVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKKyAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkp
OwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tpbmdDb250ZXh0
KCkpOwpAQCAtMzUzLDkgKzM1Myw5IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgaWYgKGlzUmVu
ZGVyVmlld0xheWVyKCkpCiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKIAotICAgIGlmICghcmVuZGVy
ZXIoKS5maXJzdENoaWxkKCkpIHsKKyAgICBpZiAoIXJlbmRlcmVyLmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKLSAgICAgICAgbV9o
YXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZTsKKyAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVy
LnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQogfQog
CkBAIC01NTIsOSArNTUyLDYgQEAgc3RhdGljIGJvb2wgY2FuQ3JlYXRlU3RhY2tpbmdDb250ZXh0
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBhdXRvJiByZW5kZXJlciA9IGxheWVy
LnJlbmRlcmVyKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpCi0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIHx8IHJl
bmRlcmVyLmhhc1NWR1RyYW5zZm9ybSgpCi0jZW5kaWYKICAgICAgICAgfHwgcmVuZGVyZXIuaGFz
Q2xpcFBhdGgoKQogICAgICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKQogICAgICAgICB8fCBy
ZW5kZXJlci5oYXNNYXNrKCkKQEAgLTM1NDUsMTkgKzM1NDIsMjcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGkKIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFp
bnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIGNvbnN0IExh
eW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0KQogeworICAgIGF1dG8gdXNlc1NWR1N1YnRyZWVU
cmFuc2Zvcm1SdWxlcyA9IFtdKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KSB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIHJldHVybiBy
ZW5kZXJlci5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQo
KSAmJiByZW5kZXJlci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpICYmICFyZW5kZXJlci5pc1NW
R1Jvb3QoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwogICAgIC8v
IFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIg
aW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZSwgYnV0IHByZXNlcnZpbmcKICAgICAvLyB0
aGUgYWNjdW11bGF0ZWQgZXJyb3IgZm9yIHN1Yi1waXhlbCBsYXlvdXQuCisgICAgLy8gTm90ZTog
VGhlIHBpeGVsLXNuYXBwaW5nIGxvZ2ljIGlzIGRpc2FibGVkIGZvciB0aGUgd2hvbGUgU1ZHIHJl
bmRlciB0cmVlLCBleGNlcHQgdGhlIG91dGVybW9zdCA8c3ZnPi4KICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwog
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVBhcmVudCA9IG9mZnNldEZyb21BbmNlc3RvcihwYWlu
dGluZ0luZm8ucm9vdExheWVyKTsKICAgICBvZmZzZXRGcm9tUGFyZW50ICs9IHRyYW5zbGF0aW9u
T2Zmc2V0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybShyZW5kZXJhYmxlVHJh
bnNmb3JtKHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKSk7CiAgICAgLy8gQWRkIHRoZSBzdWJw
aXhlbCBhY2N1bXVsYXRpb24gdG8gdGhlIGN1cnJlbnQgbGF5ZXIncyBvZmZzZXQgc28gdGhhdCB3
ZSBjYW4gYWx3YXlzIHNuYXAgdGhlIHRyYW5zbGF0ZVJpZ2h0IHZhbHVlIHRvIHdoZXJlIHRoZSBy
ZW5kZXJlcigpIGlzIHN1cHBvc2VkIHRvIGJlIHBhaW50aW5nLgogICAgIExheW91dFNpemUgb2Zm
c2V0Rm9yVGhpc0xheWVyID0gb2Zmc2V0RnJvbVBhcmVudCArIHBhaW50aW5nSW5mby5zdWJwaXhl
bE9mZnNldDsKLSAgICBGbG9hdFNpemUgZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xh
eWVyID0gdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2aWNlUGl4ZWxzKHRvTGF5b3V0UG9pbnQo
b2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBGbG9hdFNpemUg
YWxpZ25lZE9mZnNldEZvclRoaXNMYXllciA9IHVzZXNTVkdTdWJ0cmVlVHJhbnNmb3JtUnVsZXMo
cmVuZGVyZXIoKSkgPyBvZmZzZXRGb3JUaGlzTGF5ZXIgOiB0b0Zsb2F0U2l6ZShyb3VuZFBvaW50
VG9EZXZpY2VQaXhlbHModG9MYXlvdXRQb2ludChvZmZzZXRGb3JUaGlzTGF5ZXIpLCBkZXZpY2VT
Y2FsZUZhY3RvcikpOwogICAgIC8vIFdlIGhhbmRsZSBhY2N1bXVsYXRlZCBzdWJwaXhlbHMgdGhy
b3VnaCBuZXN0ZWQgbGF5ZXJzIGhlcmUuIFNpbmNlIHRoZSBjb250ZXh0IGdldHMgdHJhbnNsYXRl
ZCB0byBkZXZpY2UgcGl4ZWxzLAogICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGFkZCB0aGUg
ZGVsdGEgdG8gdGhlIGFjY3VtdWxhdGVkIHBpeGVscyBjb21pbmcgZnJvbSBhbmNlc3RvciBsYXll
cnMuCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250ZXh0IHRvIHRoZSBzbmFwcGlu
ZyBwb3NpdGlvbiB0byBhdm9pZCBvZmYtZGV2aWNlLXBpeGVsIHBvc2l0aW5nLgotICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGVSaWdodChkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGb3JUaGlzTGF5ZXIu
d2lkdGgoKSwgZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLmhlaWdodCgpKTsK
KyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQoYWxpZ25lZE9mZnNldEZvclRoaXNMYXllci53
aWR0aCgpLCBhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyLmhlaWdodCgpKTsKICAgICAvLyBBcHBs
eSB0aGUgdHJhbnNmb3JtLgogICAgIGF1dG8gb2xkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0o
KTsKICAgICBhdXRvIGFmZmluZVRyYW5zZm9ybSA9IHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9y
bSgpOwpAQCAtMzU2Nyw3ICszNTcyLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJC
eUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAg
ICAgcGFpbnRpbmdJbmZvLmV2ZW50UmVnaW9uQ29udGV4dC0+cHVzaFRyYW5zZm9ybShhZmZpbmVU
cmFuc2Zvcm0pOwogCiAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBz
aGlmdGVkIHRvIGJlIHVzLgotICAgIExheW91dFNpemUgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldCA9
IG9mZnNldEZvclRoaXNMYXllciAtIExheW91dFNpemUoZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0
Rm9yVGhpc0xheWVyKTsKKyAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQ7Cisg
ICAgaWYgKCF1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzKHJlbmRlcmVyKCkpICYmICFyZW5k
ZXJlcigpLmlzU1ZHUm9vdCgpKQorICAgICAgICBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0ID0gb2Zm
c2V0Rm9yVGhpc0xheWVyIC0gTGF5b3V0U2l6ZShhbGlnbmVkT2Zmc2V0Rm9yVGhpc0xheWVyKTsK
KwogICAgIExheWVyUGFpbnRpbmdJbmZvIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvKHBhaW50aW5n
SW5mbyk7CiAgICAgdHJhbnNmb3JtZWRQYWludGluZ0luZm8ucm9vdExheWVyID0gdGhpczsKICAg
ICB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCA9IExheW91dFJlY3QoZW5j
bG9zZVJlY3RUb0RldmljZVBpeGVscyh2YWx1ZU9yRGVmYXVsdCh0cmFuc2Zvcm0uaW52ZXJzZSgp
KS5tYXBSZWN0KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGRldmljZVNjYWxlRmFjdG9y
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDdkM2NiMTU3ZDBm
YmYyMDJlYTdkOGE2NDkyM2Y4MDRkZjMwOTFjNzIuLjgwNDc2MWE4ZjkyMDAwNGU4ZmRkNDI3ZTE4
ZDRhNzk4NDUxMzFiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC05ODQsNyArOTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCk7CiAjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCiAgICAgICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVy
ZXIoKSkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+
KHJlbmRlcmVyKCkpLmxheW91dExvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpLmN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbigpOwogI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIExheW91dFBvaW50KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5k
ZXggMDFiOThhZjQ4MWVlZmYyN2I0NjBhYTQ2YmFkYWMwZWFkZjdkMTJlMC4uY2VjMDRmYTNiM2Zj
NTc4ZjFmNDViZGQ0OWQxM2RjMmZjOTk1YTgyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMTI5LDYgKzEyOSw5IEBA
IHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgICAgICBsYXllcigpLT53aWxsUmVtb3Zl
Q2hpbGRXaXRoQmxlbmRNb2RlKCk7CiAjZW5kaWYKICAgICAgICAgc2V0SGFzVHJhbnNmb3JtUmVs
YXRlZFByb3BlcnR5KGZhbHNlKTsgLy8gQWxsIHRyYW5zZm9ybS1yZWxhdGVkIHByb3BlcnRpZXMg
Zm9yY2UgbGF5ZXJzLCBzbyB3ZSBrbm93IHdlIGRvbid0IGhhdmUgb25lIG9yIHRoZSBvYmplY3Qg
ZG9lc24ndCBzdXBwb3J0IHRoZW0uCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgICAgIHNldEhhc1NWR1RyYW5zZm9ybShmYWxzZSk7IC8vIFNhbWUgcmVhc29uIGFzIGZv
ciBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKS4KKyNlbmRpZgogICAgICAgICBzZXRI
YXNSZWZsZWN0aW9uKGZhbHNlKTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBhYm91dCB0byBi
ZSBkZXN0cm95ZWQgc2VsZi1wYWludGluZyBsYXllciB3aGVuIHN0eWxlIGNoYW5nZSBhbHNvIHRy
aWdnZXJzIHJlcGFpbnQuCkBAIC0yNzUsNyArMjc4LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRS
ZWN0PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRh
aW4KICAgICAqLwogCiAgICAgaWYgKG1vdmVUb09yaWdpbikKLSAgICAgICAgYWRqdXN0ZWRSZWN0
Lm1vdmVCeShmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKSk7CisgICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkobm9taW5hbFNWR0xheW91dExv
Y2F0aW9uKCkpOwogCiAgICAgaWYgKGF1dG8qIHRyYW5zZm9ybSA9IGxheWVyKCktPnRyYW5zZm9y
bSgpKQogICAgICAgICBhZGp1c3RlZFJlY3QgPSB0cmFuc2Zvcm0tPm1hcFJlY3QoYWRqdXN0ZWRS
ZWN0KTsKQEAgLTM1Niw2ICszNTksMTMgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojph
cHBseVNWR1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLAogCiAgICAg
c3R5bGUudW5hcHBseVRyYW5zZm9ybU9yaWdpbih0cmFuc2Zvcm0sIG9yaWdpblRyYW5zbGF0ZSk7
CiB9CisKK3ZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlSGFzU1ZHVHJhbnNmb3Jt
RmxhZ3MoY29uc3QgU1ZHR3JhcGhpY3NFbGVtZW50JiBncmFwaGljc0VsZW1lbnQpCit7CisgICAg
Ym9vbCBoYXNTVkdUcmFuc2Zvcm0gPSAhZ3JhcGhpY3NFbGVtZW50LmFuaW1hdGVkTG9jYWxUcmFu
c2Zvcm0oKS5pc0lkZW50aXR5KCk7CisgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KHN0eWxlKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgaGFzU1ZHVHJhbnNmb3Jt
KTsKKyAgICBzZXRIYXNTVkdUcmFuc2Zvcm0oaGFzU1ZHVHJhbnNmb3JtKTsKK30KICNlbmRpZgog
CiBib29sIHJlbmRlcmVyTmVlZHNQaXhlbFNuYXBwaW5nKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKaW5kZXggMDZhYzc4YzNmZTNjZWM1MDJmZDcwM2Q0N2FhYzM3NTYw
NGUwN2EyNC4uYzhiNzBlZDg5M2YwZmQ3ZjAxZTA2YjVlZWUxOTgxMjUxMDY4MDBkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBA
IC03OCw2ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXBMb2NhbFRvU1ZHQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zv
cm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkg
Y29uc3Q7CiAKICAgICB2b2lkIGFwcGx5U1ZHVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgU1ZHR3JhcGhpY3NFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlv
bk9wdGlvbj4pIGNvbnN0OworICAgIHZvaWQgdXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MoY29u
c3QgU1ZHR3JhcGhpY3NFbGVtZW50Jik7CisKKyAgICBMYXlvdXRQb2ludCBub21pbmFsU1ZHTGF5
b3V0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91
bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkubWluWE1pbllDb3JuZXIoKSk7IH0KKyAg
ICB2aXJ0dWFsIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3VycmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogI2VuZGlmCiAKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMzY4YzNkMTdiM2I2
MGI3NTIyOWQ2ZDNhYzQ3OGMwY2VhYmRkYjNkYy4uZTkwZTkwNDhhZTg1NGUxYzMxN2ZmMjM0YmZh
ZDI2NGY2ZWU1OTVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApA
QCAtMzY3LDYgKzM2NywxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
Ly8gVGhlIG9iamVjdEJvdW5kaW5nQm94IG9mIGEgU1ZHIGNvbnRhaW5lciBpcyBhZmZlY3RlZCBi
eSB0aGUgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgb24gaXRzIGNoaWxkcmVuIC0tIHRoZSBjb250
YWluZXIKKyAgICAvLyBib3VuZGluZyBib3ggaXMgYSB1bmlvbiBvZiBhbGwgY2hpbGQgYm91bmRp
bmcgYm94ZXMsIG1hcHBlZCB0aHJvdWdoIHRoZWlyIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLgor
ICAgIC8vCisgICAgLy8gVGhpcyBtZXRob2QgaWdub3JlcyBhbGwgdHJhbnNmb3JtYXRpb25zIGFu
ZCBjb21wdXRlcyB0aGUgb2JqZWN0Qm91bmRpbmdCb3gsIHdpdGhvdXQgbWFwcGluZyB0aHJvdWdo
IHRoZSBjaGlsZAorICAgIC8vIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLiBUaGUgU1ZHIHJlbmRl
ciB0cmVlIGlzIGNvbnN0cnVjdGVkIGluIHN1Y2ggYSB3YXksIHRoYXQgaXQgY2FuIGJlIG1hcHBl
ZCB0byBDU1MgZXF1aXZhbGVudHM6CisgICAgLy8gVGhlIFNWRyByZW5kZXIgdHJlZSB1bmRlcm5l
YXRoIHRoZSBvdXRlcm1vc3QgPHN2Zz4gYmVoYXZlcyBhcyBhIHNldCBvZiBhYnNvbHV0ZWx5IHBv
c2l0aW9uZWQsIHBvc3NpYmx5IG5lc3RlZCwgYm94ZXMuCisgICAgLy8gVGhlaXIgbGFpZCBvdXQg
aW4gc3VjaCBhIHdheSB0aGF0IHRyYW5zZm9ybWF0aW9ucyBkbyBOT1QgYWZmZWN0IGxheW91dCwg
YXMgaW4gSFRNTC9DU1Mgd29ybGQsIGJ1dCB0YWtlIGFmZmVjdCBkdXJpbmcKKyAgICAvLyBwYWlu
dGluZywgaGl0LXRlc3RpbmcgZXRjLiBUaGlzIGFsbG93cyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50
IG9mIHJlLWxheW91dHMgd2hlbiBhbmltYXRpbmcgdHJhbnNmb3JtYXRpb25zIGluIFNWRworICAg
IC8vIChub3QgdXNpbmcgQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgLyBXZWIgQW5pbWF0aW9u
cywgYnV0IGUuZy4gU01JTCwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBKUywgLi4uKS4KKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBj
b25zdCB7IHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOyB9CisjZW5kaWYKKwogICAgIC8vIFJl
dHVybnMgdGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVk
IGNvbnRlbnQKICAgICAvLyByZXNwZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBv
cGFjaXR5LCBzdHJva2Utd2lkdGggYW5kIG1hcmtlcnMKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCmluZGV4IDllOTlhZTA2NDYwZjk4OWM4YWEx
NzY4YmZlNTliNWI5NzljOTk1YTQuLmMxNDZkZGFlZjIwYjUzYzRkNDFhNTk0ODRhOTc0Y2FkZmNk
NmYzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2Nr
LmgKQEAgLTQ4LDYgKzQ4LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFBvaW50IGN1cnJl
bnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxvY2F0aW9uKCk7IH0K
KyAgICB2b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24pIGZpbmFsIHsgc2V0TG9jYXRpb24obG9jYXRpb24pOyB9CisjZW5kaWYKKwogICAg
IExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlv
bmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91
dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVS
ZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggMzQ1ZDYzNjEzNGQ1ZmRiY2Y5MjY3
YmZjZGFjYzRjZjYyY2IzYzZjNy4uMjEzODA5Mzk2M2M3MmRkYzQzZGFkNDMyY2M5MzRiOTI5ZDYx
ZmEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcApAQCAtMTE5LDE5ICsxMTksMTQgQEAgdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmxheW91dENoaWxkcmVuKCkKIAogICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91
bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJv
dW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiwgJm1fb2JqZWN0
Qm91bmRpbmdCb3hWYWxpZCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94
Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7Ci0gICAgc2V0TGF5b3V0UmVj
dChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fb2JqZWN0Qm91bmRpbmdCb3gpKTsKIAotICAgIGNvbnRh
aW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwotfQorICAg
IGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zv
cm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERl
Y29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJ
Z25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFu
c2Zvcm1hdGlvbnMgPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3Vu
ZGluZ0JveChvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25z
KTsKIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBtX3N0cm9r
ZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91
bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNv
cmF0aW9uKTsKKyAgICBzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0
KG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKSk7CiAKLSAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlckxheWVyIGNoYW5nZXMKLSAgICAvLyBpZiAoaGFz
TGF5ZXIoKSkKLSAgICAvLyAgICAgbGF5ZXIoKS0+c2V0SXNPcHBvcnR1bmlzdGljU3RhY2tpbmdD
b250ZXh0KHRydWUpOworICAgIGNvbnRhaW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRp
dmVUb0NvbnRhaW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQ
YWludCgpCkBAIC0xNjUsNyArMTYwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5k
ZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9m
ZnNldCk7CkBAIC0xODUsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKIAogYm9v
bCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9u
ID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9u
KCk7CiAKICAgICBhdXRvIHZpc3VhbE92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEVx
dWl2YWxlbnQoKTsKICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRp
b24pOwpAQCAtMTkzLDggKzE4OCw3IEBAIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gbG9jYWxQb2ludCA9IGxvY2F0aW9uSW5Db250YWlu
ZXIucG9pbnQoKTsKLSAgICBhdXRvIGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciA9IGZsb29yZWRM
YXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGF1
dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYm91bmRpbmdCb3hUb3BMZWZ0
Q29ybmVyIC0gYWRqdXN0ZWRMb2NhdGlvbjsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1Pcmln
aW5UcmFuc2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0ZWRMb2Nh
dGlvbjsKICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0
aW9uKTsKIAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSgq
dGhpcywgbG9jYWxQb2ludCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaAppbmRleCBlMzQ4MmFiOWYwM2ExNWY5MzFhMjk5NjlkMWY2NTQw
NjYwNWY1N2JiLi5mZDQyNWEzMGM0OGVkZDIyMTc3ODY1NTdhYWU1ZmIwYjI2MmU3N2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgK
QEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPYmplY3RCb3VuZGluZ0JveFZh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkOyB9CiAKICAgICBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRy
YW5zZm9ybWF0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hX
aXRob3V0VHJhbnNmb3JtYXRpb25zOyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRo
aXMpOyB9CiAKQEAgLTQ5LDggKzUwLDYgQEAgcHJvdGVjdGVkOgogICAgIEFTQ0lJTGl0ZXJhbCBy
ZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciJf
czsgfQogICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGxheW91dCgpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRDaGlsZHJlbigpOwogICAgIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpAQCAtNjIsNiArNjEsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBib29sIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCB7IGZhbHNlIH07
CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fb2Jq
ZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOwogICAgIEZsb2F0UmVjdCBtX3N0
cm9rZUJvdW5kaW5nQm94OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKaW5kZXggMjAwMDE0Nzc1Y2VlODI1ZDFkYWZiYTRkOTQw
ZTJiOGQwMjMyNzU0Mi4uNTRhNWExN2U4ZTBhZjZjZTEzNzBiZWY3OWFiZmY1YmU5OWExYzI0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCkBA
IC01MSw2ICs1MSwxMSBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0IGZpbmFsOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IGZpbmFsOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgTGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4geyB9OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisjZW5kaWYK
KwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZp
bmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVj
dEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICB2b2lk
IG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0
b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9k
ZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggYzk2OTVlNmI2
YTQzZjljZjRmZjAzOTVhYzM2MWE0MzI2MWRiOGUyMy4uNmZmZWU5OTcxODJlOWVlNzIwNTJhOWFm
MDc5NjkyMTg5MGMzYzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTYxLDEyICs2MSw4IEBAIHZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKLSAgICBib29sIGhhc1NWR1RyYW5zZm9y
bSA9IGZhbHNlOwogICAgIGlmIChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpCi0g
ICAgICAgIGhhc1NWR1RyYW5zZm9ybSA9ICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVs
ZW1lbnQoKSkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKLQotICAgIHNl
dEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQ
cm9wZXJ0eSgpIHx8IGhhc1NWR1RyYW5zZm9ybSk7Ci0gICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGhh
c1NWR1RyYW5zZm9ybSk7CisgICAgICAgIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGRvd25j
YXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFn
cykgY29uc3QKQEAgLTE0MSw3ICsxMzcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAg
ICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNl
dCArIGxheW91dExvY2F0aW9uKCksIGxheW91dFNpemUoKSkpKTsKKyAgICByZWN0cy5hcHBlbmQo
c25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIG1fbGF5b3V0UmVj
dC5sb2NhdGlvbigpLCBtX2xheW91dFJlY3Quc2l6ZSgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNW
R01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5kZXggYmMxMTI0NTA0M2M5ZDFlNTRlYjBjYzRjYzJj
MTQ4YzlhOWIyMzhjMy4uYWU4OWI4ZGVhYzk4YjJkZTViYzk5MTc2YTI5OGE0MzMyODQ0N2RjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApAQCAtNTgsMjYgKzU4LDIxIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBTVkdFbGVt
ZW50JiBlbGVtZW50KCkgY29uc3Q7CiAKKyAgICBMYXlvdXRSZWN0IGN1cnJlbnRTVkdMYXlvdXRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRDdXJyZW50
U1ZHTGF5b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVj
dCA9IGxheW91dFJlY3Q7IH0KKworICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9Cisg
ICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxv
Y2F0aW9uKSBmaW5hbCB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKwog
ICAgIC8vIE1pbWljIHRoZSBSZW5kZXJCb3ggYWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2Ft
ZSB0ZXJtaW5vbG9neSB0aGUgcGFpbnRpbmcgLyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBp
cwogICAgIC8vIHNpbWlsYXIgdG8gcmVhZCBjb21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBz
dWNoIGFzIFJlbmRlckJveCAmIGZyaWVuZHMuCiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0
RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0
LnNpemUoKSB9OyB9CiAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVj
dCBmcmFtZVJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0K
ICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJl
dHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0
KCp0aGlzKTsgfQogCi0gICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxl
bnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlv
bigpKTsgfQotCi0gICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9s
YXlvdXRSZWN0OyB9Ci0gICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0TGF5
b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0
UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KLQotICAgIExheW91dFBvaW50IHBh
aW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0
aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKSk7IH0KLSAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9Ci0gICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2Nh
dGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9j
YXRpb24oKSk7IH0KLSAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xheW91dFJlY3Quc2l6ZSgpOyB9Ci0KICAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAg
IHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBw
b2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkoY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOyB9
CiAgICAgRmxvYXRSZWN0IGJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJG
cmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3Mg
PSBSZW5kZXJCb3g6OkNhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKSBjb25zdDsKICAgICB2aXJ0
dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRp
b24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQ
YWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdt
ZW50LCByZWxldmFuY3kpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcAppbmRleCBhOWI5MzMyMmIwYThmMjQ2ZTAyYzU2MDM2MjVkZjMzNDZkM2Rm
YmNjLi4yMmEwMGNmNDQ5M2NiNGJkMTkzMjYwYjExOTdkNDMyY2NjN2Y3MzdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTE5Niw2ICsx
OTYsMTAgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogCiAgICAgICAgIFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgICAg
IG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNv
cmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGlu
Z0JveERlY29yYXRpb24pOworCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5n
Qm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgICAg
IG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91bmRpbmdCb3hD
b21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3hE
ZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyk7CisKICAgICAgICAgbV9zdHJva2VCb3Vu
ZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlv
bik7CiAgICAgfQogCkBAIC0zOTcsNiArNDAxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRh
dGVGcm9tU3R5bGUoKQogICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAog
ICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpOwogCiAgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCiAgICAgICAgIHNl
dEhhc05vblZpc2libGVPdmVyZmxvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaAppbmRleCBlN2Y3MTU1MzI2N2ViMjM5ODAwNThkMTdlZDA4ZGM4MjAx
ODAwMDhmLi5jMGQxY2NkZGEzODY4OWY3MmRjZmIzZWExNDAzMjNmYjcxMmE1MDI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtNjcsNiArNjcs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0Owog
CiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdp
dGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5k
aW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAg
ICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5n
Qm94KCp0aGlzKTsgfQogCkBAIC0xMjMsNiArMTI0LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNp
emUgbV9jb250YWluZXJTaXplOwogICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94Owor
ICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsK
ICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV92aWV3Qm94VHJhbnNmb3JtOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1lbnRhbExv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCmluZGV4IGNhYWY2YjM1YjBlMDUyMDAzZGY5MjAxZWVjMDAwNGQ1
NDM1MWY0MDYuLjk5YjI4ODRkNzI0NTk5ZjM2OTk0YWEzMDcwZjg3NDNiYWYyOWU4MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0x
NTEsNyArMTUxLDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKICAgICAgICAgdXBk
YXRlU2hhcGVGcm9tRWxlbWVudCgpOwogCiAgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZh
bHNlOwotICAgICAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91
bmRpbmdCb3gpKTsKKyAgICAgICAgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5
b3V0UmVjdChtX2ZpbGxCb3VuZGluZ0JveCkpOwogICAgIH0KIAogICAgIHVwZGF0ZUxheWVyVHJh
bnNmb3JtKCk7CkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdS
ZW5kZXJTdXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4
dCgpKTsKIAotICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRq
dXN0ZWRQYWludE9mZnNldCAtIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgp
LmxvY2F0aW9uKCkpOworICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9u
ID0gYWRqdXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAg
IHBhaW50SW5mby5jb250ZXh0KCkudHJhbnNsYXRlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbi53aWR0aCgpLCBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24uaGVpZ2h0
KCkpOwogCiAgICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5zaGFwZVJlbmRlcmluZygpID09IFNo
YXBlUmVuZGVyaW5nOjpDcmlzcEVkZ2VzKQpAQCAtMzQ1LDExICszNDUsMTAgQEAgYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHIKICAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3Vu
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0g
YWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0ZWRM
b2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7
CiAKICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7Ci0g
ICAgYXV0byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2Jq
ZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBhdXRvIGNvb3JkaW5hdGVT
eXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVz
dGVkTG9jYXRpb247CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24g
PSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CiAgICAgbG9j
YWxQb2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7CiAKICAgICBp
ZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9p
bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKaW5kZXggYjAwZmI1MGFhOWUwMDAx
Nzk3ZmM5NTUwODU4NmE2YjIxNDA3N2Y3OS4uMGRlYjBlMzdiYmMzZGZlZWUwOTkyMDBiZmQ1YzVi
MDA0OGM5Y2MyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCkBAIC05Nyw4ICs5
NywxMCBAQCB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OnVwZGF0ZUZyb21T
dHlsZSgpCiB7CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAot
ICAgIGlmIChhc3NvY2lhdGVkVXNlRWxlbWVudChncmFwaGljc0VsZW1lbnQoKSkpCisgICAgaWYg
KGFzc29jaWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgpKSkgewogICAgICAgICBzZXRI
YXNTVkdUcmFuc2Zvcm0oKTsKKyAgICAgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmFw
cGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0aW9uU2V0PFJl
bmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmNwcAppbmRleCA3OTgwOThkZWIyYzk4NTQ2NWI5MTYwNzg2NDc5NGM4NmVmYjQ2
NzMzLi40ZGI1YzgyMTZmZmEwODE4NWQwMDA1OTNmN2U1MjFiZDUxMTZlMmFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5jcHAKQEAgLTE3NSw4ICsxNzUsMTAgQEAgRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OmhhbmRsZVJvb3RPckNvbnRhaW5lcihjb25zdCBTVkdCb3VuZGluZ0JveEMK
ICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVC
b3hXaXRoRmlsdGVyQm94Rm9yQ2hpbGRyZW4pICYmIGlzPFJlbmRlclNWR0NvbnRhaW5lcj4oY2hp
bGQpKQogICAgICAgICAgICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVzdEJveEZv
ckNsaXBwaW5nQW5kRWZmZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZp
bHRlckJveCB9LCBjaGlsZEJveCk7CiAKLSAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCi0gICAgICAgICAgICBjaGls
ZEJveCA9IGxheWVyVHJhbnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKyAgICAgICAgaWYgKCFv
cHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5zZm9ybWF0aW9ucykp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb25N
YXRyaXhGcm9tQ2hpbGQoY2hpbGQpKQorICAgICAgICAgICAgICAgIGNoaWxkQm94ID0gbGF5ZXJU
cmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG9w
dGlvbnMgPT0gb2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uKQogICAgICAgICAgICAgdW5pdGVC
b3VuZGluZ0JveFJlc3BlY3RpbmdWYWxpZGl0eShib3hWYWxpZCwgYm94LCBjaGlsZCwgY2hpbGRC
b3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24uaAppbmRleCA4M2RhNjNiZDZmMDk4MmVjNjdmYTViM2JjOTQ2YmQ4
ODJkMjU5ZDQ0Li4wZDc1NGFkNDMxMWVjODVkYjkxNzAwOTA4YTBhMDNiMTJkNTY2ZTRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDIx
IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgSWdhbGlhIFMuTC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTUgKzM1LDE2IEBAIHB1YmxpYzoKICAgICBleHBsaWNp
dCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
KTsKICAgICB+U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbigpID0gZGVmYXVsdDsKIAotICAgIGVu
dW0gY2xhc3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3QgeworICAgIGVudW0gY2xhc3MgRGVj
b3JhdGlvbk9wdGlvbiA6IHVpbnQxNl90IHsKICAgICAgICAgSW5jbHVkZUZpbGxTaGFwZSAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDAsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGZpbGwnICAg
ICAqLwogICAgICAgICBJbmNsdWRlU3Ryb2tlU2hhcGUgICAgICAgICAgICAgICAgICA9IDEgPDwg
MSwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgc3Ryb2tlJyAgICovCiAgICAgICAgIEluY2x1ZGVN
YXJrZXJzICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLCAvKiBjb3JyZXNwb25kcyB0byAn
Ym9vbCBtYXJrZXJzJyAgKi8KICAgICAgICAgSW5jbHVkZUNsaXBwZXJzICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDMsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGNsaXBwZXJzJyAqLwogICAg
ICAgICBJbmNsdWRlTWFza2VycyAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwgLyogV2Vi
S2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCiAgICAgICAgIEluY2x1ZGVPdXRsaW5lICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA1LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJu
YWwgICAgKi8KLSAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAgICAgPSAx
IDw8IDYsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLwotICAgICAgICBPdmVy
cmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgNyAgLyogV2ViS2l0IGV4dGVu
c2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIElnbm9yZVRyYW5zZm9ybWF0aW9ucyAgICAg
ICAgICAgICAgID0gMSA8PCA2LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8K
KyAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAgICAgPSAxIDw8IDcsIC8q
IFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAgICBPdmVycmlkZUJveFdp
dGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgOCAgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGlu
dGVybmFsICAgICovCiAgICAgfTsKIAogICAgIHVzaW5nIERlY29yYXRpb25PcHRpb25zID0gT3B0
aW9uU2V0PERlY29yYXRpb25PcHRpb24+OwpAQCAtNzMsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgICAgIGF1dG8gdmlzdWFsT3ZlcmZs
b3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRpbmdCb3gpOwotICAgICAg
ICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0UG9pbnQocmVuZGVyZXIu
b2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIHZpc3VhbE92
ZXJmbG93UmVjdC5tb3ZlQnkoLXJlbmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIHZpc3VhbE92ZXJmbG93UmVjdDsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcAppbmRleCA4
MTNjM2VjZWY5MzhiZGE0ODY0NDRkNGFmNzA4ZDk3Y2I3M2NlYWUwLi44MzI4MmNmMDMxNjZlODJk
YzRkMjYwNjkxMDA5MjRmYjI4NTBlNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCkBAIC0xMjAsNDEgKzEyMCw2IEBAIHZv
aWQgU1ZHQ29udGFpbmVyTGF5b3V0OjpsYXlvdXRDaGlsZHJlbihib29sIGNvbnRhaW5lck5lZWRz
TGF5b3V0KQogICAgICAgICBBU1NFUlQoZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2ZUxheW91dC5p
c0VtcHR5KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFBvaW50IGxheW91dExvY2F0aW9u
RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlz
PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheW91dExvY2F0aW9uKCk7Ci0KLSAg
ICBpZiAoaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgLy8gPGZvcmVpZ25PYmplY3Q+IC8g
PHRleHQ+Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIp
LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5lPihyZW5kZXJlcikpIC8v
IDx0c3Bhbj4gLyA8dGV4dFBhdGg+Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgbmV3TG9jYXRpb24pCi17Ci0gICAgaWYgKGlzPFJlbmRlclNWR01vZGVs
T2JqZWN0PihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q+KHJlbmRlcmVyKS5zZXRMYXlvdXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyA8Zm9yZWlnbk9iamVjdD4gLyA8dGV4dD4KLSAgICBpZiAo
aXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgewotICAgICAgICBkb3duY2FzdDxSZW5kZXJT
VkdCbG9jaz4ocmVuZGVyZXIpLnNldExvY2F0aW9uKG5ld0xvY2F0aW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIDx0c3Bhbj4gLyA8dGV4dFBhdGg+Ci0gICAgaWYgKGlzPFJl
bmRlclNWR0lubGluZT4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnBvc2l0aW9uQ2hp
bGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCkKIHsKICAgICBpZiAobV9wb3NpdGlvbmVkQ2hpbGRy
ZW4uaXNFbXB0eSgpKQpAQCAtMTc3LDQwICsxNDIsMzYgQEAgdm9pZCBTVkdDb250YWluZXJMYXlv
dXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCkKICAgICB9OwogCiAgICAg
Ly8gQXJyYW5nZSBsYXlvdXQgbG9jYXRpb24gZm9yIGFsbCBjaGlsZCByZW5kZXJlcnMgcmVsYXRp
dmUgdG8gdGhlIGNvbnRhaW5lciBsYXlvdXQgbG9jYXRpb24uCi0gICAgYXV0byBwYXJlbnRMYXlv
dXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChtX2NvbnRhaW5lci5vYmplY3RCb3VuZGlu
Z0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0JiBjaGlsZCA6
IG1fcG9zaXRpb25lZENoaWxkcmVuKSB7CisgICAgYXV0byBwYXJlbnRMYXlvdXRMb2NhdGlvbiA9
IG1fY29udGFpbmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOworICAgIGZvciAoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGlsZHJlbikgewogICAgICAg
ICB2ZXJpZnlQb3NpdGlvbmVkQ2hpbGRSZW5kZXJlckV4cGVjdGF0aW9uKGNoaWxkKTsKIAotICAg
ICAgICBhdXRvIG9iamVjdEJvdW5kaW5nQm94Q2hpbGQgPSBjaGlsZC5vYmplY3RCb3VuZGluZ0Jv
eCgpOwotICAgICAgICBhdXRvIGxheW91dExvY2F0aW9uID0gZmxvb3JlZExheW91dFBvaW50KG9i
amVjdEJvdW5kaW5nQm94Q2hpbGQubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGF1dG8gZGVz
aXJlZExheW91dExvY2F0aW9uID0gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbiAtIHBhcmVu
dExheW91dExvY2F0aW9uKTsKLSAgICAgICAgYXV0byBjdXJyZW50TGF5b3V0TG9jYXRpb24gPSBs
YXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihjaGlsZCk7Ci0gICAgICAgIGlmIChjdXJyZW50TGF5
b3V0TG9jYXRpb24gPT0gZGVzaXJlZExheW91dExvY2F0aW9uKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIoY2hpbGQsIGRlc2lyZWRM
YXlvdXRMb2NhdGlvbik7CisgICAgICAgIGF1dG8gZGVzaXJlZExheW91dExvY2F0aW9uID0gdG9M
YXlvdXRQb2ludChjaGlsZC5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIHBhcmVudExheW91
dExvY2F0aW9uKTsKKyAgICAgICAgaWYgKGNoaWxkLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigp
ICE9IGRlc2lyZWRMYXlvdXRMb2NhdGlvbikKKyAgICAgICAgICAgIGNoaWxkLnNldEN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbihkZXNpcmVkTGF5b3V0TG9jYXRpb24pOwogICAgIH0KIH0KIAotdm9p
ZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6dmVy
aWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcikKIHsKICAgICBpZiAocmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIo
KSAmJiAhcmVuZGVyZXIuaXNTVkdSb290KCkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50TGF5b3V0
TG9jYXRpb24gPSBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAg
IGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gcmVuZGVyZXIuY3VycmVudFNWR0xheW91dExv
Y2F0aW9uKCk7CiAKICAgICAgICAgYXV0byBleHBlY3RlZExheW91dExvY2F0aW9uID0gY3VycmVu
dExheW91dExvY2F0aW9uOwotICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3Jz
T2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgICAgICBmb3IgKGF1dG8mIGFu
Y2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVy
KSkgewogICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVy
KCkpOwogICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmlzU1ZHUm9vdCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbi5tb3ZlQnkobGF5
b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgIGV4cGVjdGVk
TGF5b3V0TG9jYXRpb24ubW92ZUJ5KGFuY2VzdG9yLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9uID0gZmxv
b3JlZExheW91dFBvaW50KHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3Ju
ZXIoKSk7CisgICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9uID0gcmVuZGVyZXIubm9t
aW5hbFNWR0xheW91dExvY2F0aW9uKCk7CiAgICAgICAgIGlmIChleHBlY3RlZExheW91dExvY2F0
aW9uID09IGluaXRpYWxMYXlvdXRMb2NhdGlvbikgewogICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKFNWRywgc3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwg
JnJlbmRlcmVyIDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3RlcnMoKSA8
PCAiKSIKLSAgICAgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0
ZW5jeSgpIG9iamVjdEJvdW5kaW5nQm94IC8gbGF5b3V0TG9jYXRpb24gYXJlIGluIHN5bmMuIik7
CisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3ko
KSBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24gYXJl
IGluIHN5bmMuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU1ZHLCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJMYXlvdXQgcmVuZGVyZXIgIiA8PCAm
cmVuZGVyZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJOYW1lKCkuY2hhcmFjdGVycygpIDw8
ICIpIgotICAgICAgICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3Rl
bmN5KCkgb2JqZWN0Qm91bmRpbmdCb3ggLyBsYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlvbGF0
ZWQgLS0gb3V0IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKKyAgICAgICAgICAgICAg
ICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIGN1cnJlbnRTVkdMYXlv
dXRMb2NhdGlvbiAvIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlvbGF0ZWQg
LS0gb3V0IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKICAgICAgICAgICAgICAgICA8
PCAiIGN1cnJlbnRMYXlvdXRMb2NhdGlvbj0iIDw8IGN1cnJlbnRMYXlvdXRMb2NhdGlvbgogICAg
ICAgICAgICAgICAgIDw8ICIgIChleHBlY3RlZExheW91dExvY2F0aW9uPSIgPDwgZXhwZWN0ZWRM
YXlvdXRMb2NhdGlvbgogICAgICAgICAgICAgICAgIDw8ICIgIT0gaW5pdGlhbExheW91dExvY2F0
aW9uPSIgPDwgaW5pdGlhbExheW91dExvY2F0aW9uIDw8ICIpIgpAQCAtMjI0LDcgKzE4NSw3IEBA
IHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5
KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKSB7Cisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KHJlbmRlcmVyKSkgewogICAgICAgICBpZiAoY2hpbGQuaXNTVkdMYXllckF3YXJlUmVuZGVy
ZXIoKSkKICAgICAgICAgICAgIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY2hpbGQp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29u
dGFpbmVyTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5l
ckxheW91dC5oCmluZGV4IGVjMTMwOTM1MTI2Y2Y3ZWNlMTU5OTkyYThkYjcxYzExNjczMDI2ZTcu
LjUzNDQwMWNjZDRmYjhjOGVmYzIyNTc4ZmFkYmYwNjFkMWYyZmU4ODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaApAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29u
dGFpbmVyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3Rl
bmN5KGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRM
b2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICBz
dGF0aWMgYm9vbCB0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCogYW5j
ZXN0b3IpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApp
bmRleCBmMmMwNzZmN2I3NzJkMTE1ZTRlZWY2YTgwNmZiYWJiMjVmNTVmZTkzLi44NjliMTlhNmI3
ODk3MTkzY2Q0MzhiYTgyMGZhM2VhOTgxZDQzMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUFkanVzdGVyLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CkBAIC0zNjQsMTMgKzM2NSwyOSBAQCB2b2lkIEFkanVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5jZQogICAgIGVsc2UK
ICAgICAgICAgc3R5bGUuc2V0VXNlZFpJbmRleChzdHlsZS5zcGVjaWZpZWRaSW5kZXgoKSk7CiAK
KyAgICAvLyBGb3IgU1ZHIGNvbXBhdGliaWxpdHkgcHVycG9zZXMgd2UgaGF2ZSB0byBjb25zaWRl
ciB0aGUgJ2FuaW1hdGVkTG9jYWxUcmFuc2Zvcm0nIGJlc2lkZXMgdGhlIFJlbmRlclN0eWxlIHRv
IHF1ZXJ5CisgICAgLy8gaWYgYW4gZWxlbWVudCBoYXMgYSB0cmFuc2Zvcm0uIFNWRyB0cmFuc2Zv
cm1zIGFyZSBub3Qgc3RvcmVkIG9uIHRoZSBSZW5kZXJTdHlsZSwgYW5kIHRodXMgd2UgbmVlZCBh
IHNwZWNpYWwgY2FzZSBoZXJlLgorICAgIGF1dG8gaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
ID0gW10oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7
CisgICAgICAgIGlmIChzdHlsZS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkuc2V0dGluZ3MoKS5s
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCgpICYmIGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oZWxl
bWVudCkpCisgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4o
KmVsZW1lbnQpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCk7CisjZWxzZQor
ICAgICAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKwogICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSBy
b290IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVudHMKICAgICAv
LyBjYXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUg
dW5pdCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAogICAgIC8vIG9iamVjdCB3ZWRnZWQg
aW4gYmV0d2VlbiB0aGVtLiBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMg
dGhhdCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCiAgICAgaWYgKHN0eWxl
Lmhhc0F1dG9Vc2VkWkluZGV4KCkpIHsKICAgICAgICAgaWYgKChtX2VsZW1lbnQgJiYgbV9kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQoKSA9PSBtX2VsZW1lbnQpCiAgICAgICAgICAgICB8fCBzdHls
ZS5oYXNPcGFjaXR5KCkKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc1RyYW5zZm9ybVJlbGF0ZWRQ
cm9wZXJ0eSgpCisgICAgICAgICAgICB8fCBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5
bGUsIG1fZWxlbWVudCkKICAgICAgICAgICAgIHx8IHN0eWxlLmhhc01hc2soKQogICAgICAgICAg
ICAgfHwgc3R5bGUuY2xpcFBhdGgoKQogICAgICAgICAgICAgfHwgc3R5bGUuYm94UmVmbGVjdCgp
Cg==
</data>
<flag name="commit-queue"
          id="487152"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458314</attachid>
            <date>2022-04-25 16:53:29 -0700</date>
            <delta_ts>2022-04-27 02:59:13 -0700</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-239717-20220425165328.patch</filename>
            <type>text/plain</type>
            <size>49346</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMyOTgxNjY4ZTIxMjRh
ZTIxNGJhNzE2NjllZTg2ZWEyOTUxYjA5Ni4uMmRiZWQwMTBlNmM3YWIyNGNmZmRjYTY3NTU2MTY0
NDc4ZmU0ZjdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMi0wNC0yNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gRml4IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk3MTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGhlIG1ham9yaXR5IG9mIFNWRyB0
cmFuc2Zvcm0gaXNzdWVzIGluIExCU0UuIHdlYmtpdC5vcmcvYi8yMzc3MTEgbGFpZCB0aGUgZ3Jv
dW5kd29yayBmb3IgU1ZHCisgICAgICAgIHRyYW5zZm9ybXMgaW4gTEJTRSwgaG93ZXZlciB0aGVy
ZSBhcmUgc3RpbGwgaXNzdWVzOgorCisgICAgICAgIC0gU1ZHIHRyYW5zZm9ybXMgc3BlY2lmaWVk
IGFsb25lIG9uIFNWRyBlbGVtZW50cywgdy9vIGFueSBhZGRpdGlvbmFsIHN0eWxlL3BlcnNwZWN0
aXZlIHJlbGF0ZWQgcHJvcGVydHkKKyAgICAgICAgICBzdWNoIGFzIHRyYW5zZm9ybS1ib3ggLyB0
cmFuc2Zvcm0tb3JpZ2luIC8gLi4uIGRvIG5vdCB0cmlnZ2VyIGxheWVyIGNyZWF0aW9uLCBmaXgg
YnkgYWRhcHRpbmcgU3R5bGVBZGp1c3Rlci4KKworICAgICAgICAtIFN3aXRjaGluZyBvbi9vZmYg
dHJhbnNmb3JtcyBmb3IgYSBTVkcgZWxlbWVudCwgd2FzIG5vdCB0cmFja2luZyB1cGRhdGVzIHRv
IGJvdGggJ0hhc1NWR1RyYW5zZm9ybScgYW5kCisgICAgICAgICAgJ0hhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eScgZmxhZ3MgY29ycmVjdGx5LCBmaXggdGhhdCBieSBpbnRyb2R1Y2luZyBhbiAn
dXBkYXRlSGFzU1ZHVHJhbnNmb3JtRmxhZ3MnIGhlbHBlci4KKworICAgICAgICAtIE1vZGlmeSBT
VkdDb250YWluZXJMYXlvdXQgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IG9uIHRoZSBjaGlsZHJlbiB0
cmFuc2Zvcm1hdGlvbnMgd2hlbiBjb21wdXRpbmcgY29udGFpbmVyCisgICAgICAgICAgYm91bmRh
cmllcy4gSW4gdGhlIGxlZ2FjeSBlbmdpbmUsIHdlIGFsd2F5cyBoYXZlIHRvIG1hcmsgdGhlIHdo
b2xlIGFuY2VzdG9yIGNoYWluIGFzICduZWVkIHRvIHJlY29tcHV0ZSBib3VuZGFyaWVzJworICAg
ICAgICAgIGFuZCBpbnZva2luZyBhIHJlLWxheW91dCwgdG8gcGVyZm9ybSB0aGUgcmVjb21wdXRh
dGlvbi4gVGhpcyBjaGFuZ2UgYXZvaWRzIHRoZSBpbnZhbGlkYXRpb24gb2YgdGhlIHdob2xlIGFu
Y2VzdG9yCisgICAgICAgICAgY2hhaW4sIHdoZW4gYW4gZWxlbWVudHMgdHJhbnNmb3JtIGNoYW5n
ZXMgaW4gYSBub24tYWNjZWxlcmF0ZWQgd2F5IChlLmcuIFNWR1RyYW5zZm9ybUxpc3QgbWFuaXB1
bGF0aW9uLCBTTUlMCisgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0+IC8gPGFuaW1hdGU+IC8g
PHNldD4pLiBJbiBDU1MgdHJhbnNmb3JtYXRpb25zIGRvIG5vdCBhZmZlY3QgbGF5b3V0LCBvbmx5
IGhpdC10ZXN0aW5nIGFuZCBwYWludGluZy4KKworICAgICAgICAgIC0+IFNWRy9DU1MgdHJhbnNm
b3JtcyBhcHBsaWVkIG9uIFNWRyBlbGVtZW50cyBpcyBjb25jZXB0dWFsbHkgZXF1aXZhbGVudCB0
byBDU1MgdHJhbnNmb3JtYXRpb25zIG9uIENTUyBib3hlcyBub3cuCisgICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb24gY2hhbmdlcyBubyBsb25nZXIgYWZmZWN0IHRoZSAnaW50ZXJuYWwgZ2VvbWV0
cnknIChvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSkuCisgICAgICAg
ICAgICAgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRp
b24oKSBhcmUgY29tcHV0ZWQgdXNpbmcgdGhlICdpbnRlcm5hbCBnZW9tZXRyeScgYW5kIHVzZWQK
KyAgICAgICAgICAgICB0aHJvdWdob3V0IGxheW91dC4KKworICAgICAgICAgIFRoaXMgYXZvaWRz
IG1vc3Qgb2YgdGhlIFJlbmRlckxheWVyIC8gUmVuZGVyTGF5ZXJCYWNraW5nIHNwZWNpZmljIGNo
YW5nZXMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIGRvd25zdHJlYW0KKyAgICAgICAgICBMQlNF
IGltcGxlbWVudGF0aW9uLCB3aGlsZSBhbHNvIHNvbHZpbmcgYW4gaW1wb3J0YW50IGRlc2lnbiBp
c3N1ZTogbm8gYmFjay1zcGxhc2ggZnJvbSBjaGlsZHJlbiB0byBwYXJlbnRzLgorICAgICAgICAg
IExhcmdlLCBkZWVwIG5lc3RlZCBkb2N1bWVudHMgLS0gYXMgc2VlbiBpbiB0aGUgd2lsZCAtLSB3
aWxsIGJlbmVmaXQgdGhlIG1vc3QsIGF2b2lkaW5nIHRoZSBmcmVxdWVudCBhbmNlc3RvcgorICAg
ICAgICAgIHdhbGtzIHRvIG1hcmsgdGhlIGNvbnRhaW5pbmcgYmxvY2sgLyBwYXJlbnQgaGllcmFj
aHkgZm9yIHJlLWxheW91dC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBjaGFuZ2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJTRSBpcyBy
ZWFkeSBzb29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkNyZWF0ZVN0
YWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXll
ckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlcmVyTG9jYXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVj
dEluU1ZHQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OnVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJNb2RlbE9iamVjdDo6bm9taW5hbFNWR0xheW91dExvY2F0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzZXRD
dXJyZW50U1ZHTGF5b3V0TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3hX
aXRob3V0VHJhbnNmb3JtYXRpb25zIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXRDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZnJhbWVSZWN0RXF1aXZhbGVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUb3BM
ZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRMb2NhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cGFp
bnRpbmdMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6bGF5b3V0TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uT2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlv
dXRTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpoYW5kbGVS
b290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29udGFp
bmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lz
dGVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcik6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaDoK
KyAgICAgICAgKiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpBZGp1c3Rlcjo6YWRqdXN0IGNvbnN0KToKKwogMjAyMi0wNC0yNSAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVxdWVzdCBp
bnRlcmNlcHRpb24gc2hvdWxkIG5vdCBiZSBndWFyZGVkIGJhc2VkIG9uIHNlcnZpY2Ugd29ya2Vy
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGI3NmUx
ODFlNmEyMDBkNzA4Y2Y4NDY0ZjUwZDgwZTUwYjAzZTFhY2EuLjY4MGNlNWM3NmNhNmFkNmEzN2Nh
YTczYjBhOWI1Y2EwYTBiZWIyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKQEAgLTI0MTgsMjEgKzI0MTgsNDMgQEAgRmxvYXRSZWN0IFJlbmRlckVsZW1l
bnQ6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogICAgIGlmICgh
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1
dG8gYWxpZ25SZWZlcmVuY2VCb3ggPSBbJl0oRmxvYXRSZWN0IHJlZmVyZW5jZUJveCkgeworICAg
ICAgICAvLyBUaGUgQ1NTIGJvcmRlckJveFJlY3QoKSBpcyBkZWZpbmVkIHRvIHN0YXJ0IGF0IGFu
IG9yaWdpbiBvZiAoMCwgMCkuCisgICAgICAgIC8vIEEgcG9zc2libGUgc2hpZnQgb2YgYSBDU1Mg
Ym94IChlLmcuIGR1ZSB0byBub24tc3RhdGljIHBvc2l0aW9uICsgdG9wL2xlZnQgcHJvcGVydGll
cykKKyAgICAgICAgLy8gZG9lcyBub3QgZWZmZWN0IHRoZSBib3JkZXJCb3hSZWN0KCkgbG9jYXRp
b24uIFRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgICAvLyBpcyBwcm9wYWdhdGVkIHVw
b24gcGFpbnQgdGltZSwgZS5nLiB2aWEgJ3BhaW50T2Zmc2V0JyB3aGVuIGNhbGxpbmcgUmVuZGVy
T2JqZWN0OjpwYWludCgpLAorICAgICAgICAvLyBvciBieSBhbHRlcmluZyB0aGUgUmVuZGVyTGF5
ZXIgVHJhbnNmb3JtYXRpb25NYXRyaXggdG8gaW5jbHVkZSB0aGUgJ29mZnNldEZyb21BbmNlc3Rv
cicKKyAgICAgICAgLy8gcmlnaHQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgd2hlbiBD
U1MgdHJhbnNmb3JtYXRpb25zIGFyZSBwcmVzZW50IChzZWUgUmVuZGVyTGF5ZXIKKyAgICAgICAg
Ly8gcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oKSBmb3IgZGV0YWlscykuCisgICAgICAg
IC8vCisgICAgICAgIC8vIFRvIG1pbWljIHRoZSBleHBlY3RhdGlvbiBmb3IgU1ZHLCAnZmlsbC1i
b3gnIG11c3QgYmVoYXZlIHRoZSBzYW1lOiBpZiB3ZSdkIGluY2x1ZGUKKyAgICAgICAgLy8gdGhl
ICdyZWZlcmVuY2VCb3gnIGxvY2F0aW9uIGluIHRoZSByZXR1cm5lZCByZWN0LCB3ZSdkIGFwcGx5
IHRoZSAoeCwgeSkgbG9jYXRpb24KKyAgICAgICAgLy8gaW5mb3JtYXRpb24gZm9yIHRoZSBTVkcg
cmVuZGVyZXIgdHdpY2UuIFdlIHdvdWxkIHNoaWZ0IHRoZSAndHJhbnNmb3JtLW9yaWdpbicgYnkg
KHgsIHkpCisgICAgICAgIC8vIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGFsdGVyIHRoZSBDVE0gaW4g
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgYnkKKyAgICAgICAg
Ly8gaW5jbHVkaW5nIGEgdHJhbnNsYXRpb24gdG8gdGhlIGVuY2xvc2luZyB0cmFuc2Zvcm1lZCBh
bmNlc3RvciAoJ29mZnNldEZyb21BbmNlc3RvcicpLgorICAgICAgICAvLyBBdm9pZCB0aGF0LCBh
bmQgbW92ZSBieSAtbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkuCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGlmIChpc1NWR0xheWVyQXdhcmVSZW5kZXJlcigp
ICYmICFpc1NWR1Jvb3QoKSAmJiBkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0Vu
Z2luZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlQnkoLWRvd25jYXN0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24o
KSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKKyAgICB9OworCiAgICAg
c3dpdGNoIChib3hUeXBlKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAg
IGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRp
bmdCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgotICAgICAgICByZXR1cm4gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgcmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KG9iamVj
dEJvdW5kaW5nQm94KCkpOwogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgogICAgIGNh
c2UgQ1NTQm94VHlwZTo6TWFyZ2luQm94OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94
OgotICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmV0dXJuIGFs
aWduUmVmZXJlbmNlQm94KHN0cm9rZUJvdW5kaW5nQm94KCkpOwogICAgIGNhc2UgQ1NTQm94VHlw
ZTo6Vmlld0JveDoKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbTogQ2FjaGUgdGhl
IGltbXV0YWJsZSBTVkdMZW5ndGhDb250ZXh0IHBlciBTVkdFbGVtZW50LCB0byBhdm9pZCB0aGUg
cmVwZWF0ZWQgUmVuZGVyU1ZHUm9vdCBzaXplIHF1ZXJpZXMgaW4gZGV0ZXJtaW5lVmlld3BvcnQo
KS4KICAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKICAgICAgICAgU1ZHTGVuZ3RoQ29u
dGV4dChkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVWaWV3cG9ydCh2
aWV3cG9ydFNpemUpOwotICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6ZSB9OworICAg
ICAgICByZXR1cm4gYWxpZ25SZWZlcmVuY2VCb3goeyB7IH0sIHZpZXdwb3J0U2l6ZSB9KTsKICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IGMyZGUwYjZkNWZkNmZkODIxMDJmNzBiY2NjMTliYTc2OTNk
YWVjNjcuLmJiNGQzYTRlNDYyYmNjOTc1NjZlZmJhNDliOGQxODM5NzhjYTRhM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzAyLDkgKzMwMiw5IEBAIHN0
YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQogCiBERUZJTkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVyTGF5ZXI6OlJl
bmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVj
dCkKLSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0Lmlz
UmVuZGVyVmlldygpKQotICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVu
ZGVyZXIuaXNSZW5kZXJWaWV3KCkpCisgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dChyZW5k
ZXJlci5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBt
X2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQogICAgICwgbV9pc09wcG9ydHVuaXN0aWNTdGFj
a2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zNDMsNyArMzQzLDcgQEAgUmVuZGVyTGF5ZXI6OlJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkK
ICAgICAsIG1faGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzU3RhdHVzRGlydHkoZmFs
c2UpCiAjZW5kaWYKICAgICAsIG1fcmVwYWludFJlY3RzVmFsaWQoZmFsc2UpCi0gICAgLCBtX3Jl
bmRlcmVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKKyAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkp
OwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tpbmdDb250ZXh0
KCkpOwpAQCAtMzUzLDkgKzM1Myw5IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgaWYgKGlzUmVu
ZGVyVmlld0xheWVyKCkpCiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKIAotICAgIGlmICghcmVuZGVy
ZXIoKS5maXJzdENoaWxkKCkpIHsKKyAgICBpZiAoIXJlbmRlcmVyLmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKLSAgICAgICAgbV9o
YXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZTsKKyAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVy
LnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQogfQog
CkBAIC01NTIsOSArNTUyLDYgQEAgc3RhdGljIGJvb2wgY2FuQ3JlYXRlU3RhY2tpbmdDb250ZXh0
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBhdXRvJiByZW5kZXJlciA9IGxheWVy
LnJlbmRlcmVyKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpCi0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIHx8IHJl
bmRlcmVyLmhhc1NWR1RyYW5zZm9ybSgpCi0jZW5kaWYKICAgICAgICAgfHwgcmVuZGVyZXIuaGFz
Q2xpcFBhdGgoKQogICAgICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKQogICAgICAgICB8fCBy
ZW5kZXJlci5oYXNNYXNrKCkKQEAgLTM1NDUsMTkgKzM1NDIsMjkgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGkKIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFp
bnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIGNvbnN0IExh
eW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0KQogeworICAgIGF1dG8gdXNlc1NWR1N1YnRyZWVU
cmFuc2Zvcm1SdWxlcyA9IFtdKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KSB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIHJldHVybiBy
ZW5kZXJlci5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQo
KSAmJiByZW5kZXJlci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpICYmICFyZW5kZXJlci5pc1NW
R1Jvb3QoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBUaGlzIGludm9sdmVzIHN1
YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNv
b3JkaW5hdGUgc3BhY2UsIGJ1dCBwcmVzZXJ2aW5nCiAgICAgLy8gdGhlIGFjY3VtdWxhdGVkIGVy
cm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgorICAgIC8vIE5vdGU6IFRoZSBwaXhlbC1zbmFwcGlu
ZyBsb2dpYyBpcyBkaXNhYmxlZCBmb3IgdGhlIHdob2xlIFNWRyByZW5kZXIgdHJlZSwgZXhjZXB0
IHRoZSBvdXRlcm1vc3QgPHN2Zz4uCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBMYXlvdXRTaXplIG9m
ZnNldEZyb21QYXJlbnQgPSBvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZvLnJvb3RMYXll
cik7CiAgICAgb2Zmc2V0RnJvbVBhcmVudCArPSB0cmFuc2xhdGlvbk9mZnNldDsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGluZ0lu
Zm8ucGFpbnRCZWhhdmlvcikpOwogICAgIC8vIEFkZCB0aGUgc3VicGl4ZWwgYWNjdW11bGF0aW9u
IHRvIHRoZSBjdXJyZW50IGxheWVyJ3Mgb2Zmc2V0IHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzbmFw
IHRoZSB0cmFuc2xhdGVSaWdodCB2YWx1ZSB0byB3aGVyZSB0aGUgcmVuZGVyZXIoKSBpcyBzdXBw
b3NlZCB0byBiZSBwYWludGluZy4KICAgICBMYXlvdXRTaXplIG9mZnNldEZvclRoaXNMYXllciA9
IG9mZnNldEZyb21QYXJlbnQgKyBwYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQ7Ci0gICAgRmxv
YXRTaXplIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllciA9IHRvRmxvYXRTaXpl
KHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG9mZnNldEZvclRoaXNMYXll
ciksIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgRmxvYXRTaXplIGFsaWduZWRPZmZzZXRGb3JU
aGlzTGF5ZXIgPSB1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzKHJlbmRlcmVyKCkpID8gb2Zm
c2V0Rm9yVGhpc0xheWVyIDogdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2aWNlUGl4ZWxzKHRv
TGF5b3V0UG9pbnQob2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAg
ICAvLyBXZSBoYW5kbGUgYWNjdW11bGF0ZWQgc3VicGl4ZWxzIHRocm91Z2ggbmVzdGVkIGxheWVy
cyBoZXJlLiBTaW5jZSB0aGUgY29udGV4dCBnZXRzIHRyYW5zbGF0ZWQgdG8gZGV2aWNlIHBpeGVs
cywKICAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBhZGQgdGhlIGRlbHRhIHRvIHRoZSBhY2N1
bXVsYXRlZCBwaXhlbHMgY29taW5nIGZyb20gYW5jZXN0b3IgbGF5ZXJzLgogICAgIC8vIFRyYW5z
bGF0ZSB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgc25hcHBpbmcgcG9zaXRpb24gdG8gYXZv
aWQgb2ZmLWRldmljZS1waXhlbCBwb3NpdGluZy4KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmln
aHQoZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRoKCksIGRldmljZVBp
eGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CisgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZVJpZ2h0KGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIud2lkdGgoKSwgYWxpZ25lZE9m
ZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CiAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybS4K
ICAgICBhdXRvIG9sZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgYXV0byBhZmZp
bmVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTM1NjcsNyAr
MzU3NCwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9y
bShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIHBhaW50aW5nSW5mby5l
dmVudFJlZ2lvbkNvbnRleHQtPnB1c2hUcmFuc2Zvcm0oYWZmaW5lVHJhbnNmb3JtKTsKIAogICAg
IC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4K
LSAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZzZXRGb3JUaGlzTGF5
ZXIgLSBMYXlvdXRTaXplKGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllcik7Cisg
ICAgTGF5b3V0U2l6ZSBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0OworICAgIGlmICghdXNlc1NWR1N1
YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSAmJiAhcmVuZGVyZXIoKS5pc1NWR1Jvb3Qo
KSkKKyAgICAgICAgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldCA9IG9mZnNldEZvclRoaXNMYXllciAt
IExheW91dFNpemUoYWxpZ25lZE9mZnNldEZvclRoaXNMYXllcik7CisKICAgICBMYXllclBhaW50
aW5nSW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8pOwogICAgIHRyYW5z
Zm9ybWVkUGFpbnRpbmdJbmZvLnJvb3RMYXllciA9IHRoaXM7CiAgICAgdHJhbnNmb3JtZWRQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QgPSBMYXlvdXRSZWN0KGVuY2xvc2VSZWN0VG9EZXZpY2VQ
aXhlbHModmFsdWVPckRlZmF1bHQodHJhbnNmb3JtLmludmVyc2UoKSkubWFwUmVjdChwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA3ZDNjYjE1N2QwZmJmMjAyZWE3ZDhhNjQ5MjNm
ODA0ZGYzMDkxYzcyLi44MDQ3NjFhOGY5MjAwMDRlOGZkZDQyN2UxOGQ0YTc5ODQ1MTMxYjlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtOTg0LDcgKzk4NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5sb2NhdGlvbigpOwogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogICAg
ICAgICBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKS5sYXlv
dXRMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01vZGVs
T2JqZWN0PihyZW5kZXJlcigpKS5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICNlbmRpZgog
CiAgICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDAxYjk4YWY0ODFlZWZm
MjdiNDYwYWE0NmJhZGFjMGVhZGY3ZDEyZTAuLmNlYzA0ZmEzYjNmYzU3OGYxZjQ1YmRkNDlkMTNk
YzJmYzk5NWE4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTEyOSw2ICsxMjksOSBAQCB2b2lkIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdAogICAgICAgICAgICAgbGF5ZXIoKS0+d2lsbFJlbW92ZUNoaWxkV2l0aEJsZW5kTW9k
ZSgpOwogI2VuZGlmCiAgICAgICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShmYWxz
ZSk7IC8vIEFsbCB0cmFuc2Zvcm0tcmVsYXRlZCBwcm9wZXJ0aWVzIGZvcmNlIGxheWVycywgc28g
d2Uga25vdyB3ZSBkb24ndCBoYXZlIG9uZSBvciB0aGUgb2JqZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0
aGVtLgorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBzZXRIYXNT
VkdUcmFuc2Zvcm0oZmFsc2UpOyAvLyBTYW1lIHJlYXNvbiBhcyBmb3Igc2V0SGFzVHJhbnNmb3Jt
UmVsYXRlZFByb3BlcnR5KCkuCisjZW5kaWYKICAgICAgICAgc2V0SGFzUmVmbGVjdGlvbihmYWxz
ZSk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIHNlbGYt
cGFpbnRpbmcgbGF5ZXIgd2hlbiBzdHlsZSBjaGFuZ2UgYWxzbyB0cmlnZ2VycyByZXBhaW50LgpA
QCAtMjc1LDcgKzI3OCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluCiAgICAgKi8KIAogICAg
IGlmIChtb3ZlVG9PcmlnaW4pCi0gICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkoZmxvb3JlZExh
eW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOworICAgICAg
ICBhZGp1c3RlZFJlY3QubW92ZUJ5KG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpKTsKIAogICAg
IGlmIChhdXRvKiB0cmFuc2Zvcm0gPSBsYXllcigpLT50cmFuc2Zvcm0oKSkKICAgICAgICAgYWRq
dXN0ZWRSZWN0ID0gdHJhbnNmb3JtLT5tYXBSZWN0KGFkanVzdGVkUmVjdCk7CkBAIC0zNTYsNiAr
MzU5LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6YXBwbHlTVkdUcmFuc2Zvcm0o
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwKIAogICAgIHN0eWxlLnVuYXBwbHlUcmFu
c2Zvcm1PcmlnaW4odHJhbnNmb3JtLCBvcmlnaW5UcmFuc2xhdGUpOwogfQorCit2b2lkIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGNvbnN0IFNWR0dy
YXBoaWNzRWxlbWVudCYgZ3JhcGhpY3NFbGVtZW50KQoreworICAgIGJvb2wgaGFzU1ZHVHJhbnNm
b3JtID0gIWdyYXBoaWNzRWxlbWVudC5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0
eSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZSgpLmhhc1RyYW5z
Zm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IGhhc1NWR1RyYW5zZm9ybSk7CisgICAgc2V0SGFzU1ZH
VHJhbnNmb3JtKGhhc1NWR1RyYW5zZm9ybSk7Cit9CiAjZW5kaWYKIAogYm9vbCByZW5kZXJlck5l
ZWRzUGl4ZWxTbmFwcGluZyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CmluZGV4IDA2YWM3OGMzZmUzY2VjNTAyZmQ3MDNkNDdhYWMzNzU2MDRlMDdhMjQuLmM4YjcwZWQ4
OTNmMGZkN2YwMWUwNmI1ZWVlMTk4MTI1MTA2ODAwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtNzgsNiArNzgsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgbWFwTG9jYWxUb1NWR0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBPcHRpb25T
ZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0OwogCiAgICAgdm9p
ZCBhcHBseVNWR1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIFNWR0dyYXBoaWNzRWxl
bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwg
T3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+KSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGNvbnN0IFNWR0dyYXBoaWNzRWxl
bWVudCYpOworCisgICAgTGF5b3V0UG9pbnQgbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRy
YW5zZm9ybWF0aW9ucygpLm1pblhNaW5ZQ29ybmVyKCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRQ
b2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRM
b2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICNl
bmRpZgogCiAgICAgdm9pZCB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDM2OGMzZDE3YjNiNjBiNzUyMjlkNmQzYWM0Nzhj
MGNlYWJkZGIzZGMuLmU5MGU5MDQ4YWU4NTRlMWMzMTdmZjIzNGJmYWQyNjRmNmVlNTk1YzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM2Nyw2ICszNjcsMTkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3Q7CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdDsKIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIC8vIFRoZSBvYmplY3RCb3Vu
ZGluZ0JveCBvZiBhIFNWRyBjb250YWluZXIgaXMgYWZmZWN0ZWQgYnkgdGhlIHRyYW5zZm9ybWF0
aW9ucyBhcHBsaWVkIG9uIGl0cyBjaGlsZHJlbiAtLSB0aGUgY29udGFpbmVyCisgICAgLy8gYm91
bmRpbmcgYm94IGlzIGEgdW5pb24gb2YgYWxsIGNoaWxkIGJvdW5kaW5nIGJveGVzLCBtYXBwZWQg
dGhyb3VnaCB0aGVpciB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcy4KKyAgICAvLworICAgIC8vIFRo
aXMgbWV0aG9kIGlnbm9yZXMgYWxsIHRyYW5zZm9ybWF0aW9ucyBhbmQgY29tcHV0ZXMgdGhlIG9i
amVjdEJvdW5kaW5nQm94LCB3aXRob3V0IG1hcHBpbmcgdGhyb3VnaCB0aGUgY2hpbGQKKyAgICAv
LyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcy4gVGhlIFNWRyByZW5kZXIgdHJlZSBpcyBjb25zdHJ1
Y3RlZCBpbiBzdWNoIGEgd2F5LCB0aGF0IGl0IGNhbiBiZSBtYXBwZWQgdG8gQ1NTIGVxdWl2YWxl
bnRzOgorICAgIC8vIFRoZSBTVkcgcmVuZGVyIHRyZWUgdW5kZXJuZWF0aCB0aGUgb3V0ZXJtb3N0
IDxzdmc+IGJlaGF2ZXMgYXMgYSBzZXQgb2YgYWJzb2x1dGVseSBwb3NpdGlvbmVkLCBwb3NzaWJs
eSBuZXN0ZWQsIGJveGVzLgorICAgIC8vIFRoZWlyIGxhaWQgb3V0IGluIHN1Y2ggYSB3YXkgdGhh
dCB0cmFuc2Zvcm1hdGlvbnMgZG8gTk9UIGFmZmVjdCBsYXlvdXQsIGFzIGluIEhUTUwvQ1NTIHdv
cmxkLCBidXQgdGFrZSBhZmZlY3QgZHVyaW5nCisgICAgLy8gcGFpbnRpbmcsIGhpdC10ZXN0aW5n
IGV0Yy4gVGhpcyBhbGxvd3MgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiByZS1sYXlvdXRzIHdo
ZW4gYW5pbWF0aW5nIHRyYW5zZm9ybWF0aW9ucyBpbiBTVkcKKyAgICAvLyAobm90IHVzaW5nIENT
UyBBbmltYXRpb25zL1RyYW5zaXRpb25zIC8gV2ViIEFuaW1hdGlvbnMsIGJ1dCBlLmcuIFNNSUws
IDxhbmltYXRlVHJhbnNmb3JtPiwgSlMsIC4uLikuCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKCkgY29uc3QgeyByZXR1cm4gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsgfQorI2VuZGlmCisKICAgICAvLyBSZXR1cm5zIHRoZSBzbWFsbGVz
dCByZWN0YW5nbGUgZW5jbG9zaW5nIGFsbCBvZiB0aGUgcGFpbnRlZCBjb250ZW50CiAgICAgLy8g
cmVzcGVjdGluZyBjbGlwcGluZywgbWFza2luZywgZmlsdGVycywgb3BhY2l0eSwgc3Ryb2tlLXdp
ZHRoIGFuZCBtYXJrZXJzCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQmxvY2suaAppbmRleCA5ZTk5YWUwNjQ2MGY5ODljOGFhMTc2OGJmZTU5YjViOTc5Yzk5
NWE0Li5jMTQ2ZGRhZWYyMGI1M2M0ZDQxYTU5NDg0YTk3NGNhZGZjZDZmMzU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCkBAIC00OCw2ICs0OCwx
MSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAKKyNpZiBFTkFCTEUoTEFZRVJf
QkFTRURfU1ZHX0VOR0lORSkKKyAgICBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBsb2NhdGlvbigpOyB9CisgICAgdm9pZCBzZXRDdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBmaW5hbCB7
IHNldExvY2F0aW9uKGxvY2F0aW9uKTsgfQorI2VuZGlmCisKICAgICBMYXlvdXRSZWN0IGNsaXBw
ZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVS
ZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBj
b21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0
IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCmluZGV4IDM0NWQ2MzYxMzRkNWZkYmNmOTI2N2JmY2RhY2M0Y2Y2MmNiM2M2
YzcuLjIxMzgwOTM5NjNjNzJkZGM0M2RhZDQzMmNjOTM0YjkyOWQ2MWZhMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAg
LTExOSwxOSArMTE5LDE0IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXRDaGlsZHJl
bigpCiAKICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRp
b24oKnRoaXMpOwogICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0
aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24sICZtX29iamVjdEJvdW5kaW5nQm94VmFsaWQp
OwotICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1
dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpzdHJva2VC
b3VuZGluZ0JveERlY29yYXRpb24pOwotICAgIHNldExheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0
UmVjdChtX29iamVjdEJvdW5kaW5nQm94KSk7CiAKLSAgICBjb250YWluZXJMYXlvdXQucG9zaXRp
b25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKTsKLX0KKyAgICBjb25zdGV4cHIgYXV0byBv
YmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25zID0gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uIHwgU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlvbk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRp
b25zOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91
bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91
bmRpbmdCb3hEZWNvcmF0aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyk7CiAKLXZvaWQgUmVuZGVy
U1ZHQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHls
ZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJv
dW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CisgICAgc2V0
Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVjdChtX29iamVjdEJvdW5kaW5n
Qm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucykpOwogCi0gICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBSZW5kZXJMYXllciBjaGFuZ2VzCi0gICAgLy8gaWYgKGhhc0xheWVyKCkpCi0gICAgLy8g
ICAgIGxheWVyKCktPnNldElzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dCh0cnVlKTsKKyAg
ICBjb250YWluZXJMYXlvdXQucG9zaXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKTsK
IH0KIAogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQpAQCAtMTY1LDcg
KzE2MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxheW91dExv
Y2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBj
dXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6Ok1hc2spIHsKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdS
ZW5kZXJTdXBwb3J0IGNoYW5nZXMKICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRT
VkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtMTg1LDcg
KzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAKIGJvb2wgUmVuZGVyU1ZHQ29udGFp
bmVyOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQogewotICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zm
c2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1
bXVsYXRlZE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byB2
aXN1YWxPdmVyZmxvd1JlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CiAgICAg
dmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKQEAgLTE5Myw4ICsx
ODgsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7Ci0gICAg
YXV0byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0
Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBhdXRvIGNvb3JkaW5hdGVTeXN0
ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVzdGVk
TG9jYXRpb247CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBu
b21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CiAgICAgbG9jYWxQ
b2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7CiAKICAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmgKaW5kZXggZTM0ODJhYjlmMDNhMTVmOTMxYTI5OTY5ZDFmNjU0MDY2MDVmNTdiYi4uZmQ0MjVh
MzBjNDhlZGQyMjE3Nzg2NTU3YWFlNWZiMGIyNjJlNzdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCkBAIC00MCw2ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZDsgfQogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQor
ICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0
aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCkBAIC00OSw4
ICs1MCw2IEBAIHByb3RlY3RlZDoKICAgICBBU0NJSUxpdGVyYWwgcmVuZGVyTmFtZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiX3M7IH0KICAgICBib29sIGNh
bkhhdmVDaGlsZHJlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0Q2hpbGRyZW4oKTsKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKSBvdmVycmlkZTsKQEAgLTYyLDYgKzYxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Ym9vbCBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQgeyBmYWxzZSB9OwogICAgIEZsb2F0UmVjdCBt
X29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94V2l0
aG91dFRyYW5zZm9ybWF0aW9uczsKICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5oCmluZGV4IDIwMDAxNDc3NWNlZTgyNWQxZGFmYmE0ZDk0MGUyYjhkMDIzMjc1NDIuLjU0
YTVhMTdlOGUwYWY2Y2UxMzcwYmVmNzlhYmZmNWJlOTlhMWMyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaApAQCAtNTEsNiArNTEsMTEgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbDsK
ICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5h
bDsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFBvaW50
IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQor
ICAgIHZvaWQgc2V0Q3VycmVudFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50Jikg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorI2VuZGlmCisKICAgICBMYXlvdXRSZWN0
IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZp
c2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFp
bmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFu
c2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhl
ZCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IGM5Njk1ZTZiNmE0M2Y5Y2Y0ZmYwMzk1YWMz
NjFhNDMyNjFkYjhlMjMuLjZmZmVlOTk3MTgyZTllZTcyMDUyYTlhZjA3OTY5MjE4OTBjM2MzMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCkBAIC02MSwxMiArNjEsOCBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tU3R5bGUoKQogewogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0
ZUZyb21TdHlsZSgpOwogCi0gICAgYm9vbCBoYXNTVkdUcmFuc2Zvcm0gPSBmYWxzZTsKICAgICBp
ZiAoaXM8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpKQotICAgICAgICBoYXNTVkdUcmFu
c2Zvcm0gPSAhZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpLmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCk7Ci0KLSAgICBzZXRIYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBoYXNT
VkdUcmFuc2Zvcm0pOwotICAgIHNldEhhc1NWR1RyYW5zZm9ybShoYXNTVkdUcmFuc2Zvcm0pOwor
ICAgICAgICB1cGRhdGVIYXNTVkdUcmFuc2Zvcm1GbGFncyhkb3duY2FzdDxTVkdHcmFwaGljc0Vs
ZW1lbnQ+KGVsZW1lbnQoKSkpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MpIGNvbnN0CkBAIC0xNDEs
NyArMTM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KIAogdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmVjdHMuYXBwZW5kKHNu
YXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlv
bigpLCBsYXlvdXRTaXplKCkpKSk7CisgICAgcmVjdHMuYXBwZW5kKHNuYXBwZWRJbnRSZWN0KExh
eW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBtX2xheW91dFJlY3QubG9jYXRpb24oKSwgbV9s
YXlvdXRSZWN0LnNpemUoKSkpKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oCmluZGV4IGJjMTEyNDUwNDNjOWQxZTU0ZWIwY2M0Y2MyYzE0OGM5YTliMjM4YzMuLmFl
ODliOGRlYWM5OGIyZGU1YmM5OTE3NmEyOThhNDMzMjg0NDdkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTU4LDI2
ICs1OCwyMSBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgU1ZHRWxlbWVudCYgZWxlbWVudCgpIGNv
bnN0OwogCisgICAgTGF5b3V0UmVjdCBjdXJyZW50U1ZHTGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbGF5b3V0UmVjdCkgeyBtX2xheW91dFJlY3QgPSBsYXlvdXRSZWN0OyB9
CisKKyAgICBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2xheW91dFJlY3QubG9jYXRpb24oKTsgfQorICAgIHZvaWQgc2V0Q3VycmVu
dFNWR0xheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikgZmluYWwgeyBt
X2xheW91dFJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24pOyB9CisKICAgICAvLyBNaW1pYyB0aGUg
UmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kgdGhl
IHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKICAgICAvLyBzaW1pbGFy
IHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJCb3gg
JiBmcmllbmRzLgogICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBjb25z
dCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQogICAg
IExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gYm9y
ZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQogICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1aXZh
bGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQotCiAgICAgTGF5b3V0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7IH0KIAotICAg
IHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBw
b2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0KLQotICAgIExh
eW91dFJlY3QgbGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQotICAg
IHZvaWQgc2V0TGF5b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5
b3V0UmVjdCA9IGxheW91dFJlY3Q7IH0KLSAgICB2b2lkIHNldExheW91dExvY2F0aW9uKGNvbnN0
IExheW91dFBvaW50JiBsYXlvdXRMb2NhdGlvbikgeyBtX2xheW91dFJlY3Quc2V0TG9jYXRpb24o
bGF5b3V0TG9jYXRpb24pOyB9Ci0KLSAgICBMYXlvdXRQb2ludCBwYWludGluZ0xvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbigpIC0gZmxvb3JlZExh
eW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOyB9Ci0gICAg
TGF5b3V0UG9pbnQgbGF5b3V0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Qu
bG9jYXRpb24oKTsgfQotICAgIExheW91dFNpemUgbGF5b3V0TG9jYXRpb25PZmZzZXQoKSBjb25z
dCB7IHJldHVybiB0b0xheW91dFNpemUobV9sYXlvdXRSZWN0LmxvY2F0aW9uKCkpOyB9Ci0gICAg
TGF5b3V0U2l6ZSBsYXlvdXRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0LnNpemUo
KTsgfQotCiAgICAgLy8gRm9yIFJlbmRlckxheWVyIG9ubHkKKyAgICB2b2lkIGFwcGx5VG9wTGVm
dExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVudChMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcG9p
bnQubW92ZUJ5KGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpKTsgfQogICAgIEZsb2F0UmVjdCBi
b3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
LCBSZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNo
ZVJlbmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92
ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tC
YWNrZ3JvdW5kKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGls
ZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7
IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5k
ZXggYTliOTMzMjJiMGE4ZjI0NmUwMmM1NjAzNjI1ZGYzMzQ2ZDNkZmJjYy4uMjJhMDBjZjQ0OTNj
YjRiZDE5MzI2MGIxMTk3ZDQzMmNjYzdmNzM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xOTYsNiArMTk2LDEwIEBAIHZvaWQgUmVu
ZGVyU1ZHUm9vdDo6bGF5b3V0KCkKIAogICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
IGJvdW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgICAgICBtX29iamVjdEJvdW5kaW5n
Qm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3go
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uKTsK
KworICAgICAgICBjb25zdGV4cHIgYXV0byBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRo
b3V0VHJhbnNmb3JtYXRpb25zID0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91
bmRpbmdCb3hEZWNvcmF0aW9uIHwgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlv
bk9wdGlvbjo6SWdub3JlVHJhbnNmb3JtYXRpb25zOworICAgICAgICBtX29iamVjdEJvdW5kaW5n
Qm94V2l0aG91dFRyYW5zZm9ybWF0aW9ucyA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0
ZURlY29yYXRlZEJvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRU
cmFuc2Zvcm1hdGlvbnMpOworCiAgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGlu
Z0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgIH0KIApAQCAt
Mzk3LDYgKzQwMSw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlRnJvbVN0eWxlKCkKICAg
ICBSZW5kZXJSZXBsYWNlZDo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKICAgICBzZXRIYXNTVkdUcmFu
c2Zvcm0oKTsKKyAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKTsKIAogICAgIGlm
IChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKQogICAgICAgICBzZXRIYXNOb25WaXNpYmxlT3Zl
cmZsb3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgK
aW5kZXggZTdmNzE1NTMyNjdlYjIzOTgwMDU4ZDE3ZWQwOGRjODIwMTgwMDA4Zi4uYzBkMWNjZGRh
Mzg2ODlmNzJkY2ZiM2VhMTQwMzIzZmI3MTJhNTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogICAg
IGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsKIAogICAgIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdC
b3g7IH0KKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRp
b25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFu
c2Zvcm1hdGlvbnM7IH0KICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU1ZHQm91bmRp
bmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KIApA
QCAtMTIzLDYgKzEyNCw3IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fY29udGFpbmVyU2l6
ZTsKICAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9v
YmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnM7CiAgICAgRmxvYXRSZWN0IG1f
c3Ryb2tlQm91bmRpbmdCb3g7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdmlld0JveFRyYW5zZm9y
bTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNm
b3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNw
cAppbmRleCBjYWFmNmIzNWIwZTA1MjAwM2RmOTIwMWVlYzAwMDRkNTQzNTFmNDA2Li45OWIyODg0
ZDcyNDU5OWYzNjk5NGFhMzA3MGY4NzQzYmFmMjllODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCiAgICAgICAgIHVwZGF0ZVNoYXBlRnJvbUVsZW1l
bnQoKTsKIAogICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0
TGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94KSk7CisgICAg
ICAgIHNldEN1cnJlbnRTVkdMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91
bmRpbmdCb3gpKTsKICAgICB9CiAKICAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwpAQCAtMjg4
LDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxheW91
dExvY2F0aW9uKCk7CisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQg
KyBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6Ok1hc2spIHsKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBT
VkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKICAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFp
bnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtMzA4
LDcgKzMwOCw3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7CiAKLSAgICBhdXRv
IGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGFkanVzdGVkUGFpbnRPZmZzZXQg
LSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5sb2NhdGlvbigpKTsKKyAg
ICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGFkanVzdGVkUGFpbnRP
ZmZzZXQgLSBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKICAgICBwYWludEluZm8uY29udGV4
dCgpLnRyYW5zbGF0ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwg
Y29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLmhlaWdodCgpKTsKIAogICAgIGlmIChz
dHlsZSgpLnN2Z1N0eWxlKCkuc2hhcGVSZW5kZXJpbmcoKSA9PSBTaGFwZVJlbmRlcmluZzo6Q3Jp
c3BFZGdlcykKQEAgLTM0NSwxMSArMzQ1LDEwIEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVs
YXRlZE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAgYXV0byBsb2Nh
bFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOwotICAgIGF1dG8gYm91bmRpbmdC
b3hUb3BMZWZ0Q29ybmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCku
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNs
YXRpb24gPSBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAg
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gbm9taW5hbFNWR0xheW91
dExvY2F0aW9uKCkgLSBhZGp1c3RlZExvY2F0aW9uOwogICAgIGxvY2FsUG9pbnQubW92ZShjb29y
ZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24pOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBw
b3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuY3BwCmluZGV4IGIwMGZiNTBhYTllMDAwMTc5N2ZjOTU1MDg1ODZhNmIy
MTQwNzdmNzkuLjBkZWIwZTM3YmJjM2RmZWVlMDk5MjAwYmZkNWM1YjAwNDhjOWNjMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcApAQCAtOTcsOCArOTcsMTAgQEAgdm9pZCBSZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5bGUoKQogewogICAgIFJl
bmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKLSAgICBpZiAoYXNzb2NpYXRl
ZFVzZUVsZW1lbnQoZ3JhcGhpY3NFbGVtZW50KCkpKQorICAgIGlmIChhc3NvY2lhdGVkVXNlRWxl
bWVudChncmFwaGljc0VsZW1lbnQoKSkpIHsKICAgICAgICAgc2V0SGFzU1ZHVHJhbnNmb3JtKCk7
CisgICAgICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpOworICAgIH0KIH0KIAog
dm9pZCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjphcHBseVRyYW5zZm9ybShUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNm
b3JtT3BlcmF0aW9uT3B0aW9uPiBvcHRpb25zKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAKaW5k
ZXggNzk4MDk4ZGViMmM5ODU0NjViOTE2MDc4NjQ3OTRjODZlZmI0NjczMy4uNGRiNWM4MjE2ZmZh
MDgxODVkMDAwNTkzZjdlNTIxYmQ1MTE2ZTJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCkBAIC0x
NzUsOCArMTc1LDEwIEBAIEZsb2F0UmVjdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpoYW5k
bGVSb290T3JDb250YWluZXIoY29uc3QgU1ZHQm91bmRpbmdCb3hDCiAgICAgICAgIGlmIChvcHRp
b25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZv
ckNoaWxkcmVuKSAmJiBpczxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSkKICAgICAgICAgICAg
IGNoaWxkQm91bmRpbmdCb3hDb21wdXRhdGlvbi5hZGp1c3RCb3hGb3JDbGlwcGluZ0FuZEVmZmVj
dHMoeyBEZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggfSwgY2hpbGRC
b3gpOwogCi0gICAgICAgIGlmIChhdXRvIGxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb25N
YXRyaXhGcm9tQ2hpbGQoY2hpbGQpKQotICAgICAgICAgICAgY2hpbGRCb3ggPSBsYXllclRyYW5z
Zm9ybS0+bWFwUmVjdChjaGlsZEJveCk7CisgICAgICAgIGlmICghb3B0aW9ucy5jb250YWlucyhE
ZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVUcmFuc2Zvcm1hdGlvbnMpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBsYXllclRyYW5zZm9ybSA9IHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkKGNo
aWxkKSkKKyAgICAgICAgICAgICAgICBjaGlsZEJveCA9IGxheWVyVHJhbnNmb3JtLT5tYXBSZWN0
KGNoaWxkQm94KTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChvcHRpb25zID09IG9iamVjdEJv
dW5kaW5nQm94RGVjb3JhdGlvbikKICAgICAgICAgICAgIHVuaXRlQm91bmRpbmdCb3hSZXNwZWN0
aW5nVmFsaWRpdHkoYm94VmFsaWQsIGJveCwgY2hpbGQsIGNoaWxkQm94KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
LmgKaW5kZXggODNkYTYzYmQ2ZjA5ODJlYzY3ZmE1YjNiYzk0NmJkODgyZDI1OWQ0NC4uMGQ3NTRh
ZDQzMTFlYzg1ZGI5MTcwMDkwOGEwYTAzYjEyZDU2NmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgKQEAg
LTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLCAyMDIyIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTM1LDE1ICszNSwxNiBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgflNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24oKSA9IGRlZmF1bHQ7CiAKLSAgICBlbnVtIGNsYXNzIERlY29yYXRp
b25PcHRpb24gOiB1aW50OF90IHsKKyAgICBlbnVtIGNsYXNzIERlY29yYXRpb25PcHRpb24gOiB1
aW50MTZfdCB7CiAgICAgICAgIEluY2x1ZGVGaWxsU2hhcGUgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAwLCAvKiBjb3JyZXNwb25kcyB0byAnYm9vbCBmaWxsJyAgICAgKi8KICAgICAgICAgSW5j
bHVkZVN0cm9rZVNoYXBlICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsIC8qIGNvcnJlc3BvbmRz
IHRvICdib29sIHN0cm9rZScgICAqLwogICAgICAgICBJbmNsdWRlTWFya2VycyAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgbWFya2VycycgICov
CiAgICAgICAgIEluY2x1ZGVDbGlwcGVycyAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLCAv
KiBjb3JyZXNwb25kcyB0byAnYm9vbCBjbGlwcGVycycgKi8KICAgICAgICAgSW5jbHVkZU1hc2tl
cnMgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDQsIC8qIFdlYktpdCBleHRlbnNpb24gLSBp
bnRlcm5hbCAgICAqLwogICAgICAgICBJbmNsdWRlT3V0bGluZSAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgNSwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCi0gICAgICAg
IE92ZXJyaWRlQm94V2l0aEZpbHRlckJveCAgICAgICAgICAgID0gMSA8PCA2LCAvKiBXZWJLaXQg
ZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KLSAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVy
Qm94Rm9yQ2hpbGRyZW4gPSAxIDw8IDcgIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAg
ICAqLworICAgICAgICBJZ25vcmVUcmFuc2Zvcm1hdGlvbnMgICAgICAgICAgICAgICA9IDEgPDwg
NiwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIE92ZXJyaWRl
Qm94V2l0aEZpbHRlckJveCAgICAgICAgICAgID0gMSA8PCA3LCAvKiBXZWJLaXQgZXh0ZW5zaW9u
IC0gaW50ZXJuYWwgICAgKi8KKyAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94Rm9yQ2hp
bGRyZW4gPSAxIDw8IDggIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLwogICAg
IH07CiAKICAgICB1c2luZyBEZWNvcmF0aW9uT3B0aW9ucyA9IE9wdGlvblNldDxEZWNvcmF0aW9u
T3B0aW9uPjsKQEAgLTczLDcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAogICAgICAgICBhdXRvIHZpc3VhbE92ZXJmbG93UmVjdCA9IGVuY2xvc2lu
Z0xheW91dFJlY3QocmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgdmlzdWFsT3ZlcmZsb3dS
ZWN0Lm1vdmVCeSgtZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94
KCkubWluWE1pbllDb3JuZXIoKSkpOworICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5
KC1yZW5kZXJlci5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSk7CiAgICAgICAgIHJldHVybiB2
aXN1YWxPdmVyZmxvd1JlY3Q7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKaW5kZXggODEzYzNlY2VmOTM4YmRhNDg2
NDQ0ZDRhZjcwOGQ5N2NiNzNjZWFlMC4uODMyODJjZjAzMTY2ZTgyZGM0ZDI2MDY5MTAwOTI0ZmIy
ODUwZTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250
YWluZXJMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29u
dGFpbmVyTGF5b3V0LmNwcApAQCAtMTIwLDQxICsxMjAsNiBAQCB2b2lkIFNWR0NvbnRhaW5lckxh
eW91dDo6bGF5b3V0Q2hpbGRyZW4oYm9vbCBjb250YWluZXJOZWVkc0xheW91dCkKICAgICAgICAg
QVNTRVJUKGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuaXNFbXB0eSgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9i
amVjdD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KHJlbmRlcmVyKS5sYXlvdXRMb2NhdGlvbigpOwotCi0gICAgaWYgKGlzPFJlbmRlclNW
R0Jsb2NrPihyZW5kZXJlcikpIC8vIDxmb3JlaWduT2JqZWN0PiAvIDx0ZXh0PgotICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKS5sb2NhdGlvbigpOwotCi0g
ICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVuZGVyZXIpKSAvLyA8dHNwYW4+IC8gPHRleHRQ
YXRoPgotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldExheW91dExvY2F0aW9u
Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIG5l
d0xvY2F0aW9uKQotewotICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIp
KSB7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikuc2V0
TGF5b3V0TG9jYXRpb24obmV3TG9jYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+Ci0gICAgaWYgKGlzPFJlbmRlclNWR0Jsb2Nr
PihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVy
KS5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgotICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmU+KHJl
bmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0Nv
bnRhaW5lcigpCiB7CiAgICAgaWYgKG1fcG9zaXRpb25lZENoaWxkcmVuLmlzRW1wdHkoKSkKQEAg
LTE3Nyw0MCArMTQyLDM2IEBAIHZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxk
cmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCiAgICAgfTsKIAogICAgIC8vIEFycmFuZ2UgbGF5b3V0
IGxvY2F0aW9uIGZvciBhbGwgY2hpbGQgcmVuZGVyZXJzIHJlbGF0aXZlIHRvIHRoZSBjb250YWlu
ZXIgbGF5b3V0IGxvY2F0aW9uLgotICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRpb24gPSBmbG9v
cmVkTGF5b3V0UG9pbnQobV9jb250YWluZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGls
ZHJlbikgeworICAgIGF1dG8gcGFyZW50TGF5b3V0TG9jYXRpb24gPSBtX2NvbnRhaW5lci5ub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24oKTsKKyAgICBmb3IgKFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IGNoaWxkIDogbV9wb3NpdGlvbmVkQ2hpbGRyZW4pIHsKICAgICAgICAgdmVyaWZ5UG9zaXRpb25l
ZENoaWxkUmVuZGVyZXJFeHBlY3RhdGlvbihjaGlsZCk7CiAKLSAgICAgICAgYXV0byBvYmplY3RC
b3VuZGluZ0JveENoaWxkID0gY2hpbGQub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgYXV0
byBsYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveENo
aWxkLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlv
biA9IHRvTGF5b3V0UG9pbnQobGF5b3V0TG9jYXRpb24gLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7
Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9t
UmVuZGVyZXIoY2hpbGQpOwotICAgICAgICBpZiAoY3VycmVudExheW91dExvY2F0aW9uID09IGRl
c2lyZWRMYXlvdXRMb2NhdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzZXRM
YXlvdXRMb2NhdGlvbkZvclJlbmRlcmVyKGNoaWxkLCBkZXNpcmVkTGF5b3V0TG9jYXRpb24pOwor
ICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlvbiA9IHRvTGF5b3V0UG9pbnQoY2hpbGQu
bm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkgLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7CisgICAg
ICAgIGlmIChjaGlsZC5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSAhPSBkZXNpcmVkTGF5b3V0
TG9jYXRpb24pCisgICAgICAgICAgICBjaGlsZC5zZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24o
ZGVzaXJlZExheW91dExvY2F0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHQ29udGFpbmVyTGF5
b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9u
Q29uc2lzdGVuY3koY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCiB7CiAg
ICAgaWYgKHJlbmRlcmVyLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkgJiYgIXJlbmRlcmVyLmlz
U1ZHUm9vdCgpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0
TG9jYXRpb25Gcm9tUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBhdXRvIGN1cnJlbnRMYXlv
dXRMb2NhdGlvbiA9IHJlbmRlcmVyLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogCiAgICAg
ICAgIGF1dG8gZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9IGN1cnJlbnRMYXlvdXRMb2NhdGlvbjsK
LSAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJFbGVt
ZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9y
c09mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsKICAgICAgICAgICAg
IEFTU0VSVChhbmNlc3Rvci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKTsKICAgICAgICAgICAg
IGlmIChhbmNlc3Rvci5pc1NWR1Jvb3QoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGV4cGVjdGVkTGF5b3V0TG9jYXRpb24ubW92ZUJ5KGxheW91dExvY2F0aW9uRnJvbVJl
bmRlcmVyKGFuY2VzdG9yKSk7CisgICAgICAgICAgICBleHBlY3RlZExheW91dExvY2F0aW9uLm1v
dmVCeShhbmNlc3Rvci5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChy
ZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBh
dXRvIGluaXRpYWxMYXlvdXRMb2NhdGlvbiA9IHJlbmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2Nh
dGlvbigpOwogICAgICAgICBpZiAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9PSBpbml0aWFsTGF5
b3V0TG9jYXRpb24pIHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcsIHN0cmVhbSA8
PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJlciA8PCAiICgi
IDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKS5jaGFyYWN0ZXJzKCkgPDwgIikiCi0gICAgICAgICAg
ICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBvYmplY3RCb3Vu
ZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGFyZSBpbiBzeW5jLiIpOworICAgICAgICAgICAgICAg
IDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgY3VycmVudFNWR0xheW91
dExvY2F0aW9uIC8gbm9taW5hbFNWR0xheW91dExvY2F0aW9uIGFyZSBpbiBzeW5jLiIpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNWRywgc3RyZWFtIDw8
ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwgJnJlbmRlcmVyIDw8ICIgKCIg
PDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3RlcnMoKSA8PCAiKSIKLSAgICAgICAgICAg
ICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIG9iamVjdEJvdW5k
aW5nQm94IC8gbGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5j
IGR1ZSB0byBwYXJ0aWFsIGxheW91dD8iCisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxh
eW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24gaW52YXJpYW50IHZpb2xhdGVkIC0tIG91dCBvZiBzeW5jIGR1
ZSB0byBwYXJ0aWFsIGxheW91dD8iCiAgICAgICAgICAgICAgICAgPDwgIiBjdXJyZW50TGF5b3V0
TG9jYXRpb249IiA8PCBjdXJyZW50TGF5b3V0TG9jYXRpb24KICAgICAgICAgICAgICAgICA8PCAi
ICAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbj0iIDw8IGV4cGVjdGVkTGF5b3V0TG9jYXRpb24KICAg
ICAgICAgICAgICAgICA8PCAiICE9IGluaXRpYWxMYXlvdXRMb2NhdGlvbj0iIDw8IGluaXRpYWxM
YXlvdXRMb2NhdGlvbiA8PCAiKSIKQEAgLTIyNCw3ICsxODUsNyBAQCB2b2lkIFNWR0NvbnRhaW5l
ckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJFbGVt
ZW50JiByZQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikpIHsK
ICAgICAgICAgaWYgKGNoaWxkLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNoaWxkKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaAppbmRleCBl
YzEzMDkzNTEyNmNmN2VjZTE1OTk5MmE4ZGI3MWMxMTY3MzAyNmU3Li41MzQ0MDFjY2Q0ZmI4Yzhl
ZmMyMjU3OGZhZGJmMDYxZDFmMmZlODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwogCi0gICAg
c3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJF
bGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5j
eShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgdHJhbnNm
b3JtVG9Sb290Q2hhbmdlZChjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKTsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggZjJjMDc2ZjdiNzcy
ZDExNWU0ZWVmNmE4MDZmYmFiYjI1ZjU1ZmU5My4uODY5YjE5YTZiNzg5NzE5M2NkNDM4YmE4MjBm
YTNlYTk4MWQ0MzEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1
c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAg
LTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHR3JhcGhpY3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzY0LDEzICszNjUs
MjkgQEAgdm9pZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2UKICAgICBlbHNlCiAgICAgICAgIHN0eWxlLnNl
dFVzZWRaSW5kZXgoc3R5bGUuc3BlY2lmaWVkWkluZGV4KCkpOwogCisgICAgLy8gRm9yIFNWRyBj
b21wYXRpYmlsaXR5IHB1cnBvc2VzIHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlICdhbmltYXRlZExv
Y2FsVHJhbnNmb3JtJyBiZXNpZGVzIHRoZSBSZW5kZXJTdHlsZSB0byBxdWVyeQorICAgIC8vIGlm
IGFuIGVsZW1lbnQgaGFzIGEgdHJhbnNmb3JtLiBTVkcgdHJhbnNmb3JtcyBhcmUgbm90IHN0b3Jl
ZCBvbiB0aGUgUmVuZGVyU3R5bGUsIGFuZCB0aHVzIHdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgaGVy
ZS4KKyAgICBhdXRvIGhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSA9IFtdKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgeworICAgICAgICBpZiAoc3R5
bGUuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICBpZiAoZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAg
ICAgcmV0dXJuICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KCplbGVtZW50KS5hbmltYXRl
ZExvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGVsZW1lbnQpOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisK
ICAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0
cmFuc3BhcmVudCBvYmplY3RzLiBUaGlzIHByZXZlbnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2Jq
ZWN0cyB0aGF0IHNob3VsZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGgg
YSBub24tdHJhbnNwYXJlbnQKICAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4g
QXV0byB6LWluZGV4IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFu
c2Zvcm1zL21hc2tzL3JlZmxlY3Rpb25zLgogICAgIGlmIChzdHlsZS5oYXNBdXRvVXNlZFpJbmRl
eCgpKSB7CiAgICAgICAgIGlmICgobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50KCkgPT0gbV9lbGVtZW50KQogICAgICAgICAgICAgfHwgc3R5bGUuaGFzT3BhY2l0eSgpCi0g
ICAgICAgICAgICB8fCBzdHlsZS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQorICAgICAg
ICAgICAgfHwgaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlLCBtX2VsZW1lbnQpCiAg
ICAgICAgICAgICB8fCBzdHlsZS5oYXNNYXNrKCkKICAgICAgICAgICAgIHx8IHN0eWxlLmNsaXBQ
YXRoKCkKICAgICAgICAgICAgIHx8IHN0eWxlLmJveFJlZmxlY3QoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458434</attachid>
            <date>2022-04-27 02:59:18 -0700</date>
            <delta_ts>2022-04-27 04:15:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-239717-20220427025917.patch</filename>
            <type>text/plain</type>
            <size>49300</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzNTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODBlMzMyMDllNTkyMzM5
MzAyYmY3MmZiYWVlMWU5YThlYmY1NmYzMi4uZTdiNTE4NDcxNzZlYTFhN2RiNDRmY2ExMzk1NmEw
ODVlZTY2NGU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMi0wNC0yNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gRml4IG9yaWdpbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gU1ZHCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk3MTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBSb2IgQnVpcy4KKworICAgICAgICBGaXggdGhlIG1ham9yaXR5IG9mIFNWRyB0cmFuc2Zv
cm0gaXNzdWVzIGluIExCU0UuIHdlYmtpdC5vcmcvYi8yMzc3MTEgbGFpZCB0aGUgZ3JvdW5kd29y
ayBmb3IgU1ZHCisgICAgICAgIHRyYW5zZm9ybXMgaW4gTEJTRSwgaG93ZXZlciB0aGVyZSBhcmUg
c3RpbGwgaXNzdWVzOgorCisgICAgICAgIC0gU1ZHIHRyYW5zZm9ybXMgc3BlY2lmaWVkIGFsb25l
IG9uIFNWRyBlbGVtZW50cywgdy9vIGFueSBhZGRpdGlvbmFsIHN0eWxlL3BlcnNwZWN0aXZlIHJl
bGF0ZWQgcHJvcGVydHkKKyAgICAgICAgICBzdWNoIGFzIHRyYW5zZm9ybS1ib3ggLyB0cmFuc2Zv
cm0tb3JpZ2luIC8gLi4uIGRvIG5vdCB0cmlnZ2VyIGxheWVyIGNyZWF0aW9uLCBmaXggYnkgYWRh
cHRpbmcgU3R5bGVBZGp1c3Rlci4KKworICAgICAgICAtIFN3aXRjaGluZyBvbi9vZmYgdHJhbnNm
b3JtcyBmb3IgYSBTVkcgZWxlbWVudCwgd2FzIG5vdCB0cmFja2luZyB1cGRhdGVzIHRvIGJvdGgg
J0hhc1NWR1RyYW5zZm9ybScgYW5kCisgICAgICAgICAgJ0hhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eScgZmxhZ3MgY29ycmVjdGx5LCBmaXggdGhhdCBieSBpbnRyb2R1Y2luZyBhbiAndXBkYXRl
SGFzU1ZHVHJhbnNmb3JtRmxhZ3MnIGhlbHBlci4KKworICAgICAgICAtIE1vZGlmeSBTVkdDb250
YWluZXJMYXlvdXQgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IG9uIHRoZSBjaGlsZHJlbiB0cmFuc2Zv
cm1hdGlvbnMgd2hlbiBjb21wdXRpbmcgY29udGFpbmVyCisgICAgICAgICAgYm91bmRhcmllcy4g
SW4gdGhlIGxlZ2FjeSBlbmdpbmUsIHdlIGFsd2F5cyBoYXZlIHRvIG1hcmsgdGhlIHdob2xlIGFu
Y2VzdG9yIGNoYWluIGFzICduZWVkIHRvIHJlY29tcHV0ZSBib3VuZGFyaWVzJworICAgICAgICAg
IGFuZCBpbnZva2luZyBhIHJlLWxheW91dCwgdG8gcGVyZm9ybSB0aGUgcmVjb21wdXRhdGlvbi4g
VGhpcyBjaGFuZ2UgYXZvaWRzIHRoZSBpbnZhbGlkYXRpb24gb2YgdGhlIHdob2xlIGFuY2VzdG9y
CisgICAgICAgICAgY2hhaW4sIHdoZW4gYW4gZWxlbWVudHMgdHJhbnNmb3JtIGNoYW5nZXMgaW4g
YSBub24tYWNjZWxlcmF0ZWQgd2F5IChlLmcuIFNWR1RyYW5zZm9ybUxpc3QgbWFuaXB1bGF0aW9u
LCBTTUlMCisgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0+IC8gPGFuaW1hdGU+IC8gPHNldD4p
LiBJbiBDU1MgdHJhbnNmb3JtYXRpb25zIGRvIG5vdCBhZmZlY3QgbGF5b3V0LCBvbmx5IGhpdC10
ZXN0aW5nIGFuZCBwYWludGluZy4KKworICAgICAgICAgIC0+IFNWRy9DU1MgdHJhbnNmb3JtcyBh
cHBsaWVkIG9uIFNWRyBlbGVtZW50cyBpcyBjb25jZXB0dWFsbHkgZXF1aXZhbGVudCB0byBDU1Mg
dHJhbnNmb3JtYXRpb25zIG9uIENTUyBib3hlcyBub3cuCisgICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb24gY2hhbmdlcyBubyBsb25nZXIgYWZmZWN0IHRoZSAnaW50ZXJuYWwgZ2VvbWV0cnknIChv
YmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSkuCisgICAgICAgICAgICAg
Y3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSBh
cmUgY29tcHV0ZWQgdXNpbmcgdGhlICdpbnRlcm5hbCBnZW9tZXRyeScgYW5kIHVzZWQKKyAgICAg
ICAgICAgICB0aHJvdWdob3V0IGxheW91dC4KKworICAgICAgICAgIFRoaXMgYXZvaWRzIG1vc3Qg
b2YgdGhlIFJlbmRlckxheWVyIC8gUmVuZGVyTGF5ZXJCYWNraW5nIHNwZWNpZmljIGNoYW5nZXMg
dGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIGRvd25zdHJlYW0KKyAgICAgICAgICBMQlNFIGltcGxl
bWVudGF0aW9uLCB3aGlsZSBhbHNvIHNvbHZpbmcgYW4gaW1wb3J0YW50IGRlc2lnbiBpc3N1ZTog
bm8gYmFjay1zcGxhc2ggZnJvbSBjaGlsZHJlbiB0byBwYXJlbnRzLgorICAgICAgICAgIExhcmdl
LCBkZWVwIG5lc3RlZCBkb2N1bWVudHMgLS0gYXMgc2VlbiBpbiB0aGUgd2lsZCAtLSB3aWxsIGJl
bmVmaXQgdGhlIG1vc3QsIGF2b2lkaW5nIHRoZSBmcmVxdWVudCBhbmNlc3RvcgorICAgICAgICAg
IHdhbGtzIHRvIG1hcmsgdGhlIGNvbnRhaW5pbmcgYmxvY2sgLyBwYXJlbnQgaGllcmFjaHkgZm9y
IHJlLWxheW91dC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFu
Z2UgaW4gYmVoYXZpb3VyLiAoSG93ZXZlciB0ZXN0YWJpbGl0eSBmb3IgTEJTRSBpcyByZWFkeSBz
b29uISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkNyZWF0ZVN0YWNraW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBw
bHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbmRlcmVyTG9jYXRpb24gY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZH
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdDo6bm9taW5hbFNWR0xheW91dExvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzZXRDdXJyZW50
U1ZHTGF5b3V0TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0
VHJhbnNmb3JtYXRpb25zIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0Jsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmN1cnJlbnRTVkdMYXlvdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR01vZGVsT2JqZWN0OjpzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZnJhbWVSZWN0RXF1aXZhbGVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUb3BMZWZ0TG9j
YXRpb25PZmZzZXRFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R01vZGVsT2JqZWN0OjpsYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRMYXlvdXRMb2NhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cGFpbnRpbmdM
b2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bGF5b3V0TG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uT2Zmc2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5bGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpoYW5kbGVSb290T3JD
b250YWluZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdDb250YWluZXJMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29udGFpbmVyTGF5
b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3kp
OgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcik6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaDoKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpB
ZGp1c3Rlcjo6YWRqdXN0IGNvbnN0KToKKwogMjAyMi0wNC0yNyAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHRlc3RSdW5uZXIgQVBJIHRvIGNsZWFyIG1l
bW9yeSBjYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmlu
ZGV4IGI3NmUxODFlNmEyMDBkNzA4Y2Y4NDY0ZjUwZDgwZTUwYjAzZTFhY2EuLjY4MGNlNWM3NmNh
NmFkNmEzN2NhYTczYjBhOWI1Y2EwYTBiZWIyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTI0MTgsMjEgKzI0MTgsNDMgQEAgRmxvYXRSZWN0IFJl
bmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAog
ICAgIGlmICghaXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAorICAgIGF1dG8gYWxpZ25SZWZlcmVuY2VCb3ggPSBbJl0oRmxvYXRSZWN0IHJlZmVyZW5jZUJv
eCkgeworICAgICAgICAvLyBUaGUgQ1NTIGJvcmRlckJveFJlY3QoKSBpcyBkZWZpbmVkIHRvIHN0
YXJ0IGF0IGFuIG9yaWdpbiBvZiAoMCwgMCkuCisgICAgICAgIC8vIEEgcG9zc2libGUgc2hpZnQg
b2YgYSBDU1MgYm94IChlLmcuIGR1ZSB0byBub24tc3RhdGljIHBvc2l0aW9uICsgdG9wL2xlZnQg
cHJvcGVydGllcykKKyAgICAgICAgLy8gZG9lcyBub3QgZWZmZWN0IHRoZSBib3JkZXJCb3hSZWN0
KCkgbG9jYXRpb24uIFRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgICAvLyBpcyBwcm9w
YWdhdGVkIHVwb24gcGFpbnQgdGltZSwgZS5nLiB2aWEgJ3BhaW50T2Zmc2V0JyB3aGVuIGNhbGxp
bmcgUmVuZGVyT2JqZWN0OjpwYWludCgpLAorICAgICAgICAvLyBvciBieSBhbHRlcmluZyB0aGUg
UmVuZGVyTGF5ZXIgVHJhbnNmb3JtYXRpb25NYXRyaXggdG8gaW5jbHVkZSB0aGUgJ29mZnNldEZy
b21BbmNlc3RvcicKKyAgICAgICAgLy8gcmlnaHQgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCwgd2hlbiBDU1MgdHJhbnNmb3JtYXRpb25zIGFyZSBwcmVzZW50IChzZWUgUmVuZGVyTGF5ZXIK
KyAgICAgICAgLy8gcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oKSBmb3IgZGV0YWlscyku
CisgICAgICAgIC8vCisgICAgICAgIC8vIFRvIG1pbWljIHRoZSBleHBlY3RhdGlvbiBmb3IgU1ZH
LCAnZmlsbC1ib3gnIG11c3QgYmVoYXZlIHRoZSBzYW1lOiBpZiB3ZSdkIGluY2x1ZGUKKyAgICAg
ICAgLy8gdGhlICdyZWZlcmVuY2VCb3gnIGxvY2F0aW9uIGluIHRoZSByZXR1cm5lZCByZWN0LCB3
ZSdkIGFwcGx5IHRoZSAoeCwgeSkgbG9jYXRpb24KKyAgICAgICAgLy8gaW5mb3JtYXRpb24gZm9y
IHRoZSBTVkcgcmVuZGVyZXIgdHdpY2UuIFdlIHdvdWxkIHNoaWZ0IHRoZSAndHJhbnNmb3JtLW9y
aWdpbicgYnkgKHgsIHkpCisgICAgICAgIC8vIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGFsdGVyIHRo
ZSBDVE0gaW4gUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKCkgYnkK
KyAgICAgICAgLy8gaW5jbHVkaW5nIGEgdHJhbnNsYXRpb24gdG8gdGhlIGVuY2xvc2luZyB0cmFu
c2Zvcm1lZCBhbmNlc3RvciAoJ29mZnNldEZyb21BbmNlc3RvcicpLgorICAgICAgICAvLyBBdm9p
ZCB0aGF0LCBhbmQgbW92ZSBieSAtbm9taW5hbFNWR0xheW91dExvY2F0aW9uKCkuCisjaWYgRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGlmIChpc1NWR0xheWVyQXdhcmVS
ZW5kZXJlcigpICYmICFpc1NWR1Jvb3QoKSAmJiBkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJC
YXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlQnko
LWRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5ub21pbmFsU1ZHTGF5b3V0
TG9jYXRpb24oKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKKyAgICB9
OworCiAgICAgc3dpdGNoIChib3hUeXBlKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNz
aW5nOgogICAgIGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5
cGU6OlBhZGRpbmdCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgotICAgICAgICBy
ZXR1cm4gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgcmV0dXJuIGFsaWduUmVmZXJlbmNl
Qm94KG9iamVjdEJvdW5kaW5nQm94KCkpOwogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94
OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6TWFyZ2luQm94OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6
U3Ryb2tlQm94OgotICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICAgICAg
cmV0dXJuIGFsaWduUmVmZXJlbmNlQm94KHN0cm9rZUJvdW5kaW5nQm94KCkpOwogICAgIGNhc2Ug
Q1NTQm94VHlwZTo6Vmlld0JveDoKICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbTog
Q2FjaGUgdGhlIGltbXV0YWJsZSBTVkdMZW5ndGhDb250ZXh0IHBlciBTVkdFbGVtZW50LCB0byBh
dm9pZCB0aGUgcmVwZWF0ZWQgUmVuZGVyU1ZHUm9vdCBzaXplIHF1ZXJpZXMgaW4gZGV0ZXJtaW5l
Vmlld3BvcnQoKS4KICAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKICAgICAgICAgU1ZH
TGVuZ3RoQ29udGV4dChkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVW
aWV3cG9ydCh2aWV3cG9ydFNpemUpOwotICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6
ZSB9OworICAgICAgICByZXR1cm4gYWxpZ25SZWZlcmVuY2VCb3goeyB7IH0sIHZpZXdwb3J0U2l6
ZSB9KTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGMyZGUwYjZkNWZkNmZkODIxMDJmNzBiY2Nj
MTliYTc2OTNkYWVjNjcuLmJiNGQzYTRlNDYyYmNjOTc1NjZlZmJhNDliOGQxODM5NzhjYTRhM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzAyLDkgKzMw
Miw5IEBAIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQogCiBERUZJ
TkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdCkKLSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0LmlzUmVuZGVyVmlldygpKQotICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVu
ZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1faXNSZW5kZXJWaWV3
TGF5ZXIocmVuZGVyZXIuaXNSZW5kZXJWaWV3KCkpCisgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29u
dGV4dChyZW5kZXJlci5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2Up
CiAgICAgLCBtX2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQogICAgICwgbV9pc09wcG9ydHVu
aXN0aWNTdGFja2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zNDMsNyArMzQzLDcgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdCkKICAgICAsIG1faGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzU3RhdHVz
RGlydHkoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fcmVwYWludFJlY3RzVmFsaWQoZmFsc2UpCi0g
ICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKKyAgICAsIG1fcmVuZGVy
ZXIocmVuZGVyZXIpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZs
b3dPbmx5KCkpOwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tp
bmdDb250ZXh0KCkpOwpAQCAtMzUzLDkgKzM1Myw5IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAg
aWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKIAotICAgIGlm
ICghcmVuZGVyZXIoKS5maXJzdENoaWxkKCkpIHsKKyAgICBpZiAoIXJlbmRlcmVyLmZpcnN0Q2hp
bGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKLSAg
ICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9
IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAg
ICAgfQogfQogCkBAIC01NTIsOSArNTUyLDYgQEAgc3RhdGljIGJvb2wgY2FuQ3JlYXRlU3RhY2tp
bmdDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBhdXRvJiByZW5kZXJl
ciA9IGxheWVyLnJlbmRlcmVyKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyLmhhc1RyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eSgpCi0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAg
ICAgIHx8IHJlbmRlcmVyLmhhc1NWR1RyYW5zZm9ybSgpCi0jZW5kaWYKICAgICAgICAgfHwgcmVu
ZGVyZXIuaGFzQ2xpcFBhdGgoKQogICAgICAgICB8fCByZW5kZXJlci5oYXNGaWx0ZXIoKQogICAg
ICAgICB8fCByZW5kZXJlci5oYXNNYXNrKCkKQEAgLTM1NDUsMTkgKzM1NDIsMjkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGkKIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlp
bmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3Ms
IGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0KQogeworICAgIGF1dG8gdXNlc1NW
R1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyA9IFtdKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IHJlbmRlcmVyKSB7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAg
IHJldHVybiByZW5kZXJlci5kb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWQoKSAmJiByZW5kZXJlci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpICYmICFyZW5k
ZXJlci5pc1NWR1Jvb3QoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKICAgICAvLyBUaGlzIGlu
dm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBj
dXJyZW50IGNvb3JkaW5hdGUgc3BhY2UsIGJ1dCBwcmVzZXJ2aW5nCiAgICAgLy8gdGhlIGFjY3Vt
dWxhdGVkIGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgorICAgIC8vIE5vdGU6IFRoZSBwaXhl
bC1zbmFwcGluZyBsb2dpYyBpcyBkaXNhYmxlZCBmb3IgdGhlIHdob2xlIFNWRyByZW5kZXIgdHJl
ZSwgZXhjZXB0IHRoZSBvdXRlcm1vc3QgPHN2Zz4uCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBMYXlv
dXRTaXplIG9mZnNldEZyb21QYXJlbnQgPSBvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZv
LnJvb3RMYXllcik7CiAgICAgb2Zmc2V0RnJvbVBhcmVudCArPSB0cmFuc2xhdGlvbk9mZnNldDsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShw
YWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikpOwogICAgIC8vIEFkZCB0aGUgc3VicGl4ZWwgYWNj
dW11bGF0aW9uIHRvIHRoZSBjdXJyZW50IGxheWVyJ3Mgb2Zmc2V0IHNvIHRoYXQgd2UgY2FuIGFs
d2F5cyBzbmFwIHRoZSB0cmFuc2xhdGVSaWdodCB2YWx1ZSB0byB3aGVyZSB0aGUgcmVuZGVyZXIo
KSBpcyBzdXBwb3NlZCB0byBiZSBwYWludGluZy4KICAgICBMYXlvdXRTaXplIG9mZnNldEZvclRo
aXNMYXllciA9IG9mZnNldEZyb21QYXJlbnQgKyBwYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQ7
Ci0gICAgRmxvYXRTaXplIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllciA9IHRv
RmxvYXRTaXplKHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG9mZnNldEZv
clRoaXNMYXllciksIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgRmxvYXRTaXplIGFsaWduZWRP
ZmZzZXRGb3JUaGlzTGF5ZXIgPSB1c2VzU1ZHU3VidHJlZVRyYW5zZm9ybVJ1bGVzKHJlbmRlcmVy
KCkpID8gb2Zmc2V0Rm9yVGhpc0xheWVyIDogdG9GbG9hdFNpemUocm91bmRQb2ludFRvRGV2aWNl
UGl4ZWxzKHRvTGF5b3V0UG9pbnQob2Zmc2V0Rm9yVGhpc0xheWVyKSwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKICAgICAvLyBXZSBoYW5kbGUgYWNjdW11bGF0ZWQgc3VicGl4ZWxzIHRocm91Z2ggbmVz
dGVkIGxheWVycyBoZXJlLiBTaW5jZSB0aGUgY29udGV4dCBnZXRzIHRyYW5zbGF0ZWQgdG8gZGV2
aWNlIHBpeGVscywKICAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBhZGQgdGhlIGRlbHRhIHRv
IHRoZSBhY2N1bXVsYXRlZCBwaXhlbHMgY29taW5nIGZyb20gYW5jZXN0b3IgbGF5ZXJzLgogICAg
IC8vIFRyYW5zbGF0ZSB0aGUgZ3JhcGhpY3MgY29udGV4dCB0byB0aGUgc25hcHBpbmcgcG9zaXRp
b24gdG8gYXZvaWQgb2ZmLWRldmljZS1waXhlbCBwb3NpdGluZy4KLSAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlUmlnaHQoZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0Rm9yVGhpc0xheWVyLndpZHRoKCks
IGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGFsaWduZWRPZmZzZXRGb3JUaGlzTGF5ZXIud2lkdGgoKSwg
YWxpZ25lZE9mZnNldEZvclRoaXNMYXllci5oZWlnaHQoKSk7CiAgICAgLy8gQXBwbHkgdGhlIHRy
YW5zZm9ybS4KICAgICBhdXRvIG9sZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAg
YXV0byBhZmZpbmVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAg
LTM1NjcsNyArMzU3NCwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlBcHBseWlu
Z1RyYW5zZm9ybShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIHBhaW50
aW5nSW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnB1c2hUcmFuc2Zvcm0oYWZmaW5lVHJhbnNmb3Jt
KTsKIAogICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0
byBiZSB1cy4KLSAgICBMYXlvdXRTaXplIGFkanVzdGVkU3VicGl4ZWxPZmZzZXQgPSBvZmZzZXRG
b3JUaGlzTGF5ZXIgLSBMYXlvdXRTaXplKGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZvclRoaXNM
YXllcik7CisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZFN1YnBpeGVsT2Zmc2V0OworICAgIGlmICgh
dXNlc1NWR1N1YnRyZWVUcmFuc2Zvcm1SdWxlcyhyZW5kZXJlcigpKSAmJiAhcmVuZGVyZXIoKS5p
c1NWR1Jvb3QoKSkKKyAgICAgICAgYWRqdXN0ZWRTdWJwaXhlbE9mZnNldCA9IG9mZnNldEZvclRo
aXNMYXllciAtIExheW91dFNpemUoYWxpZ25lZE9mZnNldEZvclRoaXNMYXllcik7CisKICAgICBM
YXllclBhaW50aW5nSW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8pOwog
ICAgIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLnJvb3RMYXllciA9IHRoaXM7CiAgICAgdHJhbnNm
b3JtZWRQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QgPSBMYXlvdXRSZWN0KGVuY2xvc2VSZWN0
VG9EZXZpY2VQaXhlbHModmFsdWVPckRlZmF1bHQodHJhbnNmb3JtLmludmVyc2UoKSkubWFwUmVj
dChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA3ZDNjYjE1N2QwZmJmMjAyZWE3
ZDhhNjQ5MjNmODA0ZGYzMDkxYzcyLi44MDQ3NjFhOGY5MjAwMDRlOGZkZDQyN2UxOGQ0YTc5ODQ1
MTMxYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtOTg0LDcg
Kzk4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKS5sb2NhdGlvbigpOwogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQogICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJl
cigpKS5sYXlvdXRMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKS5jdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKTsK
ICNlbmRpZgogCiAgICAgICAgIHJldHVybiBMYXlvdXRQb2ludCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDAxYjk4
YWY0ODFlZWZmMjdiNDYwYWE0NmJhZGFjMGVhZGY3ZDEyZTAuLmNlYzA0ZmEzYjNmYzU3OGYxZjQ1
YmRkNDlkMTNkYzJmYzk5NWE4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTEyOSw2ICsxMjksOSBAQCB2b2lkIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdAogICAgICAgICAgICAgbGF5ZXIoKS0+d2lsbFJlbW92ZUNoaWxkV2l0
aEJsZW5kTW9kZSgpOwogI2VuZGlmCiAgICAgICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eShmYWxzZSk7IC8vIEFsbCB0cmFuc2Zvcm0tcmVsYXRlZCBwcm9wZXJ0aWVzIGZvcmNlIGxh
eWVycywgc28gd2Uga25vdyB3ZSBkb24ndCBoYXZlIG9uZSBvciB0aGUgb2JqZWN0IGRvZXNuJ3Qg
c3VwcG9ydCB0aGVtLgorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAg
ICBzZXRIYXNTVkdUcmFuc2Zvcm0oZmFsc2UpOyAvLyBTYW1lIHJlYXNvbiBhcyBmb3Igc2V0SGFz
VHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkuCisjZW5kaWYKICAgICAgICAgc2V0SGFzUmVmbGVj
dGlvbihmYWxzZSk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgYWJvdXQgdG8gYmUgZGVzdHJv
eWVkIHNlbGYtcGFpbnRpbmcgbGF5ZXIgd2hlbiBzdHlsZSBjaGFuZ2UgYWxzbyB0cmlnZ2VycyBy
ZXBhaW50LgpAQCAtMjc1LDcgKzI3OCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluCiAgICAg
Ki8KIAogICAgIGlmIChtb3ZlVG9PcmlnaW4pCi0gICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnko
Zmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkp
OworICAgICAgICBhZGp1c3RlZFJlY3QubW92ZUJ5KG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigp
KTsKIAogICAgIGlmIChhdXRvKiB0cmFuc2Zvcm0gPSBsYXllcigpLT50cmFuc2Zvcm0oKSkKICAg
ICAgICAgYWRqdXN0ZWRSZWN0ID0gdHJhbnNmb3JtLT5tYXBSZWN0KGFkanVzdGVkUmVjdCk7CkBA
IC0zNTYsNiArMzU5LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6YXBwbHlTVkdU
cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwKIAogICAgIHN0eWxlLnVu
YXBwbHlUcmFuc2Zvcm1PcmlnaW4odHJhbnNmb3JtLCBvcmlnaW5UcmFuc2xhdGUpOwogfQorCit2
b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGNv
bnN0IFNWR0dyYXBoaWNzRWxlbWVudCYgZ3JhcGhpY3NFbGVtZW50KQoreworICAgIGJvb2wgaGFz
U1ZHVHJhbnNmb3JtID0gIWdyYXBoaWNzRWxlbWVudC5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCku
aXNJZGVudGl0eSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZSgp
Lmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IGhhc1NWR1RyYW5zZm9ybSk7CisgICAg
c2V0SGFzU1ZHVHJhbnNmb3JtKGhhc1NWR1RyYW5zZm9ybSk7Cit9CiAjZW5kaWYKIAogYm9vbCBy
ZW5kZXJlck5lZWRzUGl4ZWxTbmFwcGluZyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBy
ZW5kZXJlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5oCmluZGV4IDA2YWM3OGMzZmUzY2VjNTAyZmQ3MDNkNDdhYWMzNzU2MDRlMDdhMjQu
LmM4YjcwZWQ4OTNmMGZkN2YwMWUwNmI1ZWVlMTk4MTI1MTA2ODAwZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtNzgsNiAr
NzgsMTEgQEAgcHVibGljOgogICAgIHZvaWQgbWFwTG9jYWxUb1NWR0NvbnRhaW5lcihjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUm
LCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Owog
CiAgICAgdm9pZCBhcHBseVNWR1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIFNWR0dy
YXBoaWNzRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZGluZ0JveCwgT3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+
KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGNvbnN0IFNWR0dy
YXBoaWNzRWxlbWVudCYpOworCisgICAgTGF5b3V0UG9pbnQgbm9taW5hbFNWR0xheW91dExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94
V2l0aG91dFRyYW5zZm9ybWF0aW9ucygpLm1pblhNaW5ZQ29ybmVyKCkpOyB9CisgICAgdmlydHVh
bCBMYXlvdXRQb2ludCBjdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRT
VkdMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KICNlbmRpZgogCiAgICAgdm9pZCB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDM2OGMzZDE3YjNiNjBiNzUyMjlk
NmQzYWM0NzhjMGNlYWJkZGIzZGMuLjRmOTdjNDExZjk4ZmVmY2NlN2E1ODg4ZGJlYTQ3NzU5ZmQ3
NDJlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM2Nyw2
ICszNjcsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5n
Qm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdDsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIC8vIFRoZSBv
YmplY3RCb3VuZGluZ0JveCBvZiBhIFNWRyBjb250YWluZXIgaXMgYWZmZWN0ZWQgYnkgdGhlIHRy
YW5zZm9ybWF0aW9ucyBhcHBsaWVkIG9uIGl0cyBjaGlsZHJlbiAtLSB0aGUgY29udGFpbmVyCisg
ICAgLy8gYm91bmRpbmcgYm94IGlzIGEgdW5pb24gb2YgYWxsIGNoaWxkIGJvdW5kaW5nIGJveGVz
LCBtYXBwZWQgdGhyb3VnaCB0aGVpciB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcy4KKyAgICAvLwor
ICAgIC8vIFRoaXMgbWV0aG9kIGlnbm9yZXMgYWxsIHRyYW5zZm9ybWF0aW9ucyBhbmQgY29tcHV0
ZXMgdGhlIG9iamVjdEJvdW5kaW5nQm94LCB3aXRob3V0IG1hcHBpbmcgdGhyb3VnaCB0aGUgY2hp
bGQKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcy4gVGhlIFNWRyByZW5kZXIgdHJlZSBp
cyBjb25zdHJ1Y3RlZCBpbiBzdWNoIGEgd2F5LCB0aGF0IGl0IGNhbiBiZSBtYXBwZWQgdG8gQ1NT
IGVxdWl2YWxlbnRzOgorICAgIC8vIFRoZSBTVkcgcmVuZGVyIHRyZWUgdW5kZXJuZWF0aCB0aGUg
b3V0ZXJtb3N0IDxzdmc+IGJlaGF2ZXMgYXMgYSBzZXQgb2YgYWJzb2x1dGVseSBwb3NpdGlvbmVk
LCBwb3NzaWJseSBuZXN0ZWQsIGJveGVzLgorICAgIC8vIFRoZXkgYXJlIGxhaWQgb3V0IGluIHN1
Y2ggYSB3YXkgdGhhdCB0cmFuc2Zvcm1hdGlvbnMgZG8gTk9UIGFmZmVjdCBsYXlvdXQsIGFzIGlu
IEhUTUwvQ1NTIHdvcmxkLCBidXQgdGFrZSBhZmZlY3QgZHVyaW5nCisgICAgLy8gcGFpbnRpbmcs
IGhpdC10ZXN0aW5nIGV0Yy4gVGhpcyBhbGxvd3MgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBy
ZS1sYXlvdXRzIHdoZW4gYW5pbWF0aW5nIHRyYW5zZm9ybWF0aW9ucyBpbiBTVkcKKyAgICAvLyAo
bm90IHVzaW5nIENTUyBBbmltYXRpb25zL1RyYW5zaXRpb25zIC8gV2ViIEFuaW1hdGlvbnMsIGJ1
dCBlLmcuIFNNSUwgPGFuaW1hdGVUcmFuc2Zvcm0+LCBKUywgLi4uKS4KKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1hdGlvbnMoKSBjb25zdCB7
IHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOyB9CisjZW5kaWYKKwogICAgIC8vIFJldHVybnMg
dGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRl
bnQKICAgICAvLyByZXNwZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBvcGFjaXR5
LCBzdHJva2Utd2lkdGggYW5kIG1hcmtlcnMKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5oCmluZGV4IDllOTlhZTA2NDYwZjk4OWM4YWExNzY4YmZl
NTliNWI5NzljOTk1YTQuLmMxNDZkZGFlZjIwYjUzYzRkNDFhNTk0ODRhOTc0Y2FkZmNkNmYzNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2su
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgKQEAg
LTQ4LDYgKzQ4LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKIAorI2lmIEVO
QUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdM
YXlvdXRMb2NhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxvY2F0aW9uKCk7IH0KKyAgICB2
b2lkIHNldEN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRp
b24pIGZpbmFsIHsgc2V0TG9jYXRpb24obG9jYXRpb24pOyB9CisjZW5kaWYKKwogICAgIExheW91
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwogICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVy
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5l
ciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPExh
eW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3Qm
LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29u
dGV4dCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggMzQ1ZDYzNjEzNGQ1ZmRiY2Y5MjY3YmZjZGFj
YzRjZjYyY2IzYzZjNy4uMjEzODA5Mzk2M2M3MmRkYzQzZGFkNDMyY2M5MzRiOTI5ZDYxZmEyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmNwcApAQCAtMTE5LDE5ICsxMTksMTQgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6Omxh
eW91dENoaWxkcmVuKCkKIAogICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdC
b3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5n
Qm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbiwgJm1fb2JqZWN0Qm91bmRp
bmdCb3hWYWxpZCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0
YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7Ci0gICAgc2V0TGF5b3V0UmVjdChlbmNs
b3NpbmdMYXlvdXRSZWN0KG1fb2JqZWN0Qm91bmRpbmdCb3gpKTsKIAotICAgIGNvbnRhaW5lckxh
eW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwotfQorICAgIGNvbnN0
ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlv
bnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRp
b24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVU
cmFuc2Zvcm1hdGlvbnM7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveFdpdGhvdXRUcmFuc2Zvcm1h
dGlvbnMgPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0Jv
eChvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb25XaXRob3V0VHJhbnNmb3JtYXRpb25zKTsKIAot
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBtX3N0cm9rZUJvdW5k
aW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdC
b3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNvcmF0aW9u
KTsKKyAgICBzZXRDdXJyZW50U1ZHTGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fb2Jq
ZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zKSk7CiAKLSAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFJlbmRlckxheWVyIGNoYW5nZXMKLSAgICAvLyBpZiAoaGFzTGF5ZXIo
KSkKLSAgICAvLyAgICAgbGF5ZXIoKS0+c2V0SXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0
KHRydWUpOworICAgIGNvbnRhaW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0Nv
bnRhaW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQYWludCgp
CkBAIC0xNjUsNyArMTYwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0
ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWlu
dE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5kZXJTdXBw
b3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7
CkBAIC0xODUsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKIAogYm9vbCBSZW5k
ZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNj
dW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7CiAK
ICAgICBhdXRvIHZpc3VhbE92ZXJmbG93UmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxl
bnQoKTsKICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwpA
QCAtMTkzLDggKzE4OCw3IEBAIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGF1dG8gbG9jYWxQb2ludCA9IGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKTsKLSAgICBhdXRvIGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciA9IGZsb29yZWRMYXlvdXRQ
b2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGF1dG8gY29v
cmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYm91bmRpbmdCb3hUb3BMZWZ0Q29ybmVy
IC0gYWRqdXN0ZWRMb2NhdGlvbjsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbiA9IG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpIC0gYWRqdXN0ZWRMb2NhdGlvbjsK
ICAgICBsb2NhbFBvaW50Lm1vdmUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uKTsK
IAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSgqdGhpcywg
bG9jYWxQb2ludCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuaAppbmRleCBlMzQ4MmFiOWYwM2ExNWY5MzFhMjk5NjlkMWY2NTQwNjYwNWY1
N2JiLi5mZDQyNWEzMGM0OGVkZDIyMTc3ODY1NTdhYWU1ZmIwYjI2MmU3N2M4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKQEAgLTQw
LDYgKzQwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPYmplY3RCb3VuZGluZ0JveFZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkOyB9CiAKICAgICBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5k
aW5nQm94OyB9CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9y
bWF0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3hXaXRob3V0
VHJhbnNmb3JtYXRpb25zOyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOyB9
CiAKQEAgLTQ5LDggKzUwLDYgQEAgcHJvdGVjdGVkOgogICAgIEFTQ0lJTGl0ZXJhbCByZW5kZXJO
YW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciJfczsgfQog
ICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRDaGlsZHJlbigpOwogICAgIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpAQCAtNjIsNiArNjEsNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCB7IGZhbHNlIH07CiAgICAg
RmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91
bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zOwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJv
dW5kaW5nQm94OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lLmgKaW5kZXggMjAwMDE0Nzc1Y2VlODI1ZDFkYWZiYTRkOTQwZTJiOGQw
MjMyNzU0Mi4uNTRhNWExN2U4ZTBhZjZjZTEzNzBiZWY3OWFiZmY1YmU5OWExYzI0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCkBAIC01MSw2
ICs1MSwxMSBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNv
bnN0IGZpbmFsOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0IGZpbmFsOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
TGF5b3V0UG9pbnQgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1
cm4geyB9OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5
b3V0UG9pbnQmKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisjZW5kaWYKKwogICAg
IExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsOwog
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIG1hcExv
Y2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250
YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJv
b2wqIHdhc0ZpeGVkKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggYzk2OTVlNmI2YTQzZjlj
ZjRmZjAzOTVhYzM2MWE0MzI2MWRiOGUyMy4uNmZmZWU5OTcxODJlOWVlNzIwNTJhOWFmMDc5Njky
MTg5MGMzYzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTYxLDEyICs2MSw4IEBAIHZvaWQgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdDo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKLSAgICBib29sIGhhc1NWR1RyYW5zZm9ybSA9IGZh
bHNlOwogICAgIGlmIChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpCi0gICAgICAg
IGhhc1NWR1RyYW5zZm9ybSA9ICFkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQo
KSkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKTsKLQotICAgIHNldEhhc1Ry
YW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0
eSgpIHx8IGhhc1NWR1RyYW5zZm9ybSk7Ci0gICAgc2V0SGFzU1ZHVHJhbnNmb3JtKGhhc1NWR1Ry
YW5zZm9ybSk7CisgICAgICAgIHVwZGF0ZUhhc1NWR1RyYW5zZm9ybUZsYWdzKGRvd25jYXN0PFNW
R0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29u
c3QKQEAgLTE0MSw3ICsxMzcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpv
dXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2b2lkIFJl
bmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAgICByZWN0
cy5hcHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxh
eW91dExvY2F0aW9uKCksIGxheW91dFNpemUoKSkpKTsKKyAgICByZWN0cy5hcHBlbmQoc25hcHBl
ZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIG1fbGF5b3V0UmVjdC5sb2Nh
dGlvbigpLCBtX2xheW91dFJlY3Quc2l6ZSgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmgKaW5kZXggYmMxMTI0NTA0M2M5ZDFlNTRlYjBjYzRjYzJjMTQ4Yzlh
OWIyMzhjMy4uYWU4OWI4ZGVhYzk4YjJkZTViYzk5MTc2YTI5OGE0MzMyODQ0N2RjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aApAQCAtNTgsMjYgKzU4LDIxIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBTVkdFbGVtZW50JiBl
bGVtZW50KCkgY29uc3Q7CiAKKyAgICBMYXlvdXRSZWN0IGN1cnJlbnRTVkdMYXlvdXRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRDdXJyZW50U1ZHTGF5
b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVjdCA9IGxh
eW91dFJlY3Q7IH0KKworICAgIExheW91dFBvaW50IGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgdm9p
ZCBzZXRDdXJyZW50U1ZHTGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9u
KSBmaW5hbCB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKwogICAgIC8v
IE1pbWljIHRoZSBSZW5kZXJCb3ggYWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2FtZSB0ZXJt
aW5vbG9neSB0aGUgcGFpbnRpbmcgLyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBpcwogICAg
IC8vIHNpbWlsYXIgdG8gcmVhZCBjb21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBzdWNoIGFz
IFJlbmRlckJveCAmIGZyaWVuZHMuCiAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0RXF1aXZh
bGVudCgpIGNvbnN0IHsgcmV0dXJuIHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0LnNpemUo
KSB9OyB9CiAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7
IHJldHVybiBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFt
ZVJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Ci0KICAgICBM
YXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBT
VkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlz
KTsgfQogCi0gICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5
b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsg
fQotCi0gICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRS
ZWN0OyB9Ci0gICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJl
Y3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQotICAgIHZvaWQgc2V0TGF5b3V0TG9j
YXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5z
ZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KLQotICAgIExheW91dFBvaW50IHBhaW50aW5n
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkg
LSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigp
KSk7IH0KLSAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9Ci0gICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24o
KSk7IH0KLSAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91
dFJlY3Quc2l6ZSgpOyB9Ci0KICAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIHZvaWQg
YXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBwb2ludCkg
Y29uc3QgeyBwb2ludC5tb3ZlQnkoY3VycmVudFNWR0xheW91dExvY2F0aW9uKCkpOyB9CiAgICAg
RmxvYXRSZWN0IGJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgPSBSZW5k
ZXJCb3g6OkNhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKSBjb25zdDsKICAgICB2aXJ0dWFsIExh
eW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBo
YXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCBy
ZWxldmFuY3kpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcAppbmRleCBhOWI5MzMyMmIwYThmMjQ2ZTAyYzU2MDM2MjVkZjMzNDZkM2RmYmNjLi4y
MmEwMGNmNDQ5M2NiNGJkMTkzMjYwYjExOTdkNDMyY2NjN2Y3MzdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTE5Niw2ICsxOTYsMTAg
QEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogCiAgICAgICAgIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24gYm91bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7CiAgICAgICAgIG1fb2Jq
ZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRC
b3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERl
Y29yYXRpb24pOworCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIG9iamVjdEJvdW5kaW5nQm94RGVj
b3JhdGlvbldpdGhvdXRUcmFuc2Zvcm1hdGlvbnMgPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24gfCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpEZWNvcmF0aW9uT3B0aW9uOjpJZ25vcmVUcmFuc2Zvcm1hdGlvbnM7CisgICAgICAgIG1fb2Jq
ZWN0Qm91bmRpbmdCb3hXaXRob3V0VHJhbnNmb3JtYXRpb25zID0gYm91bmRpbmdCb3hDb21wdXRh
dGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0
aW9uV2l0aG91dFRyYW5zZm9ybWF0aW9ucyk7CisKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0Jv
eCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAg
ICAgfQogCkBAIC0zOTcsNiArNDAxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9t
U3R5bGUoKQogICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAogICAgIHNl
dEhhc1NWR1RyYW5zZm9ybSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgp
OwogCiAgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCiAgICAgICAgIHNldEhhc05v
blZpc2libGVPdmVyZmxvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuaAppbmRleCBlN2Y3MTU1MzI2N2ViMjM5ODAwNThkMTdlZDA4ZGM4MjAxODAwMDhm
Li5jMGQxY2NkZGEzODY4OWY3MmRjZmIzZWExNDAzMjNmYjcxMmE1MDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtNjcsNiArNjcsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0OwogCiAgICAg
RmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmpl
Y3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveFdpdGhvdXRU
cmFuc2Zvcm1hdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94
V2l0aG91dFRyYW5zZm9ybWF0aW9uczsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0
aGlzKTsgfQogCkBAIC0xMjMsNiArMTI0LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9j
b250YWluZXJTaXplOwogICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZs
b2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybWF0aW9uczsKICAgICBG
bG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV92aWV3
Qm94VHJhbnNmb3JtOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1lbnRhbExvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwCmluZGV4IGNhYWY2YjM1YjBlMDUyMDAzZGY5MjAxZWVjMDAwNGQ1NDM1MWY0
MDYuLjk5YjI4ODRkNzI0NTk5ZjM2OTk0YWEzMDcwZjg3NDNiYWYyOWU4MjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0xNTEsNyAr
MTUxLDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKICAgICAgICAgdXBkYXRlU2hh
cGVGcm9tRWxlbWVudCgpOwogCiAgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOwot
ICAgICAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9maWxsQm91bmRpbmdC
b3gpKTsKKyAgICAgICAgc2V0Q3VycmVudFNWR0xheW91dFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVj
dChtX2ZpbGxCb3VuZGluZ0JveCkpOwogICAgIH0KIAogICAgIHVwZGF0ZUxheWVyVHJhbnNmb3Jt
KCk7CkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldCArIGN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzaykgewogICAgICAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwogICAgICAgICAvLyBTVkdSZW5kZXJT
dXBwb3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNl
dCk7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4dCgpKTsK
IAotICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRqdXN0ZWRQ
YWludE9mZnNldCAtIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLmxvY2F0
aW9uKCkpOworICAgIGF1dG8gY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uID0gYWRq
dXN0ZWRQYWludE9mZnNldCAtIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOwogICAgIHBhaW50
SW5mby5jb250ZXh0KCkudHJhbnNsYXRlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlv
bi53aWR0aCgpLCBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24uaGVpZ2h0KCkpOwog
CiAgICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5zaGFwZVJlbmRlcmluZygpID09IFNoYXBlUmVu
ZGVyaW5nOjpDcmlzcEVkZ2VzKQpAQCAtMzQ1LDExICszNDUsMTAgQEAgYm9vbCBSZW5kZXJTVkdT
aGFwZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHIKICAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11
bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgY3VycmVudFNWR0xheW91dExvY2F0aW9uKCk7CiAKICAg
ICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7Ci0gICAgYXV0
byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91
bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKLSAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1P
cmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVzdGVkTG9j
YXRpb247CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBub21p
bmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIGFkanVzdGVkTG9jYXRpb247CiAgICAgbG9jYWxQb2lu
dC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7CiAKICAgICBpZiAoIVNW
R1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKaW5kZXggYjAwZmI1MGFhOWUwMDAxNzk3ZmM5
NTUwODU4NmE2YjIxNDA3N2Y3OS4uMGRlYjBlMzdiYmMzZGZlZWUwOTkyMDBiZmQ1YzViMDA0OGM5
Y2MyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCkBAIC05Nyw4ICs5NywxMCBA
QCB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OnVwZGF0ZUZyb21TdHlsZSgp
CiB7CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyOjp1cGRhdGVGcm9tU3R5bGUoKTsKIAotICAgIGlm
IChhc3NvY2lhdGVkVXNlRWxlbWVudChncmFwaGljc0VsZW1lbnQoKSkpCisgICAgaWYgKGFzc29j
aWF0ZWRVc2VFbGVtZW50KGdyYXBoaWNzRWxlbWVudCgpKSkgewogICAgICAgICBzZXRIYXNTVkdU
cmFuc2Zvcm0oKTsKKyAgICAgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmFwcGx5VHJh
bnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0aW9uU2V0PFJlbmRlclN0
eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmNwcAppbmRleCA3OTgwOThkZWIyYzk4NTQ2NWI5MTYwNzg2NDc5NGM4NmVmYjQ2NzMzLi40
ZGI1YzgyMTZmZmEwODE4NWQwMDA1OTNmN2U1MjFiZDUxMTZlMmFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bi5jcHAKQEAgLTE3NSw4ICsxNzUsMTAgQEAgRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb246OmhhbmRsZVJvb3RPckNvbnRhaW5lcihjb25zdCBTVkdCb3VuZGluZ0JveEMKICAgICAg
ICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRo
RmlsdGVyQm94Rm9yQ2hpbGRyZW4pICYmIGlzPFJlbmRlclNWR0NvbnRhaW5lcj4oY2hpbGQpKQog
ICAgICAgICAgICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVzdEJveEZvckNsaXBw
aW5nQW5kRWZmZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJv
eCB9LCBjaGlsZEJveCk7CiAKLSAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm1hdGlvbk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCi0gICAgICAgICAgICBjaGlsZEJveCA9
IGxheWVyVHJhbnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKyAgICAgICAgaWYgKCFvcHRpb25z
LmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Oklnbm9yZVRyYW5zZm9ybWF0aW9ucykpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvIGxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb25NYXRyaXhG
cm9tQ2hpbGQoY2hpbGQpKQorICAgICAgICAgICAgICAgIGNoaWxkQm94ID0gbGF5ZXJUcmFuc2Zv
cm0tPm1hcFJlY3QoY2hpbGRCb3gpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG9wdGlvbnMg
PT0gb2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0aW9uKQogICAgICAgICAgICAgdW5pdGVCb3VuZGlu
Z0JveFJlc3BlY3RpbmdWYWxpZGl0eShib3hWYWxpZCwgYm94LCBjaGlsZCwgY2hpbGRCb3gpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uaAppbmRleCA4M2RhNjNiZDZmMDk4MmVjNjdmYTViM2JjOTQ2YmQ4ODJkMjU5
ZDQ0Li4wZDc1NGFkNDMxMWVjODVkYjkxNzAwOTA4YTBhMDNiMTJkNTY2ZTRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgSWdhbGlhIFMuTC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzUsMTUgKzM1LDE2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAg
ICB+U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbigpID0gZGVmYXVsdDsKIAotICAgIGVudW0gY2xh
c3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3QgeworICAgIGVudW0gY2xhc3MgRGVjb3JhdGlv
bk9wdGlvbiA6IHVpbnQxNl90IHsKICAgICAgICAgSW5jbHVkZUZpbGxTaGFwZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDAsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGZpbGwnICAgICAqLwog
ICAgICAgICBJbmNsdWRlU3Ryb2tlU2hhcGUgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwgLyog
Y29ycmVzcG9uZHMgdG8gJ2Jvb2wgc3Ryb2tlJyAgICovCiAgICAgICAgIEluY2x1ZGVNYXJrZXJz
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLCAvKiBjb3JyZXNwb25kcyB0byAnYm9vbCBt
YXJrZXJzJyAgKi8KICAgICAgICAgSW5jbHVkZUNsaXBwZXJzICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDMsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIGNsaXBwZXJzJyAqLwogICAgICAgICBJ
bmNsdWRlTWFza2VycyAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwgLyogV2ViS2l0IGV4
dGVuc2lvbiAtIGludGVybmFsICAgICovCiAgICAgICAgIEluY2x1ZGVPdXRsaW5lICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA1LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAg
Ki8KLSAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAgICAgPSAxIDw8IDYs
IC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLwotICAgICAgICBPdmVycmlkZUJv
eFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgNyAgLyogV2ViS2l0IGV4dGVuc2lvbiAt
IGludGVybmFsICAgICovCisgICAgICAgIElnbm9yZVRyYW5zZm9ybWF0aW9ucyAgICAgICAgICAg
ICAgID0gMSA8PCA2LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KKyAgICAg
ICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94ICAgICAgICAgICAgPSAxIDw8IDcsIC8qIFdlYktp
dCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAgICBPdmVycmlkZUJveFdpdGhGaWx0
ZXJCb3hGb3JDaGlsZHJlbiA9IDEgPDwgOCAgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFs
ICAgICovCiAgICAgfTsKIAogICAgIHVzaW5nIERlY29yYXRpb25PcHRpb25zID0gT3B0aW9uU2V0
PERlY29yYXRpb25PcHRpb24+OwpAQCAtNzMsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0
ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRpbmdCb3gpOwotICAgICAgICB2aXN1
YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0UG9pbnQocmVuZGVyZXIub2JqZWN0
Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIHZpc3VhbE92ZXJmbG93
UmVjdC5tb3ZlQnkoLXJlbmRlcmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIHZpc3VhbE92ZXJmbG93UmVjdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcAppbmRleCA4MTNjM2Vj
ZWY5MzhiZGE0ODY0NDRkNGFmNzA4ZDk3Y2I3M2NlYWUwLi44MzI4MmNmMDMxNjZlODJkYzRkMjYw
NjkxMDA5MjRmYjI4NTBlNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0NvbnRhaW5lckxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCkBAIC0xMjAsNDEgKzEyMCw2IEBAIHZvaWQgU1ZH
Q29udGFpbmVyTGF5b3V0OjpsYXlvdXRDaGlsZHJlbihib29sIGNvbnRhaW5lck5lZWRzTGF5b3V0
KQogICAgICAgICBBU1NFUlQoZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2ZUxheW91dC5pc0VtcHR5
KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFBvaW50IGxheW91dExvY2F0aW9uRnJvbVJl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRl
clNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheW91dExvY2F0aW9uKCk7Ci0KLSAgICBpZiAo
aXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIpLmxvY2F0
aW9uKCk7Ci0KLSAgICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5lPihyZW5kZXJlcikpIC8vIDx0c3Bh
bj4gLyA8dGV4dFBhdGg+Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0TGF5
b3V0TG9jYXRpb25Gb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgbmV3TG9jYXRpb24pCi17Ci0gICAgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0
PihyZW5kZXJlcikpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJl
bmRlcmVyKS5zZXRMYXlvdXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyA8Zm9yZWlnbk9iamVjdD4gLyA8dGV4dD4KLSAgICBpZiAoaXM8UmVu
ZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkgewotICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdCbG9j
az4ocmVuZGVyZXIpLnNldExvY2F0aW9uKG5ld0xvY2F0aW9uKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIDx0c3Bhbj4gLyA8dGV4dFBhdGg+Ci0gICAgaWYgKGlzPFJlbmRlclNW
R0lubGluZT4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQogdm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnBvc2l0aW9uQ2hpbGRyZW5S
ZWxhdGl2ZVRvQ29udGFpbmVyKCkKIHsKICAgICBpZiAobV9wb3NpdGlvbmVkQ2hpbGRyZW4uaXNF
bXB0eSgpKQpAQCAtMTc3LDQwICsxNDIsMzYgQEAgdm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnBv
c2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKCkKICAgICB9OwogCiAgICAgLy8gQXJy
YW5nZSBsYXlvdXQgbG9jYXRpb24gZm9yIGFsbCBjaGlsZCByZW5kZXJlcnMgcmVsYXRpdmUgdG8g
dGhlIGNvbnRhaW5lciBsYXlvdXQgbG9jYXRpb24uCi0gICAgYXV0byBwYXJlbnRMYXlvdXRMb2Nh
dGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChtX2NvbnRhaW5lci5vYmplY3RCb3VuZGluZ0JveCgp
Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0JiBjaGlsZCA6IG1fcG9z
aXRpb25lZENoaWxkcmVuKSB7CisgICAgYXV0byBwYXJlbnRMYXlvdXRMb2NhdGlvbiA9IG1fY29u
dGFpbmVyLm5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbigpOworICAgIGZvciAoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgY2hpbGQgOiBtX3Bvc2l0aW9uZWRDaGlsZHJlbikgewogICAgICAgICB2ZXJp
ZnlQb3NpdGlvbmVkQ2hpbGRSZW5kZXJlckV4cGVjdGF0aW9uKGNoaWxkKTsKIAotICAgICAgICBh
dXRvIG9iamVjdEJvdW5kaW5nQm94Q2hpbGQgPSBjaGlsZC5vYmplY3RCb3VuZGluZ0JveCgpOwot
ICAgICAgICBhdXRvIGxheW91dExvY2F0aW9uID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJv
dW5kaW5nQm94Q2hpbGQubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGF1dG8gZGVzaXJlZExh
eW91dExvY2F0aW9uID0gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbiAtIHBhcmVudExheW91
dExvY2F0aW9uKTsKLSAgICAgICAgYXV0byBjdXJyZW50TGF5b3V0TG9jYXRpb24gPSBsYXlvdXRM
b2NhdGlvbkZyb21SZW5kZXJlcihjaGlsZCk7Ci0gICAgICAgIGlmIChjdXJyZW50TGF5b3V0TG9j
YXRpb24gPT0gZGVzaXJlZExheW91dExvY2F0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIoY2hpbGQsIGRlc2lyZWRMYXlvdXRM
b2NhdGlvbik7CisgICAgICAgIGF1dG8gZGVzaXJlZExheW91dExvY2F0aW9uID0gdG9MYXlvdXRQ
b2ludChjaGlsZC5ub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24oKSAtIHBhcmVudExheW91dExvY2F0
aW9uKTsKKyAgICAgICAgaWYgKGNoaWxkLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpICE9IGRl
c2lyZWRMYXlvdXRMb2NhdGlvbikKKyAgICAgICAgICAgIGNoaWxkLnNldEN1cnJlbnRTVkdMYXlv
dXRMb2NhdGlvbihkZXNpcmVkTGF5b3V0TG9jYXRpb24pOwogICAgIH0KIH0KIAotdm9pZCBTVkdD
b250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIpCit2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5
b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5k
ZXJlcikKIHsKICAgICBpZiAocmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSAmJiAh
cmVuZGVyZXIuaXNTVkdSb290KCkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50TGF5b3V0TG9jYXRp
b24gPSBsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAgIGF1dG8g
Y3VycmVudExheW91dExvY2F0aW9uID0gcmVuZGVyZXIuY3VycmVudFNWR0xheW91dExvY2F0aW9u
KCk7CiAKICAgICAgICAgYXV0byBleHBlY3RlZExheW91dExvY2F0aW9uID0gY3VycmVudExheW91
dExvY2F0aW9uOwotICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBl
PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgeworICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9y
IDogYW5jZXN0b3JzT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKSkgewog
ICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpOwog
ICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmlzU1ZHUm9vdCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbi5tb3ZlQnkobGF5b3V0TG9j
YXRpb25Gcm9tUmVuZGVyZXIoYW5jZXN0b3IpKTsKKyAgICAgICAgICAgIGV4cGVjdGVkTGF5b3V0
TG9jYXRpb24ubW92ZUJ5KGFuY2VzdG9yLmN1cnJlbnRTVkdMYXlvdXRMb2NhdGlvbigpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9uID0gZmxvb3JlZExh
eW91dFBvaW50KHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSk7
CisgICAgICAgIGF1dG8gaW5pdGlhbExheW91dExvY2F0aW9uID0gcmVuZGVyZXIubm9taW5hbFNW
R0xheW91dExvY2F0aW9uKCk7CiAgICAgICAgIGlmIChleHBlY3RlZExheW91dExvY2F0aW9uID09
IGluaXRpYWxMYXlvdXRMb2NhdGlvbikgewogICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNW
Rywgc3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwgJnJlbmRl
cmVyIDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpLmNoYXJhY3RlcnMoKSA8PCAiKSIK
LSAgICAgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgp
IG9iamVjdEJvdW5kaW5nQm94IC8gbGF5b3V0TG9jYXRpb24gYXJlIGluIHN5bmMuIik7CisgICAg
ICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koKSBjdXJy
ZW50U1ZHTGF5b3V0TG9jYXRpb24gLyBub21pbmFsU1ZHTGF5b3V0TG9jYXRpb24gYXJlIGluIHN5
bmMuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU1ZH
LCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJMYXlvdXQgcmVuZGVyZXIgIiA8PCAmcmVuZGVy
ZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJOYW1lKCkuY2hhcmFjdGVycygpIDw8ICIpIgot
ICAgICAgICAgICAgICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkg
b2JqZWN0Qm91bmRpbmdCb3ggLyBsYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlvbGF0ZWQgLS0g
b3V0IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKKyAgICAgICAgICAgICAgICA8PCAi
IC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIGN1cnJlbnRTVkdMYXlvdXRMb2Nh
dGlvbiAvIG5vbWluYWxTVkdMYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlvbGF0ZWQgLS0gb3V0
IG9mIHN5bmMgZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKICAgICAgICAgICAgICAgICA8PCAiIGN1
cnJlbnRMYXlvdXRMb2NhdGlvbj0iIDw8IGN1cnJlbnRMYXlvdXRMb2NhdGlvbgogICAgICAgICAg
ICAgICAgIDw8ICIgIChleHBlY3RlZExheW91dExvY2F0aW9uPSIgPDwgZXhwZWN0ZWRMYXlvdXRM
b2NhdGlvbgogICAgICAgICAgICAgICAgIDw8ICIgIT0gaW5pdGlhbExheW91dExvY2F0aW9uPSIg
PDwgaW5pdGlhbExheW91dExvY2F0aW9uIDw8ICIpIgpAQCAtMjI0LDcgKzE4NSw3IEBAIHZvaWQg
U1ZHQ29udGFpbmVyTGF5b3V0Ojp2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKSB7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJl
bmRlcmVyKSkgewogICAgICAgICBpZiAoY2hpbGQuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY2hpbGQpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVy
TGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91
dC5oCmluZGV4IGVjMTMwOTM1MTI2Y2Y3ZWNlMTU5OTkyYThkYjcxYzExNjczMDI2ZTcuLjUzNDQw
MWNjZDRmYjhjOGVmYzIyNTc4ZmFkYmYwNjFkMWYyZmU4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaApAQCAtNDAsNyArNDAsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVy
KCk7CiAKLSAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNv
bnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRMb2NhdGlv
bkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICBzdGF0aWMg
Ym9vbCB0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCogYW5jZXN0b3Ip
OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1
c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAppbmRleCBm
MmMwNzZmN2I3NzJkMTE1ZTRlZWY2YTgwNmZiYWJiMjVmNTVmZTkzLi44NjliMTlhNmI3ODk3MTkz
Y2Q0MzhiYTgyMGZhM2VhOTgxZDQzMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVz
dGVyLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0z
NjQsMTMgKzM2NSwyOSBAQCB2b2lkIEFkanVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5jZQogICAgIGVsc2UKICAgICAg
ICAgc3R5bGUuc2V0VXNlZFpJbmRleChzdHlsZS5zcGVjaWZpZWRaSW5kZXgoKSk7CiAKKyAgICAv
LyBGb3IgU1ZHIGNvbXBhdGliaWxpdHkgcHVycG9zZXMgd2UgaGF2ZSB0byBjb25zaWRlciB0aGUg
J2FuaW1hdGVkTG9jYWxUcmFuc2Zvcm0nIGJlc2lkZXMgdGhlIFJlbmRlclN0eWxlIHRvIHF1ZXJ5
CisgICAgLy8gaWYgYW4gZWxlbWVudCBoYXMgYSB0cmFuc2Zvcm0uIFNWRyB0cmFuc2Zvcm1zIGFy
ZSBub3Qgc3RvcmVkIG9uIHRoZSBSZW5kZXJTdHlsZSwgYW5kIHRodXMgd2UgbmVlZCBhIHNwZWNp
YWwgY2FzZSBoZXJlLgorICAgIGF1dG8gaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5ID0gW10o
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7CisgICAg
ICAgIGlmIChzdHlsZS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
ICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkuc2V0dGluZ3MoKS5sYXllckJh
c2VkU1ZHRW5naW5lRW5hYmxlZCgpICYmIGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCkp
CisgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKmVsZW1l
bnQpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCk7CisjZWxzZQorICAgICAg
ICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKwogICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSByb290IGVs
ZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVudHMKICAgICAvLyBjYXNl
cyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5pdCBl
bmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAogICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4gYmV0
d2VlbiB0aGVtLiBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBz
cGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCiAgICAgaWYgKHN0eWxlLmhhc0F1
dG9Vc2VkWkluZGV4KCkpIHsKICAgICAgICAgaWYgKChtX2VsZW1lbnQgJiYgbV9kb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQoKSA9PSBtX2VsZW1lbnQpCiAgICAgICAgICAgICB8fCBzdHlsZS5oYXNP
cGFjaXR5KCkKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0
eSgpCisgICAgICAgICAgICB8fCBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5bGUsIG1f
ZWxlbWVudCkKICAgICAgICAgICAgIHx8IHN0eWxlLmhhc01hc2soKQogICAgICAgICAgICAgfHwg
c3R5bGUuY2xpcFBhdGgoKQogICAgICAgICAgICAgfHwgc3R5bGUuYm94UmVmbGVjdCgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>