<?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>209635</bug_id>
          
          <creation_ts>2020-03-26 17:38:15 -0700</creation_ts>
          <short_desc>Hovering over countries at https://covidinc.io/ shows bizarre rendering artifacts</short_desc>
          <delta_ts>2020-08-13 12:23:30 -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>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=209679</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=215458</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <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>krit</cc>
    
    <cc>pdr</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>1634665</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-26 17:38:15 -0700</bug_when>
    <thetext>Hovering over countries at https://covidinc.io/ shows bizarre rendering artifacts

Steps To Reproduce:
1. https://covidinc.io/ 
2. Hover over a country.

The &quot;topo map&quot; image is corrupted. Putting the window into the background (therefore changing the tiling) also affects it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634666</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-26 17:38:38 -0700</bug_when>
    <thetext>rdar://problem/60935010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634668</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-26 17:39:15 -0700</bug_when>
    <thetext>We’re clipping via:

  * frame #0: 0x000000014bef76ba WebCore`WebCore::RenderSVGResourceClipper::pathOnlyClipping(this=0x000000016aed3530, context=0x00007ffee33d59a8, animatedLocalTransform=0x00007ffee33d3750, objectBoundingBox={ x = 0.0, y = 0.0, width = 1431.0, height = 0.0 }) at RenderSVGResourceClipper.cpp:108:20
    frame #1: 0x000000014bef7267 WebCore`WebCore::RenderSVGResourceClipper::applyClippingToContext(this=0x000000016aed3530, renderer=0x000000016aed7960, objectBoundingBox={ x = 0.0, y = 0.0, width = 1431.0, height = 0.0 }, repaintRect={ x = 1024.0, y = 1024.0, width = 407.0, height = 10.0 }, context=0x00007ffee33d59a8) at RenderSVGResourceClipper.cpp:136:41
    frame #2: 0x000000014bc9c185 WebCore`WebCore::RenderLayer::setupClipPath(this=0x000000016b3d9000, context=0x00007ffee33d59a8, paintingInfo=0x00007ffee33d4620, offsetFromRoot={ width = 0px (0), height = 0px (0) }, rootRelativeBounds={ x = 183.609px (11751), y = 236.156px (15114), width = 1207.98px (77311), height = 872.859px (55863) }, rootRelativeBoundsComputed=0x00007ffee33d3e57) at RenderLayer.cpp:4504:70
    frame #3: 0x000000014bc9a86d WebCore`WebCore::RenderLayer::paintLayerContents(this=0x000000016b3d9000, context=0x00007ffee33d59a8, paintingInfo=0x00007ffee33d4620, paintFlags={ size = 2 }) at RenderLayer.cpp:4623:23
    frame #4: 0x000000014bc9a2b4 WebCore`WebCore::RenderLayer::paintLayerContentsAndReflection(this=0x000000016b3d9000, context=0x00007ffee33d59a8, paintingInfo=0x00007ffee33d4620, paintFlags={ size = 2 }) at RenderLayer.cpp:4416:5
    frame #5: 0x000000014bc9926b WebCore`WebCore::RenderLayer::paintLayerWithEffects(this=0x000000016b3d9000, context=0x00007ffee33d59a8, paintingInfo=0x00007ffee33d4620, paintFlags={ size = 2 }) at RenderLayer.cpp:4398:5

but bail here:

        // Fall back to masking if there is more than one clipping path.
        if (!clipPath.isEmpty())
            return false;

Not sure why, we can build a path with multiple subpaths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634685</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-26 18:35:00 -0700</bug_when>
    <thetext>The bug is that RenderSVGResourceClipper::applyClippingToContext() caches clipperMaskImage but doesn&apos;t account for the fact that the repaint rect can change on each invocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634735</commentid>
    <comment_count>4</comment_count>
      <attachid>394703</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-26 21:51:08 -0700</bug_when>
    <thetext>Created attachment 394703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634892</commentid>
    <comment_count>5</comment_count>
      <attachid>394732</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-27 11:08:46 -0700</bug_when>
    <thetext>Created attachment 394732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634953</commentid>
    <comment_count>6</comment_count>
      <attachid>394732</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-27 12:34:08 -0700</bug_when>
    <thetext>Comment on attachment 394732
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        when using a image buffer mask. However, it created and rendered into this image buffer

However, it is created...?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4497
&gt; +            auto referenceBox = snapRectToDevicePixels(rootRelativeBounds.value(), renderer().document().deviceScaleFactor());

The description mentioned the ImageBuffer wrong caching so I am confused about this change. Is this cleanup or it is part of this fix?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:131
&gt;  bool RenderSVGResourceClipper::applyClippingToContext(RenderElement&amp; renderer, const FloatRect&amp; objectBoundingBox, const FloatRect&amp; repaintRect, GraphicsContext&amp; context)

I think we can get rid of repaintRect. It is only used in the LOG_WITH_STREAM statement and in the if-statement which recreates the ImageBuffer. I think the caller should avoid calling this function if the repaintRect.isEmpty().

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:146
&gt; +    auto canUseExistingImageBuffer = [&amp;]() {
&gt; +        return clipperData.imageBuffer &amp;&amp; clipperData.objectBoundingBox == objectBoundingBox &amp;&amp; clipperData.absoluteTransform == absoluteTransform;
&gt; +    };

Should not be this a function of ClipperData?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:156
&gt; +        clipperData.imageBuffer = WTFMove(maskImage);
&gt; +        clipperData.objectBoundingBox = objectBoundingBox;
&gt; +        clipperData.absoluteTransform = absoluteTransform;

Can&apos;t this code be a constructor of ClipperData?
    clipperData = { WTFMove(maskImage), objectBoundingBox, absoluteTransform };

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:177
&gt; +            clipperData.imageBuffer = nullptr;

Should not we clear everything, i.e. clipperData = { };?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:187
&gt; +bool RenderSVGResourceClipper::drawContentIntoMaskImage(ImageBuffer&amp; maskImageBuffer, const FloatRect&amp; objectBoundingBox)

I think maskImageBuffer should be const ImageBuffer&amp;.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:239
&gt; -        SVGRenderingContext::renderSubtreeToImageBuffer(clipperMaskImage.get(), isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
&gt; +        SVGRenderingContext::renderSubtreeToImageBuffer(&amp;maskImageBuffer, isUseElement ? *child.renderer() : *renderer, maskContentTransformation);

Can&apos;t we just pass the maskImageBuffer-&gt;context() instead of maskImageBuffer since renderSubtreeToImageBuffer() is using the ImageBuffer to get its context()?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.h:33
&gt; -typedef std::unique_ptr&lt;ImageBuffer&gt; ClipperMaskImage;
&gt; +using ClipperMaskImage = std::unique_ptr&lt;ImageBuffer&gt;;

Do we still need this? It seems you replaced all the reference to ClipperMaskImage by either ImageBuffer or ClipperData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634969</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-27 13:15:57 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #6)
&gt; Comment on attachment 394732 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=394732&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        when using a image buffer mask. However, it created and rendered into this image buffer
&gt; 
&gt; However, it is created...?

it =&gt; the function.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:4497
&gt; &gt; +            auto referenceBox = snapRectToDevicePixels(rootRelativeBounds.value(), renderer().document().deviceScaleFactor());
&gt; 
&gt; The description mentioned the ImageBuffer wrong caching so I am confused
&gt; about this change. Is this cleanup or it is part of this fix?

The last paragraph of the changelog explains this.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:131
&gt; &gt;  bool RenderSVGResourceClipper::applyClippingToContext(RenderElement&amp; renderer, const FloatRect&amp; objectBoundingBox, const FloatRect&amp; repaintRect, GraphicsContext&amp; context)
&gt; 
&gt; I think we can get rid of repaintRect. It is only used in the
&gt; LOG_WITH_STREAM statement and in the if-statement which recreates the
&gt; ImageBuffer. I think the caller should avoid calling this function if the
&gt; repaintRect.isEmpty().
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:146
&gt; &gt; +    auto canUseExistingImageBuffer = [&amp;]() {
&gt; &gt; +        return clipperData.imageBuffer &amp;&amp; clipperData.objectBoundingBox == objectBoundingBox &amp;&amp; clipperData.absoluteTransform == absoluteTransform;
&gt; &gt; +    };
&gt; 
&gt; Should not be this a function of ClipperData?
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:156
&gt; &gt; +        clipperData.imageBuffer = WTFMove(maskImage);
&gt; &gt; +        clipperData.objectBoundingBox = objectBoundingBox;
&gt; &gt; +        clipperData.absoluteTransform = absoluteTransform;
&gt; 
&gt; Can&apos;t this code be a constructor of ClipperData?
&gt;     clipperData = { WTFMove(maskImage), objectBoundingBox, absoluteTransform
&gt; };
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:177
&gt; &gt; +            clipperData.imageBuffer = nullptr;
&gt; 
&gt; Should not we clear everything, i.e. clipperData = { };?
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:187
&gt; &gt; +bool RenderSVGResourceClipper::drawContentIntoMaskImage(ImageBuffer&amp; maskImageBuffer, const FloatRect&amp; objectBoundingBox)
&gt; 
&gt; I think maskImageBuffer should be const ImageBuffer&amp;.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:239
&gt; &gt; -        SVGRenderingContext::renderSubtreeToImageBuffer(clipperMaskImage.get(), isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
&gt; &gt; +        SVGRenderingContext::renderSubtreeToImageBuffer(&amp;maskImageBuffer, isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
&gt; 
&gt; Can&apos;t we just pass the maskImageBuffer-&gt;context() instead of maskImageBuffer
&gt; since renderSubtreeToImageBuffer() is using the ImageBuffer to get its
&gt; context()?
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.h:33
&gt; &gt; -typedef std::unique_ptr&lt;ImageBuffer&gt; ClipperMaskImage;
&gt; &gt; +using ClipperMaskImage = std::unique_ptr&lt;ImageBuffer&gt;;
&gt; 
&gt; Do we still need this? It seems you replaced all the reference to
&gt; ClipperMaskImage by either ImageBuffer or ClipperData.

I will fix all of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634979</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-27 13:40:17 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #6)
&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:239
&gt; &gt; -        SVGRenderingContext::renderSubtreeToImageBuffer(clipperMaskImage.get(), isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
&gt; &gt; +        SVGRenderingContext::renderSubtreeToImageBuffer(&amp;maskImageBuffer, isUseElement ? *child.renderer() : *renderer, maskContentTransformation);

Will clean up via bug 209679.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634988</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-27 13:58:02 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/259137/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394703</attachid>
            <date>2020-03-26 21:51:08 -0700</date>
            <delta_ts>2020-03-27 11:08:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209635-20200326215108.patch</filename>
            <type>text/plain</type>
            <size>16930</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgzNzNmNmUwNzllOWJh
ZmJlZmMxNDNjNWIzYzlhNDQ1MmQ1Mzg1Yy4uODUzYzdlMTdhNThjYzM0NWZlYWQ4ZGZjZjZmMDEz
MzA4YmFkN2ZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAzLTI2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEhvdmVyaW5nIG92
ZXIgY291bnRyaWVzIGF0IGh0dHBzOi8vY292aWRpbmMuaW8vIHNob3dzIGJpemFycmUgcmVuZGVy
aW5nIGFydGlmYWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA5NjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KCkg
Y2FjaGVkIGFuIEltYWdlQnVmZmVyIHBlciBSZW5kZXJPYmplY3QKKyAgICAgICAgd2hlbiB1c2lu
ZyBhIGltYWdlIGJ1ZmZlciBtYXNrLiBIb3dldmVyLCBpdCBjcmVhdGVkIGFuZCByZW5kZXJlZCBp
bnRvIHRoaXMgaW1hZ2UgYnVmZmVyCisgICAgICAgIHVzaW5nIHJlcGFpbnRSZWN0LCB3aGljaCBj
YW4gY2hhbmdlIGJldHdlZW4gaW52b2NhdGlvbnMuIFBhaW50aW5nIHdpdGggZGlmZmVyZW50IHJl
cGFpbnRSZWN0cworICAgICAgICBpcyB2ZXJ5IGNvbW1vbiB3aGVuIHJlbmRlcmluZyBpbnRvIHBh
Z2UgdGlsZXMuCisKKyAgICAgICAgVGhlIGJ1ZmZlciBjYW4gb25seSBiZSByZS11c2VkIGlmIHRo
ZSBpbnB1dHMgdXNlZCB0byBjcmVhdGUgdGhlIGJ1ZmZlciAob2JqZWN0Qm91bmRpbmdCb3gsIGFi
c29sdXRlVHJhbnNmb3JtKQorICAgICAgICBhcmUgdGhlIHNhbWUsIHNvIHN0b3JlIHRob3NlIGFu
ZCBjb21wYXJlIHRoZW0gd2hlbiBkZXRlcm1pbmluZyB3aGVuIHRvIHVzZSB0aGUgY2FjaGVkIGJ1
ZmZlciwgYW5kCisgICAgICAgIGRvbid0IHVzZSByZXBhaW50UmVjdCB3aGVuIHNldHRpbmcgdXAg
dGhlIGJ1ZmZlci4KKworICAgICAgICBUZXN0OiBzdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNsaXBw
ZXItbXVsdGlwbGUtcmVwYWludHMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFkZFJlbmRlcmVyVG9DbGlwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6cmVzb3VyY2VCb3VuZGluZ0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaDoKKwogMjAyMC0wMy0yNiAgU2lodWkgTGl1ICA8
c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNTkwMzQpOiBhY2Nl
c3MgdG8gbnVsbCBVbmlxdWVJREJEYXRhYmFzZSBpbiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b246On5VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4
IGFiZGJmNDY0YWVjNTFiYTI5ZjlhZGIyZGQyZWU5ODQ5OGE5ZmVlM2UuLmU3NzBlOGYwZTI3MjYw
ZDRiYWI3YzlmNDM3ZjdlMjA4NzA2NTdiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJj
ZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Miw3ICs1NCw3IEBAIFJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlcjo6flJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcigpID0gZGVmYXVsdDsKIAogdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJr
Rm9ySW52YWxpZGF0aW9uKQogewotICAgIG1fY2xpcEJvdW5kYXJpZXMgPSBGbG9hdFJlY3QoKTsK
KyAgICBtX2NsaXBCb3VuZGFyaWVzID0geyB9OwogICAgIG1fY2xpcHBlci5jbGVhcigpOwogCiAg
ICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExh
eW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsK
QEAgLTEyOCwyMyArMTMwLDMyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRo
T25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKIAogYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgcmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBD
bGlwcGVyTWFza0ltYWdlJiBjbGlwcGVyTWFza0ltYWdlID0gYWRkUmVuZGVyZXJUb0NsaXBwZXIo
cmVuZGVyZXIpOwotICAgIGJvb2wgc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSA9ICFjbGlw
cGVyTWFza0ltYWdlOworICAgIENsaXBwZXJEYXRhJiBjbGlwcGVyRGF0YSA9IGFkZFJlbmRlcmVy
VG9DbGlwcGVyKHJlbmRlcmVyKTsKKyAgICAKKyAgICBMT0dfV0lUSF9TVFJFQU0oU1ZHLCBzdHJl
YW0gPDwgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciAiIDw8IHRoaXMgPDwgIiBhcHBseUNsaXBw
aW5nVG9Db250ZXh0OiByZW5kZXJlciAiIDw8ICZyZW5kZXJlciA8PCAiIG9iamVjdEJvdW5kaW5n
Qm94ICIgPDwgb2JqZWN0Qm91bmRpbmdCb3ggPDwgIiByZXBhaW50UmVjdCAiIDw8IHJlcGFpbnRS
ZWN0IDw8ICIgKGV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IGNsaXBwZXJEYXRhLmltYWdlQnVm
ZmVyLmdldCgpIDw8ICIpIik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSA9IGNsaXBQYXRoRWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKIAot
ICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmIHBhdGhPbmx5Q2xpcHBpbmco
Y29udGV4dCwgYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSwgb2JqZWN0Qm91bmRpbmdCb3gpKQorICAg
IGlmICghY2xpcHBlckRhdGEuaW1hZ2VCdWZmZXIgJiYgcGF0aE9ubHlDbGlwcGluZyhjb250ZXh0
LCBhbmltYXRlZExvY2FsVHJhbnNmb3JtLCBvYmplY3RCb3VuZGluZ0JveCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3Jk
aW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogCi0gICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNr
SW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgIGF1dG8gY2FuVXNlRXhpc3Rp
bmdJbWFnZUJ1ZmZlciA9IFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIGNsaXBwZXJEYXRhLmltYWdl
QnVmZmVyICYmIGNsaXBwZXJEYXRhLm9iamVjdEJvdW5kaW5nQm94ID09IG9iamVjdEJvdW5kaW5n
Qm94ICYmIGNsaXBwZXJEYXRhLmFic29sdXRlVHJhbnNmb3JtID09IGFic29sdXRlVHJhbnNmb3Jt
OworICAgIH07CisgICAgCisgICAgaWYgKCFjYW5Vc2VFeGlzdGluZ0ltYWdlQnVmZmVyKCkgJiYg
IXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhp
cyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRo
b3VnaC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwotICAgICAg
ICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCisgICAgICAgIGF1dG8gbWFza0ltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIob2JqZWN0Qm91bmRpbmdCb3gsIGFic29s
dXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAmY29udGV4dCk7CisgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCYgbWFza0NvbnRleHQgPSBjbGlw
cGVyTWFza0ltYWdlLT5jb250ZXh0KCk7CisgICAgICAgIGNsaXBwZXJEYXRhLmltYWdlQnVmZmVy
ID0gV1RGTW92ZShtYXNrSW1hZ2UpOworICAgICAgICBjbGlwcGVyRGF0YS5vYmplY3RCb3VuZGlu
Z0JveCA9IG9iamVjdEJvdW5kaW5nQm94OworICAgICAgICBjbGlwcGVyRGF0YS5hYnNvbHV0ZVRy
YW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYg
bWFza0NvbnRleHQgPSBjbGlwcGVyRGF0YS5pbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgICAg
ICBtYXNrQ29udGV4dC5jb25jYXRDVE0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk7CiAKICAgICAg
ICAgLy8gY2xpcFBhdGggY2FuIGFsc28gYmUgY2xpcHBlZCBieSBhbm90aGVyIGNsaXBQYXRoLgpA
QCAtMTU0LDMwICsxNjUsMjggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5
Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKICAgICAgICAgaWYg
KHJlc291cmNlcyAmJiAoY2xpcHBlciA9IHJlc291cmNlcy0+Y2xpcHBlcigpKSkgewogICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKG1hc2tDb250ZXh0KTsK
IAotICAgICAgICAgICAgaWYgKCFjbGlwcGVyLT5hcHBseUNsaXBwaW5nVG9Db250ZXh0KCp0aGlz
LCBvYmplY3RCb3VuZGluZ0JveCwgcmVwYWludFJlY3QsIG1hc2tDb250ZXh0KSkKKyAgICAgICAg
ICAgIGlmICghY2xpcHBlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dCgqdGhpcywgb2JqZWN0Qm91
bmRpbmdCb3gsIG9iamVjdEJvdW5kaW5nQm94LCBtYXNrQ29udGV4dCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdWNjZWVkZWQgPSBkcmF3Q29udGVudElu
dG9NYXNrSW1hZ2UoY2xpcHBlck1hc2tJbWFnZSwgb2JqZWN0Qm91bmRpbmdCb3gpOworICAgICAg
ICAgICAgc3VjY2VlZGVkID0gZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKCpjbGlwcGVyRGF0YS5p
bWFnZUJ1ZmZlciwgb2JqZWN0Qm91bmRpbmdCb3gpOwogICAgICAgICAgICAgLy8gVGhlIGNvbnRl
eHQgcmVzdG9yZSBhcHBsaWVzIHRoZSBjbGlwcGluZyBvbiBub24tQ0cgcGxhdGZvcm1zLgogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGRyYXdDb250ZW50SW50b01hc2tJ
bWFnZShjbGlwcGVyTWFza0ltYWdlLCBvYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBz
dWNjZWVkZWQgPSBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoKmNsaXBwZXJEYXRhLmltYWdlQnVm
ZmVyLCBvYmplY3RCb3VuZGluZ0JveCk7CiAKICAgICAgICAgaWYgKCFzdWNjZWVkZWQpCi0gICAg
ICAgICAgICBjbGlwcGVyTWFza0ltYWdlLnJlc2V0KCk7CisgICAgICAgICAgICBjbGlwcGVyRGF0
YS5pbWFnZUJ1ZmZlciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFjbGlwcGVyTWFza0lt
YWdlKQorICAgIGlmICghY2xpcHBlckRhdGEuaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRl
eHQsIGFic29sdXRlVHJhbnNmb3JtLCByZXBhaW50UmVjdCwgY2xpcHBlck1hc2tJbWFnZSwgc2hv
dWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG9iamVjdEJvdW5kaW5n
Qm94LCBjbGlwcGVyRGF0YS5pbWFnZUJ1ZmZlciwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1h
Z2UoY29uc3QgQ2xpcHBlck1hc2tJbWFnZSYgY2xpcHBlck1hc2tJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpk
cmF3Q29udGVudEludG9NYXNrSW1hZ2UoSW1hZ2VCdWZmZXImIG1hc2tJbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKIHsKLSAgICBBU1NFUlQoY2xpcHBlck1h
c2tJbWFnZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIG1hc2tDb250ZXh0ID0gY2xpcHBlck1h
c2tJbWFnZS0+Y29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCYgbWFza0NvbnRleHQgPSBt
YXNrSW1hZ2VCdWZmZXIuY29udGV4dCgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250
ZW50VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKGNsaXBQYXRoRWxlbWVudCgpLmNsaXBQYXRoVW5p
dHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsK
QEAgLTIyNyw3ICsyMzYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0Nv
bnRlbnRJbnRvTWFza0ltYWdlKGNvbnN0IENsaXBwZXJNYXNrSW1hZ2UmCiAgICAgICAgIC8vIElu
IHRoZSBjYXNlIG9mIGEgPHVzZT4gZWxlbWVudCwgd2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBh
Ym92ZSwgdG8gcmV0cmlldmUgaXRzIGNsaXBSdWxlLgogICAgICAgICAvLyBXZSBoYXZlIHRvIHBh
c3MgdGhlIDx1c2U+IHJlbmRlcmVyIGl0c2VsZiB0byByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZl
cigpIHRvIGFwcGx5IGl0J3MgeC95L3RyYW5zZm9ybS9ldGMuIHZhbHVlcyB3aGVuIHJlbmRlcmlu
Zy4KICAgICAgICAgLy8gU28gaWYgaXNVc2VFbGVtZW50IGlzIHRydWUsIHJlZmV0Y2ggdGhlIGNo
aWxkTm9kZS0+cmVuZGVyZXIoKSwgYXMgcmVuZGVyZXIgZ290IG92ZXJyaWRkZW4gYWJvdmUuCi0g
ICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKGNs
aXBwZXJNYXNrSW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/ICpjaGlsZC5yZW5kZXJlcigpIDog
KnJlbmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoJm1hc2tJbWFnZUJ1ZmZlciwg
aXNVc2VFbGVtZW50ID8gKmNoaWxkLnJlbmRlcmVyKCkgOiAqcmVuZGVyZXIsIG1hc2tDb250ZW50
VHJhbnNmb3JtYXRpb24pOwogICAgIH0KIAogICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5zZXRQYWlu
dEJlaGF2aW9yKG9sZEJlaGF2aW9yKTsKQEAgLTI1MSw5ICsyNjAsOSBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAg
bV9jbGlwQm91bmRhcmllcyA9IGNsaXBQYXRoRWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKS5tYXBSZWN0KG1fY2xpcEJvdW5kYXJpZXMpOwogfQogCi1DbGlwcGVyTWFza0ltYWdlJiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFkZFJlbmRlcmVyVG9DbGlwcGVyKGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0KQorUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpDbGlwcGVyRGF0YSYg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphZGRSZW5kZXJlclRvQ2xpcHBlcihjb25zdCBSZW5k
ZXJPYmplY3QmIG9iamVjdCkKIHsKLSAgICByZXR1cm4gbV9jbGlwcGVyLmFkZCgmb2JqZWN0LCBD
bGlwcGVyTWFza0ltYWdlKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gbV9jbGlwcGVy
LmFkZCgmb2JqZWN0LCBDbGlwcGVyRGF0YSgpKS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRS
ZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0UG9pbnQpCkBA
IC0zMDEsNyArMzEwLDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamUKIHsKICAgICAvLyBSZXNv
dXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIHRoZSBib3VuZGluZ0JveCBvZiB0
aGUgb2JqZWN0LgogICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICBhZGRSZW5k
ZXJlclRvQ2xpcHBlcihvYmplY3QpOworICAgICAgICBhZGRSZW5kZXJlclRvQ2xpcHBlcihvYmpl
Y3QpOyAvLyBGb3Igc2VsZk5lZWRzQ2xpZW50SW52YWxpZGF0aW9uKCkuCiAgICAgICAgIHJldHVy
biBvYmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaApp
bmRleCA1NTZjYzFkYTQwYzZkYzg1ODU1ZTc3YTAxZTA0MDM3NGNkZjNjYmY3Li4wODQyMGJmOTI5
OTJkOTBmODJjZTUyMzI2YTQ2YTliNDkzZmMwZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKQEAgLTMwLDcg
KzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSW1hZ2VCdWZmZXI7CiAKLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBD
bGlwcGVyTWFza0ltYWdlOwordXNpbmcgQ2xpcHBlck1hc2tJbWFnZSA9IHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj47CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciBmaW5hbCA6
IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIpOwpAQCAtNjAsMTggKzYwLDI0IEBAIHBy
b3RlY3RlZDoKICAgICBib29sIHNlbGZOZWVkc0NsaWVudEludmFsaWRhdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIChldmVySGFkTGF5b3V0KCkgfHwgbV9jbGlwcGVyLnNpemUoKSkgJiYg
c2VsZk5lZWRzTGF5b3V0KCk7IH0KIAogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQ2xpcHBlckRhdGEg
eworICAgICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICB9OworCiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3Qg
PSBkZWxldGU7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciI7IH0KICAgICBib29sIGlzU1ZHUmVz
b3VyY2VDbGlwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9v
bCBwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIGJvb2wgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KGNvbnN0IENsaXBwZXJNYXNrSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5n
Qm94KTsKKyAgICBib29sIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpOwogICAgIHZvaWQgY2FsY3VsYXRlQ2xp
cENvbnRlbnRSZXBhaW50UmVjdCgpOwotICAgIENsaXBwZXJNYXNrSW1hZ2UmIGFkZFJlbmRlcmVy
VG9DbGlwcGVyKGNvbnN0IFJlbmRlck9iamVjdCYpOworICAgIENsaXBwZXJEYXRhJiBhZGRSZW5k
ZXJlclRvQ2xpcHBlcihjb25zdCBSZW5kZXJPYmplY3QmKTsKIAogICAgIEZsb2F0UmVjdCBtX2Ns
aXBCb3VuZGFyaWVzOwotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgQ2xpcHBlck1h
c2tJbWFnZT4gbV9jbGlwcGVyOworICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgQ2xp
cHBlckRhdGE+IG1fY2xpcHBlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZDZlYTc3NDFmZGUwYzQ5ZjI3
OTNkYzk4ZWI4ZWViMTBkYjlkNzc2Li5iMTJiMWY5MzQxY2Y2YjgxOTA1ODQ0YjEyNzM3MTNhMDBm
YTFjMDA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDMtMjYgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgSG92ZXJpbmcgb3ZlciBjb3VudHJp
ZXMgYXQgaHR0cHM6Ly9jb3ZpZGluYy5pby8gc2hvd3MgYml6YXJyZSByZW5kZXJpbmcgYXJ0aWZh
Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk2
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFJlZiB0ZXN0IHRoYXQgZXhlcmNpc2VzIHRoZSBjb2RlIHBhdGggYnkgcGFpbnRpbmcgaW50
byBhIHRpbGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGxheWVyLgorCisgICAgICAgICogc3ZnL2Ns
aXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLWV4cGVjdGVkLnN2ZzoKKyAgICAgICAg
KiBzdmcvY2xpcC1wYXRoL21hc2stbmVzdGVkLWNsaXAtcGF0aC0wMTAuc3ZnOiBBZGp1c3QgdGhl
IHRlc3QgdG8gYWNjb3VudCBmb3Igc29tZQorICAgICAgICBzY2FsaW5nIGFudGlhbGlhc2luZyBj
aGFuZ2VzICh0aGUgYW50aWFsaWFzaW5nIHdhcyB0aGVyZSBiZWZvcmUsIGl0IGp1c3QgY2hhbmdl
ZCkuCisgICAgICAgICogc3ZnL2NsaXAtcGF0aC9yZXNvdXJjZS1jbGlwcGVyLW11bHRpcGxlLXJl
cGFpbnRzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jbGlwLXBhdGgvcmVz
b3VyY2UtY2xpcHBlci1tdWx0aXBsZS1yZXBhaW50cy5odG1sOiBBZGRlZC4KKwogMjAyMC0wMy0y
NiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVh
biB1cCBmYXN0L3Njcm9sbGluZy9sYXRjaGluZyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3ZnL2NsaXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLWV4cGVjdGVkLnN2ZyBi
L0xheW91dFRlc3RzL3N2Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xpcC1wYXRoLTAxMC1leHBl
Y3RlZC5zdmcKaW5kZXggZGZiYzRkNzg2ZTI5MTRjMjFjYWNiMjYwYmU3ZmM3NmY1ZTFhMzNiYi4u
ZjZhYjYyNmQ1NmZmMmM4MGExNGIzMzMxZDA1YzMyN2JhYTMxNGNlYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLWV4cGVjdGVk
LnN2ZworKysgYi9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL21hc2stbmVzdGVkLWNsaXAtcGF0
aC0wMTAtZXhwZWN0ZWQuc3ZnCkBAIC0xLDQgKzEsNCBAQAogPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAwMCIgaGVpZ2h0PSI0MDAiPgogICAgIDxyZWN0
IHg9Ijk5IiB3aWR0aD0iMTAxIiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KLSAgICA8cmVj
dCB4PSIyOTkiIHdpZHRoPSIxMDEiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIvPgorICAgIDxy
ZWN0IHg9IjI5NSIgd2lkdGg9IjEwNSIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+CiA8L3N2
Zz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xp
cC1wYXRoLTAxMC5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL21hc2stbmVzdGVkLWNs
aXAtcGF0aC0wMTAuc3ZnCmluZGV4IGMxZGIyM2JhN2ZlNjhjYmQyNzEzZjgyYjBiYWQyMmEwMjc2
YWI2NTQuLmUzNGZhZGEzMDVhNjMwOWYzODFkZDY3YmE4YWE4NTRiODNkNDFkZGUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N2Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xpcC1wYXRoLTAxMC5z
dmcKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgt
MDEwLnN2ZwpAQCAtMjgsNiArMjgsNiBAQAogCiAgIDxnIG1hc2s9InVybCgjY3JvcCkiIHRyYW5z
Zm9ybT0idHJhbnNsYXRlKDEwMCwgMCkiPgogICAgIDxyZWN0IHdpZHRoPSIxMDAwMCIgaGVpZ2h0
PSI0MDAiIGZpbGw9InJlZCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXAyKSIvPgotICAgIDxyZWN0IHg9
IjE5OSIgd2lkdGg9IjEwMSIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+CisgICAgPHJlY3Qg
eD0iMTk1IiB3aWR0aD0iMTA1IiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KICAgPC9nPgog
PC9zdmc+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNs
aXBwZXItbXVsdGlwbGUtcmVwYWludHMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3N2Zy9j
bGlwLXBhdGgvcmVzb3VyY2UtY2xpcHBlci1tdWx0aXBsZS1yZXBhaW50cy1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM2ZTE5ZWM3ZTZhN2ZiMDc0NWZjMTdjYWRjMDlkZmE0ZDI5YWI1OWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNsaXBw
ZXItbXVsdGlwbGUtcmVwYWludHMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICAuY29udGFp
bmVyIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgIHdpZHRo
OiA2MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogNDAwcHg7CisgICAgICAgICAgICBib3JkZXI6
IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICAg
IH0KKyAgICAgICAgLmNvbXBvc2l0ZWQgeworICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgICAgICAgICAgbGVmdDogLTIwMHB4OworICAgICAgICAgICAgd2lkdGg6IDgwMHB4Owor
ICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xh
dGVaKDFweCk7CisgICAgICAgIH0KKyAgICAgICAgI2NsaXBwZWQgeworICAgICAgICAgICAgbWFy
Z2luLWxlZnQ6IDIwMHB4OworICAgICAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICAgICAg
aGVpZ2h0OiA0MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAg
ICAgICAgICAgY2xpcC1wYXRoOiB1cmwoI2JveGVzKTsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8
ZGl2IGNsYXNzPSJjb21wb3NpdGVkIj4KKyAgICAgICAgICAgIDxkaXYgaWQ9ImNsaXBwZWQiPjwv
ZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGxpbmsiIHhtbG5zOmV2PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiIHN0eWxl
PSJvdmVyZmxvdzogaGlkZGVuOyI+CisgICAgICAgIDxkZWZzPgorICAgICAgICA8Y2xpcFBhdGgg
aWQ9ImJveGVzIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjgsIDAsIDAsIDEuOCwgMjAsIDMwKSI+Cisg
ICAgICAgICAgICA8cGF0aCBkPSJNNTAsNTAgTDE1MCw1MCBMMTUwLDE1MCBMNTAsMTUwIHoiIGZp
bGw9InRyYW5zcGFyZW50Ij48L3BhdGg+CisgICAgICAgICAgICA8cGF0aCBkPSJNMTU1LDUwIEwy
NTUsNTAgTDI1NSwxNTAgTDE1NSwxNTAgeiIgZmlsbD0idHJhbnNwYXJlbnQiPjwvcGF0aD4KKyAg
ICAgICAgPC9jbGlwUGF0aD4KKyAgICA8L2RlZnM+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jbGlwLXBhdGgvcmVzb3VyY2UtY2xpcHBlci1t
dWx0aXBsZS1yZXBhaW50cy5odG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9yZXNvdXJj
ZS1jbGlwcGVyLW11bHRpcGxlLXJlcGFpbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNjZGVkMjViYWU4
Y2EzZmJhMGVmN2QyM2EzZDdlZTE3MmQ0MjRhYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jbGlwLXBhdGgvcmVzb3VyY2UtY2xpcHBlci1tdWx0aXBsZS1yZXBhaW50cy5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c3R5bGU+CisgICAgICAgIC5jb250YWluZXIgeworICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgICAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiA0MDBw
eDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgb3Zl
cmZsb3c6IGhpZGRlbjsKKyAgICAgICAgfQorICAgICAgICAvKiBUaGlzIGNyZWF0ZXMgYSB0aWxl
ZCBsYXllciBzbyB0aGUgY2xpcHBlZCBlbGVtZW50IGlzIGRyYXduIGFjcm9zcyB0d28gdGlsZXMg
Ki8KKyAgICAgICAgLmNvbXBvc2l0ZWQgeworICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgICAgICAgICAgbGVmdDogLTIwMHB4OworICAgICAgICAgICAgd2lkdGg6IDY2MDBweDsK
KyAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNs
YXRlWigxcHgpOworICAgICAgICB9CisgICAgICAgICNjbGlwcGVkIHsKKyAgICAgICAgICAgIG1h
cmdpbi1sZWZ0OiAyMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgICAg
IGhlaWdodDogNDAwcHg7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAg
ICAgICAgICAgIGNsaXAtcGF0aDogdXJsKCNib3hlcyk7CisgICAgICAgIH0KKyAgICA8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAg
PGRpdiBjbGFzcz0iY29tcG9zaXRlZCI+CisgICAgICAgICAgICA8ZGl2IGlkPSJjbGlwcGVkIj48
L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPHN2ZyB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hsaW5rIiB4bWxuczpldj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIiBzdHls
ZT0ib3ZlcmZsb3c6IGhpZGRlbjsiPgorICAgICAgICA8ZGVmcz4KKyAgICAgICAgPGNsaXBQYXRo
IGlkPSJib3hlcyIgdHJhbnNmb3JtPSJtYXRyaXgoMS44LCAwLCAwLCAxLjgsIDIwLCAzMCkiPgor
ICAgICAgICAgICAgPHBhdGggZD0iTTUwLDUwIEwxNTAsNTAgTDE1MCwxNTAgTDUwLDE1MCB6IiBm
aWxsPSJ0cmFuc3BhcmVudCI+PC9wYXRoPgorICAgICAgICAgICAgPHBhdGggZD0iTTE1NSw1MCBM
MjU1LDUwIEwyNTUsMTUwIEwxNTUsMTUwIHoiIGZpbGw9InRyYW5zcGFyZW50Ij48L3BhdGg+Cisg
ICAgICAgIDwvY2xpcFBhdGg+CisgICAgPC9kZWZzPgorPC9zdmc+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394732</attachid>
            <date>2020-03-27 11:08:46 -0700</date>
            <delta_ts>2020-03-27 12:34:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209635-20200327110845.patch</filename>
            <type>text/plain</type>
            <size>20898</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE0NzQ5YmM2Y2ZkMTQx
NTgyNjZlOGEyYmY2ODg0NWNiNWE1MzkyZi4uMWM0ZjQxODdhZDI5ZGUwZjIxNGYwZTE4MDlmNDUy
YzIxZDBjNjIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTAzLTI3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEhvdmVyaW5nIG92
ZXIgY291bnRyaWVzIGF0IGh0dHBzOi8vY292aWRpbmMuaW8vIHNob3dzIGJpemFycmUgcmVuZGVy
aW5nIGFydGlmYWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA5NjM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MDkzNTAxMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoKSBjYWNoZWQgYW4gSW1hZ2VCdWZmZXIg
cGVyIFJlbmRlck9iamVjdAorICAgICAgICB3aGVuIHVzaW5nIGEgaW1hZ2UgYnVmZmVyIG1hc2su
IEhvd2V2ZXIsIGl0IGNyZWF0ZWQgYW5kIHJlbmRlcmVkIGludG8gdGhpcyBpbWFnZSBidWZmZXIK
KyAgICAgICAgdXNpbmcgcmVwYWludFJlY3QsIHdoaWNoIGNhbiBjaGFuZ2UgYmV0d2VlbiBpbnZv
Y2F0aW9ucy4gUGFpbnRpbmcgd2l0aCBkaWZmZXJlbnQgcmVwYWludFJlY3RzCisgICAgICAgIGlz
IHZlcnkgY29tbW9uIHdoZW4gcmVuZGVyaW5nIGludG8gcGFnZSB0aWxlcy4KKworICAgICAgICBU
aGUgYnVmZmVyIGNhbiBvbmx5IGJlIHJlLXVzZWQgaWYgdGhlIGlucHV0cyB1c2VkIHRvIGNyZWF0
ZSB0aGUgYnVmZmVyIChvYmplY3RCb3VuZGluZ0JveCwgYWJzb2x1dGVUcmFuc2Zvcm0pCisgICAg
ICAgIGFyZSB0aGUgc2FtZSwgc28gc3RvcmUgdGhvc2UgYW5kIGNvbXBhcmUgdGhlbSB3aGVuIGRl
dGVybWluaW5nIHdoZW4gdG8gdXNlIHRoZSBjYWNoZWQgYnVmZmVyLCBhbmQKKyAgICAgICAgZG9u
J3QgdXNlIHJlcGFpbnRSZWN0IHdoZW4gc2V0dGluZyB1cCB0aGUgYnVmZmVyLgorCisgICAgICAg
IFRoaXMgcmV2ZWFsZWQgYW5vdGhlciBwcm9ibGVtIHdoZXJlIHJlbmRlcmVycyB3aXRoIHZpc3Vh
bCBvdmVyZmxvdyBjb3VsZCBiZSB0cnVuY2F0ZWQgYnkKKyAgICAgICAgdGhlIGNsaXBwaW5nLCB0
ZXN0ZWQgYnkgaW1wb3J0ZWQvbW96aWxsYS9zdmcvc3ZnLWludGVncmF0aW9uL2NsaXBQYXRoLWh0
bWwtMDMueGh0bWwsIHdoaWNoIG9jY3VycmVkCisgICAgICAgIGJlY2F1c2UgUmVuZGVyTGF5ZXI6
OnNldHVwQ2xpcFBhdGgoKSB1c2VkIHRoZSAnc3ZnUmVmZXJlbmNlQm94JyBmb3IgdGhlIGNsaXBw
aW5nIGJvdW5kcywgd2hpY2gKKyAgICAgICAgaXMgdGhlIGNvbnRlbnQgYm94IG9mIHRoZSByZW5k
ZXJlciBleGNsdWRpbmcgb3ZlcmZsb3cuIEZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBib3VuZHMgb2Yg
dGhlIGxheWVyLAorICAgICAgICB3aGljaCBpbmNsdWRlcyB0aGUgYm91bmRzIG9mIGRlc2NlbmRh
bnRzLgorCisgICAgICAgIFRlc3RzOiBzdmcvY2xpcC1wYXRoL2NsaXAtcGF0aC1vbi1vdmVyZmxv
d2luZy5odG1sCisgICAgICAgICAgICAgICBzdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNsaXBwZXIt
bXVsdGlwbGUtcmVwYWludHMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjph
cHBseUNsaXBwaW5nVG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YWRkUmVuZGVyZXJUb0NsaXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oOgor
CiAyMDIwLTAzLTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBPcHRpb25hbDw+IGZvciBhIGxhemlseS1jb21wdXRlZCBib3VuZHMgcmVjdGFu
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAzM2ZhNjhm
NjgwYmI4YmYyN2Q1ZGM1MjQwMGQ3YTU0MjQzMjMzNTA3Li43ZjgxM2NlNDIwZGM4MGVkNTBhMGM1
ZDY1YjM0NWRkM2E2OGQ5MDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKQEAgLTQ0OTQsMTMgKzQ0OTQsMTIgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBDbGlw
UGF0aChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmYKICAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5nZXRFbGVtZW50
QnlJZChyZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbi0+ZnJhZ21lbnQoKSk7CiAgICAgICAgIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgaXM8UmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyPihlbGVtZW50LT5yZW5kZXJlcigpKSkgewogICAgICAgICAgICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgICAgICAgICBmbG9hdCBkZXZpY2VTYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgcmVmZXJl
bmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRl
cmVyKCksIENTU0JveFR5cGU6OkNvbnRlbnRCb3gsIHBhaW50aW5nT2Zmc2V0RnJvbVJvb3QsIHJv
b3RSZWxhdGl2ZUJvdW5kcy52YWx1ZSgpKSwgZGV2aWNlU2FsZUZhY3Rvcik7Ci0gICAgICAgICAg
ICBGbG9hdFBvaW50IG9mZnNldCB7cmVmZXJlbmNlQm94LmxvY2F0aW9uKCl9OworICAgICAgICAg
ICAgYXV0byByZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJvb3RSZWxhdGl2
ZUJvdW5kcy52YWx1ZSgpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgICAgICAgICBhdXRvIG9mZnNldCA9IHJlZmVyZW5jZUJveC5sb2NhdGlvbigpOwog
ICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0KTsKICAgICAgICAgICAgIEZsb2F0
UmVjdCBzdmdSZWZlcmVuY2VCb3gge0Zsb2F0UG9pbnQoKSwgcmVmZXJlbmNlQm94LnNpemUoKX07
CiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KCplbGVtZW50
LT5yZW5kZXJlcigpKS5hcHBseUNsaXBwaW5nVG9Db250ZXh0KHJlbmRlcmVyKCksIHN2Z1JlZmVy
ZW5jZUJveCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBjb250ZXh0KTsKLSAgICAgICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKEZsb2F0UG9pbnQoLW9mZnNldC54KCksIC1vZmZzZXQueSgp
KSk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb2Zmc2V0KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IGFi
ZGJmNDY0YWVjNTFiYTI5ZjlhZGIyZGQyZWU5ODQ5OGE5ZmVlM2UuLmU3NzBlOGYwZTI3MjYwZDRi
YWI3YzlmNDM3ZjdlMjA4NzA2NTdiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZXND
YWNoZS5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01Miw3ICs1NCw3IEBAIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6flJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcigpID0gZGVmYXVsdDsKIAogdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uKQogewotICAgIG1fY2xpcEJvdW5kYXJpZXMgPSBGbG9hdFJlY3QoKTsKKyAg
ICBtX2NsaXBCb3VuZGFyaWVzID0geyB9OwogICAgIG1fY2xpcHBlci5jbGVhcigpOwogCiAgICAg
bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91
dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKQEAg
LTEyOCwyMyArMTMwLDMyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25s
eUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKIAogYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0
UmVjdCYgcmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBDbGlw
cGVyTWFza0ltYWdlJiBjbGlwcGVyTWFza0ltYWdlID0gYWRkUmVuZGVyZXJUb0NsaXBwZXIocmVu
ZGVyZXIpOwotICAgIGJvb2wgc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSA9ICFjbGlwcGVy
TWFza0ltYWdlOworICAgIENsaXBwZXJEYXRhJiBjbGlwcGVyRGF0YSA9IGFkZFJlbmRlcmVyVG9D
bGlwcGVyKHJlbmRlcmVyKTsKKyAgICAKKyAgICBMT0dfV0lUSF9TVFJFQU0oU1ZHLCBzdHJlYW0g
PDwgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciAiIDw8IHRoaXMgPDwgIiBhcHBseUNsaXBwaW5n
VG9Db250ZXh0OiByZW5kZXJlciAiIDw8ICZyZW5kZXJlciA8PCAiIG9iamVjdEJvdW5kaW5nQm94
ICIgPDwgb2JqZWN0Qm91bmRpbmdCb3ggPDwgIiByZXBhaW50UmVjdCAiIDw8IHJlcGFpbnRSZWN0
IDw8ICIgKGV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IGNsaXBwZXJEYXRhLmltYWdlQnVmZmVy
LmdldCgpIDw8ICIpIik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSA9IGNsaXBQYXRoRWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKIAotICAg
IGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmIHBhdGhPbmx5Q2xpcHBpbmcoY29u
dGV4dCwgYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSwgb2JqZWN0Qm91bmRpbmdCb3gpKQorICAgIGlm
ICghY2xpcHBlckRhdGEuaW1hZ2VCdWZmZXIgJiYgcGF0aE9ubHlDbGlwcGluZyhjb250ZXh0LCBh
bmltYXRlZExvY2FsVHJhbnNmb3JtLCBvYmplY3RCb3VuZGluZ0JveCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5h
dGVTeXN0ZW0ocmVuZGVyZXIpOwogCi0gICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1h
Z2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgIGF1dG8gY2FuVXNlRXhpc3RpbmdJ
bWFnZUJ1ZmZlciA9IFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIGNsaXBwZXJEYXRhLmltYWdlQnVm
ZmVyICYmIGNsaXBwZXJEYXRhLm9iamVjdEJvdW5kaW5nQm94ID09IG9iamVjdEJvdW5kaW5nQm94
ICYmIGNsaXBwZXJEYXRhLmFic29sdXRlVHJhbnNmb3JtID09IGFic29sdXRlVHJhbnNmb3JtOwor
ICAgIH07CisgICAgCisgICAgaWYgKCFjYW5Vc2VFeGlzdGluZ0ltYWdlQnVmZmVyKCkgJiYgIXJl
cGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBp
bWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4g
TWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3Vn
aC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6
U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwotICAgICAgICBp
ZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCisgICAgICAgIGF1dG8gbWFza0ltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIob2JqZWN0Qm91bmRpbmdCb3gsIGFic29sdXRl
VHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCAmY29udGV4dCk7CisgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCYgbWFza0NvbnRleHQgPSBjbGlwcGVy
TWFza0ltYWdlLT5jb250ZXh0KCk7CisgICAgICAgIGNsaXBwZXJEYXRhLmltYWdlQnVmZmVyID0g
V1RGTW92ZShtYXNrSW1hZ2UpOworICAgICAgICBjbGlwcGVyRGF0YS5vYmplY3RCb3VuZGluZ0Jv
eCA9IG9iamVjdEJvdW5kaW5nQm94OworICAgICAgICBjbGlwcGVyRGF0YS5hYnNvbHV0ZVRyYW5z
Zm9ybSA9IGFic29sdXRlVHJhbnNmb3JtOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgbWFz
a0NvbnRleHQgPSBjbGlwcGVyRGF0YS5pbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgICAgICBt
YXNrQ29udGV4dC5jb25jYXRDVE0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk7CiAKICAgICAgICAg
Ly8gY2xpcFBhdGggY2FuIGFsc28gYmUgY2xpcHBlZCBieSBhbm90aGVyIGNsaXBQYXRoLgpAQCAt
MTU0LDMwICsxNjUsMjggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xp
cHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKICAgICAgICAgaWYgKHJl
c291cmNlcyAmJiAoY2xpcHBlciA9IHJlc291cmNlcy0+Y2xpcHBlcigpKSkgewogICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKG1hc2tDb250ZXh0KTsKIAot
ICAgICAgICAgICAgaWYgKCFjbGlwcGVyLT5hcHBseUNsaXBwaW5nVG9Db250ZXh0KCp0aGlzLCBv
YmplY3RCb3VuZGluZ0JveCwgcmVwYWludFJlY3QsIG1hc2tDb250ZXh0KSkKKyAgICAgICAgICAg
IGlmICghY2xpcHBlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dCgqdGhpcywgb2JqZWN0Qm91bmRp
bmdCb3gsIG9iamVjdEJvdW5kaW5nQm94LCBtYXNrQ29udGV4dCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBzdWNjZWVkZWQgPSBkcmF3Q29udGVudEludG9N
YXNrSW1hZ2UoY2xpcHBlck1hc2tJbWFnZSwgb2JqZWN0Qm91bmRpbmdCb3gpOworICAgICAgICAg
ICAgc3VjY2VlZGVkID0gZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKCpjbGlwcGVyRGF0YS5pbWFn
ZUJ1ZmZlciwgb2JqZWN0Qm91bmRpbmdCb3gpOwogICAgICAgICAgICAgLy8gVGhlIGNvbnRleHQg
cmVzdG9yZSBhcHBsaWVzIHRoZSBjbGlwcGluZyBvbiBub24tQ0cgcGxhdGZvcm1zLgogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHN1Y2NlZWRlZCA9IGRyYXdDb250ZW50SW50b01hc2tJbWFn
ZShjbGlwcGVyTWFza0ltYWdlLCBvYmplY3RCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBzdWNj
ZWVkZWQgPSBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoKmNsaXBwZXJEYXRhLmltYWdlQnVmZmVy
LCBvYmplY3RCb3VuZGluZ0JveCk7CiAKICAgICAgICAgaWYgKCFzdWNjZWVkZWQpCi0gICAgICAg
ICAgICBjbGlwcGVyTWFza0ltYWdlLnJlc2V0KCk7CisgICAgICAgICAgICBjbGlwcGVyRGF0YS5p
bWFnZUJ1ZmZlciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFjbGlwcGVyTWFza0ltYWdl
KQorICAgIGlmICghY2xpcHBlckRhdGEuaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQs
IGFic29sdXRlVHJhbnNmb3JtLCByZXBhaW50UmVjdCwgY2xpcHBlck1hc2tJbWFnZSwgc2hvdWxk
Q3JlYXRlQ2xpcHBlck1hc2tJbWFnZSk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG9iamVjdEJvdW5kaW5nQm94
LCBjbGlwcGVyRGF0YS5pbWFnZUJ1ZmZlciwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2Uo
Y29uc3QgQ2xpcHBlck1hc2tJbWFnZSYgY2xpcHBlck1hc2tJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBvYmplY3RCb3VuZGluZ0JveCkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3
Q29udGVudEludG9NYXNrSW1hZ2UoSW1hZ2VCdWZmZXImIG1hc2tJbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKIHsKLSAgICBBU1NFUlQoY2xpcHBlck1hc2tJ
bWFnZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIG1hc2tDb250ZXh0ID0gY2xpcHBlck1hc2tJ
bWFnZS0+Y29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCYgbWFza0NvbnRleHQgPSBtYXNr
SW1hZ2VCdWZmZXIuY29udGV4dCgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50
VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKGNsaXBQYXRoRWxlbWVudCgpLmNsaXBQYXRoVW5pdHMo
KSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKQEAg
LTIyNyw3ICsyMzYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRl
bnRJbnRvTWFza0ltYWdlKGNvbnN0IENsaXBwZXJNYXNrSW1hZ2UmCiAgICAgICAgIC8vIEluIHRo
ZSBjYXNlIG9mIGEgPHVzZT4gZWxlbWVudCwgd2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBhYm92
ZSwgdG8gcmV0cmlldmUgaXRzIGNsaXBSdWxlLgogICAgICAgICAvLyBXZSBoYXZlIHRvIHBhc3Mg
dGhlIDx1c2U+IHJlbmRlcmVyIGl0c2VsZiB0byByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcigp
IHRvIGFwcGx5IGl0J3MgeC95L3RyYW5zZm9ybS9ldGMuIHZhbHVlcyB3aGVuIHJlbmRlcmluZy4K
ICAgICAgICAgLy8gU28gaWYgaXNVc2VFbGVtZW50IGlzIHRydWUsIHJlZmV0Y2ggdGhlIGNoaWxk
Tm9kZS0+cmVuZGVyZXIoKSwgYXMgcmVuZGVyZXIgZ290IG92ZXJyaWRkZW4gYWJvdmUuCi0gICAg
ICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKGNsaXBw
ZXJNYXNrSW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/ICpjaGlsZC5yZW5kZXJlcigpIDogKnJl
bmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoJm1hc2tJbWFnZUJ1ZmZlciwgaXNV
c2VFbGVtZW50ID8gKmNoaWxkLnJlbmRlcmVyKCkgOiAqcmVuZGVyZXIsIG1hc2tDb250ZW50VHJh
bnNmb3JtYXRpb24pOwogICAgIH0KIAogICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5zZXRQYWludEJl
aGF2aW9yKG9sZEJlaGF2aW9yKTsKQEAgLTI1MSw5ICsyNjAsOSBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgbV9j
bGlwQm91bmRhcmllcyA9IGNsaXBQYXRoRWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0o
KS5tYXBSZWN0KG1fY2xpcEJvdW5kYXJpZXMpOwogfQogCi1DbGlwcGVyTWFza0ltYWdlJiBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFkZFJlbmRlcmVyVG9DbGlwcGVyKGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0KQorUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpDbGlwcGVyRGF0YSYgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphZGRSZW5kZXJlclRvQ2xpcHBlcihjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKIHsKLSAgICByZXR1cm4gbV9jbGlwcGVyLmFkZCgmb2JqZWN0LCBDbGlw
cGVyTWFza0ltYWdlKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gbV9jbGlwcGVyLmFk
ZCgmb2JqZWN0LCBDbGlwcGVyRGF0YSgpKS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0
JiBvYmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0UG9pbnQpCkBAIC0z
MDEsNyArMzEwLDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cmVzb3Vy
Y2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamUKIHsKICAgICAvLyBSZXNvdXJj
ZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIHRoZSBib3VuZGluZ0JveCBvZiB0aGUg
b2JqZWN0LgogICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICBhZGRSZW5kZXJl
clRvQ2xpcHBlcihvYmplY3QpOworICAgICAgICBhZGRSZW5kZXJlclRvQ2xpcHBlcihvYmplY3Qp
OyAvLyBGb3Igc2VsZk5lZWRzQ2xpZW50SW52YWxpZGF0aW9uKCkuCiAgICAgICAgIHJldHVybiBv
YmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAppbmRl
eCA1NTZjYzFkYTQwYzZkYzg1ODU1ZTc3YTAxZTA0MDM3NGNkZjNjYmY3Li4wODQyMGJmOTI5OTJk
OTBmODJjZTUyMzI2YTQ2YTliNDkzZmMwZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKQEAgLTMwLDcgKzMw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
SW1hZ2VCdWZmZXI7CiAKLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDbGlw
cGVyTWFza0ltYWdlOwordXNpbmcgQ2xpcHBlck1hc2tJbWFnZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj47CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciBmaW5hbCA6IHB1
YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIpOwpAQCAtNjAsMTggKzYwLDI0IEBAIHByb3Rl
Y3RlZDoKICAgICBib29sIHNlbGZOZWVkc0NsaWVudEludmFsaWRhdGlvbigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIChldmVySGFkTGF5b3V0KCkgfHwgbV9jbGlwcGVyLnNpemUoKSkgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCk7IH0KIAogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQ2xpcHBlckRhdGEgewor
ICAgICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICB9OworCiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBk
ZWxldGU7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciI7IH0KICAgICBib29sIGlzU1ZHUmVzb3Vy
Y2VDbGlwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBw
YXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIGJvb2wgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKGNv
bnN0IENsaXBwZXJNYXNrSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94
KTsKKyAgICBib29sIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpOwogICAgIHZvaWQgY2FsY3VsYXRlQ2xpcENv
bnRlbnRSZXBhaW50UmVjdCgpOwotICAgIENsaXBwZXJNYXNrSW1hZ2UmIGFkZFJlbmRlcmVyVG9D
bGlwcGVyKGNvbnN0IFJlbmRlck9iamVjdCYpOworICAgIENsaXBwZXJEYXRhJiBhZGRSZW5kZXJl
clRvQ2xpcHBlcihjb25zdCBSZW5kZXJPYmplY3QmKTsKIAogICAgIEZsb2F0UmVjdCBtX2NsaXBC
b3VuZGFyaWVzOwotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgQ2xpcHBlck1hc2tJ
bWFnZT4gbV9jbGlwcGVyOworICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyT2JqZWN0KiwgQ2xpcHBl
ckRhdGE+IG1fY2xpcHBlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZWE2ZWZkOTY0ODMwZmJhYjdiMDJk
OWEyZWNjZWZmMDA2NTY5YzJmLi4wZWMyOWRjMTY0ODNmZTcyYjQ3YjYwNjViNDljNDVmYmM3NTZk
OGNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDMtMjcgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgSG92ZXJpbmcgb3ZlciBjb3VudHJpZXMg
YXQgaHR0cHM6Ly9jb3ZpZGluYy5pby8gc2hvd3MgYml6YXJyZSByZW5kZXJpbmcgYXJ0aWZhY3Rz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk2MzUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYwOTM1MDEwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUmVmIHRlc3QgdGhhdCBleGVyY2lz
ZXMgdGhlIGNvZGUgcGF0aCBieSBwYWludGluZyBpbnRvIGEgdGlsZWQgY29tcG9zaXRpbmcKKyAg
ICAgICAgbGF5ZXIuCisKKyAgICAgICAgKiBzdmcvY2xpcC1wYXRoL2NsaXAtcGF0aC1vbi1vdmVy
Zmxvd2luZy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY2xpcC1wYXRoL2Ns
aXAtcGF0aC1vbi1vdmVyZmxvd2luZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY2xpcC1w
YXRoL21hc2stbmVzdGVkLWNsaXAtcGF0aC0wMTAtZXhwZWN0ZWQuc3ZnOgorICAgICAgICAqIHN2
Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xpcC1wYXRoLTAxMC5zdmc6IENvcGllZCBmcm9tIGlt
cG9ydGVkL21vemlsbGEvc3ZnL3N2Zy1pbnRlZ3JhdGlvbi9jbGlwUGF0aC1odG1sLTAzLnhodG1s
LAorICAgICAgICBhbmQgbW9kaWZpZWQgdG8gaGF2ZSBhIG5vbi16ZXJvIG9mZnNldCBmb3IgYmV0
dGVyIHRlc3Rpbmcgb2YgdGhlIGNsaXBwaW5nIGJvdW5kcyBjb21wdXRhdGlvbi4KKyAgICAgICAg
KiBzdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNsaXBwZXItbXVsdGlwbGUtcmVwYWludHMtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2NsaXAtcGF0aC9yZXNvdXJjZS1jbGlwcGVy
LW11bHRpcGxlLXJlcGFpbnRzLmh0bWw6IEFkZGVkLgorCiAyMDIwLTAzLTI2ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIGZhc3Qvc2Ny
b2xsaW5nL2xhdGNoaW5nIHRlc3RzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY2xpcC1w
YXRoL2NsaXAtcGF0aC1vbi1vdmVyZmxvd2luZy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
c3ZnL2NsaXAtcGF0aC9jbGlwLXBhdGgtb24tb3ZlcmZsb3dpbmctZXhwZWN0ZWQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mODEyZGY0NTMwZmRhMDAzNzBlZWRhYTQyZWQ0ZTkyZmJkMzg4NWQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9jbGlwLXBhdGgtb24tb3ZlcmZs
b3dpbmctZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IHN0eWxlPSJtYXJnaW46IDEy
M3B4OyBwb3NpdGlvbjogcmVsYXRpdmUiPgorICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDoyMDBw
eDsgaGVpZ2h0OjE1MHB4OyBiYWNrZ3JvdW5kOmxpbWU7Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBz
dHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMDBweDsgdG9wOiAxNTBweDsgd2lkdGg6
MTAwcHg7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZDpsaW1lOyI+PC9kaXY+CisgICAgICAgIDxk
aXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAwcHg7IHRvcDogMjAwcHg7IHdp
ZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91bmQ6Ymx1ZTsiPjwvZGl2PgorICAgIDwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2NsaXAt
cGF0aC9jbGlwLXBhdGgtb24tb3ZlcmZsb3dpbmcuaHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jbGlw
LXBhdGgvY2xpcC1wYXRoLW9uLW92ZXJmbG93aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlZDlkYmQw
YTVhMTYxNmI2ZTdkNjgyMDYwNWU4MzA1MWU1ZjViZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jbGlwLXBhdGgvY2xpcC1wYXRoLW9uLW92ZXJmbG93aW5nLmh0bWwKQEAgLTAs
MCArMSwxOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+CisgIDxkaXYgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNjbGlwcGVyKTsgd2lkdGg6NTAwcHg7
IGhlaWdodDoyMDBweDsgYmFja2dyb3VuZDpsaW1lOyBtYXJnaW46IDEyM3B4Ij4KKyAgICA8ZGl2
IHN0eWxlPSJoZWlnaHQ6MjAwcHg7Ij48L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6MjAw
cHg7IGJhY2tncm91bmQ6Ymx1ZTsiPjwvZGl2PgorICA8L2Rpdj4KKworICA8c3ZnIGhlaWdodD0i
MCI+CisgICAgPGNsaXBQYXRoIGlkPSJjbGlwcGVyIj4KKyAgICAgIDxyZWN0IHg9IjAiIHk9IjAi
IHdpZHRoPSIxMDAiIGhlaWdodD0iMTUwIi8+CisgICAgICA8cmVjdCB4PSIxMDAiIHk9IjAiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMzAwIi8+CisgICAgPC9jbGlwUGF0aD4KKyAgPC9zdmc+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL21hc2st
bmVzdGVkLWNsaXAtcGF0aC0wMTAtZXhwZWN0ZWQuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAt
cGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLWV4cGVjdGVkLnN2ZwppbmRleCBkZmJjNGQ3
ODZlMjkxNGMyMWNhY2IyNjBiZTdmYzc2ZjVlMWEzM2JiLi5mNmFiNjI2ZDU2ZmYyYzgwYTE0YjMz
MzFkMDVjMzI3YmFhMzE0Y2ViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRo
L21hc2stbmVzdGVkLWNsaXAtcGF0aC0wMTAtZXhwZWN0ZWQuc3ZnCisrKyBiL0xheW91dFRlc3Rz
L3N2Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xpcC1wYXRoLTAxMC1leHBlY3RlZC5zdmcKQEAg
LTEsNCArMSw0IEBACiA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lk
dGg9IjEwMDAwIiBoZWlnaHQ9IjQwMCI+CiAgICAgPHJlY3QgeD0iOTkiIHdpZHRoPSIxMDEiIGhl
aWdodD0iMTAwIiBmaWxsPSJncmVlbiIvPgotICAgIDxyZWN0IHg9IjI5OSIgd2lkdGg9IjEwMSIg
aGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+CisgICAgPHJlY3QgeD0iMjk1IiB3aWR0aD0iMTA1
IiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KIDwvc3ZnPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3ZnL2NsaXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLnN2ZyBiL0xheW91
dFRlc3RzL3N2Zy9jbGlwLXBhdGgvbWFzay1uZXN0ZWQtY2xpcC1wYXRoLTAxMC5zdmcKaW5kZXgg
YzFkYjIzYmE3ZmU2OGNiZDI3MTNmODJiMGJhZDIyYTAyNzZhYjY1NC4uZTM0ZmFkYTMwNWE2MzA5
ZjM4MWRkNjdiYThhYTg1NGI4M2Q0MWRkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3ZnL2Ns
aXAtcGF0aC9tYXNrLW5lc3RlZC1jbGlwLXBhdGgtMDEwLnN2ZworKysgYi9MYXlvdXRUZXN0cy9z
dmcvY2xpcC1wYXRoL21hc2stbmVzdGVkLWNsaXAtcGF0aC0wMTAuc3ZnCkBAIC0yOCw2ICsyOCw2
IEBACiAKICAgPGcgbWFzaz0idXJsKCNjcm9wKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwLCAw
KSI+CiAgICAgPHJlY3Qgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjQwMCIgZmlsbD0icmVkIiBjbGlw
LXBhdGg9InVybCgjY2xpcDIpIi8+Ci0gICAgPHJlY3QgeD0iMTk5IiB3aWR0aD0iMTAxIiBoZWln
aHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKyAgICA8cmVjdCB4PSIxOTUiIHdpZHRoPSIxMDUiIGhl
aWdodD0iMTAwIiBmaWxsPSJncmVlbiIvPgogICA8L2c+CiA8L3N2Zz4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N2Zy9jbGlwLXBhdGgvcmVzb3VyY2UtY2xpcHBlci1tdWx0aXBsZS1yZXBhaW50
cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9yZXNvdXJjZS1jbGlw
cGVyLW11bHRpcGxlLXJlcGFpbnRzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzZlMTllYzdl
NmE3ZmIwNzQ1ZmMxN2NhZGMwOWRmYTRkMjlhYjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jbGlwLXBhdGgvcmVzb3VyY2UtY2xpcHBlci1tdWx0aXBsZS1yZXBhaW50cy1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIC5jb250YWluZXIgeworICAgICAgICAgICAgcG9z
aXRpb246IHJlbGF0aXZlOworICAgICAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICAgICAg
aGVpZ2h0OiA0MDBweDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAg
ICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgICAgfQorICAgICAgICAuY29tcG9zaXRl
ZCB7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICBsZWZ0OiAt
MjAwcHg7CisgICAgICAgICAgICB3aWR0aDogODAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDEw
MCU7CisgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMXB4KTsKKyAgICAgICAgfQor
ICAgICAgICAjY2xpcHBlZCB7CisgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjAwcHg7CisgICAg
ICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDQwMHB4OworICAgICAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgICAgICAgICBjbGlwLXBhdGg6IHVy
bCgjYm94ZXMpOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAg
IDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQi
PgorICAgICAgICAgICAgPGRpdiBpZD0iY2xpcHBlZCI+PC9kaXY+CisgICAgICAgIDwvZGl2Pgor
ICAgIDwvZGl2PgorICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4
bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6ZXY9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgc3R5bGU9Im92ZXJmbG93OiBoaWRkZW47Ij4K
KyAgICAgICAgPGRlZnM+CisgICAgICAgIDxjbGlwUGF0aCBpZD0iYm94ZXMiIHRyYW5zZm9ybT0i
bWF0cml4KDEuOCwgMCwgMCwgMS44LCAyMCwgMzApIj4KKyAgICAgICAgICAgIDxwYXRoIGQ9Ik01
MCw1MCBMMTUwLDUwIEwxNTAsMTUwIEw1MCwxNTAgeiIgZmlsbD0idHJhbnNwYXJlbnQiPjwvcGF0
aD4KKyAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTUsNTAgTDI1NSw1MCBMMjU1LDE1MCBMMTU1LDE1
MCB6IiBmaWxsPSJ0cmFuc3BhcmVudCI+PC9wYXRoPgorICAgICAgICA8L2NsaXBQYXRoPgorICAg
IDwvZGVmcz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3ZnL2NsaXAtcGF0aC9yZXNvdXJjZS1jbGlwcGVyLW11bHRpcGxlLXJlcGFpbnRzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9zdmcvY2xpcC1wYXRoL3Jlc291cmNlLWNsaXBwZXItbXVsdGlwbGUtcmVw
YWludHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2NkZWQyNWJhZThjYTNmYmEwZWY3ZDIzYTNkN2VlMTcy
ZDQyNGFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2NsaXAtcGF0aC9yZXNv
dXJjZS1jbGlwcGVyLW11bHRpcGxlLXJlcGFpbnRzLmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgLmNvbnRh
aW5lciB7CisgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgICB3aWR0
aDogNjAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDQwMHB4OworICAgICAgICAgICAgYm9yZGVy
OiAxcHggc29saWQgYmxhY2s7CisgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAg
ICB9CisgICAgICAgIC8qIFRoaXMgY3JlYXRlcyBhIHRpbGVkIGxheWVyIHNvIHRoZSBjbGlwcGVk
IGVsZW1lbnQgaXMgZHJhd24gYWNyb3NzIHR3byB0aWxlcyAqLworICAgICAgICAuY29tcG9zaXRl
ZCB7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICBsZWZ0OiAt
MjAwcHg7CisgICAgICAgICAgICB3aWR0aDogNjYwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAx
MDAlOworICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CisgICAgICAgIH0K
KyAgICAgICAgI2NsaXBwZWQgeworICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDIwMHB4OworICAg
ICAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiA0MDBweDsKKyAgICAg
ICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgICAgICAgICAgY2xpcC1wYXRoOiB1
cmwoI2JveGVzKTsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb21wb3NpdGVk
Ij4KKyAgICAgICAgICAgIDxkaXYgaWQ9ImNsaXBwZWQiPjwvZGl2PgorICAgICAgICA8L2Rpdj4K
KyAgICA8L2Rpdj4KKyAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
eG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOmV2PSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+
CisgICAgICAgIDxkZWZzPgorICAgICAgICA8Y2xpcFBhdGggaWQ9ImJveGVzIiB0cmFuc2Zvcm09
Im1hdHJpeCgxLjgsIDAsIDAsIDEuOCwgMjAsIDMwKSI+CisgICAgICAgICAgICA8cGF0aCBkPSJN
NTAsNTAgTDE1MCw1MCBMMTUwLDE1MCBMNTAsMTUwIHoiIGZpbGw9InRyYW5zcGFyZW50Ij48L3Bh
dGg+CisgICAgICAgICAgICA8cGF0aCBkPSJNMTU1LDUwIEwyNTUsNTAgTDI1NSwxNTAgTDE1NSwx
NTAgeiIgZmlsbD0idHJhbnNwYXJlbnQiPjwvcGF0aD4KKyAgICAgICAgPC9jbGlwUGF0aD4KKyAg
ICA8L2RlZnM+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="410178"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
          </attachment>
      

    </bug>

</bugzilla>