<?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>49233</bug_id>
          
          <creation_ts>2010-11-08 18:55:04 -0800</creation_ts>
          <short_desc>[chromium] Composited layers don&apos;t handle opacity properly</short_desc>
          <delta_ts>2010-11-15 12:25:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Vangelis Kokkevis">vangelis</assigned_to>
          <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>306557</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-08 18:55:04 -0800</bug_when>
    <thetext>The correct way to implement layer opacity is to render the layer and all its descendants into a blank surface and then apply the opacity value as that surface is composited on top of the existing page contents. Currently chromium (incorrectly) computes an opacity value per layer by multiplying the layer&apos;s opacity by the opacity of its parent. This results in compositing/geometry/abs-position-inside-opacity.html failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306574</commentid>
    <comment_count>1</comment_count>
      <attachid>73337</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-08 19:12:41 -0800</bug_when>
    <thetext>Created attachment 73337
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307045</commentid>
    <comment_count>2</comment_count>
      <attachid>73434</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-09 16:22:49 -0800</bug_when>
    <thetext>Created attachment 73434
Patch - fixing mac and linux compile issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307120</commentid>
    <comment_count>3</comment_count>
      <attachid>73434</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-09 19:33:38 -0800</bug_when>
    <thetext>Comment on attachment 73434
Patch - fixing mac and linux compile issues

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

Great work overall in this substantial rewrite of the layer renderer to be more compliant. It can&apos;t have been easy to redo all of the math as well as substantially changing how the rendering works in certain situations. I&apos;m marking this r- only because of some minor stylistic issues. I do have a higher-level question about VRAM consumption with the new algorithm, but after getting through the entire patch I think I&apos;ve answered my own questions, so please tell me if so.

&gt; WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:165
&gt; +    // For now we apply the layer layer treatment only for layers that are either untransformed

&quot;layer layer&quot;?

&gt; WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:168
&gt; +    if (!layerOriginTransform.isInvertible())
&gt; +        ASSERT_NOT_REACHED();

Why not ASSERT(layerOriginTransform.isInvertible())?

&gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:485
&gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++)

Prefer preincrement (++i).

&gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:498
&gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++)

Prefer preincrement.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:66
&gt; +    ortho.setM43(0);

Strictly speaking the setM43 is unnecessary since the TransformationMatrix is initialized to the identity.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:72
&gt; +static bool isScaleOrTranslation(const TransformationMatrix&amp; m)

If this is a generally useful query, please add it to the TransformationMatrix class.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:295
&gt; +        m_defaultRenderSurface = m_rootLayer-&gt;createRenderSurface();

Does this mean that we are now have two textures associated with the root layer, m_rootLayerTextureId and the texture inside this RenderSurface? If so, I think this is too much of an increase in VRAM requirements. There must be some way to merge the two. (Note, I think I see how this works now; see comment in useRenderSurface.)

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:347
&gt; +    for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex &gt;= 0 ; surfaceIndex--) {

Prefer predecrement.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:365
&gt; +        ASSERT(layerList.size() &gt; 0);

size_t is unsigned, so this should be ASSERT(layerList.size).

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:366
&gt; +        for (unsigned layerIndex = 0; layerIndex &lt; layerList.size(); layerIndex++)

Prefer preincrement.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:443
&gt; +// Recursively walks the layer tree starting at the given node and updates their
&gt; +// drawing transform matrix.

To be a little clearer, &quot;their&quot; -&gt; &quot;each layer&apos;s&quot;.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:586
&gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++) {

Preincrement.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:593
&gt; +            FloatRect sublayerRect(-0.5 * sublayerRenderSurface-&gt;m_contentRect.width(), -0.5 * sublayerRenderSurface-&gt;m_contentRect.height(),
&gt; +                                   sublayerRenderSurface-&gt;m_contentRect.width(), sublayerRenderSurface-&gt;m_contentRect.height());

These would be easier to read if you had a local variable for sublayerRenderSurface-&gt;m_contentRect.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:608
&gt; +        FloatPoint surfaceCenter = FloatRect(renderSurface-&gt;m_contentRect).center();

Why not add &quot;float RenderSurfaceChromium::contentRectCenter()&quot;?

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:634
&gt; +        // If the layer starts a new render surface then we need to adjust its
&gt; +        // scissor rect to be expressed in the new surface&apos;s coordinate system.
&gt; +        layer-&gt;m_scissorRect = layer-&gt;m_drawableContentRect;

The comment indicates that some condition should be tested in the following line, but none is. If we&apos;re already in logic where the layer starts a new render surface, could you write &quot;Since the layer...&quot;?

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:669
&gt; +        return true;

Is this where we avoid creating two textures for the root layer?

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:708
&gt; +    // Set the current scissor rect.

Useless comment.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:709
&gt; +    scissorToRect(layer-&gt;m_scissorRect);

Consider renaming this setScissorToRect. Right now it sounds like a routine which converts a scissor to a rect.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:717
&gt; +    // FIXME: Need to take into account the transform of the containtaining

containtaining -&gt; containing

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:718
&gt; +    // RenderSurface here.

What does this FIXME imply? What is the incorrect rendering result as a consequence?

&gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp:16
&gt; + * this software without specific prior written permission.

This is the wrong license header. See e.g. WebKit/chromium/tests/PODIntervalTreeTest.cpp.

&gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:16
&gt; + * this software without specific prior written permission.

Wrong license header.

&gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:60
&gt; +    IntRect m_contentRect;
&gt; +    unsigned m_contentsTextureId;
&gt; +    float m_drawOpacity;
&gt; +    IntSize m_allocatedTextureSize;
&gt; +    TransformationMatrix m_drawTransform;
&gt; +    IntRect m_scissorRect;
&gt; +    Vector&lt;LayerChromium*&gt; m_layerList;

These public data members are really not WebKit style for a class. You could, I think, just as easily make this a struct, with the only downside the exposure of the layerRenderer() and m_owningLayer members. I do however see that exposing these publicly makes the LayerRendererChromium more terse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307137</commentid>
    <comment_count>4</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-09 20:09:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 73434 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73434&amp;action=review
&gt; 
&gt; Great work overall in this substantial rewrite of the layer renderer to be more compliant. It can&apos;t have been easy to redo all of the math as well as substantially changing how the rendering works in certain situations. I&apos;m marking this r- only because of some minor stylistic issues. I do have a higher-level question about VRAM consumption with the new algorithm, but after getting through the entire patch I think I&apos;ve answered my own questions, so please tell me if so.

Thanks for the review!  I realize this must have been somewhat tedious.

&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:165
&gt; &gt; +    // For now we apply the layer layer treatment only for layers that are either untransformed
&gt; 
&gt; &quot;layer layer&quot;?
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:168
&gt; &gt; +    if (!layerOriginTransform.isInvertible())
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Why not ASSERT(layerOriginTransform.isInvertible())?
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:485
&gt; &gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++)
&gt; 
&gt; Prefer preincrement (++i).
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:498
&gt; &gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++)
&gt; 
&gt; Prefer preincrement.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:66
&gt; &gt; +    ortho.setM43(0);
&gt; 
&gt; Strictly speaking the setM43 is unnecessary since the TransformationMatrix is initialized to the identity.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:72
&gt; &gt; +static bool isScaleOrTranslation(const TransformationMatrix&amp; m)
&gt; 
&gt; If this is a generally useful query, please add it to the TransformationMatrix class.

Not sure how generally useful it is, really. I&apos;m leaving it here for now, if that&apos;s ok.


&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:295
&gt; &gt; +        m_defaultRenderSurface = m_rootLayer-&gt;createRenderSurface();
&gt; 
&gt; Does this mean that we are now have two textures associated with the root layer, m_rootLayerTextureId and the texture inside this RenderSurface? If so, I think this is too much of an increase in VRAM requirements. There must be some way to merge the two. (Note, I think I see how this works now; see comment in useRenderSurface.)

createRenderSurface itself doesn&apos;t allocate a texture. m_defaultRenderSurface is &quot;special&quot; in that it only looks like a render surface but when using it you&apos;re essentially rendering onto the backbuffer. So, no, there&apos;s no increase in VRAM usage.


&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:347
&gt; &gt; +    for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex &gt;= 0 ; surfaceIndex--) {
&gt; 
&gt; Prefer predecrement.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:365
&gt; &gt; +        ASSERT(layerList.size() &gt; 0);
&gt; 
&gt; size_t is unsigned, so this should be ASSERT(layerList.size).
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:366
&gt; &gt; +        for (unsigned layerIndex = 0; layerIndex &lt; layerList.size(); layerIndex++)
&gt; 
&gt; Prefer preincrement.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:443
&gt; &gt; +// Recursively walks the layer tree starting at the given node and updates their
&gt; &gt; +// drawing transform matrix.
&gt; 
&gt; To be a little clearer, &quot;their&quot; -&gt; &quot;each layer&apos;s&quot;.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:586
&gt; &gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++) {
&gt; 
&gt; Preincrement.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:593
&gt; &gt; +            FloatRect sublayerRect(-0.5 * sublayerRenderSurface-&gt;m_contentRect.width(), -0.5 * sublayerRenderSurface-&gt;m_contentRect.height(),
&gt; &gt; +                                   sublayerRenderSurface-&gt;m_contentRect.width(), sublayerRenderSurface-&gt;m_contentRect.height());
&gt; 
&gt; These would be easier to read if you had a local variable for sublayerRenderSurface-&gt;m_contentRect.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:608
&gt; &gt; +        FloatPoint surfaceCenter = FloatRect(renderSurface-&gt;m_contentRect).center();
&gt; 
&gt; Why not add &quot;float RenderSurfaceChromium::contentRectCenter()&quot;?
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:634
&gt; &gt; +        // If the layer starts a new render surface then we need to adjust its
&gt; &gt; +        // scissor rect to be expressed in the new surface&apos;s coordinate system.
&gt; &gt; +        layer-&gt;m_scissorRect = layer-&gt;m_drawableContentRect;
&gt; 
&gt; The comment indicates that some condition should be tested in the following line, but none is. If we&apos;re already in logic where the layer starts a new render surface, could you write &quot;Since the layer...&quot;?
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:669
&gt; &gt; +        return true;
&gt; 
&gt; Is this where we avoid creating two textures for the root layer?
&gt; 
Yes, that&apos;s right.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:708
&gt; &gt; +    // Set the current scissor rect.
&gt; 
&gt; Useless comment.
Done.

&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:709
&gt; &gt; +    scissorToRect(layer-&gt;m_scissorRect);
&gt; 
&gt; Consider renaming this setScissorToRect. Right now it sounds like a routine which converts a scissor to a rect.
Done.


&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:717
&gt; &gt; +    // FIXME: Need to take into account the transform of the containtaining
&gt; 
&gt; containtaining -&gt; containing
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:718
&gt; &gt; +    // RenderSurface here.
&gt; 
&gt; What does this FIXME imply? What is the incorrect rendering result as a consequence?
Updated the FIXME comment to indicate that back-face culling of single sided layers won&apos;t always work properly.

&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp:16
&gt; &gt; + * this software without specific prior written permission.
&gt; 
&gt; This is the wrong license header. See e.g. WebKit/chromium/tests/PODIntervalTreeTest.cpp.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:16
&gt; &gt; + * this software without specific prior written permission.
&gt; 
&gt; Wrong license header.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:60
&gt; &gt; +    IntRect m_contentRect;
&gt; &gt; +    unsigned m_contentsTextureId;
&gt; &gt; +    float m_drawOpacity;
&gt; &gt; +    IntSize m_allocatedTextureSize;
&gt; &gt; +    TransformationMatrix m_drawTransform;
&gt; &gt; +    IntRect m_scissorRect;
&gt; &gt; +    Vector&lt;LayerChromium*&gt; m_layerList;
&gt; 
&gt; These public data members are really not WebKit style for a class. You could, I think, just as easily make this a struct, with the only downside the exposure of the layerRenderer() and m_owningLayer members. I do however see that exposing these publicly makes the LayerRendererChromium more terse.

RenderSurfaceChromium is really a helper class that&apos;s used by the LayerRendererChromium exclusively.  I made the members private and made LayerRendererChromium a friend class (much like LayerChromium works as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307143</commentid>
    <comment_count>5</comment_count>
      <attachid>73456</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-09 20:21:23 -0800</bug_when>
    <thetext>Created attachment 73456
Patch addressing review comments

Addressed review comments and added a fix in the calculation of the layer scissor rects in LayerRendererChromium::updateLayersRecursive() (lines 513-521 and 619-622)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307438</commentid>
    <comment_count>6</comment_count>
      <attachid>73456</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-10 11:01:00 -0800</bug_when>
    <thetext>Comment on attachment 73456
Patch addressing review comments

This looks good to me. Very nice work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309392</commentid>
    <comment_count>7</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-15 12:25:30 -0800</bug_when>
    <thetext>Committed r72021: &lt;http://trac.webkit.org/changeset/72021&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73337</attachid>
            <date>2010-11-08 19:12:41 -0800</date>
            <delta_ts>2010-11-09 16:22:49 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>renderSurfaces_49233.txt</filename>
            <type>text/plain</type>
            <size>68044</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDcxNTk2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3MiBAQAorMjAxMC0xMS0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxp
c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBGaXhlcyBsYXllciBvcGFjaXR5IGltcGxlbWVudGF0aW9uIG9m
IGNvbXBvc2l0ZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTIzMworCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIGZhaXJseSBkcmFz
dGljIGNoYW5nZSBpbiBob3cgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRyYXdzCisgICAgICAgIGNv
bXBvc2l0ZWQgbGF5ZXJzLiBMYXllcnMgdGhhdCBoYXZlIG5vbi16ZXJvIG9wYWNpdHkgYXMgd2Vs
bCBhcyBsYXllcnMgdGhhdAorICAgICAgICBjbGlwIHRoZWlyIGRlc2NlbmRhbnRzIChhbmQgaGF2
ZSBub24tdHJpdmlhbCB0cmFuc2Zvcm1zKSBhcmUgbm93IGZpcnN0CisgICAgICAgIHJlbmRlcmVk
IG9udG8gb2ZmLXNjcmVlbiBzdXJmYWNlcyAoUmVuZGVyU3VyZmFjZUNocm9taXVtJ3MpLiBUaGUg
Y29tcG9zaXRpbmcKKyAgICAgICAgb3BlcmF0aW9uIG5vdyBjb25zaXN0cyBvZiB0d28gZGlzdGlu
Y3QgcGhhc2VzOiBGaXJzdCBhIGhpZXJhcmNoaWNhbCB0cmF2ZXJzYWwKKyAgICAgICAgb2YgdGhl
IGxheWVyIHRyZWUgdG8gY29tcHV0ZSB0aGUgbGF5ZXIgdHJhbnNmb3JtcywgZGV0ZXJtaW5lIHdo
YXQgdGhlIG5lY2Vzc2FyeQorICAgICAgICBSZW5kZXJTdXJmYWNlcyBhcmUgYW5kIHNvcnQgbGF5
ZXIgdGhhdCBwcmVzZXJ2ZS0zZCBiYXNlZCBvbiB0aGVpciB6LXZhbHVlLiBBIHNlY29uZAorICAg
ICAgICBwYXNzIGdvZXMgdGhyb3VnaCBhbGwgdGhlIFJlbmRlclN1cmZhY2VzIGRpc2NvdmVyZWQg
YnkgdGhlIGZpcnN0IHBhc3MgYW5kIHVwZGF0ZXMKKyAgICAgICAgdGhlaXIgY29udGVudHMuCisg
ICAgICAgIEFkZGl0aW9uYWwgc2lnbmlmaWNhbnQgc2lkZS1lZmZlY3RzIG9mIHRoaXMgY2hhbmdl
IGFyZToKKyAgICAgICAgMS4gRGVwdGggYnVmZmVyIGFuZCBkZXB0aCB0ZXN0aW5nIGlzIG5vIGxv
bmdlciB1c2VkLiBEcmF3aW5nIHJlbGllcyBvbiBhIHBhaW50ZXIncworICAgICAgICAgICBhbGdv
cml0aG0gdG8gcmVuZGVyIGxheWVycyB3aXRoIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgZnJv
bSBiYWNrIHRvIGZyb250IHVzaW5nCisgICAgICAgICAgIHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhl
aXIgY2VudGVyLiBUaGlzIHdpbGwgZnVydGhlciBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlIHdp
dGgKKyAgICAgICAgICAgdGhlIGludG9kdWN0aW9uIG9mIGEgQlNQIHRyZWUgdG8gcHJvcGVybHkg
ZGVhbCB3aXRoIGludGVyc2VjdGluZyBsYXllcnMuCisgICAgICAgIDIuIENvbXBvc2l0b3Igbm8g
bG9uZ2VyIHVzZXMgdGhlIHN0ZW5jaWwgYnVmZmVyIHRvIGRvIGNsaXBwaW5nLiBDbGlwcGluZyBp
cyBub3cgcGVyZm9ybWVkCisgICAgICAgICAgIGJ5IHJlbmRlcmluZyBsYXllciBzdWJ0cmVlcyBp
bnRvIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlCisgICAg
ICAgICAgIHNjaXNzb3IgYW5kIHZpZXdwb3J0IHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgIFRl
c3RzOiBhYnMtcG9zaXRpb24taW5zaWRlLW9wYWNpdHkuaHRtbCAoZm9yIHRoZSBvcGFjaXR5IGlt
cGxlbWVudGF0aW9uKQorICAgICAgICAgICAgICAgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21wb3Np
dGluZyBsYXlvdXQgdGVzdHMgdG8gdmVyaWZ5IHRoYXQKKyAgICAgICAgICAgICAgIGV2ZXJ5dGhp
bmcgc3RpbGwgd29ya3MuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNhbGN1bGF0
ZUNsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0Ry
YXdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRz
RHJhd0NvbnRlbnRSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRy
YXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5k
ZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9ydGhvTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzU2NhbGVPclRyYW5zbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNjaXNzb3JUb1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmlld3Bv
cnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJmYWNl
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OnByZXBhcmVDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKwogMjAxMC0xMS0w
OCAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5hdGUgQ2hhcGluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzA5MDcpCisrKyBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjQ1Niw2ICsyNDU2LDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2
YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JY29uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51
eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFy
ZW5jeVdpbi5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzA5
MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIENvbnRlbnRMYXll
ckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb20KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291
cmNlcygpOwogICAgIGlmIChsYXllclJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKG1fY29udGVu
dHNUZXh0dXJlKSB7CiAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPmRlbGV0ZUxheWVyVGV4
dHVyZShtX2NvbnRlbnRzVGV4dHVyZSk7CkBAIC0xNDEsMTEgKzE0MiwxMSBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyCiBib29sIENvbnRlbnRMYXllckNocm9taXVt
OjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKIHsKICAgICAvLyBUbyBhdm9pZCBh
bGxvY2F0aW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIHRleHR1cmVzLCBzd2l0Y2ggaW50byAibGFyZ2Ug
bGF5ZXIgbW9kZSIgaWYKLSAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBs
YXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgY3VycmVudCBzaXplCi0gICAgLy8gb2YgdGhl
IHZpc2libGUgcmVjdC4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIGxheWVyIHRp
bGluZyBpcyBpbXBsZW1lbnRlZC4KKyAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9u
cyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgorICAgIC8vIHN1cmZh
Y2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGls
IGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29uc3QgaW50IG1heExh
eWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgpID4gbWF4KG1heExh
eWVyU2l6ZSwgbGF5ZXJSZW5kZXJlcigpLT5yb290TGF5ZXJDb250ZW50UmVjdCgpLndpZHRoKCkp
Ci0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIGxh
eWVyUmVuZGVyZXIoKS0+cm9vdExheWVyQ29udGVudFJlY3QoKS5oZWlnaHQoKSkKKyAgICByZXR1
cm4gKG1fYm91bmRzLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1
cmZhY2UtPm1fY29udGVudFJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIHx8IG1fYm91bmRzLmhl
aWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5tX2NvbnRl
bnRSZWN0LmhlaWdodCgpKQogICAgICAgICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tU
ZXh0dXJlU2l6ZShtX2JvdW5kcykpOwogfQogCkBAIC0xNTMsMjUgKzE1NCwyNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpjYWxjdWxhdGVDbGlwCiB7CiAgICAgLy8gRm9yIHRoZSBnaXZl
biBsYXllciBzaXplIGFuZCBjb250ZW50IHJlY3QsIGNhbGN1bGF0ZToKICAgICAvLyAxKSBUaGUg
bWluaW1hbCB0ZXh0dXJlIHNwYWNlIHJlY3RhbmdsZSB0byBiZSB1cGxvYWRlZCwgcmV0dXJuZWQg
aW4gZGlydHlSZWN0LgotICAgIC8vIDIpIFRoZSBjb250ZW50IHJlY3QtcmVsYXRpdmUgcmVjdGFu
Z2xlIHRvIGRyYXcgdGhpcyB0ZXh0dXJlIGluLCByZXR1cm5lZCBpbiBkcmF3UmVjdC4KKyAgICAv
LyAyKSBUaGUgcmVjdGFuZ2xlIHRvIGRyYXcgdGhpcyB0ZXh0dXJlIGluIHJlbGF0aXZlIHRvIHRo
ZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UsIHJldHVybmVkIGluIGRyYXdSZWN0LgogCi0gICAgY29u
c3QgSW50UmVjdCBjbGlwUmVjdCA9IGxheWVyUmVuZGVyZXIoKS0+Y3VycmVudFNjaXNzb3JSZWN0
KCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSA9IGRyYXdUcmFu
c2Zvcm0oKTsKLSAgICAvLyBUaGUgbGF5ZXIncyBkcmF3IHRyYW5zZm9ybSBwb2ludHMgdG8gdGhl
IGNlbnRlciBvZiB0aGUgbGF5ZXIsIHJlbGF0aXZlIHRvCi0gICAgLy8gdGhlIGNvbnRlbnQgcmVj
dC4gIGxheWVyUG9zIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgbGVmdCBvZiB0aGUKLSAg
ICAvLyBsYXllciB0byB0aGUgdG9wIGxlZnQgb2YgdGhlIGNvbnRlbnQgcmVjdC4KLSAgICBjb25z
dCBJbnRQb2ludCBsYXllclBvcyhtX2JvdW5kcy53aWR0aCgpIC8gMiAtIHRyYW5zZm9ybS5tNDEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JvdW5kcy5oZWlnaHQoKSAvIDIgLSB0
cmFuc2Zvcm0ubTQyKCkpOwotICAgIC8vIFRyYW5zZm9ybSB0aGUgY29udGVudFJlY3QgaW50byB0
aGUgc3BhY2Ugb2YgdGhlIGxheWVyLgotICAgIEludFJlY3QgY29udGVudFJlY3RJbkxheWVyU3Bh
Y2UobGF5ZXJQb3MsIGNsaXBSZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDbGlwIHRoZSBlbnRpcmUg
bGF5ZXIgYWdhaW5zdCB0aGUgdmlzaWJsZSByZWdpb24gaW4gdGhlIGNvbnRlbnQgcmVjdAotICAg
IC8vIGFuZCB1c2UgdGhhdCBhcyB0aGUgZHJhd2FibGUgdGV4dHVyZSwgaW5zdGVhZCBvZiB0aGUg
ZW50aXJlIGxheWVyLgotICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1f
Ym91bmRzKTsKLSAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0SW5MYXllclNwYWNl
KTsKKyAgICBBU1NFUlQobV90YXJnZXRSZW5kZXJTdXJmYWNlKTsKKyAgICBjb25zdCBJbnRSZWN0
IGNsaXBSZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0OwogCi0gICAg
Ly8gVGhlIGRyYXcgcG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIGNvbnRlbnQgcmVjdC4KLSAg
ICBkcmF3UmVjdCA9IEludFJlY3QodG9Qb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSAtIGxheWVy
UG9zKSwgZGlydHlSZWN0LnNpemUoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CisgICAgbGF5ZXJPcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlM2QoLTAuNSAqIG1fYm91bmRzLndpZHRoKCksIC0wLjUgKiBtX2JvdW5kcy5o
ZWlnaHQoKSwgMCk7CisKKyAgICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXllciBsYXllciB0
cmVhdG1lbnQgb25seSBmb3IgbGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCisg
ICAgLy8gb3IgYXJlIHB1cmVseSB0cmFuc2xhdGVkLiBUaGVpciBtYXRyaXggaXMgZXhwZWN0ZWQg
dG8gYmUgaW52ZXJ0aWJsZS4KKyAgICBpZiAoIWxheWVyT3JpZ2luVHJhbnNmb3JtLmlzSW52ZXJ0
aWJsZSgpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRhcmdldFRvTGF5ZXJNYXRyaXggPSBsYXllck9yaWdpblRyYW5zZm9ybS5pbnZl
cnNlKCk7CisgICAgSW50UmVjdCBjbGlwUmVjdEluTGF5ZXJDb29yZHMgPSB0YXJnZXRUb0xheWVy
TWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOworICAgIGNsaXBSZWN0SW5MYXllckNvb3Jkcy5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkp
OworCisgICAgZGlydHlSZWN0ID0gY2xpcFJlY3RJbkxheWVyQ29vcmRzOworCisgICAgLy8gTWFw
IGJhY2sgdG8gdGhlIHRhcmdldCBzdXJmYWNlIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGRyYXdS
ZWN0ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChkaXJ0eVJlY3QpOwogfQogCiB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCkBAIC0yMDUsMTIgKzIwOCwy
MSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50CiAgICAgICAgICAg
ICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fbGFyZ2VMYXllckRpcnR5UmVjdCA9PSBkaXJ0eVJlY3QpCi0gICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbV9sYXJnZUxheWVyRGlydHlSZWN0ID0gZGlydHlSZWN0Owot
ICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gZGlydHlSZWN0LnNpemUoKTsKLSAgICAgICAg
dXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGRpcnR5UmVjdC5zaXplKCkpOwor
ICAgICAgICAvLyBJZiB0aGUgcG9ydGlvbiBvZiB0aGUgbGFyZ2UgbGF5ZXIgdGhhdCdzIHZpc2li
bGUgaGFzbid0IGNoYW5nZWQKKyAgICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0
ZSBpdCwgX3VubGVzc18gaXRzIGNvbnRlbnRzIGhhdmUgY2hhbmdlZAorICAgICAgICAvLyBpbiB3
aGljaCBjYXNlIHdlIG9ubHkgdXBkYXRlIHRoZSBkaXJ0eSBiaXRzLgorICAgICAgICBpZiAobV9s
YXJnZUxheWVyRGlydHlSZWN0ID09IGRpcnR5UmVjdCkgeworICAgICAgICAgICAgaWYgKCFtX2Rp
cnR5UmVjdC5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChJbnRSZWN0KG1fZGlydHlSZWN0KSk7Cisg
ICAgICAgICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICAgICAgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSA9IG1fbGFyZ2VMYXllckRpcnR5UmVjdC5zaXplKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2xhcmdlTGF5ZXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAg
ICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gZGlydHlSZWN0LnNpemUoKTsKKyAgICAgICAg
ICAgIHVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBkaXJ0eVJlY3Quc2l6ZSgp
KTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3Qo
bV9kaXJ0eVJlY3QpOwogICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCks
IG1fYm91bmRzKTsKQEAgLTIyNyw2ICsyMzksOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50CiAgICAgICAgIHVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgfQog
CisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBM
QVRGT1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAgPSAwOwogICAgIE93
blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDcwOTA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bToKIAogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikK
KyAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9jb250ZW50c0RpcnR5KGZh
bHNlKQogICAgICwgbV9zdXBlcmxheWVyKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41
KQpAQCAtMTU4LDcgKzE1OSw5IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXkKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxz
ZSkKICAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCisgICAgLCBtX2Ry
YXdEZXB0aCgwKQogICAgICwgbV9sYXllclJlbmRlcmVyKDApCisgICAgLCBtX3JlbmRlclN1cmZh
Y2UoMCkKIHsKIH0KIApAQCAtMTcyLDYgKzE3NSwxMiBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJD
aHJvbWl1bSgpCiAgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgaWYgKG1fcmVuZGVyU3VyZmFjZSkKKyAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlLT5jbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRl
cmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVuIHdl
IG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCkBAIC0xODQsNiArMTkzLDEyIEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXkKICAgICBtX2xheWVyUmVuZGVyZXIg
PSByZW5kZXJlcjsKIH0KIAorUmVuZGVyU3VyZmFjZUNocm9taXVtKiBMYXllckNocm9taXVtOjpj
cmVhdGVSZW5kZXJTdXJmYWNlKCkKK3sKKyAgICBtX3JlbmRlclN1cmZhY2UgPSBuZXcgUmVuZGVy
U3VyZmFjZUNocm9taXVtKHRoaXMpOworICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7
Cit9CisKIHVuc2lnbmVkIExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiB7CiAgICAgdW5zaWduZWQgdmVydGV4U2hh
ZGVyID0gbG9hZFNoYWRlcihjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURF
UiwgdmVydGV4U2hhZGVyU291cmNlKTsKQEAgLTQ2MiwyNCArNDc3LDI3IEBAIGNvbnN0IEludFJl
Y3QgTGF5ZXJDaHJvbWl1bTo6Z2V0RHJhd1JlY3QKICAgICByZXR1cm4gbWFwcGVkUmVjdDsKIH0K
IAotLy8gRHJhd3MgdGhlIGxheWVyIHdpdGggYSBzaW5nbGUgY29sb3JlZCBzaGFkZXIuIFRoaXMg
bWV0aG9kIGlzIHVzZWQgdG8gZG8KLS8vIHF1aWNrIGRyYXdzIGludG8gdGhlIHN0ZW5jaWwgYnVm
ZmVyLgotdm9pZCBMYXllckNocm9taXVtOjpkcmF3QXNNYXNrKCkKKy8vIFJldHVybnMgdHJ1ZSBp
ZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGRyYXdhYmxlIGNvbnRlbnQuCiti
b29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKQogewotICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJl
bmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVzKCk7Ci0gICAgQVNTRVJUKHN2ICYmIHN2LT5pbml0
aWFsaXplZCgpKTsKLSAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+Ym9yZGVyU2hh
ZGVyUHJvZ3JhbSgpKTsKLQotICAgIC8vIFdlIHJldXNlIHRoZSBib3JkZXIgc2hhZGVyIGhlcmUg
YXMgYWxsIHdlIG5lZWQgYSBzaW5nbGUgY29sb3JlZCBzaGFkZXIgcGFzcy4KLSAgICAvLyBUaGUg
Y29sb3Igc3BlY2lmaWVkIGhlcmUgaXMgb25seSBmb3IgZGVidWcgcHVwcm9zZXMgYXMgdHlwaWNh
bGx5IHdoZW4gd2UgY2FsbCB0aGlzCi0gICAgLy8gbWV0aG9kLCB3cml0ZXMgdG8gdGhlIGNvbG9y
IGNoYW5uZWxzIGFyZSBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm00Zihzdi0+Ym9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbigpLCAwLCAxICwgMCwgMC43KSk7Ci0K
LSAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlv
bk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAg
ICAgICAgICAgIHN2LT5ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCAtMSk7CisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBnZXRTdWJsYXll
cnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
KyAgICAgICAgaWYgKHN1YmxheWVyc1tpXS0+ZGVzY2VuZGFudHNEcmF3Q29udGVudFJlY3Vyc2l2
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LyBSZXR1cm5zIHRydWUgaWYgZWl0aGVyIHRoaXMgbGF5ZXIgb3Igb25lIG9mIGl0cyBkZXNjZW5k
YW50cyBoYXMgZHJhd2FibGUgY29udGVudC4KK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFu
dHNEcmF3Q29udGVudFJlY3Vyc2l2ZSgpCit7CisgICAgaWYgKGRyYXdzQ29udGVudCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgc3VibGF5ZXJzID0gZ2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIGlmIChzdWJsYXllcnNbaV0tPmRl
c2NlbmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lv
biA3MDkwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMTM5LDEwICsxNDAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0
cnlGbGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZ2VvbWV0
cnlGbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KIAotICAgIHZv
aWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KSB7IG1fZHJhd1RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3Jt
OyB9Ci0KLSAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3Bh
Y2l0eSA9IG9wYWNpdHk7IH0KICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd09wYWNpdHk7IH0KIAogICAgIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBtX293
bmVyICYmIG1fb3duZXItPnByZXNlcnZlczNEKCk7IH0KQEAgLTE2NSw4ICsxNjMsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOwogCi0gICAgLy8gRHJhd3MgdGhlIGxh
eWVyIHdpdGhvdXQgYSB0ZXh0dXJlLiBUaGlzIGlzIHVzZWQgZm9yIHN0ZW5jaWwgb3BlcmF0aW9u
cy4KLSAgICB2b2lkIGRyYXdBc01hc2soKTsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKIAogICAgIC8vIFN0b3JlcyB2YWx1ZXMgdGhhdCBhcmUgc2hh
cmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUKICAgICAvLyBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHNhbWUgTGF5ZXJSZW5kZXJlckNocm9taXVtIChhbmQgaGVuY2UgdGhl
IHNhbWUgR0wKQEAgLTE5OCw2ICsxOTUsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBw
cmVwYXJlRm9yRHJhdyhjb25zdCBTaGFyZWRWYWx1ZXMqKTsKIAorICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5n
ZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293bmVy
OwogICAgIExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CkBAIC0y
MDUsMTEgKzIwNCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBpcyBjYWxsZWQgdG8gY2xl
YW4gdXAgcmVzb3VyY2VzIGJlaW5nIGhlbGQgaW4gdGhlIHNhbWUgY29udGV4dCBhcwogICAgIC8v
IGxheWVyUmVuZGVyZXJDb250ZXh0KCkuIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMg
bWV0aG9kIGlmIHRoZXkKICAgICAvLyBob2xkIGNvbnRleHQtZGVwZW5kZW50IHJlc291cmNlcyBz
dWNoIGFzIHRleHR1cmVzLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKIAotICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJl
ci5nZXQoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgp
IGNvbnN0OwogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNj
ZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3LgorICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3Q29u
dGVudCgpOworCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQg
YWxwaGFMb2NhdGlvbik7CkBAIC0yMjIsNiArMjIzLDEyIEBAIHByb3RlY3RlZDoKICAgICBGbG9h
dFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgYm9vbCBtX2NvbnRlbnRzRGlydHk7CiAKKyAgICAvLyBS
ZW5kZXIgc3VyZmFjZSB0aGlzIGxheWVyIGRyYXdzIGludG8uIFRoaXMgaXMgYSBzdXJmYWNlIHRo
YXQgY2FuIGJlbG9uZworICAgIC8vIGVpdGhlciB0byB0aGlzIGxheWVyIChpZiBtX3RhcmdldFJl
bmRlclN1cmZhY2UgPT0gbV9yZW5kZXJTdXJmYWNlKSBvcgorICAgIC8vIHRvIGFuIGFuY2VzdG9y
IG9mIHRoaXMgbGF5ZXIuIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgZGV0ZXJtaW5lcyB0aGUK
KyAgICAvLyBjb29yZGluYXRlIHN5c3RlbSB0aGUgbGF5ZXIncyB0cmFuc2Zvcm1zIGFyZSByZWxh
dGl2ZSB0by4KKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZTsKKwogICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBzYW1lIGF0dHJpYnV0ZSBs
b2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCiAgICAgLy8gYW5kIHRleHR1cmUgY29v
cmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdpdGhvdXQgcmViaW5kaW5n
IGF0dHJpYnV0ZQogICAgIC8vIGFycmF5cy4KQEAgLTI0NCw2ICsyNTEsOCBAQCBwcml2YXRlOgog
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5
ZXIuCiAgICAgdm9pZCByZW1vdmVTdWJsYXllcihMYXllckNocm9taXVtKik7CiAKKyAgICBib29s
IGRlc2NlbmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKTsKKwogICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsKICAgICBMYXllckNocm9taXVtKiBtX3N1cGVy
bGF5ZXI7CiAKQEAgLTI2Niw2ICsyNzUsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2VvbWV0
cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAorICAg
IC8vIFRoZSBnbG9iYWwgZGVwdGggdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuIFRo
aXMgdmFsdWUgaXMgdXNlZAorICAgIC8vIHRvIHNvcnQgbGF5ZXJzIGZyb20gYmFjayB0byBmcm9u
dC4KKyAgICBmbG9hdCBtX2RyYXdEZXB0aDsKKwogICAgIC8vIFBvaW50cyB0byB0aGUgbGF5ZXIg
cmVuZGVyZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3cyB0aGlzIGxheWVyLgogICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKIApAQCAtMjc0LDYgKzI4Nywx
OCBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zv
cm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogCisgICAgLy8g
VGhlIHNjaXNzb3IgcmVjdGFuZ2xlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGlzIGxheWVy
IGlzIGRyYXduLgorICAgIC8vIEluaGVyaXRlZCBieSB0aGUgcGFyZW50IGxheWVyIGFuZCBmdXJ0
aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBsYXllciBtYXNrcworICAgIC8vIHRvIGJvdW5kcy4KKyAg
ICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisKKyAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lh
dGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKKyAgICAv
LyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOworCisgICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5n
IHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAgICBJbnRS
ZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKKwogICAgIFN0cmluZyBtX25hbWU7CiB9OwogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcwOTA3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwyOSArNDgsMzkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxv
YXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9hdCBuZWFyWiwgZmxvYXQgZmFy
WikKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBm
bG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCiB7CiAgICAgZmxvYXQgZGVsdGFY
ID0gcmlnaHQgLSBsZWZ0OwogICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKLSAgICBm
bG9hdCBkZWx0YVogPSBmYXJaIC0gbmVhclo7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0
aG87Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSB8fCAhZGVsdGFaKQorICAgIGlmICghZGVs
dGFYIHx8ICFkZWx0YVkpCiAgICAgICAgIHJldHVybiBvcnRobzsKICAgICBvcnRoby5zZXRNMTEo
Mi4wZiAvIGRlbHRhWCk7CiAgICAgb3J0aG8uc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAvIGRlbHRh
WCk7CiAgICAgb3J0aG8uc2V0TTIyKDIuMGYgLyBkZWx0YVkpOwogICAgIG9ydGhvLnNldE00Migt
KHRvcCArIGJvdHRvbSkgLyBkZWx0YVkpOwotICAgIG9ydGhvLnNldE0zMygtMi4wZiAvIGRlbHRh
Wik7Ci0gICAgb3J0aG8uc2V0TTQzKC0obmVhclogKyBmYXJaKSAvIGRlbHRhWik7CisKKyAgICAv
LyBaIGNvbXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMgc2V0IHRvIHplcm8gYXMgd2UgZG9u
J3QgdXNlIHRoZSBkZXB0aCBidWZmZXIKKyAgICAvLyB3aGlsZSBkcmF3aW5nLgorICAgIG9ydGhv
LnNldE0zMygwKTsKKyAgICBvcnRoby5zZXRNNDMoMCk7CisKICAgICByZXR1cm4gb3J0aG87CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IExheWVyQ2hyb21pdW0q
IGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdHJp
eCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3IgcGVyc3BlY3RpdmUgY29tcG9uZW50cyB0byBpdC4K
K3N0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtKQogewotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1BID0g
YS0+ZHJhd1RyYW5zZm9ybSgpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm1CID0gYi0+ZHJhd1RyYW5zZm9ybSgpOworICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5t
MTMoKSAmJiAhbS5tMTQoKQorICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAh
bS5tMjQoKQorICAgICAgICAgICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5tNDMoKQor
ICAgICAgICAgICAmJiBtLm00NCgpOwogCi0gICAgcmV0dXJuIHRyYW5zZm9ybUEubTQzKCkgPCB0
cmFuc2Zvcm1CLm00MygpOworfQorCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFy
ZUxheWVyWihjb25zdCBMYXllckNocm9taXVtKiBhLCBjb25zdCBMYXllckNocm9taXVtKiBiKQor
eworICAgIHJldHVybiBhLT5tX2RyYXdEZXB0aCA8IGItPm1fZHJhd0RlcHRoOwogfQogCiBQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKQEAgLTg5LDExICs5OSwx
NCBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgOiBtX3Jv
b3RMYXllclRleHR1cmVJZCgwKQogICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAg
ICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9zY3JvbGxTaGFkZXJQcm9n
cmFtKDApCisgICAgLCBtX3RleHR1cmVMYXllclNoYWRlclByb2dyYW0oMCkKICAgICAsIG1fcm9v
dExheWVyKDApCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAg
LCBtX2N1cnJlbnRTaGFkZXIoMCkKKyAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKKyAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiB7CiAgICAgbV9oYXJkd2FyZUNvbXBv
c2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKIH0KQEAgLTE4MSwxMiArMTk0LDE1
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICBpbnQgdmlz
aWJsZVJlY3RXaWR0aCA9IHZpc2libGVSZWN0LndpZHRoKCk7CiAgICAgaW50IHZpc2libGVSZWN0
SGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0V2lkdGgg
IT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7Ci0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0g
dmlzaWJsZVJlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0g
dmlzaWJsZVJlY3RXaWR0aDsKKyAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlz
aWJsZVJlY3RIZWlnaHQ7CiAKLSAgICAgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRy
aXgoMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQsIDAsIC0xMDAwLCAxMDAw
KTsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290
TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CiAK
KyAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4g
dXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAgICAgLy8gcHJvamVjdGlvbiBtYXRyaXgg
bmV4dCB0aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVkLgorICAgICAgICBtX2N1cnJlbnRS
ZW5kZXJTdXJmYWNlID0gMDsKKwogICAgICAgICAvLyBUaGUgcm9vdCBsYXllciB0ZXh0dXJlIHdh
cyBqdXN0IHJlc2l6ZWQgc28gaXRzIGNvbnRlbnRzIGFyZSBub3QKICAgICAgICAgLy8gdXNlZnVs
IGZvciBzY3JvbGxpbmcuCiAgICAgICAgIHNraXBTY3JvbGwgPSB0cnVlOwpAQCAtMjAxLDggKzIx
Nyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICAvLyBG
SVhNRTogVGhlc2UgY2FsbHMgY2FuIGJlIG1hZGUgb25jZSwgd2hlbiB0aGUgY29tcG9zaXRvciBj
b250ZXh0IGlzIGluaXRpYWxpemVkLgogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7Ci0gICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZXB0aEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkxF
UVVBTCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApKTsK
KwogICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxwaGEg
Y2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5cGUu
IAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpKTsgCiAKQEAgLTIzMCwxMSArMjQ1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICAgICAgICAgIDAuNSAqIHZpc2libGVSZWN0LmhlaWdo
dCgpICsgc2Nyb2xsRGVsdGEueSgpLCAwKTsKICAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5z
Y2FsZTNkKDEsIC0xLCAxKTsKIAotICAgICAgICB1c2VTaGFkZXIobV9zY3JvbGxTaGFkZXJQcm9n
cmFtKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkobV9zY3Jv
bGxTaGFkZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgdXNlU2hhZGVyKG1fdGV4dHVy
ZUxheWVyU2hhZGVyUHJvZ3JhbSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
dW5pZm9ybTFpKG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uLCAwKSk7CiAgICAg
ICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3By
b2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVp
Z2h0KCksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3Jv
bGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24sIG1fdGV4dHVy
ZUxheWVyU2hhZGVyQWxwaGFMb2NhdGlvbik7CiAKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgMCwgMCwgMCwgMCwgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkp
KTsKICAgICB9CkBAIC0yNzUsOCArMjkwLDE2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKGMKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAor
ICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNl
LmdldCgpOworICAgIGlmICghbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSkKKyAgICAgICAgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZSA9IG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoMCwgMCwg
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCk7CisKKyAg
ICB1c2VSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJlbmRlclN1cmZhY2UpOworCisgICAgLy8gQ2xl
YXIgdG8gYmx1ZSB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IHVucmVuZGVyZWQgcmVnaW9ucy4K
ICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwgMSk7Ci0gICAgbV9jb250ZXh0LT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVy
VGV4dHVyZUlkKSk7CiAKQEAgLTI5NSw0NiArMzE4LDU0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVy
VmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKIAotICAgIC8vIElmIGN1
bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdlIHdpbGwgY3VsbCB0aGUgYmFja2ZhY2UuCi0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5jdWxsRmFjZShHcmFwaGljc0NvbnRleHQzRDo6QkFDSykp
OwotICAgIC8vIFRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBpcyBzZXR1cCBzdWNoIHRoYXQg
WSBzdGFydHMgYXQgemVybyBhbmQKLSAgICAvLyBpbmNyZWFzZXMgZ29pbmcgZG93biB0aGUgcGFn
ZSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgd2luZGluZyBvcmRlciBvZgotICAgIC8vIGZyb250
IGZhY2luZyB0cmlhbmdsZXMuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcm9udEZh
Y2UoR3JhcGhpY3NDb250ZXh0M0Q6OkNXKSk7Ci0KLSAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8g
cmVuZGVyIGxheWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwotICAgIC8v
IHNvIHdlIG5lZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgotICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0K
ICAgICAvLyBTZXQgdGhlIHJvb3QgdmlzaWJsZS9jb250ZW50IHJlY3RzIC0tLSB1c2VkIGJ5IHN1
YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscy4KICAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2li
bGVSZWN0OwogICAgIG1fcm9vdENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7CiAKLSAgICAvLyBU
cmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgot
ICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwotICAgIHNp
emVfdCBpOworICAgIC8vIFNjaXNzb3Igb3V0IHRoZSBzY3JvbGxiYXJzIHRvIGF2b2lkIHJlbmRl
cmluZyBvbiB0b3Agb2YgdGhlbS4KKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChjb250ZW50
UmVjdCk7CisgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Ny
b2xsIG9mZnNldC4KKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54
KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgbV9yb290TGF5ZXItPm1fc2Npc3NvclJl
Y3QgPSByb290U2Npc3NvclJlY3Q7CisKKyAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobV9y
b290TGF5ZXIuZ2V0KCkpOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7Ci0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAg
dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IG9wYWNpdHkpOworICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFy
KCk7CisgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+
bV9sYXllckxpc3QpOwogCi0gICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVy
aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCisgICAgLy8gVGhlIHNo
YWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBj
b2xvcnMKKyAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9w
cmlhdGVseS4KKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVu
YyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NS
Q19BTFBIQSkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICBJbnRSZWN0IHNjaXNzb3JSZWN0KGNvbnRl
bnRSZWN0KTsKIAotICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhl
IHNjcm9sbCBvZmZzZXQuCi0gICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54
KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVj
dCk7CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBX
ZSB0cmF2ZXJzZSB0aGUgYXJyYXkgZnJvbQorICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFu
dGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCisgICAg
Ly8gY29ycmVjdCBvcmRlci4KKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgc3VyZmFjZUluZGV4
LS0pIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdOworICAgICAgICBBU1NFUlQocmVuZGVyU3Vy
ZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UpOworCisgICAgICAgIC8vIFJlbmRlciBzdXJmYWNl
cyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9yIGhlaWdodAorICAgICAgICAv
LyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFuZCBzaG91bGQgYmUg
c2tpcHBlZC4KKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFj
ZS0+bV9sYXllckxpc3Quc2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQo
KSk7CisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gbV9yb290TGF5ZXIpIHsKKyAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOworICAgICAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOwor
ICAgICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAgICB9CiAKLSAgICAvLyBDbGVhciB0aGUgc3Rl
bmNpbCBidWZmZXIgdG8gMC4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyKEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKTsKLSAgICAvLyBEaXNhYmxlIHdy
aXRlcyB0byB0aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5zdGVuY2lsTWFzaygwKSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUg
bW9yZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJs
YXllcnNbaV0uZ2V0KCkpOworICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBsYXllckxp
c3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Q7Cisg
ICAgICAgIEFTU0VSVChsYXllckxpc3Quc2l6ZSgpID4gMCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyBsYXllcklu
ZGV4KyspCisgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLCByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKSk7CisgICAgfQogCiAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CkBAIC00MDgsMTAgKzQzOSwxMiBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aXNMYXllclZpc2liCiAgICAgcmV0dXJuIG1hcHBlZFJlY3QuaW50ZXJzZWN0
cyhGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiB9CiAKLS8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRo
ZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCB1cGRhdGVzIHRoZSAK
LS8vIHRyYW5zZm9ybSBhbmQgb3BhY2l0eSB2YWx1ZXMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5KQorLy8gUmVj
dXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUg
YW5kIHVwZGF0ZXMgdGhlaXIKKy8vIGRyYXdpbmcgdHJhbnNmb3JtIG1hdHJpeC4KK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxM
YXllckNocm9taXVtKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxMYXllckNocm9t
aXVtKj4mIGxheWVyTGlzdCkKIHsKKyAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsK
KwogICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxs
IGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4g
SXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgogICAg
IC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSB1c2VkCkBAIC00MzgsMTgyICs0NzEsMjUzIEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMKICAgICBmbG9hdCBjZW50ZXJPZmZzZXRY
ID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKICAgICBmbG9hdCBj
ZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMuaGVpZ2h0KCk7
CiAKLSAgICAvLyBNID0gTVtwXQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsTWF0cml4
ID0gcGFyZW50TWF0cml4OwotICAgIC8vIE0gPSBNW3BdICogVHJbbF0KLSAgICBsb2NhbE1hdHJp
eC50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBv
aW50WigpKTsKLSAgICAvLyBNID0gTVtwXSAqIFRyW2xdICogTVtsXQotICAgIGxvY2FsTWF0cml4
Lm11bHRMZWZ0KGxheWVyLT50cmFuc2Zvcm0oKSk7Ci0gICAgLy8gTSA9IE1bcF0gKiBUcltsXSAq
IE1bbF0gKiBUcltjXQotICAgIGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyTG9jYWxUcmFuc2Zvcm07CisgICAgLy8gTFQgPSBUcltsXQorICAgIGxh
eWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCks
IGxheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0KKyAgICBs
YXllckxvY2FsVHJhbnNmb3JtLm11bHRMZWZ0KGxheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgLy8g
TFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNs
YXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFoo
KSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVu
dE1hdHJpeDsKKyAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRM
ZWZ0KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41
ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0
KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwor
ICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CisKKyAgICAvLyBUaGUgbGF5ZXIgYW5k
IGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBuZXcgUmVuZGVyU3VyZmFjZSBpZiBhbnkgb2YK
KyAgICAvLyB0aGVzZSBjb25kaXRpb25zIGhvbGQ6CisgICAgLy8gMS4gVGhlIGxheWVyIGNsaXBz
IGl0cyBkZXNjZW5kYW50cyBhbmQgaXRzIHRyYW5zZm9ybSBpcyBub3QgYSBzaW1wbGUgdHJhbnNs
YXRpb24uCisgICAgLy8gMi4gSWYgdGhlIGxheWVyIGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMg
bm90IGhhdmUgYSBwcmVzZXJ2ZXMtM2QgdHJhbnNmb3JtIHN0eWxlLgorICAgIC8vIElmIGEgbGF5
ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVyU3VyZmFjZSBmb3Ig
aXQgdG8gYXZvaWQgZmxhdHRlbmluZworICAgIC8vIG91dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFj
aXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMgbXVsdGlwbGllZCBieSB0aGUgb3Bh
Y2l0eQorICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KKyAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlw
cGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNv
bWJpbmVkVHJhbnNmb3JtKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXIt
Pm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsKKyAgICBpZiAoKHVzZVN1
cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2Nl
bmRhbnRzRHJhd0NvbnRlbnQoKSkgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgICAgICBpZiAo
IXJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3Vy
ZmFjZSBpcyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgorICAgICAgICBsYXll
ci0+bV9kcmF3VHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICAgICAgbGF5
ZXItPm1fZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41
ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9
IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAg
ICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJl
bmRlciBzdXJmYWNlLgorICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5
ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZl
czNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVy
LT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7CisgICAgICAgIGxheWVyLT5tX2RyYXdPcGFj
aXR5ID0gMTsKKworICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlz
IHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bworICAgICAgICAvLyBiZSBhcHBsaWVkIGJl
Zm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCisgICAg
ICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5
ZXIncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29y
UmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3Q7CisKKyAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKKworICAgICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRFQgPSBN
W3BdICogTFQKKyAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNm
b3JtOworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobGF5
ZXItPm1fZHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCkpOworCisgICAgICAgIGxheWVy
LT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKworICAgICAgICBpZiAobGF5ZXIt
PnN1cGVybGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCktPnBy
ZXNlcnZlczNEKCkpCisgICAgICAgICAgICAgICBsYXllci0+bV9kcmF3T3BhY2l0eSAqPSBsYXll
ci0+c3VwZXJsYXllcigpLT5tX2RyYXdPcGFjaXR5OworCisgICAgICAgICAgICAvLyBMYXllcnMg
aW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgc3VwZXJsYXllci4KKyAgICAgICAg
ICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9zY2lzc29y
UmVjdDsKKworICAgICAgICAgICAgbGF5ZXItPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IGxheWVy
LT5zdXBlcmxheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsYXllciAhPSBtX3Jvb3RMYXllcikKKyAgICAgICAgICAgIGxheWVyLT5tX3JlbmRl
clN1cmZhY2UgPSAwOwogCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBsYXllcidzIG9wYWNpdHkuCi0g
ICAgb3BhY2l0eSAqPSBsYXllci0+b3BhY2l0eSgpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tz
VG9Cb3VuZHMoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0LmludGVyc2VjdCh0
cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tX3JlbmRlclN1
cmZhY2UpCisgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9y
ZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobGF5ZXItPnN1
cGVybGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBsYXll
ci0+c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgfQogCi0gICAgbGF5
ZXItPnNldERyYXdUcmFuc2Zvcm0obG9jYWxNYXRyaXgpOwotICAgIGxheWVyLT5zZXREcmF3T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICAvLyBtX2RyYXdhYmxlQ29udGVudFJlY3QgaXMgYWx3YXlzIHN0
b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCisgICAgLy8gUmVuZGVyU3VyZmFj
ZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQor
ICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJl
Y3Q7CisgICAgZWxzZQorICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0ID0gSW50
UmVjdCgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXll
ci0+bV9kcmF3VHJhbnNmb3JtOwogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIg
ZG9lc24ndCBwcmVzZXJ2ZSAzRC4KICAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7Ci0g
ICAgICAgIGxvY2FsTWF0cml4LnNldE0xMygwKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTIz
KDApOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMzEoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4
LnNldE0zMigwKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTMzKDEpOwotICAgICAgICBsb2Nh
bE1hdHJpeC5zZXRNMzQoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE00MygwKTsKKyAgICAg
ICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRN
MjMoMCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKKyAgICAgICAgc3VibGF5
ZXJNYXRyaXguc2V0TTMyKDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7Cisg
ICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zNCgwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXgu
c2V0TTQzKDApOwogICAgIH0KIAogICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zvcm0g
YXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgbG9jYWxNYXRyaXgubXVsdExlZnQobGF5
ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAgIHN1YmxheWVyTWF0cml4Lm11bHRMZWZ0KGxh
eWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAotICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIHN1
YmxheWVycyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllcgot
ICAgIC8vIChvciB0b3AgbGVmdCB3aGVuIGxvb2tpbmcgaXQgaXQgZnJvbSB0aGUgYnJvd3Nlcidz
IHBlc3BlY3RpdmUpIGluc3RlYWQgb2YgdGhlIGNlbnRlci4KLSAgICAvLyBUaGUgbWF0cml4IHBh
c3NlZCBkb3duIHRvIHRoZSBzdWJsYXllcnMgaXMgdGhlcmVmb3JlOgorICAgIC8vIFRoZSBvcmln
aW4gb2YgdGhlIHN1YmxheWVycyBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllciwg
bm90IHRoZQorICAgIC8vIGNlbnRlci4gVGhlIG1hdHJpeCBwYXNzZWQgZG93biB0byB0aGUgc3Vi
bGF5ZXJzIGlzIHRoZXJlZm9yZToKICAgICAvLyBNW3NdID0gTSAqIFRyWy1jZW50ZXJdCi0gICAg
bG9jYWxNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhl
aWdodCgpICogMC41LCAwKTsKKyAgICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRz
LndpZHRoKCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwogCi0gICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3Vi
bGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBp
KyspCi0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGxv
Y2FsTWF0cml4LCBvcGFjaXR5KTsKKyAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBkZXNjZW5k
YW50cyA9IChsYXllci0+bV9yZW5kZXJTdXJmYWNlID8gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+
bV9sYXllckxpc3QgOiBsYXllckxpc3QpOworICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7
CisgICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwog
Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci19CisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgTGF5ZXJDaHJvbWl1bSogc3VibGF5ZXIgPSBzdWJsYXllcnNbaV0uZ2V0KCk7Cisg
ICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllciwgc3VibGF5ZXJNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKKworICAgICAgICBpZiAoc3VibGF5
ZXItPm1fcmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgp
OworICAgICAgICAgICAgRmxvYXRSZWN0IHN1YmxheWVyUmVjdCgtMC41ICogc3VibGF5ZXJSZW5k
ZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBzdWJsYXllclJlbmRlclN1
cmZhY2UtPm1fY29udGVudFJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YmxheWVyUmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC53aWR0aCgpLCBz
dWJsYXllclJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHN1
YmxheWVyUmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtLm1hcFJlY3Qoc3VibGF5ZXJSZWN0
KSkpOworICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKHN1YmxheWVyKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKHN1
YmxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QpOworICAgIH0KKworICAgIGlmIChsYXllci0+
bWFza3NUb0JvdW5kcygpKQorICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0Lmlu
dGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisKKyAgICBpZiAobGF5ZXItPm1fcmVuZGVy
U3VyZmFjZSAmJiBsYXllciAhPSBtX3Jvb3RMYXllcikgeworICAgICAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOwor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJTdXJmYWNlVHJhbnNmb3JtID0gcGFy
ZW50TWF0cml4OworICAgICAgICByZW5kZXJTdXJmYWNlVHJhbnNmb3JtLm11bHRMZWZ0KGxheWVy
TG9jYWxUcmFuc2Zvcm0pOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0g
bGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdDsKKyAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNl
Q2VudGVyID0gRmxvYXRSZWN0KHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QpLmNlbnRlcigp
OworCisgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBv
cnRpb24gdGhhdCdzIHZpc2libGUuCisgICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVU
b0NsaXBwaW5nOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlT3JpZ2luVHJh
bnNmb3JtID0gcmVuZGVyU3VyZmFjZVRyYW5zZm9ybTsKKyAgICAgICAgc3VyZmFjZU9yaWdpblRy
YW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMu
aGVpZ2h0KCksIDApOworICAgICAgICBpZiAoc3VyZmFjZU9yaWdpblRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkgeworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VG9TdXJm
YWNlID0gc3VyZmFjZU9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCk7CiAKLS8vIERvZXMgYSBxdWlj
ayBkcmF3IG9mIHRoZSBnaXZlbiBsYXllciBpbnRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4gSWYgZGVj
cmVtZW50Ci0vLyBpcyB0cnVlIHRoZW4gaXQgZGVjcmVtZW50cyB0aGUgY3VycmVudCBzdGVuY2ls
IHZhbHVlcyBvdGhlcndpc2UgaXQgaW5jcmVtZW50cyB0aGVtLgotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllckludG9TdGVuY2lsQnVmZmVyKExheWVyQ2hyb21pdW0qIGxheWVy
LCBib29sIGRlY3JlbWVudCkKLXsKLSAgICAvLyBFbmFibGUgd3JpdGVzIHRvIHRoZSBzdGVuY2ls
IGJ1ZmZlciBhbmQgaW5jcmVtZW50IHRoZSBzdGVuY2lsIHZhbHVlcwotICAgIC8vIGJ5IG9uZSBm
b3IgZXZlcnkgcGl4ZWwgdW5kZXIgdGhlIGN1cnJlbnQgbGF5ZXIuCi0gICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygweGZmKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTLCAxLCAweGZmKSk7
Ci0gICAgdW5zaWduZWQgc3RlbmNpbE9wID0gKGRlY3JlbWVudCA/IEdyYXBoaWNzQ29udGV4dDNE
OjpERUNSIDogR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOwotICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+c3RlbmNpbE9wKHN0ZW5jaWxPcCwgc3RlbmNpbE9wLCBzdGVuY2lsT3ApKTsKKyAg
ICAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3RJblN1cmZhY2VDb29yZHMgPSBwYXJlbnRUb1N1
cmZhY2UubWFwUmVjdChyZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JSZWN0KTsKKyAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KHNjaXNzb3JSZWN0SW5TdXJm
YWNlQ29vcmRzKTsKIAotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JNYXNrKGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBw
ZWRTdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3Qp
LmNlbnRlcigpOworICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBw
ZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKKyAgICAgICAgfQogCi0gICAgbGF5ZXIt
PmRyYXdBc01hc2soKTsKKyAgICAgICAgLy8gVGhlIFJlbmRlclN1cmZhY2UgYmFja2luZyB0ZXh0
dXJlIGNhbm5vdCBleGNlZWQgdGhlIG1heGltdW0gc3VwcG9ydGVkCisgICAgICAgIC8vIHRleHR1
cmUgc2l6ZS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5zZXRXaWR0aChz
dGQ6Om1pbihyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fbWF4VGV4dHVy
ZVNpemUpKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5zZXRIZWlnaHQo
c3RkOjptaW4ocmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSwgbV9tYXhUZXh0
dXJlU2l6ZSkpOworCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB0
aGVuIHdlIG5lZWQgdG8gYWRqdXN0IGl0cworICAgICAgICAvLyBzY2lzc29yIHJlY3QgdG8gYmUg
ZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgICAg
ICBsYXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3Q7CisK
KyAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBiZSB0aGUg
Y2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9k
cmF3VHJhbnNmb3JtID0gc3VyZmFjZU9yaWdpblRyYW5zZm9ybTsKKyAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+bV9kcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpICsgY2Vu
dGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSArIGNlbnRl
ck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVpZ2h0KCksIDApOworICAgIH0KKworICAgIC8vIENvbXB1
dGUgdGhlIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwg
YmUgdXNlZCB3aGVuCisgICAgLy8gc29ydGluZyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJlc2VydmVz
LTNkIHByb3BlcnR5LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdNYXRyaXgg
PSBsYXllci0+bV9yZW5kZXJTdXJmYWNlID8gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9kcmF3
VHJhbnNmb3JtIDogbGF5ZXItPm1fZHJhd1RyYW5zZm9ybTsKKyAgICBpZiAobGF5ZXItPnN1cGVy
bGF5ZXIoKSkgeworICAgICAgICBpZiAoIWxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNE
KCkpCisgICAgICAgICAgICBsYXllci0+bV9kcmF3RGVwdGggPSBsYXllci0+c3VwZXJsYXllcigp
LT5tX2RyYXdEZXB0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXItPm1fZHJhd0Rl
cHRoID0gbGF5ZXJEcmF3TWF0cml4Lm00MygpOworICAgIH0gZWxzZQorICAgICAgICBsYXllci0+
bV9kcmF3RGVwdGggPSAwOwogCi0gICAgLy8gRGlzYWJsZSB3cml0ZXMgdG8gdGhlIHN0ZW5jaWwg
YnVmZmVyLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c3RlbmNpbE1hc2soMCkpOwot
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUs
IHRydWUpKTsKKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2Vu
ZGFudHMgYnkgdGhlIFogY29vcmRpbmF0ZSBvZiB0aGVpcgorICAgIC8vIGNlbnRlci4gSWYgdGhl
IHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXllciB0aGVu
CisgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNvcnQgYWxs
IHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCisgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYm
ICghbGF5ZXItPnN1cGVybGF5ZXIoKSB8fCAhbGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVz
M0QoKSkpCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXll
ckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXllclopOwogfQogCi0vLyBSZWN1
cnNpdmVseSB3YWxrIHRoZSBsYXllciB0cmVlIGFuZCBkcmF3IHRoZSBsYXllcnMuCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllcikKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSkKIHsKLSAgICBzdGF0aWMgYm9vbCBkZXB0
aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOwotICAgIHN0YXRpYyBpbnQgY3VycmVudFN0
ZW5jaWxWYWx1ZSA9IDA7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIgZmFsbHMgd2l0aGlu
IHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9
IGxheWVyLT5nZXREcmF3UmVjdCgpOwotICAgIGJvb2wgaXNMYXllclZpc2libGUgPSBtX2N1cnJl
bnRTY2lzc29yUmVjdC5pbnRlcnNlY3RzKGxheWVyUmVjdCk7CisgICAgaWYgKG1fY3VycmVudFJl
bmRlclN1cmZhY2UgPT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAvLyBFbmFibGUgZGVwdGggdGVzdGluZyBmb3IgdGhpcyBsYXllciBhbmQgYWxsIGl0cyBkZXNj
ZW5kYW50cyBpZiBwcmVzZXJ2ZXMzRCBpcyBzZXQuCi0gICAgYm9vbCBtdXN0Q2xlYXJEZXB0aCA9
IGZhbHNlOwotICAgIGlmIChsYXllci0+cHJlc2VydmVzM0QoKSkgewotICAgICAgICBpZiAoIWRl
cHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlKSB7Ci0gICAgICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwotICAgICAg
ICAgICAgZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSB0cnVlOworICAgIG1fY3VycmVudFJl
bmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlOwogCi0gICAgICAgICAgICAvLyBOZWVkIHRvIGNs
ZWFyIHRoZSBkZXB0aCBidWZmZXIgd2hlbiB3ZSdyZSBkb25lIHJlbmRlcmluZyB0aGlzIHN1YnRy
ZWUuCi0gICAgICAgICAgICBtdXN0Q2xlYXJEZXB0aCA9IHRydWU7Ci0gICAgICAgIH0KKyAgICBp
ZiAocmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKSB7CisgICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgMCkpOworICAgICAgICBzZXREcmF3Vmlld3BvcnRSZWN0KHJlbmRlclN1
cmZhY2UtPm1fY29udGVudFJlY3QsIHRydWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpZiAoaXNMYXllclZpc2libGUpCi0gICAgICAgIGRyYXdMYXllcihsYXllcik7Cisg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIAotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgaGVyZSBpZiB0aGUgbGF5ZXIgaGFzIGRlc2NlbmRhbnRz
IHRoYXQgZHJhdyBjb250ZW50Ci0gICAgLy8gYmVmb3JlIHdlIHNldHVwIGZvciBjbGlwcGluZy4K
LSAgICBJbnRSZWN0IHByZXZpb3VzU2Npc3NvclJlY3QgPSBtX2N1cnJlbnRTY2lzc29yUmVjdDsK
LSAgICBib29sIG11c3RSZXNldFNjaXNzb3JSZWN0ID0gZmFsc2U7Ci0gICAgYm9vbCBkaWRTdGVu
Y2lsRHJhdyA9IGZhbHNlOwotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBsYXllciBpc24ndCByb3RhdGVkIHRoZW4gd2UgY2FuIHVzZSBzY2lzc29y
aW5nIG90aGVyd2lzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGNsaXAgdXNpbmcgdGhlIHN0ZW5j
aWwgYnVmZmVyLgotICAgICAgICBpZiAobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbigpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGN1cnJlbnRTY2lzc29yUmVj
dCA9IHByZXZpb3VzU2Npc3NvclJlY3Q7Ci0gICAgICAgICAgICBjdXJyZW50U2Npc3NvclJlY3Qu
aW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFNjaXNzb3JSZWN0
ICE9IHByZXZpb3VzU2Npc3NvclJlY3QpIHsKLSAgICAgICAgICAgICAgICBzY2lzc29yVG9SZWN0
KGN1cnJlbnRTY2lzc29yUmVjdCk7Ci0gICAgICAgICAgICAgICAgbXVzdFJlc2V0U2Npc3NvclJl
Y3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGVu
Y2lsVmFsdWUgPCAoKDEgPDwgbV9udW1TdGVuY2lsQml0cykgLSAxKSkgewotICAgICAgICAgICAg
Ly8gQ2xpcHBpbmcgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyIHdvcmtzIGFzIGZvbGxvd3M6IFdo
ZW4gd2UgZW5jb3VudGVyCi0gICAgICAgICAgICAvLyBhIGNsaXBwaW5nIGxheWVyIHdlIGluY3Jl
bWVudCB0aGUgc3RlbmNpbCBidWZmZXIgdmFsdWVzIGZvciBhbGwgdGhlIHBpeGVscwotICAgICAg
ICAgICAgLy8gdGhlIGxheWVyIHRvdWNoZXMuIEFzIGEgcmVzdWx0IDEncyB3aWxsIGJlIHN0b3Jl
ZCBpbiB0aGUgc3RlbmNpbCBidWZmZXIgZm9yIHBpeGVscyB1bmRlcgotICAgICAgICAgICAgLy8g
dGhlIGZpcnN0IGNsaXBwaW5nIGxheWVyIGZvdW5kIGluIGEgdHJhdmVyc2FsLCAyJ3MgZm9yIHBp
eGVscyBpbiB0aGUgaW50ZXJzZWN0aW9uCi0gICAgICAgICAgICAvLyBvZiB0d28gbmVzdGVkIGNs
aXBwaW5nIGxheWVycywgZXRjLiBXaGVuIHRoZSBzdWJsYXllcnMgb2YgYSBjbGlwcGluZyBsYXll
ciBhcmUgZHJhd24KLSAgICAgICAgICAgIC8vIHdlIHR1cm4gb24gc3RlbmNpbCB0ZXN0aW5nIHRv
IHJlbmRlciBvbmx5IHBpeGVscyB0aGF0IGhhdmUgdGhlIGNvcnJlY3Qgc3RlbmNpbAotICAgICAg
ICAgICAgLy8gdmFsdWUgKG9uZSB0aGF0IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGN1cnJlbnRTdGVu
Y2lsVmFsdWUpLiBBcyB0aGUgcmVjdXJzaW9uIHVucmF2ZWxzLAotICAgICAgICAgICAgLy8gd2Ug
ZGVjcmVtZW50IHRoZSBzdGVuY2lsIGJ1ZmZlciB2YWx1ZXMgZm9yIGVhY2ggY2xpcHBpbmcgbGF5
ZXIuIFdoZW4gdGhlIGVudGlyZSBsYXllciB0cmVlCi0gICAgICAgICAgICAvLyBpcyByZW5kZXJl
ZCwgdGhlIHN0ZW5jaWwgdmFsdWVzIHNob3VsZCBiZSBhbGwgYmFjayB0byB6ZXJvLiBBbiA4IGJp
dCBzdGVuY2lsIGJ1ZmZlcgotICAgICAgICAgICAgLy8gd2lsbCBhbGxvdyB1cyB1cCB0byAyNTUg
bmVzdGVkIGNsaXBwaW5nIGxheWVycyB3aGljaCBpcyBob3BlZnVsbHkgZW5vdWdoLgotICAgICAg
ICAgICAgaWYgKCFjdXJyZW50U3RlbmNpbFZhbHVlKQotICAgICAgICAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Qp
KTsKKyAgICByZW5kZXJTdXJmYWNlLT5wcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CiAKLSAgICAg
ICAgICAgIGRyYXdMYXllckludG9TdGVuY2lsQnVmZmVyKGxheWVyLCBmYWxzZSk7CisgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRzVGV4dHVy
ZUlkLCAwKSk7CiAKLSAgICAgICAgICAgIGN1cnJlbnRTdGVuY2lsVmFsdWUrKzsKLSAgICAgICAg
ICAgIGRpZFN0ZW5jaWxEcmF3ID0gdHJ1ZTsKLSAgICAgICAgfQorI2lmICFkZWZpbmVkICggTkRF
QlVHICkKKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIC8vIFN1YmxheWVycyB3aWxsIHJlbmRlciBvbmx5IGlmIHRo
ZSB2YWx1ZSBpbiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgZXF1YWwgdG8KLSAgICAvLyBjdXJyZW50
U3RlbmNpbFZhbHVlLgotICAgIGlmIChkaWRTdGVuY2lsRHJhdykgewotICAgICAgICAvLyBUaGUg
c3VibGF5ZXJzIHdpbGwgcmVuZGVyIG9ubHkgaWYgdGhlIHN0ZW5jaWwgdGVzdCBwYXNzZXMuCi0g
ICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6OkVRVUFMLCBjdXJyZW50U3RlbmNpbFZhbHVlLCAweGZmKSk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgd2UncmUgdXNpbmcgZGVwdGggdGVzdGluZyB0aGVuIHdlIG5lZWQgdG8gc29ydCB0aGUg
Y2hpbGRyZW4gaW4gWiB0bwotICAgIC8vIGdldCB0aGUgdHJhbnNwYXJlbmN5IHRvIHdvcmsgcHJv
cGVybHkuCi0gICAgaWYgKGRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlKSB7Ci0gICAgICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdl
dFN1YmxheWVycygpOwotICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHN1YmxheWVyTGlz
dDsKLSAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMu
c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBzdWJsYXllckxpc3QuYXBwZW5kKHN1YmxheWVyc1tp
XS5nZXQoKSk7Ci0KLSAgICAgICAgLy8gU29ydCBieSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBs
YXllciBjZW50ZXIgc28gdGhhdCBsYXllcnMgZnVydGhlciBhd2F5Ci0gICAgICAgIC8vIGFyZSBk
cmF3biBmaXJzdC4KLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChzdWJsYXllckxpc3QuYmVnaW4o
KSwgc3VibGF5ZXJMaXN0LmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKKyNlbmRpZgogCi0gICAgICAg
IGZvciAoaSA9IDA7IGkgPCBzdWJsYXllckxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBk
cmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyTGlzdFtpXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXll
ci0+Z2V0U3VibGF5ZXJzKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5
ZXJzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXll
cnNbaV0uZ2V0KCkpOwotICAgIH0KKyAgICBzZXREcmF3Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZh
Y2UtPm1fY29udGVudFJlY3QsIGZhbHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGlm
IChkaWRTdGVuY2lsRHJhdykgewotICAgICAgICAvLyBEcmF3IGludG8gdGhlIHN0ZW5jaWwgYnVm
ZmVyIHN1YnRyYWN0aW5nIDEgZm9yIGV2ZXJ5IHBpeGVsIGhpdAotICAgICAgICAvLyBlZmZlY3Rp
dmVseSByZW1vdmluZyB0aGlzIG1hc2sKLSAgICAgICAgZHJhd0xheWVySW50b1N0ZW5jaWxCdWZm
ZXIobGF5ZXIsIHRydWUpOwotICAgICAgICBjdXJyZW50U3RlbmNpbFZhbHVlLS07Ci0gICAgICAg
IGlmICghY3VycmVudFN0ZW5jaWxWYWx1ZSkgewotICAgICAgICAgICAgLy8gRGlzYWJsZSBzdGVu
Y2lsIHRlc3RpbmcuCi0gICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkpOwotICAgICAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlT
LCAwLCAweGZmKSk7Ci0gICAgICAgIH0KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0
U3VyZmFjZSkKK3sKKyAgICBpZiAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAmJiBsYXllci0+bV9y
ZW5kZXJTdXJmYWNlICE9IHRhcmdldFN1cmZhY2UpIHsKKyAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbGF5
ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50c1RleHR1cmVJZCkpOworICAgICAgICB1c2VT
aGFkZXIobV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKTsKKworICAgICAgICBzY2lzc29yVG9S
ZWN0KGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fc2Npc3NvclJlY3QpOworCisgICAgICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0
OworICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKG1fY29udGV4dC5nZXQo
KSwgbV9wcm9qZWN0aW9uTWF0cml4LCBsYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJl
Y3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCksIGxheWVyLT5tX3JlbmRlclN1cmZhY2Ut
Pm1fZHJhd09wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90ZXh0dXJlTGF5ZXJTaGFkZXJNYXRyaXhMb2NhdGlvbiwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJB
bHBoYUxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtdXN0UmVz
ZXRTY2lzc29yUmVjdCkgewotICAgICAgICBzY2lzc29yVG9SZWN0KHByZXZpb3VzU2Npc3NvclJl
Y3QpOwotICAgIH0KKyAgICBpZiAobGF5ZXItPm1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG11c3RDbGVhckRlcHRoKSB7Ci0gICAgICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkpOwot
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9CVUZGRVJfQklUKSk7Ci0gICAgICAgIGRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVl
ID0gZmFsc2U7Ci0gICAgfQotfQorICAgIC8vIFNldCB0aGUgY3VycmVudCBzY2lzc29yIHJlY3Qu
CisgICAgc2Npc3NvclRvUmVjdChsYXllci0+bV9zY2lzc29yUmVjdCk7CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi17Ci0gICAg
SW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgLy8gQ2hlY2sgaWYgdGhlIGxh
eWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCisgICAgSW50
UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3QoKTsKKyAgICBib29sIGlzTGF5ZXJW
aXNpYmxlID0gbGF5ZXItPm1fc2Npc3NvclJlY3QuaW50ZXJzZWN0cyhsYXllclJlY3QpOworICAg
IGlmICghaXNMYXllclZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNvbnRhaW50YWlu
aW5nCisgICAgLy8gUmVuZGVyU3VyZmFjZSBoZXJlLgorICAgIGlmICghbGF5ZXItPmRvdWJsZVNp
ZGVkKCkgJiYgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybS5tMzMoKSA8IDApCisgICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIC8vIFVwZGF0
ZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlmIG5lY2Vzc2FyeS4KQEAgLTYyMywxMSArNzI3
LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYQogICAgICAgICAg
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChsYXllci0+ZG91YmxlU2lkZWQoKSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRSk7Ci0KICAg
ICAgICAgbGF5ZXItPmRyYXcoKTsKICAgICB9CiAKQEAgLTYzOSwxMCArNzM4LDE3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGEKIC8vIHNjaXNzb3JSZWN0IGhhcyBp
dHMgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGN1cnJlbnQgdmlzaWJsZSBy
ZWN0Lgogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNjaXNzb3JUb1JlY3QoY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbG93ZXIgbGVmdCBjb3Ju
ZXIgb2YgdGhlIHNjaXNzb3IgcmVjdC4KLSAgICBpbnQgYm90dG9tID0gc3RkOjptYXgobV9yb290
VmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBzY2lzc29yUmVjdC5ib3R0b20oKSwgMCk7Ci0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JSZWN0LngoKSwgYm90dG9tLCBz
Y2lzc29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWlnaHQoKSkpOwotICAgIG1fY3VycmVu
dFNjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7CisgICAgLy8gVGhlIHNjaXNzb3IgY29vcmRpbmF0
ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3ZSBuZWVkIHRvIG9mZnNl
dAorICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVy
IG9mIHRoZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlLgorICAgIGludCBzY2lzc29yWCA9IHNjaXNz
b3JSZWN0LngoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueCgpOwor
ICAgIC8vIFdoZW4gcmVuZGVyaW5nIHRvIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJmYWNlIHdlJ3Jl
IHJlbmRlcmluZyB1cHNpZGUgZG93biBzbyB0aGUgdG9wCisgICAgLy8gb2YgdGhlIEdMIHNjaXNz
b3IgaXMgdGhlIGJvdHRvbSBvZiBvdXIgbGF5ZXIuCisgICAgaW50IHNjaXNzb3JZOworICAgIGlm
IChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UpCisgICAg
ICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5oZWln
aHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1f
Y29udGVudFJlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJl
Y3QueSgpIC0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC55KCk7CisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Np
c3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKIH0KIAogYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVudCgpCkBAIC02NTksNiArNzY1LDIw
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVja1RleHR1cmUKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSByYW5nZSBvZiBjb250ZW50IHRoYXQg
ZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UuCisvLyBUaGUg
dGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBvcmlnaW4gYXQgMCwg
MCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKKy8vIG9mIHRoZSBkcmF3UmVjdC4KK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3Qm
IGRyYXdSZWN0LCBib29sIGZsaXBZKQoreworICAgIGlmIChmbGlwWSkKKyAgICAgICAgbV9wcm9q
ZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5yaWdodCgp
LCBkcmF3UmVjdC5ib3R0b20oKSwgZHJhd1JlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1f
cHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3Qucmln
aHQoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5ib3R0b20oKSk7CisgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBkcmF3UmVjdC53aWR0aCgpLCBkcmF3UmVjdC5o
ZWlnaHQoKSkpOworfQorCisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlc2l6ZU9u
c2NyZWVuQ29udGVudChjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChtX2NvbnRleHQp
CkBAIC02NjksMTAgKzc4OSwxMCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZVNoCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBWZXJ0ZXggYW5k
IGZyYWdtZW50IHNoYWRlcnMgZm9yIHJlbmRlcmluZyB0aGUgc2Nyb2xsZWQgcm9vdCBsYXllciBx
dWFkLgotICAgIC8vIFRoZXkgZGlmZmVyIGZyb20gYSByZWd1bGFyIGNvbnRlbnQgbGF5ZXIgc2hh
ZGVyIGluIHRoYXQgdGhleSBkb24ndCBzd2l6emxlCi0gICAgLy8gdGhlIGNvbG9ycyBvciB0YWtl
IGFuIGFscGhhIHZhbHVlLgotICAgIGNoYXIgc2Nyb2xsVmVydGV4U2hhZGVyU3RyaW5nW10gPQor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb21wb3NpdGVzIGxheWVycyB3aG9zZSBjb250
ZW50cyBhcmUgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91cworICAgIC8vIHJlbmRlciBvcGVyYXRp
b24gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHBlcmZvcm0gYW55IGNvbG9yIHN3aXp6bGluZy4gSXQg
aXMgdXNlZAorICAgIC8vIGluIHNjcm9sbGluZyBhbmQgZm9yIGNvbXBvc2l0aW5nIG9mZnNjcmVl
biB0ZXh0dXJlcy4KKyAgICBjaGFyIHRleHR1cmVMYXllclZlcnRleFNoYWRlclN0cmluZ1tdID0K
ICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCiAgICAgICAgICJhdHRy
aWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgogICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJp
eDsgICAgICAgICBcbiIKQEAgLTY4MiwyNyArODAyLDI5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBh
X3Bvc2l0aW9uOyBcbiIKICAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4i
CiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKLSAgICBjaGFyIHNj
cm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgIGNoYXIgdGV4dHVyZUxheWVyRnJhZ21l
bnRTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIHNh
bXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1
bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAg
ICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCiAgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCiAgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190
ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
dGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3Iudyk7IFxuIgorICAg
ICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnksIHRleENv
bG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgogICAgICAgICAifSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIG1fc2Nyb2xs
U2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250
ZXh0LmdldCgpLCBzY3JvbGxWZXJ0ZXhTaGFkZXJTdHJpbmcsIHNjcm9sbEZyYWdtZW50U2hhZGVy
U3RyaW5nKTsKLSAgICBpZiAoIW1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkgeworICAgIG1fdGV4dHVy
ZUxheWVyU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0o
bV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlTGF5ZXJWZXJ0ZXhTaGFkZXJTdHJpbmcsIHRleHR1cmVM
YXllckZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fdGV4dHVyZUxheWVyU2hhZGVy
UHJvZ3JhbSkgewogICAgICAgICBMT0dfRVJST1IoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTogRmFp
bGVkIHRvIGNyZWF0ZSBzY3JvbGwgc2hhZGVyIHByb2dyYW0iKTsKICAgICAgICAgY2xlYW51cFNo
YXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEdMQyht
X2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24obV9zY3JvbGxTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIikpOwotICAg
IEdMQyhtX2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJtYXRyaXgiKSk7Ci0g
ICAgaWYgKG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uID09IC0xIHx8IG1fc2Nyb2xsU2hh
ZGVyTWF0cml4TG9jYXRpb24gPT0gLTEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
aW5pdGlhbGl6ZSBzY3JvbGwgc2hhZGVyLiIpOworICAgIEdMQyhtX2NvbnRleHQsIG1fdGV4dHVy
ZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24obV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIikpOworICAgIEdMQyht
X2NvbnRleHQsIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleHR1cmVMYXllclNoYWRlclByb2dyYW0sICJtYXRyaXgi
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9u
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9n
cmFtLCAiYWxwaGEiKSk7CisgICAgaWYgKG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0
aW9uID09IC0xIHx8IG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24gPT0gLTEgfHwg
bV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uID09IC0xKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGV4dHVyZSBsYXllciBzaGFkZXIuIik7CiAgICAg
ICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkBAIC03MjMsOCArODQ1LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emVTaAogICAgIC8vIEdldCB0aGUgbWF4IHRleHR1cmUgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIHN5
c3RlbS4KICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSkpOwogCi0gICAg
Ly8gR2V0IHRoZSBudW1iZXIgb2YgYml0cyBhdmFpbGFibGUgaW4gdGhlIHN0ZW5jaWwgYnVmZmVy
LgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQklUUywgJm1fbnVtU3RlbmNpbEJpdHMpKTsKKyAgICAvLyBDcmVhdGUg
YW4gRkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nLgorICAgIEdMQyhtX2NvbnRleHQs
IG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIo
KSk7CiAKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NvbnRlbnRMYXllclNo
YXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKG1fY29udGV4dC5nZXQoKSkpOwpAQCAtNzQ3LDE1ICs4NjksMTggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXMuY2xlYXIoKTsKICAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKIAotICAg
IGlmIChtX3Njcm9sbFNoYWRlclByb2dyYW0pIHsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOwotICAgICAgICBt
X3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIGlmIChtX3RleHR1cmVMYXllclNoYWRlclBy
b2dyYW0pIHsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFt
KG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBtX3RleHR1cmVMYXllclNo
YWRlclByb2dyYW0gPSAwOwogICAgIH0KIAogICAgIGlmIChtX3Jvb3RMYXllclRleHR1cmVJZCkg
ewogICAgICAgICBkZWxldGVMYXllclRleHR1cmUobV9yb290TGF5ZXJUZXh0dXJlSWQpOwogICAg
ICAgICBtX3Jvb3RMYXllclRleHR1cmVJZCA9IDA7CiAgICAgfQorCisgICAgaWYgKG1fb2Zmc2Ny
ZWVuRnJhbWVidWZmZXJJZCkKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxl
dGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDcwOTA3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CkBAIC05Myw4ICs5NCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBj
cmVhdGVMYXllclRleHR1cmUoKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25l
ZCk7CiAKLSAgICBJbnRSZWN0IGN1cnJlbnRTY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudFNjaXNzb3JSZWN0OyB9Ci0KICAgICBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ2FsbChHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGlu
dCBsaW5lKTsKIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0
cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CkBAIC0xMTYsMjEgKzEx
NSwyMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPExheWVyQ2hyb21p
dW0qPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPExheWVyQ2hyb21pdW0qPiYgbGF5
ZXJMaXN0KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0q
IGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBv
cGFjaXR5KTsKLQotICAgIHZvaWQgZHJhd0xheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7
Ci0KLSAgICB2b2lkIGRyYXdMYXllcihMYXllckNocm9taXVtKik7CisgICAgdm9pZCBkcmF3TGF5
ZXIoTGF5ZXJDaHJvbWl1bSosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCiAgICAgYm9vbCBp
c0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKLSAgICB2b2lkIGRyYXdMYXllckludG9T
dGVuY2lsQnVmZmVyKExheWVyQ2hyb21pdW0qLCBib29sIGRlY3JlbWVudCk7Ci0KICAgICB2b2lk
IHNjaXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYpOwogCisgICAgdm9pZCBzZXREcmF3Vmlld3Bv
cnRSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKKworICAgIGJvb2wgdXNlUmVuZGVy
U3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKKwogICAgIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IExheWVyQ2hy
b21pdW0qLCBjb25zdCBMYXllckNocm9taXVtKik7CisKICAgICBib29sIGluaXRpYWxpemVTaGFy
ZWRPYmplY3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCkBAIC0xMzgs
MTAgKzEzOCwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aDsK
ICAgICBpbnQgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0OwogCi0gICAgLy8gU2Nyb2xsIHNoYWRl
ciB1bmlmb3JtIGxvY2F0aW9ucy4KLSAgICB1bnNpZ25lZCBtX3Njcm9sbFNoYWRlclByb2dyYW07
Ci0gICAgaW50IG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uOwotICAgIGludCBtX3Njcm9s
bFNoYWRlck1hdHJpeExvY2F0aW9uOworICAgIC8vIFNoYWRlciB1bmlmb3JtIGxvY2F0aW9ucyB1
c2VkIGJ5IGxheWVycyB3aG9zZSBjb250ZW50cyBhcmUgdGhlIHJlc3VsdHMgb2YgYQorICAgIC8v
IHByZXZpb3VzIHJlbmRlcmluZyBvcGVyYXRpb24uCisgICAgdW5zaWduZWQgbV90ZXh0dXJlTGF5
ZXJTaGFkZXJQcm9ncmFtOworICAgIGludCBtX3RleHR1cmVMYXllclNoYWRlclNhbXBsZXJMb2Nh
dGlvbjsKKyAgICBpbnQgbV90ZXh0dXJlTGF5ZXJTaGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAgICBp
bnQgbV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uOwogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCkBAIC0xNTAsNyArMTUyLDEwIEBAIHByaXZh
dGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1faGFyZHdhcmVD
b21wb3NpdGluZzsKIAotICAgIHVuc2lnbmVkIGludCBtX2N1cnJlbnRTaGFkZXI7CisgICAgdW5z
aWduZWQgbV9jdXJyZW50U2hhZGVyOworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZTsKKworICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJ
ZDsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFz
PiBtX3Jvb3RMYXllckNhbnZhczsKQEAgLTE2NiwxMiArMTcxLDEwIEBAIHByaXZhdGU6CiAKICAg
ICBJbnRSZWN0IG1fcm9vdFZpc2libGVSZWN0OwogICAgIEludFJlY3QgbV9yb290Q29udGVudFJl
Y3Q7Ci0gICAgSW50UmVjdCBtX2N1cnJlbnRTY2lzc29yUmVjdDsKIAorICAgIC8vIE1heGltdW0g
dGV4dHVyZSBkaW1lbnNpb25zIHN1cHBvcnRlZC4KICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsK
IAotICAgIGludCBtX251bVN0ZW5jaWxCaXRzOwotCiAgICAgLy8gU3RvcmUgdmFsdWVzIHRoYXQg
YXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiBlYWNoIGxheWVyIHR5cGUKICAgICAvLyBh
c3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBvZiB0aGUgY29tcG9zaXRvci4gU2luY2UgdGhl
cmUgY2FuIGJlCiAgICAgLy8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb21wb3NpdG9yIHJ1
bm5pbmcgaW4gdGhlIHNhbWUgcmVuZGVyZXIgcHJvY2VzcwpAQCAtMTgyLDYgKzE4NSw4IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3Zp
ZGVvTGF5ZXJTaGFyZWRWYWx1ZXM7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1f
Y29udGV4dDsKKworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9kZWZhdWx0UmVuZGVyU3Vy
ZmFjZTsKIH07CiAKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMgdG8gMSB3aWxsIGNhbGwgZ2xH
ZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNo
cm9taXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQorICAgIDogbV9vd25pbmdMYXllcihv
d25pbmdMYXllcikKKyAgICAsIG1fY29udGVudHNUZXh0dXJlSWQoMCkKK3sKK30KKworUmVuZGVy
U3VyZmFjZUNocm9taXVtOjp+UmVuZGVyU3VyZmFjZUNocm9taXVtKCkKK3sKKyAgICBjbGVhbnVw
UmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVhbnVwUmVz
b3VyY2VzKCkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlSWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworCisgICAgbGF5ZXJSZW5kZXJlcigp
LT5kZWxldGVMYXllclRleHR1cmUobV9jb250ZW50c1RleHR1cmVJZCk7CisgICAgbV9jb250ZW50
c1RleHR1cmVJZCA9IDA7CisgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IEludFNpemUoKTsK
K30KKworTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmxheWVy
UmVuZGVyZXIoKQoreworICAgIEFTU0VSVChtX293bmluZ0xheWVyKTsKKyAgICByZXR1cm4gbV9v
d25pbmdMYXllci0+bGF5ZXJSZW5kZXJlcigpOworfQorCit2b2lkIFJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCit7CisgICAgQVNTRVJUKG1fb3duaW5nTGF5
ZXIpOworCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZUlkKSB7CisgICAgICAgIG1fY29udGVu
dHNUZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworICAg
ICAgICBBU1NFUlQobV9jb250ZW50c1RleHR1cmVJZCk7CisgICAgICAgIG1fYWxsb2NhdGVkVGV4
dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAgfQorCisgICAgSW50U2l6ZSByZXF1aXJlZFNpemUo
bV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICBpZiAo
bV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFNpemUpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCktPmNv
bnRleHQoKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZUlkKSk7CisgICAgICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkU2l6ZS53aWR0aCgpLCByZXF1aXJlZFNp
emUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApKTsKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkU2l6
ZTsKKyAgICB9Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgUmVuZGVyU3VyZmFjZUNocm9taXVtX2gKKyNk
ZWZpbmUgUmVuZGVyU3VyZmFjZUNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyQ2hyb21p
dW07CisKK2NsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21p
dW0qKTsKKyAgICB+UmVuZGVyU3VyZmFjZUNocm9taXVtKCk7CisKKyAgICB2b2lkIHByZXBhcmVD
b250ZW50c1RleHR1cmUoKTsKKyAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKworICAgIElu
dFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICB1bnNpZ25lZCBtX2NvbnRlbnRzVGV4dHVyZUlkOwor
ICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisgICAgSW50U2l6ZSBtX2FsbG9jYXRlZFRleHR1cmVT
aXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBJbnRS
ZWN0IG1fc2Npc3NvclJlY3Q7CisgICAgVmVjdG9yPExheWVyQ2hyb21pdW0qPiBtX2xheWVyTGlz
dDsKKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIo
KTsKKworICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7Cit9OworCit9CisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAkocmV2aXNpb24gNzA5MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2
ICsxODcsNyBAQCBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oCiAKIHZv
aWQgVmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKKyAgICBMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgcmVsZWFzZUN1cnJlbnRGcmFtZSgpOwog
ICAgIGlmICghbGF5ZXJSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73434</attachid>
            <date>2010-11-09 16:22:49 -0800</date>
            <delta_ts>2010-11-09 20:21:23 -0800</delta_ts>
            <desc>Patch - fixing mac and linux compile issues</desc>
            <filename>renderSurfaces_49233_3.txt</filename>
            <type>text/plain</type>
            <size>68058</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTY1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTAtMTEtMDkgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtjaHJvbWl1bV0gRml4ZXMgbGF5ZXIgb3BhY2l0eSBpbXBsZW1lbnRhdGlvbiBvZiBj
b21wb3NpdGVkIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDkyMzMKKworICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBmYWlybHkgZHJhc3Rp
YyBjaGFuZ2UgaW4gaG93IExheWVyUmVuZGVyZXJDaHJvbWl1bSBkcmF3cworICAgICAgICBjb21w
b3NpdGVkIGxheWVycy4gTGF5ZXJzIHRoYXQgaGF2ZSBub24temVybyBvcGFjaXR5IGFzIHdlbGwg
YXMgbGF5ZXJzIHRoYXQKKyAgICAgICAgY2xpcCB0aGVpciBkZXNjZW5kYW50cyAoYW5kIGhhdmUg
bm9uLXRyaXZpYWwgdHJhbnNmb3JtcykgYXJlIG5vdyBmaXJzdAorICAgICAgICByZW5kZXJlZCBv
bnRvIG9mZi1zY3JlZW4gc3VyZmFjZXMgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSdzKS4gVGhlIGNv
bXBvc2l0aW5nCisgICAgICAgIG9wZXJhdGlvbiBub3cgY29uc2lzdHMgb2YgdHdvIGRpc3RpbmN0
IHBoYXNlczogRmlyc3QgYSBoaWVyYXJjaGljYWwgdHJhdmVyc2FsCisgICAgICAgIG9mIHRoZSBs
YXllciB0cmVlIHRvIGNvbXB1dGUgdGhlIGxheWVyIHRyYW5zZm9ybXMsIGRldGVybWluZSB3aGF0
IHRoZSBuZWNlc3NhcnkKKyAgICAgICAgUmVuZGVyU3VyZmFjZXMgYXJlIGFuZCBzb3J0IGxheWVy
IHRoYXQgcHJlc2VydmUtM2QgYmFzZWQgb24gdGhlaXIgei12YWx1ZS4gQSBzZWNvbmQKKyAgICAg
ICAgcGFzcyBnb2VzIHRocm91Z2ggYWxsIHRoZSBSZW5kZXJTdXJmYWNlcyBkaXNjb3ZlcmVkIGJ5
IHRoZSBmaXJzdCBwYXNzIGFuZCB1cGRhdGVzCisgICAgICAgIHRoZWlyIGNvbnRlbnRzLgorICAg
ICAgICBBZGRpdGlvbmFsIHNpZ25pZmljYW50IHNpZGUtZWZmZWN0cyBvZiB0aGlzIGNoYW5nZSBh
cmU6CisgICAgICAgIDEuIERlcHRoIGJ1ZmZlciBhbmQgZGVwdGggdGVzdGluZyBpcyBubyBsb25n
ZXIgdXNlZC4gRHJhd2luZyByZWxpZXMgb24gYSBwYWludGVyJ3MKKyAgICAgICAgICAgYWxnb3Jp
dGhtIHRvIHJlbmRlciBsYXllcnMgd2l0aCB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGZyb20g
YmFjayB0byBmcm9udCB1c2luZworICAgICAgICAgICB0aGUgWiBjb29yZGluYXRlIG9mIHRoZWly
IGNlbnRlci4gVGhpcyB3aWxsIGZ1cnRoZXIgYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZSB3aXRo
CisgICAgICAgICAgIHRoZSBpbnRvZHVjdGlvbiBvZiBhIEJTUCB0cmVlIHRvIHByb3Blcmx5IGRl
YWwgd2l0aCBpbnRlcnNlY3RpbmcgbGF5ZXJzLgorICAgICAgICAyLiBDb21wb3NpdG9yIG5vIGxv
bmdlciB1c2VzIHRoZSBzdGVuY2lsIGJ1ZmZlciB0byBkbyBjbGlwcGluZy4gQ2xpcHBpbmcgaXMg
bm93IHBlcmZvcm1lZAorICAgICAgICAgICBieSByZW5kZXJpbmcgbGF5ZXIgc3VidHJlZXMgaW50
byBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZQorICAgICAg
ICAgICBzY2lzc29yIGFuZCB2aWV3cG9ydCB0cmFuc2Zvcm1hdGlvbi4KKworICAgICAgICBUZXN0
czogYWJzLXBvc2l0aW9uLWluc2lkZS1vcGFjaXR5Lmh0bWwgKGZvciB0aGUgb3BhY2l0eSBpbXBs
ZW1lbnRhdGlvbikKKyAgICAgICAgICAgICAgIGFuZCB0aGUgcmVzdCBvZiB0aGUgY29tcG9zaXRp
bmcgbGF5b3V0IHRlc3RzIHRvIHZlcmlmeSB0aGF0CisgICAgICAgICAgICAgICBldmVyeXRoaW5n
IHN0aWxsIHdvcmtzLgorCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNhbGN1bGF0
ZUNsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0Ry
YXdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRz
RHJhd0NvbnRlbnRSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRy
YXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5k
ZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9ydGhvTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzU2NhbGVPclRyYW5zbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNjaXNzb3JUb1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmlld3Bv
cnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJmYWNl
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OnByZXBhcmVDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKwogMjAxMC0xMS0w
OSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcxNjUzKQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI0NzQsNiArMjQ3NCw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdp
bi5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcxNjUzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsNyBAQCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6fkNvbnRlbnRMYXllckNocm9tCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKQogeworICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsK
ICAgICBpZiAobGF5ZXJSZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzVGV4dHVy
ZSkgewogICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV9j
b250ZW50c1RleHR1cmUpOwpAQCAtMTQxLDExICsxNDIsMTEgQEAgdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cgogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWly
ZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CiB7CiAgICAgLy8gVG8gYXZvaWQgYWxsb2NhdGlu
ZyBleGNlc3NpdmVseSBsYXJnZSB0ZXh0dXJlcywgc3dpdGNoIGludG8gImxhcmdlIGxheWVyIG1v
ZGUiIGlmCi0gICAgLy8gb25lIG9mIHRoZSBsYXllcidzIGRpbWVuc2lvbnMgaXMgbGFyZ2VyIHRo
YW4gMjAwMCBwaXhlbHMgb3IgdGhlIGN1cnJlbnQgc2l6ZQotICAgIC8vIG9mIHRoZSB2aXNpYmxl
IHJlY3QuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB1bnRpbCBsYXllciB0aWxpbmcgaXMg
aW1wbGVtZW50ZWQuCisgICAgLy8gb25lIG9mIHRoZSBsYXllcidzIGRpbWVuc2lvbnMgaXMgbGFy
Z2VyIHRoYW4gMjAwMCBwaXhlbHMgb3IgdGhlIHNpemUgb2YKKyAgICAvLyBzdXJmYWNlIGl0J3Mg
cmVuZGVyaW5nIGludG8uIFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB1bnRpbCBsYXllciB0
aWxpbmcgaXMgaW1wbGVtZW50ZWQuCiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhMYXllclNpemUg
PSAyMDAwOwotICAgIHJldHVybiAobV9ib3VuZHMud2lkdGgoKSA+IG1heChtYXhMYXllclNpemUs
IGxheWVyUmVuZGVyZXIoKS0+cm9vdExheWVyQ29udGVudFJlY3QoKS53aWR0aCgpKQotICAgICAg
ICAgICAgfHwgbV9ib3VuZHMuaGVpZ2h0KCkgPiBtYXgobWF4TGF5ZXJTaXplLCBsYXllclJlbmRl
cmVyKCktPnJvb3RMYXllckNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkpCisgICAgcmV0dXJuIChtX2Jv
dW5kcy53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5t
X2NvbnRlbnRSZWN0LndpZHRoKCkpCisgICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+
IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5o
ZWlnaHQoKSkKICAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNp
emUobV9ib3VuZHMpKTsKIH0KIApAQCAtMTUzLDI1ICsxNTQsMjcgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6Y2FsY3VsYXRlQ2xpcAogewogICAgIC8vIEZvciB0aGUgZ2l2ZW4gbGF5ZXIg
c2l6ZSBhbmQgY29udGVudCByZWN0LCBjYWxjdWxhdGU6CiAgICAgLy8gMSkgVGhlIG1pbmltYWwg
dGV4dHVyZSBzcGFjZSByZWN0YW5nbGUgdG8gYmUgdXBsb2FkZWQsIHJldHVybmVkIGluIGRpcnR5
UmVjdC4KLSAgICAvLyAyKSBUaGUgY29udGVudCByZWN0LXJlbGF0aXZlIHJlY3RhbmdsZSB0byBk
cmF3IHRoaXMgdGV4dHVyZSBpbiwgcmV0dXJuZWQgaW4gZHJhd1JlY3QuCisgICAgLy8gMikgVGhl
IHJlY3RhbmdsZSB0byBkcmF3IHRoaXMgdGV4dHVyZSBpbiByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0
IHJlbmRlciBzdXJmYWNlLCByZXR1cm5lZCBpbiBkcmF3UmVjdC4KIAotICAgIGNvbnN0IEludFJl
Y3QgY2xpcFJlY3QgPSBsYXllclJlbmRlcmVyKCktPmN1cnJlbnRTY2lzc29yUmVjdCgpOwotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7
Ci0gICAgLy8gVGhlIGxheWVyJ3MgZHJhdyB0cmFuc2Zvcm0gcG9pbnRzIHRvIHRoZSBjZW50ZXIg
b2YgdGhlIGxheWVyLCByZWxhdGl2ZSB0bwotICAgIC8vIHRoZSBjb250ZW50IHJlY3QuICBsYXll
clBvcyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIGxlZnQgb2YgdGhlCi0gICAgLy8gbGF5
ZXIgdG8gdGhlIHRvcCBsZWZ0IG9mIHRoZSBjb250ZW50IHJlY3QuCi0gICAgY29uc3QgSW50UG9p
bnQgbGF5ZXJQb3MobV9ib3VuZHMud2lkdGgoKSAvIDIgLSB0cmFuc2Zvcm0ubTQxKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ib3VuZHMuaGVpZ2h0KCkgLyAyIC0gdHJhbnNmb3Jt
Lm00MigpKTsKLSAgICAvLyBUcmFuc2Zvcm0gdGhlIGNvbnRlbnRSZWN0IGludG8gdGhlIHNwYWNl
IG9mIHRoZSBsYXllci4KLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0SW5MYXllclNwYWNlKGxheWVy
UG9zLCBjbGlwUmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ2xpcCB0aGUgZW50aXJlIGxheWVyIGFn
YWluc3QgdGhlIHZpc2libGUgcmVnaW9uIGluIHRoZSBjb250ZW50IHJlY3QKLSAgICAvLyBhbmQg
dXNlIHRoYXQgYXMgdGhlIGRyYXdhYmxlIHRleHR1cmUsIGluc3RlYWQgb2YgdGhlIGVudGlyZSBs
YXllci4KLSAgICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7
Ci0gICAgZGlydHlSZWN0LmludGVyc2VjdChjb250ZW50UmVjdEluTGF5ZXJTcGFjZSk7CisgICAg
QVNTRVJUKG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSk7CisgICAgY29uc3QgSW50UmVjdCBjbGlwUmVj
dCA9IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdDsKIAotICAgIC8vIFRoZSBk
cmF3IHBvc2l0aW9uIGlzIHJlbGF0aXZlIHRvIHRoZSBjb250ZW50IHJlY3QuCi0gICAgZHJhd1Jl
Y3QgPSBJbnRSZWN0KHRvUG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkgLSBsYXllclBvcyksIGRp
cnR5UmVjdC5zaXplKCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJh
bnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOworICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5z
bGF0ZTNkKC0wLjUgKiBtX2JvdW5kcy53aWR0aCgpLCAtMC41ICogbV9ib3VuZHMuaGVpZ2h0KCks
IDApOworCisgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0aGUgbGF5ZXIgbGF5ZXIgdHJlYXRtZW50
IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIgdW50cmFuc2Zvcm1lZAorICAgIC8vIG9y
IGFyZSBwdXJlbHkgdHJhbnNsYXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGlu
dmVydGlibGUuCisgICAgaWYgKCFsYXllck9yaWdpblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0YXJnZXRUb0xheWVyTWF0cml4ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwor
ICAgIEludFJlY3QgY2xpcFJlY3RJbkxheWVyQ29vcmRzID0gdGFyZ2V0VG9MYXllck1hdHJpeC5t
YXBSZWN0KGNsaXBSZWN0KTsKKyAgICBjbGlwUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KElu
dFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKworICAg
IGRpcnR5UmVjdCA9IGNsaXBSZWN0SW5MYXllckNvb3JkczsKKworICAgIC8vIE1hcCBiYWNrIHRv
IHRoZSB0YXJnZXQgc3VyZmFjZSBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBkcmF3UmVjdCA9IGxh
eWVyT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGlydHlSZWN0KTsKIH0KIAogdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQpAQCAtMjA1LDEyICsyMDgsMjEgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudAogICAgICAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2xhcmdlTGF5ZXJEaXJ0eVJlY3QgPT0gZGlydHlSZWN0KQotICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIG1fbGFyZ2VMYXllckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAg
cmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGRpcnR5UmVjdC5zaXplKCk7Ci0gICAgICAgIHVwZGF0ZVJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBkaXJ0eVJlY3Quc2l6ZSgpKTsKKyAgICAgICAg
Ly8gSWYgdGhlIHBvcnRpb24gb2YgdGhlIGxhcmdlIGxheWVyIHRoYXQncyB2aXNpYmxlIGhhc24n
dCBjaGFuZ2VkCisgICAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQsIF91
bmxlc3NfIGl0cyBjb250ZW50cyBoYXZlIGNoYW5nZWQKKyAgICAgICAgLy8gaW4gd2hpY2ggY2Fz
ZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgZGlydHkgYml0cy4KKyAgICAgICAgaWYgKG1fbGFyZ2VMYXll
ckRpcnR5UmVjdCA9PSBkaXJ0eVJlY3QpIHsKKyAgICAgICAgICAgIGlmICghbV9kaXJ0eVJlY3Qu
aW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoSW50UmVjdChtX2RpcnR5UmVjdCkpOworICAgICAgICAg
ICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgIHJlcXVpcmVkVGV4dHVyZVNp
emUgPSBtX2xhcmdlTGF5ZXJEaXJ0eVJlY3Quc2l6ZSgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9sYXJnZUxheWVyRGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgICAgICAgICAg
cmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGRpcnR5UmVjdC5zaXplKCk7CisgICAgICAgICAgICB1cGRh
dGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgZGlydHlSZWN0LnNpemUoKSk7CisgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBkaXJ0eVJlY3QgPSBJbnRSZWN0KG1fZGlydHlS
ZWN0KTsKICAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5k
cyk7CkBAIC0yMjcsNiArMjM5LDkgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudAogICAgICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAorICAgIGlm
IChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShT
S0lBKQogICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKICAgICBPd25QdHI8c2tp
YTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhczsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzE2NTMp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiBMYXllckNocm9taXVtOgogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29u
dGVudHNEaXJ0eShmYWxzZSkKKyAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwg
bV9zdXBlcmxheWVyKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9i
YWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKQEAgLTE1OCw3ICsxNTksOSBAQCBMYXllckNocm9t
aXVtOjpMYXllckNocm9taXVtKEdyYXBoaWNzTGF5CiAgICAgLCBtX29wYXF1ZSh0cnVlKQogICAg
ICwgbV9nZW9tZXRyeUZsaXBwZWQoZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91bmRz
Q2hhbmdlKGZhbHNlKQorICAgICwgbV9kcmF3RGVwdGgoMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJl
cigwKQorICAgICwgbV9yZW5kZXJTdXJmYWNlKDApCiB7CiB9CiAKQEAgLTE3Miw2ICsxNzUsMTIg
QEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbFN1YmxheWVy
cygpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAg
IGlmIChtX3JlbmRlclN1cmZhY2UpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+Y2xlYW51cFJl
c291cmNlcygpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKIHsKICAgICAvLyBJZiB3ZSdyZSBjaGFuZ2lu
ZyBsYXllciByZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcwpA
QCAtMTg0LDYgKzE5MywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIo
TGF5CiAgICAgbV9sYXllclJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKK1JlbmRlclN1cmZhY2VD
aHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCit7CisgICAgbV9y
ZW5kZXJTdXJmYWNlID0gbmV3IFJlbmRlclN1cmZhY2VDaHJvbWl1bSh0aGlzKTsKKyAgICByZXR1
cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOworfQorCiB1bnNpZ25lZCBMYXllckNocm9taXVtOjpj
cmVhdGVTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQog
ewogICAgIHVuc2lnbmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoY29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsIHZlcnRleFNoYWRlclNvdXJjZSk7CkBAIC00NjMs
MjQgKzQ3OCwyNyBAQCBjb25zdCBJbnRSZWN0IExheWVyQ2hyb21pdW06OmdldERyYXdSZWN0CiAg
ICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiB9CiAKLS8vIERyYXdzIHRoZSBsYXllciB3aXRoIGEgc2lu
Z2xlIGNvbG9yZWQgc2hhZGVyLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRvCi0vLyBxdWljayBk
cmF3cyBpbnRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0Fz
TWFzaygpCisvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRz
IGhhcyBkcmF3YWJsZSBjb250ZW50LgorYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0Ry
YXdDb250ZW50KCkKIHsKLSAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKLSAgICBjb25zdCBT
aGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5sYXllclNoYXJlZFZhbHVlcygpOwot
ICAgIEFTU0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgbGF5ZXJSZW5kZXJlcigp
LT51c2VTaGFkZXIoc3YtPmJvcmRlclNoYWRlclByb2dyYW0oKSk7Ci0KLSAgICAvLyBXZSByZXVz
ZSB0aGUgYm9yZGVyIHNoYWRlciBoZXJlIGFzIGFsbCB3ZSBuZWVkIGEgc2luZ2xlIGNvbG9yZWQg
c2hhZGVyIHBhc3MuCi0gICAgLy8gVGhlIGNvbG9yIHNwZWNpZmllZCBoZXJlIGlzIG9ubHkgZm9y
IGRlYnVnIHB1cHJvc2VzIGFzIHR5cGljYWxseSB3aGVuIHdlIGNhbGwgdGhpcwotICAgIC8vIG1l
dGhvZCwgd3JpdGVzIHRvIHRoZSBjb2xvciBjaGFubmVscyBhcmUgZGlzYWJsZWQuCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYoc3YtPmJvcmRlclNoYWRlckNvbG9yTG9jYXRp
b24oKSwgMCwgMSAsIDAsIDAuNykpOwotCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBs
YXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAg
ICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRy
YXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBzdi0+Ym9yZGVyU2hhZGVyTWF0cml4
TG9jYXRpb24oKSwgLTEpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgc3VibGF5ZXJzID0gZ2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIGlmIChzdWJsYXllcnNbaV0tPmRlc2Nl
bmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIGVpdGhlciB0aGlzIGxh
eWVyIG9yIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgaGFzIGRyYXdhYmxlIGNvbnRlbnQuCitib29s
IExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKQoreworICAg
IGlmIChkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGdldFN1YmxheWVycygp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAg
ICAgICBpZiAoc3VibGF5ZXJzW2ldLT5kZXNjZW5kYW50c0RyYXdDb250ZW50UmVjdXJzaXZlKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIHN0
YXRpYwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgJKHJldmlzaW9uIDcxNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJl
bmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC0xMzksMTAgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChi
b29sIGZsaXBwZWQpIHsgbV9nZW9tZXRyeUZsaXBwZWQgPSBmbGlwcGVkOyBzZXROZWVkc0NvbW1p
dCgpOyB9CiAgICAgYm9vbCBnZW9tZXRyeUZsaXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2dlb21l
dHJ5RmxpcHBlZDsgfQogCi0gICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KLQotICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGZsb2F0IGRyYXdP
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogCiAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+cHJlc2VydmVzM0QoKTsgfQpA
QCAtMTY1LDggKzE2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyKCk7
CiAKLSAgICAvLyBEcmF3cyB0aGUgbGF5ZXIgd2l0aG91dCBhIHRleHR1cmUuIFRoaXMgaXMgdXNl
ZCBmb3Igc3RlbmNpbCBvcGVyYXRpb25zLgotICAgIHZvaWQgZHJhd0FzTWFzaygpOworICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogCiAgICAgLy8gU3Rv
cmVzIHZhbHVlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFz
cyB0aGF0IGFyZQogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBMYXllclJlbmRlcmVy
Q2hyb21pdW0gKGFuZCBoZW5jZSB0aGUgc2FtZSBHTApAQCAtMTk4LDYgKzE5NSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JEcmF3KGNvbnN0IFNoYXJlZFZhbHVlcyop
OwogCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKTsKQEAgLTIwNSwxMSArMjA0LDEzIEBAIHByb3RlY3RlZDoKICAgICAv
LyBUaGlzIGlzIGNhbGxlZCB0byBjbGVhbiB1cCByZXNvdXJjZXMgYmVpbmcgaGVsZCBpbiB0aGUg
c2FtZSBjb250ZXh0IGFzCiAgICAgLy8gbGF5ZXJSZW5kZXJlckNvbnRleHQoKS4gU3ViY2xhc3Nl
cyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleQogICAgIC8vIGhvbGQgY29udGV4
dC1kZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgdGV4dHVyZXMuCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNl
cygpOwogCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
YW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCisgICAg
Ym9vbCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CisKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4
dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJp
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKQEAgLTIyMiw2ICsyMjMsMTIg
QEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29u
dGVudHNEaXJ0eTsKIAorICAgIC8vIFJlbmRlciBzdXJmYWNlIHRoaXMgbGF5ZXIgZHJhd3MgaW50
by4gVGhpcyBpcyBhIHN1cmZhY2UgdGhhdCBjYW4gYmVsb25nCisgICAgLy8gZWl0aGVyIHRvIHRo
aXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9y
CisgICAgLy8gdG8gYW4gYW5jZXN0b3Igb2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIg
c3VyZmFjZSBkZXRlcm1pbmVzIHRoZQorICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXll
cidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0aXZlIHRvLgorICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworCiAgICAgLy8gQWxsIGxheWVyIHNoYWRlcnMgc2hh
cmUgdGhlIHNhbWUgYXR0cmlidXRlIGxvY2F0aW9ucyBmb3IgdGhlIHZlcnRleCBwb3NpdGlvbnMK
ICAgICAvLyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcy4gVGhpcyBhbGxvd3Mgc3dpdGNoaW5nIHNo
YWRlcnMgd2l0aG91dCByZWJpbmRpbmcgYXR0cmlidXRlCiAgICAgLy8gYXJyYXlzLgpAQCAtMjQ0
LDYgKzI1MSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZnJvbSByZW1vdmVGcm9tU3VwZXJsYXllci4KICAgICB2b2lkIHJlbW92ZVN1YmxheWVyKExheWVy
Q2hyb21pdW0qKTsKIAorICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3Q29udGVudFJlY3Vyc2l2ZSgp
OworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fc3VibGF5ZXJzOwogICAg
IExheWVyQ2hyb21pdW0qIG1fc3VwZXJsYXllcjsKIApAQCAtMjY2LDYgKzI3NSwxMCBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9nZW9tZXRyeUZsaXBwZWQ7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxh
eU9uQm91bmRzQ2hhbmdlOwogCisgICAgLy8gVGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUg
Y2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2YWx1ZSBpcyB1c2VkCisgICAgLy8gdG8gc29ydCBs
YXllcnMgZnJvbSBiYWNrIHRvIGZyb250LgorICAgIGZsb2F0IG1fZHJhd0RlcHRoOworCiAgICAg
Ly8gUG9pbnRzIHRvIHRoZSBsYXllciByZW5kZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRo
aXMgbGF5ZXIuCiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRl
cmVyOwogCkBAIC0yNzQsNiArMjg3LDE4IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2Ry
YXdUcmFuc2Zvcm07CiAKKyAgICAvLyBUaGUgc2Npc3NvciByZWN0YW5nbGUgdGhhdCBzaG91bGQg
YmUgdXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJhd24uCisgICAgLy8gSW5oZXJpdGVkIGJ5IHRo
ZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tz
CisgICAgLy8gdG8gYm91bmRzLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKworICAgIC8v
IFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5k
IGl0cyBkZXNjZW5kYW50cworICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KKyAg
ICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CisKKyAgICAv
LyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRz
IGRlc2NlbmRhbnRzLgorICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OworCiAgICAg
U3RyaW5nIG1fbmFtZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDcxNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyOSArNDgsMzkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9N
YXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBm
bG9hdCBuZWFyWiwgZmxvYXQgZmFyWikKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRo
b01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3Ap
CiB7CiAgICAgZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwogICAgIGZsb2F0IGRlbHRhWSA9
IHRvcCAtIGJvdHRvbTsKLSAgICBmbG9hdCBkZWx0YVogPSBmYXJaIC0gbmVhclo7CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggb3J0aG87Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSB8fCAh
ZGVsdGFaKQorICAgIGlmICghZGVsdGFYIHx8ICFkZWx0YVkpCiAgICAgICAgIHJldHVybiBvcnRo
bzsKICAgICBvcnRoby5zZXRNMTEoMi4wZiAvIGRlbHRhWCk7CiAgICAgb3J0aG8uc2V0TTQxKC0o
cmlnaHQgKyBsZWZ0KSAvIGRlbHRhWCk7CiAgICAgb3J0aG8uc2V0TTIyKDIuMGYgLyBkZWx0YVkp
OwogICAgIG9ydGhvLnNldE00MigtKHRvcCArIGJvdHRvbSkgLyBkZWx0YVkpOwotICAgIG9ydGhv
LnNldE0zMygtMi4wZiAvIGRlbHRhWik7Ci0gICAgb3J0aG8uc2V0TTQzKC0obmVhclogKyBmYXJa
KSAvIGRlbHRhWik7CisKKyAgICAvLyBaIGNvbXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMg
c2V0IHRvIHplcm8gYXMgd2UgZG9uJ3QgdXNlIHRoZSBkZXB0aCBidWZmZXIKKyAgICAvLyB3aGls
ZSBkcmF3aW5nLgorICAgIG9ydGhvLnNldE0zMygwKTsKKyAgICBvcnRoby5zZXRNNDMoMCk7CisK
ICAgICByZXR1cm4gb3J0aG87CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJa
KGNvbnN0IExheWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCisvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3IgcGVyc3BlY3Rp
dmUgY29tcG9uZW50cyB0byBpdC4KK3N0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm1BID0gYS0+ZHJhd1RyYW5zZm9ybSgpOwotICAgIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1CID0gYi0+ZHJhd1RyYW5zZm9ybSgpOworICAgIHJl
dHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQorICAgICAgICAgICAmJiAhbS5t
MjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQorICAgICAgICAgICAmJiAhbS5tMzEoKSAmJiAh
bS5tMzIoKSAmJiAhbS5tNDMoKQorICAgICAgICAgICAmJiBtLm00NCgpOwogCi0gICAgcmV0dXJu
IHRyYW5zZm9ybUEubTQzKCkgPCB0cmFuc2Zvcm1CLm00MygpOworfQorCitib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBMYXllckNocm9taXVtKiBhLCBjb25z
dCBMYXllckNocm9taXVtKiBiKQoreworICAgIHJldHVybiBhLT5tX2RyYXdEZXB0aCA8IGItPm1f
ZHJhd0RlcHRoOwogfQogCiBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCkKQEAgLTg5LDExICs5OSwxNCBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVu
ZGVyZXJDaHJvCiAgICAgOiBtX3Jvb3RMYXllclRleHR1cmVJZCgwKQogICAgICwgbV9yb290TGF5
ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQotICAg
ICwgbV9zY3JvbGxTaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3RleHR1cmVMYXllclNoYWRlclBy
b2dyYW0oMCkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKElu
dFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKKyAgICAsIG1fY3VycmVu
dFJlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiB7
CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsK
IH0KQEAgLTE4MSwxMiArMTk0LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVw
YXJlVG9EcmEKICAgICBpbnQgdmlzaWJsZVJlY3RXaWR0aCA9IHZpc2libGVSZWN0LndpZHRoKCk7
CiAgICAgaW50IHZpc2libGVSZWN0SGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CiAgICAg
aWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJs
ZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7Ci0gICAgICAgIG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKKyAgICAgICAgbV9yb290TGF5
ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7CiAKLSAgICAgICAgbV9wcm9qZWN0
aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RI
ZWlnaHQsIDAsIC0xMDAwLCAxMDAwKTsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVy
ZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCAwKSk7CiAKKyAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVy
IHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAgICAg
Ly8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVk
LgorICAgICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKKwogICAgICAgICAvLyBUaGUg
cm9vdCBsYXllciB0ZXh0dXJlIHdhcyBqdXN0IHJlc2l6ZWQgc28gaXRzIGNvbnRlbnRzIGFyZSBu
b3QKICAgICAgICAgLy8gdXNlZnVsIGZvciBzY3JvbGxpbmcuCiAgICAgICAgIHNraXBTY3JvbGwg
PSB0cnVlOwpAQCAtMjAxLDggKzIxNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpw
cmVwYXJlVG9EcmEKICAgICAvLyBGSVhNRTogVGhlc2UgY2FsbHMgY2FuIGJlIG1hZGUgb25jZSwg
d2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGluaXRpYWxpemVkLgogICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCkp
OwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6Q1VMTF9GQUNFKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZXB0aEZ1bmMo
R3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+Y2xlYXJTdGVuY2lsKDApKTsKKwogICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1
bHQuIFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVu
IFNraWEgdXNlcyBDbGVhclR5cGUuIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsgCiAKQEAgLTIzMCwxMSArMjQ1LDExIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICAgICAgICAgIDAu
NSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgc2Nyb2xsRGVsdGEueSgpLCAwKTsKICAgICAgICAg
c2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0xLCAxKTsKIAotICAgICAgICB1c2VTaGFk
ZXIobV9zY3JvbGxTaGFkZXJQcm9ncmFtKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT51bmlmb3JtMWkobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAg
ICAgdXNlU2hhZGVyKG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSk7CisgICAgICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxl
ckxvY2F0aW9uLCAwKSk7CiAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQo
bV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lk
dGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwgLTEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0
cml4TG9jYXRpb24sIG1fdGV4dHVyZUxheWVyU2hhZGVyQWxwaGFMb2NhdGlvbik7CiAKICAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgY29udGVudFJlY3Qud2lkdGgoKSwg
Y29udGVudFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9CkBAIC0yNzUsOCArMjkwLDE2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKIHsKICAgICBBU1NFUlQobV9oYXJk
d2FyZUNvbXBvc2l0aW5nKTsKIAorICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBtX3Jvb3RM
YXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGlmICghbV9kZWZhdWx0UmVuZGVyU3Vy
ZmFjZSkKKyAgICAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IG1fcm9vdExheWVyLT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50
UmVjdCA9IEludFJlY3QoMCwgMCwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVy
VGV4dHVyZUhlaWdodCk7CisKKyAgICB1c2VSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJlbmRlclN1
cmZhY2UpOworCisgICAgLy8gQ2xlYXIgdG8gYmx1ZSB0byBtYWtlIGl0IGVhc2llciB0byBzcG90
IHVucmVuZGVyZWQgcmVnaW9ucy4KICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMSwg
MSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKTsKKyAgICBtX2NvbnRl
eHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAogICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CiAKQEAgLTI5NSw0NiArMzE4LDU0IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9j
YXRpb24oKSwgY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRy
dWUpKTsKIAotICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxlZCB0aGVuIHdlIHdpbGwgY3VsbCB0
aGUgYmFja2ZhY2UuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jdWxsRmFjZShHcmFw
aGljc0NvbnRleHQzRDo6QkFDSykpOwotICAgIC8vIFRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlv
biBpcyBzZXR1cCBzdWNoIHRoYXQgWSBzdGFydHMgYXQgemVybyBhbmQKLSAgICAvLyBpbmNyZWFz
ZXMgZ29pbmcgZG93biB0aGUgcGFnZSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgd2luZGluZyBv
cmRlciBvZgotICAgIC8vIGZyb250IGZhY2luZyB0cmlhbmdsZXMuCi0gICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5mcm9udEZhY2UoR3JhcGhpY3NDb250ZXh0M0Q6OkNXKSk7Ci0KLSAgICAv
LyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxheWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVk
IGFscGhhIGNvbG9ycwotICAgIC8vIHNvIHdlIG5lZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9k
ZSBhcHByb3ByaWF0ZWx5LgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKSk7Ci0KICAgICAvLyBTZXQgdGhlIHJvb3QgdmlzaWJsZS9jb250ZW50
IHJlY3RzIC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscy4KICAgICBtX3Jv
b3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwogICAgIG1fcm9vdENvbnRlbnRSZWN0ID0gY29u
dGVudFJlY3Q7CiAKLSAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRo
ZSBsYXllciB0cmFuc2Zvcm1zLgotICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdl
dFN1YmxheWVycygpOwotICAgIHNpemVfdCBpOworICAgIC8vIFNjaXNzb3Igb3V0IHRoZSBzY3Jv
bGxiYXJzIHRvIGF2b2lkIHJlbmRlcmluZyBvbiB0b3Agb2YgdGhlbS4KKyAgICBJbnRSZWN0IHJv
b3RTY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3Vs
ZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KKyAgICByb290U2Npc3NvclJlY3QubW92
ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgbV9y
b290TGF5ZXItPm1fc2Npc3NvclJlY3QgPSByb290U2Npc3NvclJlY3Q7CisKKyAgICBWZWN0b3I8
TGF5ZXJDaHJvbWl1bSo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQobV9yb290TGF5ZXIuZ2V0KCkpOworCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5z
aXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIG9wYWNpdHkpOworICAgIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9v
dExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9k
ZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QpOwogCi0gICAgLy8gRW5hYmxlIHNjaXNz
b3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIG92ZXIgdGhlIHNjcm9s
bGJhcnMuCisgICAgLy8gVGhlIHNoYWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBw
cmUtbXVsdGlwbGllZCBhbHBoYSBjb2xvcnMKKyAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhl
IGJsZW5kaW5nIG1vZGUgYXBwcm9wcmlhdGVseS4KKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICBJbnRS
ZWN0IHNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIC8vIFRoZSBzY2lzc29yUmVjdCBz
aG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCi0gICAgc2Npc3NvclJlY3QubW92
ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2Np
c3NvclRvUmVjdChzY2lzc29yUmVjdCk7CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgYXJyYXkgZnJvbQorICAgIC8vIGJh
Y2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQg
cmVuZGVyZWQgaW4gdGhlCisgICAgLy8gY29ycmVjdCBvcmRlci4KKyAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgc3VyZmFjZUluZGV4LS0pIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVy
U3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdOworICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UpOworCisgICAg
ICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRo
IG9yIGhlaWdodAorICAgICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0
aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Quc2l6ZSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgdXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1fcmVuZGVyU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIg
IT0gbV9yb290TGF5ZXIpIHsKKyAgICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOworICAgICAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCkpOworICAgICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAgICB9CiAK
LSAgICAvLyBDbGVhciB0aGUgc3RlbmNpbCBidWZmZXIgdG8gMC4KLSAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQp
KTsKLSAgICAvLyBEaXNhYmxlIHdyaXRlcyB0byB0aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygwKSk7Ci0KLSAgICAvLyBUcmF2ZXJz
ZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgZHJh
d0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOworICAgICAgICBWZWN0b3I8TGF5
ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZS0+bV9sYXllckxpc3Q7CisgICAgICAgIEFTU0VSVChsYXllckxpc3Quc2l6ZSgpID4gMCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyBsYXllckluZGV4KyspCisgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJM
aXN0W2xheWVySW5kZXhdLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQo
KSk7CisgICAgfQogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBAIC00MDgsMTAgKzQzOSwx
MiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2liCiAgICAgcmV0dXJu
IG1hcHBlZFJlY3QuaW50ZXJzZWN0cyhGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiB9CiAKLS8v
IFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBu
b2RlIGFuZCB1cGRhdGVzIHRoZSAKLS8vIHRyYW5zZm9ybSBhbmQgb3BhY2l0eSB2YWx1ZXMuCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBm
bG9hdCBvcGFjaXR5KQorLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRp
bmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIHVwZGF0ZXMgdGhlaXIKKy8vIGRyYXdpbmcgdHJhbnNm
b3JtIG1hdHJpeC4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIGxheWVyTGlzdCkKIHsKKyAgICBsYXllci0+c2V0
TGF5ZXJSZW5kZXJlcih0aGlzKTsKKwogICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJh
bnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKICAgICAv
LyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUg
bGF5ZXIncyBwb3NpdGlvbgogICAgIC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBh
bmNob3IgcG9pbnQuIEFsc28sIHRoZSBjb29yZGluYXRlIHN5c3RlbSB1c2VkCkBAIC00MzgsMTgy
ICs0NzEsMjUzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMKICAg
ICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMu
d2lkdGgoKTsKICAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50Lnko
KSkgKiBib3VuZHMuaGVpZ2h0KCk7CiAKLSAgICAvLyBNID0gTVtwXQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxvY2FsTWF0cml4ID0gcGFyZW50TWF0cml4OwotICAgIC8vIE0gPSBNW3BdICog
VHJbbF0KLSAgICBsb2NhbE1hdHJpeC50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9u
LnkoKSwgbGF5ZXItPmFuY2hvclBvaW50WigpKTsKLSAgICAvLyBNID0gTVtwXSAqIFRyW2xdICog
TVtsXQotICAgIGxvY2FsTWF0cml4Lm11bHRMZWZ0KGxheWVyLT50cmFuc2Zvcm0oKSk7Ci0gICAg
Ly8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIGxvY2FsTWF0cml4LnRyYW5z
bGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRa
KCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTG9jYWxUcmFuc2Zvcm07CisgICAg
Ly8gTFQgPSBUcltsXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QocG9zaXRp
b24ueCgpLCBwb3NpdGlvbi55KCksIGxheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgLy8gTFQg
PSBUcltsXSAqIE1bbF0KKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRMZWZ0KGxheWVyLT50
cmFuc2Zvcm0oKSk7CisgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQorICAgIGxheWVy
TG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwg
LWxheWVyLT5hbmNob3JQb2ludFooKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21i
aW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNv
bWJpbmVkVHJhbnNmb3JtLm11bHRMZWZ0KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworCisgICAgRmxv
YXRSZWN0IGxheWVyUmVjdCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBs
YXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+
Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CisK
KyAgICAvLyBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBuZXcgUmVu
ZGVyU3VyZmFjZSBpZiBhbnkgb2YKKyAgICAvLyB0aGVzZSBjb25kaXRpb25zIGhvbGQ6CisgICAg
Ly8gMS4gVGhlIGxheWVyIGNsaXBzIGl0cyBkZXNjZW5kYW50cyBhbmQgaXRzIHRyYW5zZm9ybSBp
cyBub3QgYSBzaW1wbGUgdHJhbnNsYXRpb24uCisgICAgLy8gMi4gSWYgdGhlIGxheWVyIGhhcyBv
cGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90IGhhdmUgYSBwcmVzZXJ2ZXMtM2QgdHJhbnNmb3JtIHN0
eWxlLgorICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRl
IGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZworICAgIC8vIG91dCBp
dHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMg
bXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQorICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KKyAgICBi
b29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWlz
U2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICBib29sIHVzZVN1cmZh
Y2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVz
M0QoKTsKKyAgICBpZiAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3Bh
Y2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKSkgeworICAgICAgICBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNl
LmdldCgpOworICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICByZW5kZXJT
dXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICAvLyBUaGUg
b3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhl
IGxheWVyLgorICAgICAgICBsYXllci0+bV9kcmF3VHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKKyAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUg
KiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKworICAgICAgICB0
cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGll
ZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgorICAgICAgICByZW5kZXJTdXJmYWNl
LT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgaWYgKGxheWVyLT5z
dXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5t
X2RyYXdPcGFjaXR5ICo9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7CisgICAg
ICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ID0gMTsKKworICAgICAgICAvLyBUaGUgcmVuZGVyIHN1
cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bworICAg
ICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRv
IGl0cyBjb250YWluaW5nCisgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHBy
ZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3Nv
clJlY3Q7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKKwor
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gRFQgPSBNW3BdICogTFQKKyAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5z
Zm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPm1fZHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVj
dCkpOworCisgICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsK
KworICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKGxh
eWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICAgICBsYXllci0+
bV9kcmF3T3BhY2l0eSAqPSBsYXllci0+c3VwZXJsYXllcigpLT5tX2RyYXdPcGFjaXR5OworCisg
ICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIg
c3VwZXJsYXllci4KKyAgICAgICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnN1
cGVybGF5ZXIoKS0+bV9zY2lzc29yUmVjdDsKKworICAgICAgICAgICAgbGF5ZXItPm1fdGFyZ2V0
UmVuZGVyU3VyZmFjZSA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RMYXllcikKKyAgICAg
ICAgICAgIGxheWVyLT5tX3JlbmRlclN1cmZhY2UgPSAwOwogCi0gICAgLy8gQ2FsY3VsYXRlIHRo
ZSBsYXllcidzIG9wYWNpdHkuCi0gICAgb3BhY2l0eSAqPSBsYXllci0+b3BhY2l0eSgpOworICAg
ICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKKyAgICAgICAgICAgIGxheWVyLT5tX3Nj
aXNzb3JSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgfQorCisgICAg
aWYgKGxheWVyLT5tX3JlbmRlclN1cmZhY2UpCisgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRl
clN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5tX3Rhcmdl
dFJlbmRlclN1cmZhY2UgPSBsYXllci0+c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2U7CisgICAgfQogCi0gICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0obG9jYWxNYXRyaXgpOwot
ICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShvcGFjaXR5KTsKKyAgICAvLyBtX2RyYXdhYmxlQ29u
dGVudFJlY3QgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
CisgICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KKyAgICBpZiAobGF5
ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0
ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgZWxzZQorICAgICAgICBsYXllci0+bV9kcmF3
YWJsZUNvbnRlbnRSZWN0ID0gSW50UmVjdCgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c3VibGF5ZXJNYXRyaXggPSBsYXllci0+bV9kcmF3VHJhbnNmb3JtOwogCiAgICAgLy8gRmxhdHRl
biB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KICAgICBpZiAoIWxheWVy
LT5wcmVzZXJ2ZXMzRCgpKSB7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE0xMygwKTsKLSAgICAg
ICAgbG9jYWxNYXRyaXguc2V0TTIzKDApOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMzEoMCk7
Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE0zMigwKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0
TTMzKDEpOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMzQoMCk7Ci0gICAgICAgIGxvY2FsTWF0
cml4LnNldE00MygwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOworICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0z
MSgwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMyKDApOworICAgICAgICBzdWJsYXll
ck1hdHJpeC5zZXRNMzMoMSk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zNCgwKTsKKyAg
ICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTQzKDApOwogICAgIH0KIAogICAgIC8vIEFwcGx5IHRo
ZSBzdWJsYXllciB0cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgbG9j
YWxNYXRyaXgubXVsdExlZnQobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAgIHN1Ymxh
eWVyTWF0cml4Lm11bHRMZWZ0KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAotICAgIC8v
IFRoZSBvcmlnaW4gb2YgdGhlIHN1YmxheWVycyBpcyBhY3R1YWxseSB0aGUgYm90dG9tIGxlZnQg
Y29ybmVyIG9mIHRoZSBsYXllcgotICAgIC8vIChvciB0b3AgbGVmdCB3aGVuIGxvb2tpbmcgaXQg
aXQgZnJvbSB0aGUgYnJvd3NlcidzIHBlc3BlY3RpdmUpIGluc3RlYWQgb2YgdGhlIGNlbnRlci4K
LSAgICAvLyBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBzdWJsYXllcnMgaXMgdGhlcmVm
b3JlOgorICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIHN1YmxheWVycyBpcyB0aGUgdG9wIGxlZnQg
Y29ybmVyIG9mIHRoZSBsYXllciwgbm90IHRoZQorICAgIC8vIGNlbnRlci4gVGhlIG1hdHJpeCBw
YXNzZWQgZG93biB0byB0aGUgc3VibGF5ZXJzIGlzIHRoZXJlZm9yZToKICAgICAvLyBNW3NdID0g
TSAqIFRyWy1jZW50ZXJdCi0gICAgbG9jYWxNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0
aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKKyAgICBzdWJsYXllck1hdHJp
eC50cmFuc2xhdGUzZCgtYm91bmRzLndpZHRoKCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAw
LjUsIDApOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJs
YXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShz
dWJsYXllcnNbaV0uZ2V0KCksIGxvY2FsTWF0cml4LCBvcGFjaXR5KTsKKyAgICBWZWN0b3I8TGF5
ZXJDaHJvbWl1bSo+JiBkZXNjZW5kYW50cyA9IChsYXllci0+bV9yZW5kZXJTdXJmYWNlID8gbGF5
ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOworICAgIGRlc2Nl
bmRhbnRzLmFwcGVuZChsYXllcik7CisgICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNj
ZW5kYW50cy5zaXplKCkgLSAxOwogCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7
Ci19CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogc3VibGF5ZXIgPSBz
dWJsYXllcnNbaV0uZ2V0KCk7CisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXll
ciwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsK
KworICAgICAgICBpZiAoc3VibGF5ZXItPm1fcmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+
bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgICAgICAgICAgRmxvYXRSZWN0IHN1YmxheWVyUmVj
dCgtMC41ICogc3VibGF5ZXJSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LndpZHRoKCksIC0w
LjUgKiBzdWJsYXllclJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxheWVyUmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC53aWR0aCgpLCBzdWJsYXllclJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdC51bml0
ZShlbmNsb3NpbmdJbnRSZWN0KHN1YmxheWVyUmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3Jt
Lm1hcFJlY3Qoc3VibGF5ZXJSZWN0KSkpOworICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5k
KHN1YmxheWVyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsYXllci0+bV9kcmF3YWJs
ZUNvbnRlbnRSZWN0LnVuaXRlKHN1YmxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QpOworICAg
IH0KKworICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKQorICAgICAgICBsYXllci0+bV9k
cmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisKKyAg
ICBpZiAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAmJiBsYXllciAhPSBtX3Jvb3RMYXllcikgewor
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9y
ZW5kZXJTdXJmYWNlLmdldCgpOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJT
dXJmYWNlVHJhbnNmb3JtID0gcGFyZW50TWF0cml4OworICAgICAgICByZW5kZXJTdXJmYWNlVHJh
bnNmb3JtLm11bHRMZWZ0KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworICAgICAgICByZW5kZXJTdXJm
YWNlLT5tX2NvbnRlbnRSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdDsKKyAgICAg
ICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KHJlbmRlclN1cmZhY2UtPm1f
Y29udGVudFJlY3QpLmNlbnRlcigpOworCisgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJT
dXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCisgICAgICAgIEZsb2F0
U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZVRyYW5zZm9ybTsKKyAg
ICAgICAgc3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndp
ZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICBpZiAoc3VyZmFjZU9y
aWdpblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcGFyZW50VG9TdXJmYWNlID0gc3VyZmFjZU9yaWdpblRyYW5zZm9ybS5pbnZlcnNl
KCk7CiAKLS8vIERvZXMgYSBxdWljayBkcmF3IG9mIHRoZSBnaXZlbiBsYXllciBpbnRvIHRoZSBz
dGVuY2lsIGJ1ZmZlci4gSWYgZGVjcmVtZW50Ci0vLyBpcyB0cnVlIHRoZW4gaXQgZGVjcmVtZW50
cyB0aGUgY3VycmVudCBzdGVuY2lsIHZhbHVlcyBvdGhlcndpc2UgaXQgaW5jcmVtZW50cyB0aGVt
Lgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllckludG9TdGVuY2lsQnVmZmVy
KExheWVyQ2hyb21pdW0qIGxheWVyLCBib29sIGRlY3JlbWVudCkKLXsKLSAgICAvLyBFbmFibGUg
d3JpdGVzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlciBhbmQgaW5jcmVtZW50IHRoZSBzdGVuY2lsIHZh
bHVlcwotICAgIC8vIGJ5IG9uZSBmb3IgZXZlcnkgcGl4ZWwgdW5kZXIgdGhlIGN1cnJlbnQgbGF5
ZXIuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygweGZmKSk7Ci0g
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6QUxXQVlTLCAxLCAweGZmKSk7Ci0gICAgdW5zaWduZWQgc3RlbmNpbE9wID0gKGRlY3JlbWVu
dCA/IEdyYXBoaWNzQ29udGV4dDNEOjpERUNSIDogR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOwot
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c3RlbmNpbE9wKHN0ZW5jaWxPcCwgc3RlbmNp
bE9wLCBzdGVuY2lsT3ApKTsKKyAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3RJblN1cmZh
Y2VDb29yZHMgPSBwYXJlbnRUb1N1cmZhY2UubWFwUmVjdChyZW5kZXJTdXJmYWNlLT5tX3NjaXNz
b3JSZWN0KTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJz
ZWN0KHNjaXNzb3JSZWN0SW5TdXJmYWNlQ29vcmRzKTsKIAotICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+Y29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAg
ICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KHJlbmRlclN1
cmZhY2UtPm1fY29udGVudFJlY3QpLmNlbnRlcigpOworICAgICAgICAgICAgY2VudGVyT2Zmc2V0
RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKKyAg
ICAgICAgfQogCi0gICAgbGF5ZXItPmRyYXdBc01hc2soKTsKKyAgICAgICAgLy8gVGhlIFJlbmRl
clN1cmZhY2UgYmFja2luZyB0ZXh0dXJlIGNhbm5vdCBleGNlZWQgdGhlIG1heGltdW0gc3VwcG9y
dGVkCisgICAgICAgIC8vIHRleHR1cmUgc2l6ZS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC5zZXRXaWR0aChzdGQ6Om1pbihyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0
LndpZHRoKCksIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC5zZXRIZWlnaHQoc3RkOjptaW4ocmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVj
dC5oZWlnaHQoKSwgbV9tYXhUZXh0dXJlU2l6ZSkpOworCisgICAgICAgIGlmIChyZW5kZXJTdXJm
YWNlLT5tX2NvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2Ut
Pm1fbGF5ZXJMaXN0LmNsZWFyKCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHN0YXJ0cyBh
IG5ldyByZW5kZXIgc3VyZmFjZSB0aGVuIHdlIG5lZWQgdG8gYWRqdXN0IGl0cworICAgICAgICAv
LyBzY2lzc29yIHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3Jk
aW5hdGUgc3lzdGVtLgorICAgICAgICBsYXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5tX2Ry
YXdhYmxlQ29udGVudFJlY3Q7CisKKyAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhl
IHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtID0gc3VyZmFjZU9yaWdpblRyYW5zZm9y
bTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1
cmZhY2VDZW50ZXIueCgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53aWR0aCgpLCBzdXJm
YWNlQ2VudGVyLnkoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVpZ2h0KCksIDApOwor
ICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2Yg
dGhlIGxheWVyIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuCisgICAgLy8gc29ydGluZyB0aGUgbGF5
ZXJzIGZvciB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsYXllckRyYXdNYXRyaXggPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlID8gbGF5ZXItPm1f
cmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtIDogbGF5ZXItPm1fZHJhd1RyYW5zZm9ybTsK
KyAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICBpZiAoIWxheWVyLT5zdXBl
cmxheWVyKCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICBsYXllci0+bV9kcmF3RGVwdGgg
PSBsYXllci0+c3VwZXJsYXllcigpLT5tX2RyYXdEZXB0aDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gbGF5ZXJEcmF3TWF0cml4Lm00MygpOworICAgIH0g
ZWxzZQorICAgICAgICBsYXllci0+bV9kcmF3RGVwdGggPSAwOwogCi0gICAgLy8gRGlzYWJsZSB3
cml0ZXMgdG8gdGhlIHN0ZW5jaWwgYnVmZmVyLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+c3RlbmNpbE1hc2soMCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JN
YXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhl
biBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYnkgdGhlIFogY29vcmRpbmF0ZSBvZiB0aGVpcgor
ICAgIC8vIGNlbnRlci4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBv
biB0aGUgc3VwZXJsYXllciB0aGVuCisgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3Vw
ZXJsYXllciB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCisgICAgaWYgKGxh
eWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnN1cGVybGF5ZXIoKSB8fCAhbGF5ZXItPnN1
cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkpCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRl
c2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVM
YXllclopOwogfQogCi0vLyBSZWN1cnNpdmVseSB3YWxrIHRoZSBsYXllciB0cmVlIGFuZCBkcmF3
IHRoZSBsYXllcnMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlY3Vy
c2l2ZShMYXllckNocm9taXVtKiBsYXllcikKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSkKIHsK
LSAgICBzdGF0aWMgYm9vbCBkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBpbnQgY3VycmVudFN0ZW5jaWxWYWx1ZSA9IDA7Ci0KLSAgICAvLyBDaGVjayBpZiB0
aGUgbGF5ZXIgZmFsbHMgd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KLSAg
ICBJbnRSZWN0IGxheWVyUmVjdCA9IGxheWVyLT5nZXREcmF3UmVjdCgpOwotICAgIGJvb2wgaXNM
YXllclZpc2libGUgPSBtX2N1cnJlbnRTY2lzc29yUmVjdC5pbnRlcnNlY3RzKGxheWVyUmVjdCk7
CisgICAgaWYgKG1fY3VycmVudFJlbmRlclN1cmZhY2UgPT0gcmVuZGVyU3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBFbmFibGUgZGVwdGggdGVzdGluZyBmb3IgdGhpcyBs
YXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyBpZiBwcmVzZXJ2ZXMzRCBpcyBzZXQuCi0gICAg
Ym9vbCBtdXN0Q2xlYXJEZXB0aCA9IGZhbHNlOwotICAgIGlmIChsYXllci0+cHJlc2VydmVzM0Qo
KSkgewotICAgICAgICBpZiAoIWRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlKSB7Ci0gICAgICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfVEVTVCkpOwotICAgICAgICAgICAgZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSB0
cnVlOworICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlOwogCi0gICAg
ICAgICAgICAvLyBOZWVkIHRvIGNsZWFyIHRoZSBkZXB0aCBidWZmZXIgd2hlbiB3ZSdyZSBkb25l
IHJlbmRlcmluZyB0aGlzIHN1YnRyZWUuCi0gICAgICAgICAgICBtdXN0Q2xlYXJEZXB0aCA9IHRy
dWU7Ci0gICAgICAgIH0KKyAgICBpZiAocmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgICAgICBzZXREcmF3
Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QsIHRydWUpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoaXNMYXllclZpc2libGUpCi0gICAgICAg
IGRyYXdMYXllcihsYXllcik7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQpKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgaGVyZSBpZiB0aGUg
bGF5ZXIgaGFzIGRlc2NlbmRhbnRzIHRoYXQgZHJhdyBjb250ZW50Ci0gICAgLy8gYmVmb3JlIHdl
IHNldHVwIGZvciBjbGlwcGluZy4KLSAgICBJbnRSZWN0IHByZXZpb3VzU2Npc3NvclJlY3QgPSBt
X2N1cnJlbnRTY2lzc29yUmVjdDsKLSAgICBib29sIG11c3RSZXNldFNjaXNzb3JSZWN0ID0gZmFs
c2U7Ci0gICAgYm9vbCBkaWRTdGVuY2lsRHJhdyA9IGZhbHNlOwotICAgIGlmIChsYXllci0+bWFz
a3NUb0JvdW5kcygpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXllciBpc24ndCByb3RhdGVkIHRo
ZW4gd2UgY2FuIHVzZSBzY2lzc29yaW5nIG90aGVyd2lzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRv
IGNsaXAgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLgotICAgICAgICBpZiAobGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7Ci0gICAgICAgICAgICBJbnRS
ZWN0IGN1cnJlbnRTY2lzc29yUmVjdCA9IHByZXZpb3VzU2Npc3NvclJlY3Q7Ci0gICAgICAgICAg
ICBjdXJyZW50U2Npc3NvclJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudFNjaXNzb3JSZWN0ICE9IHByZXZpb3VzU2Npc3NvclJlY3QpIHsKLSAgICAgICAg
ICAgICAgICBzY2lzc29yVG9SZWN0KGN1cnJlbnRTY2lzc29yUmVjdCk7Ci0gICAgICAgICAgICAg
ICAgbXVzdFJlc2V0U2Npc3NvclJlY3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGN1cnJlbnRTdGVuY2lsVmFsdWUgPCAoKDEgPDwgbV9udW1TdGVuY2lsQml0cykg
LSAxKSkgewotICAgICAgICAgICAgLy8gQ2xpcHBpbmcgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVy
IHdvcmtzIGFzIGZvbGxvd3M6IFdoZW4gd2UgZW5jb3VudGVyCi0gICAgICAgICAgICAvLyBhIGNs
aXBwaW5nIGxheWVyIHdlIGluY3JlbWVudCB0aGUgc3RlbmNpbCBidWZmZXIgdmFsdWVzIGZvciBh
bGwgdGhlIHBpeGVscwotICAgICAgICAgICAgLy8gdGhlIGxheWVyIHRvdWNoZXMuIEFzIGEgcmVz
dWx0IDEncyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RlbmNpbCBidWZmZXIgZm9yIHBpeGVscyB1
bmRlcgotICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGNsaXBwaW5nIGxheWVyIGZvdW5kIGluIGEg
dHJhdmVyc2FsLCAyJ3MgZm9yIHBpeGVscyBpbiB0aGUgaW50ZXJzZWN0aW9uCi0gICAgICAgICAg
ICAvLyBvZiB0d28gbmVzdGVkIGNsaXBwaW5nIGxheWVycywgZXRjLiBXaGVuIHRoZSBzdWJsYXll
cnMgb2YgYSBjbGlwcGluZyBsYXllciBhcmUgZHJhd24KLSAgICAgICAgICAgIC8vIHdlIHR1cm4g
b24gc3RlbmNpbCB0ZXN0aW5nIHRvIHJlbmRlciBvbmx5IHBpeGVscyB0aGF0IGhhdmUgdGhlIGNv
cnJlY3Qgc3RlbmNpbAotICAgICAgICAgICAgLy8gdmFsdWUgKG9uZSB0aGF0IG1hdGNoZXMgdGhl
IHZhbHVlIG9mIGN1cnJlbnRTdGVuY2lsVmFsdWUpLiBBcyB0aGUgcmVjdXJzaW9uIHVucmF2ZWxz
LAotICAgICAgICAgICAgLy8gd2UgZGVjcmVtZW50IHRoZSBzdGVuY2lsIGJ1ZmZlciB2YWx1ZXMg
Zm9yIGVhY2ggY2xpcHBpbmcgbGF5ZXIuIFdoZW4gdGhlIGVudGlyZSBsYXllciB0cmVlCi0gICAg
ICAgICAgICAvLyBpcyByZW5kZXJlZCwgdGhlIHN0ZW5jaWwgdmFsdWVzIHNob3VsZCBiZSBhbGwg
YmFjayB0byB6ZXJvLiBBbiA4IGJpdCBzdGVuY2lsIGJ1ZmZlcgotICAgICAgICAgICAgLy8gd2ls
bCBhbGxvdyB1cyB1cCB0byAyNTUgbmVzdGVkIGNsaXBwaW5nIGxheWVycyB3aGljaCBpcyBob3Bl
ZnVsbHkgZW5vdWdoLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RlbmNpbFZhbHVlKQotICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1RFU1QpKTsKKyAgICByZW5kZXJTdXJmYWNlLT5wcmVwYXJlQ29udGVu
dHNUZXh0dXJlKCk7CiAKLSAgICAgICAgICAgIGRyYXdMYXllckludG9TdGVuY2lsQnVmZmVyKGxh
eWVyLCBmYWxzZSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZW5kZXJTdXJm
YWNlLT5tX2NvbnRlbnRzVGV4dHVyZUlkLCAwKSk7CiAKLSAgICAgICAgICAgIGN1cnJlbnRTdGVu
Y2lsVmFsdWUrKzsKLSAgICAgICAgICAgIGRpZFN0ZW5jaWxEcmF3ID0gdHJ1ZTsKLSAgICAgICAg
fQorI2lmICFkZWZpbmVkICggTkRFQlVHICkKKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIC8vIFN1YmxheWVycyB3
aWxsIHJlbmRlciBvbmx5IGlmIHRoZSB2YWx1ZSBpbiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgZXF1
YWwgdG8KLSAgICAvLyBjdXJyZW50U3RlbmNpbFZhbHVlLgotICAgIGlmIChkaWRTdGVuY2lsRHJh
dykgewotICAgICAgICAvLyBUaGUgc3VibGF5ZXJzIHdpbGwgcmVuZGVyIG9ubHkgaWYgdGhlIHN0
ZW5jaWwgdGVzdCBwYXNzZXMuCi0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c3Rl
bmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBjdXJyZW50U3RlbmNpbFZhbHVlLCAw
eGZmKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UncmUgdXNpbmcgZGVwdGggdGVzdGluZyB0aGVu
IHdlIG5lZWQgdG8gc29ydCB0aGUgY2hpbGRyZW4gaW4gWiB0bwotICAgIC8vIGdldCB0aGUgdHJh
bnNwYXJlbmN5IHRvIHdvcmsgcHJvcGVybHkuCi0gICAgaWYgKGRlcHRoVGVzdEVuYWJsZWRGb3JT
dWJ0cmVlKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
c3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOwotICAgICAgICBWZWN0b3I8TGF5ZXJD
aHJvbWl1bSo+IHN1YmxheWVyTGlzdDsKLSAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgIGZvciAo
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBzdWJsYXllckxp
c3QuYXBwZW5kKHN1YmxheWVyc1tpXS5nZXQoKSk7Ci0KLSAgICAgICAgLy8gU29ydCBieSB0aGUg
eiBjb29yZGluYXRlIG9mIHRoZSBsYXllciBjZW50ZXIgc28gdGhhdCBsYXllcnMgZnVydGhlciBh
d2F5Ci0gICAgICAgIC8vIGFyZSBkcmF3biBmaXJzdC4KLSAgICAgICAgc3RkOjpzdGFibGVfc29y
dChzdWJsYXllckxpc3QuYmVnaW4oKSwgc3VibGF5ZXJMaXN0LmVuZCgpLCBjb21wYXJlTGF5ZXJa
KTsKKyNlbmRpZgogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllckxpc3Quc2l6ZSgp
OyBpKyspCi0gICAgICAgICAgICBkcmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyTGlzdFtpXSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgZHJhd0xh
eWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOwotICAgIH0KKyAgICBzZXREcmF3Vmll
d3BvcnRSZWN0KHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QsIGZhbHNlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotICAgIGlmIChkaWRTdGVuY2lsRHJhdykgewotICAgICAgICAvLyBEcmF3
IGludG8gdGhlIHN0ZW5jaWwgYnVmZmVyIHN1YnRyYWN0aW5nIDEgZm9yIGV2ZXJ5IHBpeGVsIGhp
dAotICAgICAgICAvLyBlZmZlY3RpdmVseSByZW1vdmluZyB0aGlzIG1hc2sKLSAgICAgICAgZHJh
d0xheWVySW50b1N0ZW5jaWxCdWZmZXIobGF5ZXIsIHRydWUpOwotICAgICAgICBjdXJyZW50U3Rl
bmNpbFZhbHVlLS07Ci0gICAgICAgIGlmICghY3VycmVudFN0ZW5jaWxWYWx1ZSkgewotICAgICAg
ICAgICAgLy8gRGlzYWJsZSBzdGVuY2lsIHRlc3RpbmcuCi0gICAgICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkp
OwotICAgICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6QUxXQVlTLCAwLCAweGZmKSk7Ci0gICAgICAgIH0KK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkKK3sKKyAgICBpZiAobGF5ZXItPm1fcmVuZGVy
U3VyZmFjZSAmJiBsYXllci0+bV9yZW5kZXJTdXJmYWNlICE9IHRhcmdldFN1cmZhY2UpIHsKKyAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50c1RleHR1
cmVJZCkpOworICAgICAgICB1c2VTaGFkZXIobV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtKTsK
KworICAgICAgICBzY2lzc29yVG9SZWN0KGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fc2Npc3Nv
clJlY3QpOworCisgICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBsYXllci0+bV9yZW5kZXJT
dXJmYWNlLT5tX2NvbnRlbnRSZWN0OworICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVy
ZWRRdWFkKG1fY29udGV4dC5nZXQoKSwgbV9wcm9qZWN0aW9uTWF0cml4LCBsYXllci0+bV9yZW5k
ZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCksIGxh
eWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJlTGF5ZXJTaGFkZXJNYXRyaXhMb2NhdGlvbiwg
bV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtdXN0UmVzZXRTY2lzc29yUmVjdCkgewotICAgICAgICBzY2lzc29yVG9S
ZWN0KHByZXZpb3VzU2Npc3NvclJlY3QpOwotICAgIH0KKyAgICBpZiAobGF5ZXItPm1fYm91bmRz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG11c3RDbGVhckRlcHRoKSB7
Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfVEVTVCkpOwotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNs
ZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKSk7Ci0gICAgICAgIGRlcHRo
VGVzdEVuYWJsZWRGb3JTdWJ0cmVlID0gZmFsc2U7Ci0gICAgfQotfQorICAgIC8vIFNldCB0aGUg
Y3VycmVudCBzY2lzc29yIHJlY3QuCisgICAgc2Npc3NvclRvUmVjdChsYXllci0+bV9zY2lzc29y
UmVjdCk7CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIpCi17Ci0gICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Cisg
ICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMg
b2YgdGhlIHBhZ2UuCisgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3Qo
KTsKKyAgICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXItPm1fc2Npc3NvclJlY3QuaW50ZXJz
ZWN0cyhsYXllclJlY3QpOworICAgIGlmICghaXNMYXllclZpc2libGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB0cmFuc2Zv
cm0gb2YgdGhlIGNvbnRhaW50YWluaW5nCisgICAgLy8gUmVuZGVyU3VyZmFjZSBoZXJlLgorICAg
IGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkgJiYgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybS5tMzMo
KSA8IDApCisgICAgICAgICByZXR1cm47CiAKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KSB7CiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlmIG5lY2Vz
c2FyeS4KQEAgLTYyMywxMSArNzI3LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcihMYQogICAgICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXllci0+ZG91YmxlU2lkZWQoKSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkNVTExfRkFDRSk7Ci0KICAgICAgICAgbGF5ZXItPmRyYXcoKTsKICAgICB9CiAKQEAgLTYz
OSwxMCArNzM4LDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGEK
IC8vIHNjaXNzb3JSZWN0IGhhcyBpdHMgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2Yg
dGhlIGN1cnJlbnQgdmlzaWJsZSByZWN0Lgogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNj
aXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCiB7Ci0gICAgLy8gQ29tcHV0
ZSB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjaXNzb3IgcmVjdC4KLSAgICBpbnQgYm90
dG9tID0gc3RkOjptYXgobV9yb290VmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBzY2lzc29yUmVjdC5i
b3R0b20oKSwgMCk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNz
b3JSZWN0LngoKSwgYm90dG9tLCBzY2lzc29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWln
aHQoKSkpOwotICAgIG1fY3VycmVudFNjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7CisgICAgLy8g
VGhlIHNjaXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9ydCBzcGFj
ZSBzbyB3ZSBuZWVkIHRvIG9mZnNldAorICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBv
ZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlLgorICAg
IGludCBzY2lzc29yWCA9IHNjaXNzb3JSZWN0LngoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2Ut
Pm1fY29udGVudFJlY3QueCgpOworICAgIC8vIFdoZW4gcmVuZGVyaW5nIHRvIHRoZSBkZWZhdWx0
IHJlbmRlciBzdXJmYWNlIHdlJ3JlIHJlbmRlcmluZyB1cHNpZGUgZG93biBzbyB0aGUgdG9wCisg
ICAgLy8gb2YgdGhlIEdMIHNjaXNzb3IgaXMgdGhlIGJvdHRvbSBvZiBvdXIgbGF5ZXIuCisgICAg
aW50IHNjaXNzb3JZOworICAgIGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IG1fZGVmYXVs
dFJlbmRlclN1cmZhY2UpCisgICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAg
IHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC55KCk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNj
aXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0
KCkpKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVu
dCgpCkBAIC02NTksNiArNzY1LDIwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVj
a1RleHR1cmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSBy
YW5nZSBvZiBjb250ZW50IHRoYXQgZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVu
ZGVyIHN1cmZhY2UuCisvLyBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8g
aGF2ZSBhbiBvcmlnaW4gYXQgMCwgMCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKKy8vIG9m
IHRoZSBkcmF3UmVjdC4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmlld3Bv
cnRSZWN0KGNvbnN0IEludFJlY3QmIGRyYXdSZWN0LCBib29sIGZsaXBZKQoreworICAgIGlmIChm
bGlwWSkKKyAgICAgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3Qu
eCgpLCBkcmF3UmVjdC5yaWdodCgpLCBkcmF3UmVjdC5ib3R0b20oKSwgZHJhd1JlY3QueSgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdS
ZWN0LngoKSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5ib3R0b20o
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBkcmF3UmVj
dC53aWR0aCgpLCBkcmF3UmVjdC5oZWlnaHQoKSkpOworfQorCisKKwogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJbnRTaXplJiBzaXplKQog
ewogICAgIGlmIChtX2NvbnRleHQpCkBAIC02NjksMTAgKzc4OSwxMCBAQCBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKLSAgICAvLyBWZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgZm9yIHJlbmRlcmluZyB0aGUg
c2Nyb2xsZWQgcm9vdCBsYXllciBxdWFkLgotICAgIC8vIFRoZXkgZGlmZmVyIGZyb20gYSByZWd1
bGFyIGNvbnRlbnQgbGF5ZXIgc2hhZGVyIGluIHRoYXQgdGhleSBkb24ndCBzd2l6emxlCi0gICAg
Ly8gdGhlIGNvbG9ycyBvciB0YWtlIGFuIGFscGhhIHZhbHVlLgotICAgIGNoYXIgc2Nyb2xsVmVy
dGV4U2hhZGVyU3RyaW5nW10gPQorICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb21wb3Np
dGVzIGxheWVycyB3aG9zZSBjb250ZW50cyBhcmUgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91cwor
ICAgIC8vIHJlbmRlciBvcGVyYXRpb24gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHBlcmZvcm0gYW55
IGNvbG9yIHN3aXp6bGluZy4gSXQgaXMgdXNlZAorICAgIC8vIGluIHNjcm9sbGluZyBhbmQgZm9y
IGNvbXBvc2l0aW5nIG9mZnNjcmVlbiB0ZXh0dXJlcy4KKyAgICBjaGFyIHRleHR1cmVMYXllclZl
cnRleFNoYWRlclN0cmluZ1tdID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247
ICAgXG4iCiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgogICAgICAg
ICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKQEAgLTY4MiwyNyArODAyLDI5IEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xf
UG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKICAgICAgICAgIiAgdl90ZXhDb29y
ZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIjsKLSAgICBjaGFyIHNjcm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgIGNo
YXIgdGV4dHVyZUxheWVyRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAgICJwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICIgIHZlYzQgdGV4
Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCi0gICAgICAgICIg
IGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3Iueiwg
dGV4Q29sb3Iudyk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9y
LngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgogICAg
ICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIjsKIAotICAgIG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LmdldCgpLCBzY3JvbGxWZXJ0ZXhTaGFkZXJTdHJpbmcs
IHNjcm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nKTsKLSAgICBpZiAoIW1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSkgeworICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlTGF5ZXJWZXJ0ZXhT
aGFkZXJTdHJpbmcsIHRleHR1cmVMYXllckZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAo
IW1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBMT0dfRVJST1IoIkxheWVy
UmVuZGVyZXJDaHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSBzY3JvbGwgc2hhZGVyIHByb2dyYW0i
KTsKICAgICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIEdMQyhtX2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zY3JvbGxTaGFkZXJQcm9ncmFt
LCAic190ZXh0dXJlIikpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyTWF0cml4
TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclBy
b2dyYW0sICJtYXRyaXgiKSk7Ci0gICAgaWYgKG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9u
ID09IC0xIHx8IG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRpb24gPT0gLTEpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBzY3JvbGwgc2hhZGVyLiIpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtLCAic190
ZXh0dXJlIikpOworICAgIEdMQyhtX2NvbnRleHQsIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4
TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleHR1cmVMYXllclNo
YWRlclByb2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV90ZXh0dXJlTGF5
ZXJTaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90
ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKSk7CisgICAgaWYgKG1fdGV4dHVyZUxh
eWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uID09IC0xIHx8IG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0
cml4TG9jYXRpb24gPT0gLTEgfHwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uID09
IC0xKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGV4dHVyZSBs
YXllciBzaGFkZXIuIik7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MjMsOCArODQ1LDggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogICAgIC8vIEdldCB0aGUgbWF4IHRleHR1cmUgc2l6
ZSBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbS4KICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhU
ZXh0dXJlU2l6ZSkpOwogCi0gICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgYml0cyBhdmFpbGFibGUg
aW4gdGhlIHN0ZW5jaWwgYnVmZmVyLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUywgJm1fbnVtU3RlbmNpbEJp
dHMpKTsKKyAgICAvLyBDcmVhdGUgYW4gRkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5n
LgorICAgIEdMQyhtX2NvbnRleHQsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1fY29udGV4
dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiAKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRv
cHRQdHIobmV3IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsK
ICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwpAQCAtNzUxLDE1ICs4
NzMsMTggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAgIG1f
dmlkZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fcGx1Z2luTGF5ZXJTaGFyZWRW
YWx1ZXMuY2xlYXIoKTsKIAotICAgIGlmIChtX3Njcm9sbFNoYWRlclByb2dyYW0pIHsKLSAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVy
UHJvZ3JhbSkpOwotICAgICAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIGlmICht
X3RleHR1cmVMYXllclNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kZWxldGVQcm9ncmFtKG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSkpOworICAg
ICAgICBtX3RleHR1cmVMYXllclNoYWRlclByb2dyYW0gPSAwOwogICAgIH0KIAogICAgIGlmICht
X3Jvb3RMYXllclRleHR1cmVJZCkgewogICAgICAgICBkZWxldGVMYXllclRleHR1cmUobV9yb290
TGF5ZXJUZXh0dXJlSWQpOwogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVJZCA9IDA7CiAgICAg
fQorCisgICAgaWYgKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkKKyAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVy
SWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCShyZXZpc2lvbiA3MTY1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC05NCw4ICs5NSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsKICAgICB2b2lkIGRlbGV0ZUxh
eWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKLSAgICBJbnRSZWN0IGN1cnJlbnRTY2lzc29yUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFNjaXNzb3JSZWN0OyB9Ci0KICAgICBzdGF0aWMgdm9p
ZCBkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwcm9qZWN0aW9uTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4
OyB9CkBAIC0xMTgsMjEgKzExNywyMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdy
YXBoaWNzQ29udGV4dDNEKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
VmVjdG9yPExheWVyQ2hyb21pdW0qPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPExh
eWVyQ2hyb21pdW0qPiYgbGF5ZXJMaXN0KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJz
aXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFy
ZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5KTsKLQotICAgIHZvaWQgZHJhd0xheWVyc1JlY3Vyc2l2
ZShMYXllckNocm9taXVtKik7Ci0KLSAgICB2b2lkIGRyYXdMYXllcihMYXllckNocm9taXVtKik7
CisgICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSosIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSopOwogCiAgICAgYm9vbCBpc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKLSAgICB2
b2lkIGRyYXdMYXllckludG9TdGVuY2lsQnVmZmVyKExheWVyQ2hyb21pdW0qLCBib29sIGRlY3Jl
bWVudCk7Ci0KICAgICB2b2lkIHNjaXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYpOwogCisgICAg
dm9pZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKKwor
ICAgIGJvb2wgdXNlUmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKKwogICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5
ZXJaKGNvbnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBMYXllckNocm9taXVtKik7CisKICAgICBi
b29sIGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2Jq
ZWN0cygpOwogCkBAIC0xNDAsMTAgKzE0MCwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX3Jvb3RM
YXllclRleHR1cmVXaWR0aDsKICAgICBpbnQgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0OwogCi0g
ICAgLy8gU2Nyb2xsIHNoYWRlciB1bmlmb3JtIGxvY2F0aW9ucy4KLSAgICB1bnNpZ25lZCBtX3Nj
cm9sbFNoYWRlclByb2dyYW07Ci0gICAgaW50IG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9u
OwotICAgIGludCBtX3Njcm9sbFNoYWRlck1hdHJpeExvY2F0aW9uOworICAgIC8vIFNoYWRlciB1
bmlmb3JtIGxvY2F0aW9ucyB1c2VkIGJ5IGxheWVycyB3aG9zZSBjb250ZW50cyBhcmUgdGhlIHJl
c3VsdHMgb2YgYQorICAgIC8vIHByZXZpb3VzIHJlbmRlcmluZyBvcGVyYXRpb24uCisgICAgdW5z
aWduZWQgbV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtOworICAgIGludCBtX3RleHR1cmVMYXll
clNoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICBpbnQgbV90ZXh0dXJlTGF5ZXJTaGFkZXJNYXRy
aXhMb2NhdGlvbjsKKyAgICBpbnQgbV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uOwog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCkBAIC0xNTIs
NyArMTU0LDEwIEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAg
ICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAotICAgIHVuc2lnbmVkIGludCBtX2N1cnJl
bnRTaGFkZXI7CisgICAgdW5zaWduZWQgbV9jdXJyZW50U2hhZGVyOworICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKKworICAgIHVuc2lnbmVkIG1fb2Zm
c2NyZWVuRnJhbWVidWZmZXJJZDsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgT3duUHRyPHNr
aWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKQEAgLTE2OCwxMiArMTczLDEw
IEBAIHByaXZhdGU6CiAKICAgICBJbnRSZWN0IG1fcm9vdFZpc2libGVSZWN0OwogICAgIEludFJl
Y3QgbV9yb290Q29udGVudFJlY3Q7Ci0gICAgSW50UmVjdCBtX2N1cnJlbnRTY2lzc29yUmVjdDsK
IAorICAgIC8vIE1heGltdW0gdGV4dHVyZSBkaW1lbnNpb25zIHN1cHBvcnRlZC4KICAgICBpbnQg
bV9tYXhUZXh0dXJlU2l6ZTsKIAotICAgIGludCBtX251bVN0ZW5jaWxCaXRzOwotCiAgICAgLy8g
U3RvcmUgdmFsdWVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiBlYWNoIGxh
eWVyIHR5cGUKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBvZiB0aGUgY29t
cG9zaXRvci4gU2luY2UgdGhlcmUgY2FuIGJlCiAgICAgLy8gbXVsdGlwbGUgaW5zdGFuY2VzIG9m
IHRoZSBjb21wb3NpdG9yIHJ1bm5pbmcgaW4gdGhlIHNhbWUgcmVuZGVyZXIgcHJvY2VzcwpAQCAt
MTg1LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFBsdWdpbkxheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcz4gbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlczsKIAogICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworCisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogfTsKIAogLy8gU2V0dGluZyBERUJVR19HTF9DQUxM
UyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIgYWxtb3N0IGV2ZXJ5IEdMCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclN1cmZhY2VDaHJvbWl1
bTo6UmVuZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQorICAg
IDogbV9jb250ZW50c1RleHR1cmVJZCgwKQorICAgICwgbV9vd25pbmdMYXllcihvd25pbmdMYXll
cikKK3sKK30KKworUmVuZGVyU3VyZmFjZUNocm9taXVtOjp+UmVuZGVyU3VyZmFjZUNocm9taXVt
KCkKK3sKKyAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgUmVuZGVyU3VyZmFjZUNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJl
SWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworCisg
ICAgbGF5ZXJSZW5kZXJlcigpLT5kZWxldGVMYXllclRleHR1cmUobV9jb250ZW50c1RleHR1cmVJ
ZCk7CisgICAgbV9jb250ZW50c1RleHR1cmVJZCA9IDA7CisgICAgbV9hbGxvY2F0ZWRUZXh0dXJl
U2l6ZSA9IEludFNpemUoKTsKK30KKworTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OmxheWVyUmVuZGVyZXIoKQoreworICAgIEFTU0VSVChtX293bmluZ0xheWVy
KTsKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5kZXJlcigpOworfQorCit2b2lk
IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCit7CisgICAg
QVNTRVJUKG1fb3duaW5nTGF5ZXIpOworCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZUlkKSB7
CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxh
eWVyVGV4dHVyZSgpOworICAgICAgICBBU1NFUlQobV9jb250ZW50c1RleHR1cmVJZCk7CisgICAg
ICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSBJbnRTaXplKCk7CisgICAgfQorCisgICAgSW50
U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0Lmhl
aWdodCgpKTsKKyAgICBpZiAobV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFNpemUp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX293bmluZ0xheWVyLT5s
YXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4
dHVyZUlkKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkU2l6ZS53
aWR0aCgpLCByZXF1aXJlZFNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsKKyAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJl
U2l6ZSA9IHJlcXVpcmVkU2l6ZTsKKyAgICB9Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bV9oCisjZGVmaW5lIFJlbmRlclN1cmZhY2VDaHJvbWl1bV9oCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Citj
bGFzcyBMYXllckNocm9taXVtOworCitjbGFzcyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gOiBwdWJs
aWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclN1cmZhY2VDaHJv
bWl1bShMYXllckNocm9taXVtKik7CisgICAgflJlbmRlclN1cmZhY2VDaHJvbWl1bSgpOworCisg
ICAgdm9pZCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CisgICAgdm9pZCBjbGVhbnVwUmVzb3Vy
Y2VzKCk7CisKKyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CisgICAgdW5zaWduZWQgbV9jb250
ZW50c1RleHR1cmVJZDsKKyAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OworICAgIEludFNpemUgbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFu
c2Zvcm07CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworICAgIFZlY3RvcjxMYXllckNocm9t
aXVtKj4gbV9sYXllckxpc3Q7CisKK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyKCk7CisKKyAgICBMYXllckNocm9taXVtKiBtX293bmluZ0xheWVyOwor
fTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTY1MykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJD
aHJvbWl1bSgKIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQog
eworICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKICAgICByZWxlYXNlQ3Vy
cmVudEZyYW1lKCk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="63865"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73456</attachid>
            <date>2010-11-09 20:21:23 -0800</date>
            <delta_ts>2010-11-10 11:01:00 -0800</delta_ts>
            <desc>Patch addressing review comments</desc>
            <filename>renderSurfaces_49233_4.txt</filename>
            <type>text/plain</type>
            <size>68206</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDcxNzExKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3NCBAQAorMjAxMC0xMS0wOSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxp
c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBGaXhlcyBsYXllciBvcGFjaXR5IGltcGxlbWVudGF0aW9uIG9m
IGNvbXBvc2l0ZWQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTIzMworCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIGZhaXJseSBkcmFz
dGljIGNoYW5nZSBpbiBob3cgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRyYXdzCisgICAgICAgIGNv
bXBvc2l0ZWQgbGF5ZXJzLiBMYXllcnMgdGhhdCBoYXZlIG5vbi16ZXJvIG9wYWNpdHkgYXMgd2Vs
bCBhcyBsYXllcnMgdGhhdAorICAgICAgICBjbGlwIHRoZWlyIGRlc2NlbmRhbnRzIChhbmQgaGF2
ZSBub24tdHJpdmlhbCB0cmFuc2Zvcm1zKSBhcmUgbm93IGZpcnN0CisgICAgICAgIHJlbmRlcmVk
IG9udG8gb2ZmLXNjcmVlbiBzdXJmYWNlcyAoUmVuZGVyU3VyZmFjZUNocm9taXVtJ3MpLiBUaGUg
Y29tcG9zaXRpbmcKKyAgICAgICAgb3BlcmF0aW9uIG5vdyBjb25zaXN0cyBvZiB0d28gZGlzdGlu
Y3QgcGhhc2VzOiBGaXJzdCBhIGhpZXJhcmNoaWNhbCB0cmF2ZXJzYWwKKyAgICAgICAgb2YgdGhl
IGxheWVyIHRyZWUgdG8gY29tcHV0ZSB0aGUgbGF5ZXIgdHJhbnNmb3JtcywgZGV0ZXJtaW5lIHdo
YXQgdGhlIG5lY2Vzc2FyeQorICAgICAgICBSZW5kZXJTdXJmYWNlcyBhcmUgYW5kIHNvcnQgbGF5
ZXIgdGhhdCBwcmVzZXJ2ZS0zZCBiYXNlZCBvbiB0aGVpciB6LXZhbHVlLiBBIHNlY29uZAorICAg
ICAgICBwYXNzIGdvZXMgdGhyb3VnaCBhbGwgdGhlIFJlbmRlclN1cmZhY2VzIGRpc2NvdmVyZWQg
YnkgdGhlIGZpcnN0IHBhc3MgYW5kIHVwZGF0ZXMKKyAgICAgICAgdGhlaXIgY29udGVudHMuCisg
ICAgICAgIEFkZGl0aW9uYWwgc2lnbmlmaWNhbnQgc2lkZS1lZmZlY3RzIG9mIHRoaXMgY2hhbmdl
IGFyZToKKyAgICAgICAgMS4gRGVwdGggYnVmZmVyIGFuZCBkZXB0aCB0ZXN0aW5nIGlzIG5vIGxv
bmdlciB1c2VkLiBEcmF3aW5nIHJlbGllcyBvbiBhIHBhaW50ZXIncworICAgICAgICAgICBhbGdv
cml0aG0gdG8gcmVuZGVyIGxheWVycyB3aXRoIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgZnJv
bSBiYWNrIHRvIGZyb250IHVzaW5nCisgICAgICAgICAgIHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhl
aXIgY2VudGVyLiBUaGlzIHdpbGwgZnVydGhlciBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlIHdp
dGgKKyAgICAgICAgICAgdGhlIGludG9kdWN0aW9uIG9mIGEgQlNQIHRyZWUgdG8gcHJvcGVybHkg
ZGVhbCB3aXRoIGludGVyc2VjdGluZyBsYXllcnMuCisgICAgICAgIDIuIENvbXBvc2l0b3Igbm8g
bG9uZ2VyIHVzZXMgdGhlIHN0ZW5jaWwgYnVmZmVyIHRvIGRvIGNsaXBwaW5nLiBDbGlwcGluZyBp
cyBub3cgcGVyZm9ybWVkCisgICAgICAgICAgIGJ5IHJlbmRlcmluZyBsYXllciBzdWJ0cmVlcyBp
bnRvIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlCisgICAg
ICAgICAgIHNjaXNzb3IgYW5kIHZpZXdwb3J0IHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgIFRl
c3RzOiBhYnMtcG9zaXRpb24taW5zaWRlLW9wYWNpdHkuaHRtbCAoZm9yIHRoZSBvcGFjaXR5IGlt
cGxlbWVudGF0aW9uKQorICAgICAgICAgICAgICAgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21wb3Np
dGluZyBsYXlvdXQgdGVzdHMgdG8gdmVyaWZ5IHRoYXQKKyAgICAgICAgICAgICAgIGV2ZXJ5dGhp
bmcgc3RpbGwgd29ya3MuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNhbGN1bGF0
ZUNsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0Ry
YXdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRz
RHJhd0NvbnRlbnRSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRy
YXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5k
ZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9ydGhvTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzU2NhbGVPclRyYW5zbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmll
d3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJm
YWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpj
bGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1
bTo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21p
dW06OnByZXBhcmVDb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y29udGVudFJlY3RDZW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpjb250ZW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisKIDIw
MTAtMTEtMDkgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcxNjQ1KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI0NzQsNiArMjQ3NCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51
eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFy
ZW5jeVdpbi5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzE2
NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIENvbnRlbnRMYXll
ckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb20KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291
cmNlcygpOwogICAgIGlmIChsYXllclJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKG1fY29udGVu
dHNUZXh0dXJlKSB7CiAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPmRlbGV0ZUxheWVyVGV4
dHVyZShtX2NvbnRlbnRzVGV4dHVyZSk7CkBAIC0xNDEsMTEgKzE0MiwxMSBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyCiBib29sIENvbnRlbnRMYXllckNocm9taXVt
OjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKIHsKICAgICAvLyBUbyBhdm9pZCBh
bGxvY2F0aW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIHRleHR1cmVzLCBzd2l0Y2ggaW50byAibGFyZ2Ug
bGF5ZXIgbW9kZSIgaWYKLSAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBs
YXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgY3VycmVudCBzaXplCi0gICAgLy8gb2YgdGhl
IHZpc2libGUgcmVjdC4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIGxheWVyIHRp
bGluZyBpcyBpbXBsZW1lbnRlZC4KKyAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9u
cyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgorICAgIC8vIHN1cmZh
Y2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGls
IGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29uc3QgaW50IG1heExh
eWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgpID4gbWF4KG1heExh
eWVyU2l6ZSwgbGF5ZXJSZW5kZXJlcigpLT5yb290TGF5ZXJDb250ZW50UmVjdCgpLndpZHRoKCkp
Ci0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIGxh
eWVyUmVuZGVyZXIoKS0+cm9vdExheWVyQ29udGVudFJlY3QoKS5oZWlnaHQoKSkKKyAgICByZXR1
cm4gKG1fYm91bmRzLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1
cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKKyAgICAgICAgICAgIHx8IG1fYm91bmRzLmhl
aWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50
UmVjdCgpLmhlaWdodCgpKQogICAgICAgICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tU
ZXh0dXJlU2l6ZShtX2JvdW5kcykpOwogfQogCkBAIC0xNTMsMjUgKzE1NCwyNiBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpjYWxjdWxhdGVDbGlwCiB7CiAgICAgLy8gRm9yIHRoZSBnaXZl
biBsYXllciBzaXplIGFuZCBjb250ZW50IHJlY3QsIGNhbGN1bGF0ZToKICAgICAvLyAxKSBUaGUg
bWluaW1hbCB0ZXh0dXJlIHNwYWNlIHJlY3RhbmdsZSB0byBiZSB1cGxvYWRlZCwgcmV0dXJuZWQg
aW4gZGlydHlSZWN0LgotICAgIC8vIDIpIFRoZSBjb250ZW50IHJlY3QtcmVsYXRpdmUgcmVjdGFu
Z2xlIHRvIGRyYXcgdGhpcyB0ZXh0dXJlIGluLCByZXR1cm5lZCBpbiBkcmF3UmVjdC4KKyAgICAv
LyAyKSBUaGUgcmVjdGFuZ2xlIHRvIGRyYXcgdGhpcyB0ZXh0dXJlIGluIHJlbGF0aXZlIHRvIHRo
ZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UsIHJldHVybmVkIGluIGRyYXdSZWN0LgogCi0gICAgY29u
c3QgSW50UmVjdCBjbGlwUmVjdCA9IGxheWVyUmVuZGVyZXIoKS0+Y3VycmVudFNjaXNzb3JSZWN0
KCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSA9IGRyYXdUcmFu
c2Zvcm0oKTsKLSAgICAvLyBUaGUgbGF5ZXIncyBkcmF3IHRyYW5zZm9ybSBwb2ludHMgdG8gdGhl
IGNlbnRlciBvZiB0aGUgbGF5ZXIsIHJlbGF0aXZlIHRvCi0gICAgLy8gdGhlIGNvbnRlbnQgcmVj
dC4gIGxheWVyUG9zIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgbGVmdCBvZiB0aGUKLSAg
ICAvLyBsYXllciB0byB0aGUgdG9wIGxlZnQgb2YgdGhlIGNvbnRlbnQgcmVjdC4KLSAgICBjb25z
dCBJbnRQb2ludCBsYXllclBvcyhtX2JvdW5kcy53aWR0aCgpIC8gMiAtIHRyYW5zZm9ybS5tNDEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JvdW5kcy5oZWlnaHQoKSAvIDIgLSB0
cmFuc2Zvcm0ubTQyKCkpOwotICAgIC8vIFRyYW5zZm9ybSB0aGUgY29udGVudFJlY3QgaW50byB0
aGUgc3BhY2Ugb2YgdGhlIGxheWVyLgotICAgIEludFJlY3QgY29udGVudFJlY3RJbkxheWVyU3Bh
Y2UobGF5ZXJQb3MsIGNsaXBSZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDbGlwIHRoZSBlbnRpcmUg
bGF5ZXIgYWdhaW5zdCB0aGUgdmlzaWJsZSByZWdpb24gaW4gdGhlIGNvbnRlbnQgcmVjdAotICAg
IC8vIGFuZCB1c2UgdGhhdCBhcyB0aGUgZHJhd2FibGUgdGV4dHVyZSwgaW5zdGVhZCBvZiB0aGUg
ZW50aXJlIGxheWVyLgotICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1f
Ym91bmRzKTsKLSAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0SW5MYXllclNwYWNl
KTsKKyAgICBBU1NFUlQobV90YXJnZXRSZW5kZXJTdXJmYWNlKTsKKyAgICBjb25zdCBJbnRSZWN0
IGNsaXBSZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCi0gICAg
Ly8gVGhlIGRyYXcgcG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIGNvbnRlbnQgcmVjdC4KLSAg
ICBkcmF3UmVjdCA9IEludFJlY3QodG9Qb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSAtIGxheWVy
UG9zKSwgZGlydHlSZWN0LnNpemUoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CisgICAgbGF5ZXJPcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlM2QoLTAuNSAqIG1fYm91bmRzLndpZHRoKCksIC0wLjUgKiBtX2JvdW5kcy5o
ZWlnaHQoKSwgMCk7CisKKyAgICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0
cmVhdG1lbnQgb25seSBmb3IgbGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCisg
ICAgLy8gb3IgYXJlIHB1cmVseSB0cmFuc2xhdGVkLiBUaGVpciBtYXRyaXggaXMgZXhwZWN0ZWQg
dG8gYmUgaW52ZXJ0aWJsZS4KKyAgICBBU1NFUlQobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJp
eCA9IGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0
SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgubWFwUmVjdChjbGlwUmVjdCk7Cisg
ICAgY2xpcFJlY3RJbkxheWVyQ29vcmRzLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fYm91bmRz
LndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CisKKyAgICBkaXJ0eVJlY3QgPSBjbGlwUmVj
dEluTGF5ZXJDb29yZHM7CisKKyAgICAvLyBNYXAgYmFjayB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ug
Y29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgZHJhd1JlY3QgPSBsYXllck9yaWdpblRyYW5zZm9ybS5t
YXBSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzKCkKQEAgLTIwNSwxMiArMjA3LDIxIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbnRlbnQKICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAobV9sYXJnZUxheWVyRGlydHlS
ZWN0ID09IGRpcnR5UmVjdCkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2xhcmdl
TGF5ZXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUg
PSBkaXJ0eVJlY3Quc2l6ZSgpOwotICAgICAgICB1cGRhdGVSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgZGlydHlSZWN0LnNpemUoKSk7CisgICAgICAgIC8vIElmIHRoZSBwb3J0aW9uIG9m
IHRoZSBsYXJnZSBsYXllciB0aGF0J3MgdmlzaWJsZSBoYXNuJ3QgY2hhbmdlZAorICAgICAgICAv
LyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGl0LCBfdW5sZXNzXyBpdHMgY29udGVudHMg
aGF2ZSBjaGFuZ2VkCisgICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2Ugb25seSB1cGRhdGUgdGhl
IGRpcnR5IGJpdHMuCisgICAgICAgIGlmIChtX2xhcmdlTGF5ZXJEaXJ0eVJlY3QgPT0gZGlydHlS
ZWN0KSB7CisgICAgICAgICAgICBpZiAoIW1fZGlydHlSZWN0LmludGVyc2VjdHMoZGlydHlSZWN0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJz
ZWN0KEludFJlY3QobV9kaXJ0eVJlY3QpKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSBkaXJ0
eVJlY3Q7CisgICAgICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9sYXJnZUxheWVyRGly
dHlSZWN0LnNpemUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbGFyZ2VMYXll
ckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUg
PSBkaXJ0eVJlY3Quc2l6ZSgpOworICAgICAgICAgICAgdXBkYXRlUmVjdCA9IEludFJlY3QoSW50
UG9pbnQoMCwgMCksIGRpcnR5UmVjdC5zaXplKCkpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZGlydHlSZWN0ID0gSW50UmVjdChtX2RpcnR5UmVjdCk7CiAgICAgICAgIEludFJl
Y3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOwpAQCAtMjI3LDYgKzIzOCw5
IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnQKICAgICAgICAgdXBk
YXRlUmVjdCA9IGRpcnR5UmVjdDsKICAgICB9CiAKKyAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBjb25zdCBTa0Jp
dG1hcCogc2tpYUJpdG1hcCA9IDA7CiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBj
YW52YXM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzE2NDUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDMsNiArMTQzLDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVt
OgogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkK
KyAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9zdXBlcmxheWVyKDApCiAg
ICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwg
MCwgMCwgMCkKQEAgLTE1OCw3ICsxNTksOSBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5CiAgICAgLCBtX29wYXF1ZSh0cnVlKQogICAgICwgbV9nZW9tZXRyeUZsaXBw
ZWQoZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGZhbHNlKQorICAg
ICwgbV9kcmF3RGVwdGgoMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorICAgICwgbV9yZW5k
ZXJTdXJmYWNlKDApCiB7CiB9CiAKQEAgLTE3Miw2ICsxNzUsMTIgQEAgTGF5ZXJDaHJvbWl1bTo6
fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbFN1YmxheWVycygpOwogfQogCit2b2lkIExh
eWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIGlmIChtX3JlbmRlclN1cmZh
Y2UpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+Y2xlYW51cFJlc291cmNlcygpOworfQorCiB2
b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiByZW5kZXJlcikKIHsKICAgICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciByZW5kZXJlcnMg
dGhlbiB3ZSBuZWVkIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcwpAQCAtMTg0LDYgKzE5MywxMiBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5CiAgICAgbV9sYXllclJl
bmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKK1JlbmRlclN1cmZhY2VDaHJvbWl1bSogTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCit7CisgICAgbV9yZW5kZXJTdXJmYWNlID0gbmV3
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSh0aGlzKTsKKyAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNl
LmdldCgpOworfQorCiB1bnNpZ25lZCBMYXllckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFt
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQogewogICAgIHVuc2lnbmVkIHZl
cnRleFNoYWRlciA9IGxvYWRTaGFkZXIoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9TSEFERVIsIHZlcnRleFNoYWRlclNvdXJjZSk7CkBAIC00NjMsMjQgKzQ3OCwyNyBAQCBjb25z
dCBJbnRSZWN0IExheWVyQ2hyb21pdW06OmdldERyYXdSZWN0CiAgICAgcmV0dXJuIG1hcHBlZFJl
Y3Q7CiB9CiAKLS8vIERyYXdzIHRoZSBsYXllciB3aXRoIGEgc2luZ2xlIGNvbG9yZWQgc2hhZGVy
LiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRvCi0vLyBxdWljayBkcmF3cyBpbnRvIHRoZSBzdGVu
Y2lsIGJ1ZmZlci4KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0FzTWFzaygpCisvLyBSZXR1cm5z
IHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBkcmF3YWJsZSBjb250
ZW50LgorYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0RyYXdDb250ZW50KCkKIHsKLSAg
ICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKLSAgICBjb25zdCBTaGFyZWRWYWx1ZXMqIHN2ID0g
bGF5ZXJSZW5kZXJlcigpLT5sYXllclNoYXJlZFZhbHVlcygpOwotICAgIEFTU0VSVChzdiAmJiBz
di0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPmJv
cmRlclNoYWRlclByb2dyYW0oKSk7Ci0KLSAgICAvLyBXZSByZXVzZSB0aGUgYm9yZGVyIHNoYWRl
ciBoZXJlIGFzIGFsbCB3ZSBuZWVkIGEgc2luZ2xlIGNvbG9yZWQgc2hhZGVyIHBhc3MuCi0gICAg
Ly8gVGhlIGNvbG9yIHNwZWNpZmllZCBoZXJlIGlzIG9ubHkgZm9yIGRlYnVnIHB1cHJvc2VzIGFz
IHR5cGljYWxseSB3aGVuIHdlIGNhbGwgdGhpcwotICAgIC8vIG1ldGhvZCwgd3JpdGVzIHRvIHRo
ZSBjb2xvciBjaGFubmVscyBhcmUgZGlzYWJsZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtNGYoc3YtPmJvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oKSwgMCwgMSAsIDAsIDAu
NykpOwotCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnBy
b2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAgICAg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCi0gICAg
ICAgICAgICAgICAgICAgICBzdi0+Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgLTEpOwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gZ2V0
U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChzdWJsYXllcnNbaV0tPmRlc2NlbmRhbnRzRHJhd0NvbnRlbnRS
ZWN1cnNpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
K30KKworLy8gUmV0dXJucyB0cnVlIGlmIGVpdGhlciB0aGlzIGxheWVyIG9yIG9uZSBvZiBpdHMg
ZGVzY2VuZGFudHMgaGFzIGRyYXdhYmxlIGNvbnRlbnQuCitib29sIExheWVyQ2hyb21pdW06OmRl
c2NlbmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKQoreworICAgIGlmIChkcmF3c0NvbnRlbnQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGdldFN1YmxheWVycygpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAoc3VibGF5ZXJz
W2ldLT5kZXNjZW5kYW50c0RyYXdDb250ZW50UmVjdXJzaXZlKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIHN0YXRpYwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAko
cmV2aXNpb24gNzE2NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTEzOSwxMCArMTQwLDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBt
X2dlb21ldHJ5RmxpcHBlZCA9IGZsaXBwZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29s
IGdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnlGbGlwcGVkOyB9CiAK
LSAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1Ry
YW5zZm9ybTsgfQotCi0gICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1f
ZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAKICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1
cm4gbV9vd25lciAmJiBtX293bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CkBAIC0xNjUsOCArMTYzLDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsKIAotICAgIC8vIERyYXdz
IHRoZSBsYXllciB3aXRob3V0IGEgdGV4dHVyZS4gVGhpcyBpcyB1c2VkIGZvciBzdGVuY2lsIG9w
ZXJhdGlvbnMuCi0gICAgdm9pZCBkcmF3QXNNYXNrKCk7CisgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICAvLyBTdG9yZXMgdmFsdWVzIHRoYXQg
YXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRoYXQgYXJlCiAgICAg
Ly8gYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIExheWVyUmVuZGVyZXJDaHJvbWl1bSAoYW5kIGhl
bmNlIHRoZSBzYW1lIEdMCkBAIC0xOTgsNiArMTk1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgcHJlcGFyZUZvckRyYXcoY29uc3QgU2hhcmVkVmFsdWVzKik7CiAKKyAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVu
ZGVyZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
bV9vd25lcjsKICAgICBMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
OwpAQCAtMjA1LDExICsyMDQsMTMgQEAgcHJvdGVjdGVkOgogICAgIC8vIFRoaXMgaXMgY2FsbGVk
IHRvIGNsZWFuIHVwIHJlc291cmNlcyBiZWluZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMK
ICAgICAvLyBsYXllclJlbmRlcmVyQ29udGV4dCgpLiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlk
ZSB0aGlzIG1ldGhvZCBpZiB0aGV5CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCByZXNv
dXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNl
cygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAKLSAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
UmVuZGVyZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNv
bnRleHQoKSBjb25zdDsKIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVy
J3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KKyAgICBib29sIGRlc2NlbmRhbnRz
RHJhd0NvbnRlbnQoKTsKKwogICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJp
eCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3Bh
Y2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhMb2NhdGlv
biwgaW50IGFscGhhTG9jYXRpb24pOwpAQCAtMjIyLDYgKzIyMywxMiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5OwogCisg
ICAgLy8gUmVuZGVyIHN1cmZhY2UgdGhpcyBsYXllciBkcmF3cyBpbnRvLiBUaGlzIGlzIGEgc3Vy
ZmFjZSB0aGF0IGNhbiBiZWxvbmcKKyAgICAvLyBlaXRoZXIgdG8gdGhpcyBsYXllciAoaWYgbV90
YXJnZXRSZW5kZXJTdXJmYWNlID09IG1fcmVuZGVyU3VyZmFjZSkgb3IKKyAgICAvLyB0byBhbiBh
bmNlc3RvciBvZiB0aGlzIGxheWVyLiBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGRldGVybWlu
ZXMgdGhlCisgICAgLy8gY29vcmRpbmF0ZSBzeXN0ZW0gdGhlIGxheWVyJ3MgdHJhbnNmb3JtcyBh
cmUgcmVsYXRpdmUgdG8uCisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX3RhcmdldFJlbmRl
clN1cmZhY2U7CisKICAgICAvLyBBbGwgbGF5ZXIgc2hhZGVycyBzaGFyZSB0aGUgc2FtZSBhdHRy
aWJ1dGUgbG9jYXRpb25zIGZvciB0aGUgdmVydGV4IHBvc2l0aW9ucwogICAgIC8vIGFuZCB0ZXh0
dXJlIGNvb3JkaW5hdGVzLiBUaGlzIGFsbG93cyBzd2l0Y2hpbmcgc2hhZGVycyB3aXRob3V0IHJl
YmluZGluZyBhdHRyaWJ1dGUKICAgICAvLyBhcnJheXMuCkBAIC0yNDQsNiArMjUxLDggQEAgcHJp
dmF0ZToKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21T
dXBlcmxheWVyLgogICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogCisg
ICAgYm9vbCBkZXNjZW5kYW50c0RyYXdDb250ZW50UmVjdXJzaXZlKCk7CisKICAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9zdWJsYXllcnM7CiAgICAgTGF5ZXJDaHJvbWl1bSog
bV9zdXBlcmxheWVyOwogCkBAIC0yNjYsNiArMjc1LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2dlb21ldHJ5RmxpcHBlZDsKICAgICBib29sIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2U7
CiAKKyAgICAvLyBUaGUgZ2xvYmFsIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxh
eWVyLiBUaGlzIHZhbHVlIGlzIHVzZWQKKyAgICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sg
dG8gZnJvbnQuCisgICAgZmxvYXQgbV9kcmF3RGVwdGg7CisKICAgICAvLyBQb2ludHMgdG8gdGhl
IGxheWVyIHJlbmRlcmVyIHRoYXQgdXBkYXRlcyBhbmQgZHJhd3MgdGhpcyBsYXllci4KICAgICBS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAKQEAgLTI3NCw2
ICsyODcsMTggQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVy
VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKIAor
ICAgIC8vIFRoZSBzY2lzc29yIHJlY3RhbmdsZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhp
cyBsYXllciBpcyBkcmF3bi4KKyAgICAvLyBJbmhlcml0ZWQgYnkgdGhlIHBhcmVudCBsYXllciBh
bmQgZnVydGhlciByZXN0cmljdGVkIGlmIHRoaXMgbGF5ZXIgbWFza3MKKyAgICAvLyB0byBib3Vu
ZHMuCisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworCisgICAgLy8gUmVuZGVyIHN1cmZhY2Ug
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRz
CisgICAgLy8gd2lsbCByZW5kZXIgdG8gdGhpcyBzdXJmYWNlLgorICAgIE93blB0cjxSZW5kZXJT
dXJmYWNlQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZTsKKworICAgIC8vIEhpZXJhcmNoaWNhbCBi
b3VuZGluZyByZWN0IGNvbnRhaW5pbmcgdGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCisg
ICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CisKICAgICBTdHJpbmcgbV9uYW1lOwog
fTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTY0NSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjkgKzQ4LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxl
ZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCwgZmxvYXQgbmVhclosIGZs
b2F0IGZhclopCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQg
bGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQogewogICAgIGZsb2F0
IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKICAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207
Ci0gICAgZmxvYXQgZGVsdGFaID0gZmFyWiAtIG5lYXJaOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG9ydGhvOwotICAgIGlmICghZGVsdGFYIHx8ICFkZWx0YVkgfHwgIWRlbHRhWikKKyAgICBp
ZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQogICAgICAgICByZXR1cm4gb3J0aG87CiAgICAgb3J0aG8u
c2V0TTExKDIuMGYgLyBkZWx0YVgpOwogICAgIG9ydGhvLnNldE00MSgtKHJpZ2h0ICsgbGVmdCkg
LyBkZWx0YVgpOwogICAgIG9ydGhvLnNldE0yMigyLjBmIC8gZGVsdGFZKTsKICAgICBvcnRoby5z
ZXRNNDIoLSh0b3AgKyBib3R0b20pIC8gZGVsdGFZKTsKLSAgICBvcnRoby5zZXRNMzMoLTIuMGYg
LyBkZWx0YVopOwotICAgIG9ydGhvLnNldE00MygtKG5lYXJaICsgZmFyWikgLyBkZWx0YVopOwor
CisgICAgLy8gWiBjb21wb25lbnQgb2YgdmVydGljZXMgaXMgYWx3YXlzIHNldCB0byB6ZXJvIGFz
IHdlIGRvbid0IHVzZSB0aGUgZGVwdGggYnVmZmVyCisgICAgLy8gd2hpbGUgZHJhd2luZy4KKyAg
ICBvcnRoby5zZXRNMzMoMCk7CisKICAgICByZXR1cm4gb3J0aG87CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IExheWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVy
Q2hyb21pdW0qIGIpCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRp
b24sIHNrZXcgb3IgcGVyc3BlY3RpdmUgY29tcG9uZW50cyB0byBpdC4KK3N0YXRpYyBib29sIGlz
U2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1BID0gYS0+ZHJhd1RyYW5zZm9y
bSgpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1CID0gYi0+ZHJh
d1RyYW5zZm9ybSgpOworICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQo
KQorICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQorICAgICAg
ICAgICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5tNDMoKQorICAgICAgICAgICAmJiBt
Lm00NCgpOworCit9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIu
bTQzKCk7Citib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBM
YXllckNocm9taXVtKiBhLCBjb25zdCBMYXllckNocm9taXVtKiBiKQoreworICAgIHJldHVybiBh
LT5tX2RyYXdEZXB0aCA8IGItPm1fZHJhd0RlcHRoOwogfQogCiBQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKQEAgLTg5LDExICs5OCwxNCBAQCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgOiBtX3Jvb3RMYXllclRleHR1cmVJ
ZCgwKQogICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExheWVy
VGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9zY3JvbGxTaGFkZXJQcm9ncmFtKDApCisgICAgLCBt
X3RleHR1cmVMYXllclNoYWRlclByb2dyYW0oMCkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAg
LCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX2N1cnJlbnRTaGFk
ZXIoMCkKKyAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fb2Zmc2NyZWVu
RnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlKDApCiB7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlh
bGl6ZVNoYXJlZE9iamVjdHMoKTsKIH0KQEAgLTE4MSwxMiArMTkzLDE1IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICBpbnQgdmlzaWJsZVJlY3RXaWR0aCA9
IHZpc2libGVSZWN0LndpZHRoKCk7CiAgICAgaW50IHZpc2libGVSZWN0SGVpZ2h0ID0gdmlzaWJs
ZVJlY3QuaGVpZ2h0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJU
ZXh0dXJlV2lkdGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVp
Z2h0KSB7Ci0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3Qud2lk
dGgoKTsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCk7CisgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0
aDsKKyAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7
CiAKLSAgICAgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoMCwgdmlzaWJsZVJl
Y3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQsIDAsIC0xMDAwLCAxMDAwKTsKICAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lk
dGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CiAKKyAgICAgICAgLy8gUmVz
ZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2
aWV3cG9ydCBhbmQKKyAgICAgICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJl
bmRlclN1cmZhY2UgaXMgY2FsbGVkLgorICAgICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0g
MDsKKwogICAgICAgICAvLyBUaGUgcm9vdCBsYXllciB0ZXh0dXJlIHdhcyBqdXN0IHJlc2l6ZWQg
c28gaXRzIGNvbnRlbnRzIGFyZSBub3QKICAgICAgICAgLy8gdXNlZnVsIGZvciBzY3JvbGxpbmcu
CiAgICAgICAgIHNraXBTY3JvbGwgPSB0cnVlOwpAQCAtMjAxLDggKzIxNiw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmEKICAgICAvLyBGSVhNRTogVGhlc2UgY2Fs
bHMgY2FuIGJlIG1hZGUgb25jZSwgd2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGluaXRp
YWxpemVkLgogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFKSk7Ci0gICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kZXB0aEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTCkpOwotICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApKTsKKwogICAgIC8vIEJsZW5k
aW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5k
b3dzIGlzIGluY29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5cGUuIAogICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsgCiAK
QEAgLTIzMCwxMSArMjQ0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJl
VG9EcmEKICAgICAgICAgICAgIDAuNSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgc2Nyb2xsRGVs
dGEueSgpLCAwKTsKICAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0xLCAx
KTsKIAotICAgICAgICB1c2VTaGFkZXIobV9zY3JvbGxTaGFkZXJQcm9ncmFtKTsKLSAgICAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkobV9zY3JvbGxTaGFkZXJTYW1wbGVy
TG9jYXRpb24sIDApKTsKKyAgICAgICAgdXNlU2hhZGVyKG1fdGV4dHVyZUxheWVyU2hhZGVyUHJv
Z3JhbSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4
dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uLCAwKSk7CiAgICAgICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQobV9jb250ZXh0LmdldCgpLCBtX3Byb2plY3Rpb25NYXRyaXgs
IHNjcm9sbGVkTGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxTaGFkZXJNYXRyaXhM
b2NhdGlvbiwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24sIG1fdGV4dHVyZUxheWVyU2hhZGVyQWxw
aGFMb2NhdGlvbik7CiAKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5VGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwg
Y29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9CkBAIC0y
NzUsOCArMjg5LDE2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMK
IHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAorICAgIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UgPSBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGlm
ICghbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSkKKyAgICAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZSA9IG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgbV9kZWZhdWx0UmVu
ZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoMCwgMCwgbV9yb290TGF5ZXJUZXh0
dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCk7CisKKyAgICB1c2VSZW5kZXJTdXJm
YWNlKG1fZGVmYXVsdFJlbmRlclN1cmZhY2UpOworCisgICAgLy8gQ2xlYXIgdG8gYmx1ZSB0byBt
YWtlIGl0IGVhc2llciB0byBzcG90IHVucmVuZGVyZWQgcmVnaW9ucy4KICAgICBtX2NvbnRleHQt
PmNsZWFyQ29sb3IoMCwgMCwgMSwgMSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CiAK
QEAgLTI5NSw0NiArMzE3LDU0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMYXllclZh
bHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJB
bHBoYUxvY2F0aW9uKCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29sb3JNYXNr
KHRydWUsIHRydWUsIHRydWUsIHRydWUpKTsKIAotICAgIC8vIElmIGN1bGxpbmcgaXMgZW5hYmxl
ZCB0aGVuIHdlIHdpbGwgY3VsbCB0aGUgYmFja2ZhY2UuCi0gICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5jdWxsRmFjZShHcmFwaGljc0NvbnRleHQzRDo6QkFDSykpOwotICAgIC8vIFRoZSBv
cnRob2dyYXBoaWMgcHJvamVjdGlvbiBpcyBzZXR1cCBzdWNoIHRoYXQgWSBzdGFydHMgYXQgemVy
byBhbmQKLSAgICAvLyBpbmNyZWFzZXMgZ29pbmcgZG93biB0aGUgcGFnZSBzbyB3ZSBuZWVkIHRv
IGFkanVzdCB0aGUgd2luZGluZyBvcmRlciBvZgotICAgIC8vIGZyb250IGZhY2luZyB0cmlhbmds
ZXMuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcm9udEZhY2UoR3JhcGhpY3NDb250
ZXh0M0Q6OkNXKSk7Ci0KLSAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxheWVycyBy
ZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwotICAgIC8vIHNvIHdlIG5lZWQgdG8g
c2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgotICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0KICAgICAvLyBTZXQgdGhl
IHJvb3QgdmlzaWJsZS9jb250ZW50IHJlY3RzIC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xh
eWVycyBjYWxscy4KICAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwogICAgIG1f
cm9vdENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7CiAKLSAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5
ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgotICAgIGZsb2F0IG9wYWNp
dHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5
ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwotICAgIHNpemVfdCBpOworICAgIC8v
IFNjaXNzb3Igb3V0IHRoZSBzY3JvbGxiYXJzIHRvIGF2b2lkIHJlbmRlcmluZyBvbiB0b3Agb2Yg
dGhlbS4KKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisgICAgLy8g
VGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KKyAg
ICByb290U2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBv
c2l0aW9uLnkoKSk7CisgICAgbV9yb290TGF5ZXItPm1fc2Npc3NvclJlY3QgPSByb290U2Npc3Nv
clJlY3Q7CisKKyAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobV9yb290TGF5ZXIuZ2V0KCkp
OworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgZm9yIChp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIG9wYWNpdHkpOworICAg
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CisgICAgdXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QpOwog
Ci0gICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQg
bGF5ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCisgICAgLy8gVGhlIHNoYWRlciB1c2VkIHRvIHJl
bmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBjb2xvcnMKKyAgICAvLyBz
byB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9wcmlhdGVseS4KKyAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
KTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpKTsKLSAgICBJbnRSZWN0IHNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAg
IC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQu
Ci0gICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBv
c2l0aW9uLnkoKSk7Ci0gICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CisgICAgLy8gVXBk
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUg
YXJyYXkgZnJvbQorICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVk
IHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCisgICAgLy8gY29ycmVjdCBvcmRl
ci4KKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNp
emUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAg
TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFtzdXJmYWNlSW5kZXhdOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyLT5tX3Jl
bmRlclN1cmZhY2UpOworCisgICAgICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJs
ZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9yIGhlaWdodAorICAgICAgICAvLyB3aWxsIGhhdmUgbm8g
bGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Qu
c2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdXNlUmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIGlm
IChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gbV9yb290TGF5ZXIpIHsKKyAgICAgICAgICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7CisgICAgICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
MCwgMCwgMCwgMCkpOworICAgICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVh
cihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOworICAgICAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCkpOworICAgICAgICB9CiAKLSAgICAvLyBDbGVhciB0aGUgc3RlbmNpbCBidWZmZXIgdG8g
MC4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JVRkZFUl9CSVQpKTsKLSAgICAvLyBEaXNhYmxlIHdyaXRlcyB0byB0aGUgc3Rl
bmNpbCBidWZmZXIuCi0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsTWFzaygw
KSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRy
YXcgdGhlIGxheWVycy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXpl
KCk7IGkrKykKLSAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkp
OworICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJm
YWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Q7CisgICAgICAgIEFTU0VSVChs
YXllckxpc3Quc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsg
bGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKKyAgICAgICAgICAg
IGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0sIHJlbmRlclN1cmZhY2VMYXllci0+bV9y
ZW5kZXJTdXJmYWNlLmdldCgpKTsKKyAgICB9CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsK
QEAgLTQwOCwxMCArNDM4LDEyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVy
VmlzaWIKICAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVjdCgtMSwgLTEs
IDIsIDIpKTsKIH0KIAotLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRp
bmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIHVwZGF0ZXMgdGhlIAotLy8gdHJhbnNmb3JtIGFuZCBv
cGFjaXR5IHZhbHVlcy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNS
ZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXJlbnRNYXRyaXgsIGZsb2F0IG9wYWNpdHkpCisvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUg
bGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRo
ZQorLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5k
ZXIgc3VyZmFjZXMsIGV0Yy4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIGxheWVyTGlzdCkKIHsKKyAgICBsYXll
ci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKwogICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRy
aXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQK
ICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhh
dCB0aGUgbGF5ZXIncyBwb3NpdGlvbgogICAgIC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5
ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRoZSBjb29yZGluYXRlIHN5c3RlbSB1c2VkCkBAIC00
MzgsMTgyICs0NzAsMjU0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMKICAgICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBi
b3VuZHMud2lkdGgoKTsKICAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBv
aW50LnkoKSkgKiBib3VuZHMuaGVpZ2h0KCk7CiAKLSAgICAvLyBNID0gTVtwXQotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxvY2FsTWF0cml4ID0gcGFyZW50TWF0cml4OwotICAgIC8vIE0gPSBN
W3BdICogVHJbbF0KLSAgICBsb2NhbE1hdHJpeC50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBv
c2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50WigpKTsKLSAgICAvLyBNID0gTVtwXSAqIFRy
W2xdICogTVtsXQotICAgIGxvY2FsTWF0cml4Lm11bHRMZWZ0KGxheWVyLT50cmFuc2Zvcm0oKSk7
Ci0gICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIGxvY2FsTWF0cml4
LnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9y
UG9pbnRaKCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTG9jYWxUcmFuc2Zvcm07
CisgICAgLy8gTFQgPSBUcltsXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2Qo
cG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIGxheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAg
Ly8gTFQgPSBUcltsXSAqIE1bbF0KKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRMZWZ0KGxh
eWVyLT50cmFuc2Zvcm0oKSk7CisgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQorICAg
IGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zm
c2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICBjb21iaW5lZFRyYW5zZm9y
bSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRMZWZ0KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworCisg
ICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0w
LjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBs
YXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJl
Y3Q7CisKKyAgICAvLyBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBu
ZXcgUmVuZGVyU3VyZmFjZSBpZiBhbnkgb2YKKyAgICAvLyB0aGVzZSBjb25kaXRpb25zIGhvbGQ6
CisgICAgLy8gMS4gVGhlIGxheWVyIGNsaXBzIGl0cyBkZXNjZW5kYW50cyBhbmQgaXRzIHRyYW5z
Zm9ybSBpcyBub3QgYSBzaW1wbGUgdHJhbnNsYXRpb24uCisgICAgLy8gMi4gSWYgdGhlIGxheWVy
IGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90IGhhdmUgYSBwcmVzZXJ2ZXMtM2QgdHJhbnNm
b3JtIHN0eWxlLgorICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3Qg
Y3JlYXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZworICAgIC8v
IG91dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXll
cnMgaXMgbXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQorICAgIC8vIG9mIHRoZWlyIHBhcmVudC4K
KyAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkg
JiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICBib29sIHVz
ZVN1cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJl
c2VydmVzM0QoKTsKKyAgICBpZiAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNl
Rm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKSkgeworICAgICAg
ICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJT
dXJmYWNlLmdldCgpOworICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICAv
LyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIg
b2YgdGhlIGxheWVyLgorICAgICAgICBsYXllci0+bV9kcmF3VHJhbnNmb3JtID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKTsKKyAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUz
ZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKworICAg
ICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUg
YXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgorICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgaWYgKGxh
eWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJm
YWNlLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7
CisgICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ID0gMTsKKworICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOworICAg
ICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRo
KCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICByZW5kZXJTdXJmYWNlLT5t
X29yaWdpblRyYW5zZm9ybSA9IGxheWVyT3JpZ2luVHJhbnNmb3JtOworICAgICAgICBpZiAobGF5
ZXJPcmlnaW5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgJiYgbGF5ZXItPnN1cGVybGF5ZXIoKSkg
eworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VG9MYXllciA9IGxheWVy
T3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKTsKKworICAgICAgICAgICAgbGF5ZXItPm1fc2Npc3Nv
clJlY3QgPSBwYXJlbnRUb0xheWVyLm1hcFJlY3QobGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9zY2lz
c29yUmVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbGF5ZXItPm1fc2Npc3NvclJl
Y3QgPSBJbnRSZWN0KCk7CisKKyAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIHNjaXNzb3Ig
cmVjdCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KKyAgICAgICAgLy8gYmUgYXBw
bGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmlu
ZworICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBz
dXBlcmxheWVyJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
c2Npc3NvclJlY3QgPSBsYXllci0+c3VwZXJsYXllcigpLT5tX3NjaXNzb3JSZWN0OworCisgICAg
ICAgIHJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CisKKyAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IERUID0gTVtwXSAqIExUCisgICAgICAgIGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0gPSBjb21iaW5l
ZFRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0ubWFwUmVjdChsYXllclJlY3QpKTsKKworICAgICAg
ICBsYXllci0+bV9kcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CisKKyAgICAgICAgaWYg
KGxheWVyLT5zdXBlcmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXll
cigpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPm1fZHJhd09wYWNpdHkg
Kj0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9kcmF3T3BhY2l0eTsKKworICAgICAgICAgICAgLy8g
TGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBmcm9tIHRoZWlyIHN1cGVybGF5ZXIuCisg
ICAgICAgICAgICBsYXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1f
c2Npc3NvclJlY3Q7CisKKyAgICAgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2Ug
PSBsYXllci0+c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobGF5ZXIgIT0gbV9yb290TGF5ZXIpCisgICAgICAgICAgICBsYXllci0+
bV9yZW5kZXJTdXJmYWNlID0gMDsKKworICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMo
KSkKKyAgICAgICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1l
ZExheWVyUmVjdCk7CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tX3JlbmRlclN1cmZhY2UpCisg
ICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJm
YWNlLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIo
KSk7CisgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBsYXllci0+c3VwZXJs
YXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgfQogCi0gICAgLy8gQ2FsY3VsYXRl
IHRoZSBsYXllcidzIG9wYWNpdHkuCi0gICAgb3BhY2l0eSAqPSBsYXllci0+b3BhY2l0eSgpOwor
ICAgIC8vIG1fZHJhd2FibGVDb250ZW50UmVjdCBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBjb29y
ZGluYXRlIHN5c3RlbSBvZiB0aGUKKyAgICAvLyBSZW5kZXJTdXJmYWNlIHRoZSBsYXllciBkcmF3
cyBpbnRvLgorICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGxheWVyLT5t
X2RyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICBlbHNlCisg
ICAgICAgIGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QgPSBJbnRSZWN0KCk7CiAKLSAgICBs
YXllci0+c2V0RHJhd1RyYW5zZm9ybShsb2NhbE1hdHJpeCk7Ci0gICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KG9wYWNpdHkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4
ID0gbGF5ZXItPm1fZHJhd1RyYW5zZm9ybTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhl
IGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0QuCiAgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0Qo
KSkgewotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMTMoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4
LnNldE0yMygwKTsKLSAgICAgICAgbG9jYWxNYXRyaXguc2V0TTMxKDApOwotICAgICAgICBsb2Nh
bE1hdHJpeC5zZXRNMzIoMCk7Ci0gICAgICAgIGxvY2FsTWF0cml4LnNldE0zMygxKTsKLSAgICAg
ICAgbG9jYWxNYXRyaXguc2V0TTM0KDApOwotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNNDMoMCk7
CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0xMygwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRy
aXguc2V0TTIzKDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CisgICAgICAg
IHN1YmxheWVyTWF0cml4LnNldE0zMigwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMz
KDEpOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CisgICAgICAgIHN1YmxheWVy
TWF0cml4LnNldE00MygwKTsKICAgICB9CiAKICAgICAvLyBBcHBseSB0aGUgc3VibGF5ZXIgdHJh
bnNmb3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIGxvY2FsTWF0cml4Lm11bHRM
ZWZ0KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKyAgICBzdWJsYXllck1hdHJpeC5tdWx0
TGVmdChsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CiAKLSAgICAvLyBUaGUgb3JpZ2luIG9m
IHRoZSBzdWJsYXllcnMgaXMgYWN0dWFsbHkgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBvZiB0aGUg
bGF5ZXIKLSAgICAvLyAob3IgdG9wIGxlZnQgd2hlbiBsb29raW5nIGl0IGl0IGZyb20gdGhlIGJy
b3dzZXIncyBwZXNwZWN0aXZlKSBpbnN0ZWFkIG9mIHRoZSBjZW50ZXIuCi0gICAgLy8gVGhlIG1h
dHJpeCBwYXNzZWQgZG93biB0byB0aGUgc3VibGF5ZXJzIGlzIHRoZXJlZm9yZToKKyAgICAvLyBU
aGUgb3JpZ2luIG9mIHRoZSBzdWJsYXllcnMgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUg
bGF5ZXIsIG5vdCB0aGUKKyAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8g
dGhlIHN1YmxheWVycyBpcyB0aGVyZWZvcmU6CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVy
XQotICAgIGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJv
dW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CisgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2Qo
LWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAotICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXIt
PmdldFN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNp
emUoKTsgaSsrKQotICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdl
dCgpLCBsb2NhbE1hdHJpeCwgb3BhY2l0eSk7Ci0KLSAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJl
cih0aGlzKTsKLX0KLQotLy8gRG9lcyBhIHF1aWNrIGRyYXcgb2YgdGhlIGdpdmVuIGxheWVyIGlu
dG8gdGhlIHN0ZW5jaWwgYnVmZmVyLiBJZiBkZWNyZW1lbnQKLS8vIGlzIHRydWUgdGhlbiBpdCBk
ZWNyZW1lbnRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgdmFsdWVzIG90aGVyd2lzZSBpdCBpbmNyZW1l
bnRzIHRoZW0uCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVySW50b1N0ZW5j
aWxCdWZmZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGJvb2wgZGVjcmVtZW50KQotewotICAgIC8v
IEVuYWJsZSB3cml0ZXMgdG8gdGhlIHN0ZW5jaWwgYnVmZmVyIGFuZCBpbmNyZW1lbnQgdGhlIHN0
ZW5jaWwgdmFsdWVzCi0gICAgLy8gYnkgb25lIGZvciBldmVyeSBwaXhlbCB1bmRlciB0aGUgY3Vy
cmVudCBsYXllci4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKDB4
ZmYpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpBTFdBWVMsIDEsIDB4ZmYpKTsKLSAgICB1bnNpZ25lZCBzdGVuY2lsT3AgPSAo
ZGVjcmVtZW50ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkRFQ1IgOiBHcmFwaGljc0NvbnRleHQzRDo6
SU5DUik7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zdGVuY2lsT3Aoc3RlbmNpbE9w
LCBzdGVuY2lsT3AsIHN0ZW5jaWxPcCkpOworICAgIFZlY3RvcjxMYXllckNocm9taXVtKj4mIGRl
c2NlbmRhbnRzID0gKGxheWVyLT5tX3JlbmRlclN1cmZhY2UgPyBsYXllci0+bV9yZW5kZXJTdXJm
YWNlLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7CisgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxh
eWVyKTsKKyAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAt
IDE7CiAKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayhmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSkpOwotCi0gICAgbGF5ZXItPmRyYXdBc01hc2soKTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRT
dWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBMYXllckNocm9taXVtKiBzdWJsYXllciA9IHN1YmxheWVyc1tpXS5n
ZXQoKTsKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyLCBzdWJsYXllck1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOworCisgICAgICAgIGlm
IChzdWJsYXllci0+bV9yZW5kZXJTdXJmYWNlKSB7CisgICAgICAgICAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHN1YmxheWVyUmVuZGVyU3VyZmFjZSA9IHN1YmxheWVyLT5tX3JlbmRlclN1cmZh
Y2UuZ2V0KCk7CisgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCA9IHN1Ymxh
eWVyUmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdDsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBz
dWJsYXllclJlY3QoLTAuNSAqIGNvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBjb250ZW50UmVj
dC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJl
Y3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgbGF5ZXItPm1f
ZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHN1YmxheWVyUmVuZGVy
U3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtLm1hcFJlY3Qoc3VibGF5ZXJSZWN0KSkpOworICAgICAg
ICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKHN1YmxheWVyKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKHN1YmxheWVyLT5tX2Ry
YXdhYmxlQ29udGVudFJlY3QpOworICAgIH0KKworICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5k
cygpKQorICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFu
c2Zvcm1lZExheWVyUmVjdCk7CisKKyAgICBpZiAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAmJiBs
YXllciAhPSBtX3Jvb3RMYXllcikgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdDsK
KyAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVu
dFJlY3RDZW50ZXIoKTsKKworICAgICAgICAvLyBSZXN0cmljdCB0aGUgUmVuZGVyU3VyZmFjZSBz
aXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNpYmxlLgorICAgICAgICBGbG9hdFNpemUgY2Vu
dGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50
UmVjdC5pbnRlcnNlY3QobGF5ZXItPm1fc2Npc3NvclJlY3QpOworICAgICAgICBGbG9hdFBvaW50
IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIo
KTsKKyAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2Vu
dGVyIC0gc3VyZmFjZUNlbnRlcjsKKworICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNr
aW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKKyAgICAgICAg
Ly8gdGV4dHVyZSBzaXplLgorICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LnNl
dFdpZHRoKHN0ZDo6bWluKHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9t
YXhUZXh0dXJlU2l6ZSkpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LnNl
dEhlaWdodChzdGQ6Om1pbihyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmhlaWdodCgpLCBt
X21heFRleHR1cmVTaXplKSk7CisKKyAgICAgICAgaWYgKHJlbmRlclN1cmZhY2UtPm1fY29udGVu
dFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Qu
Y2xlYXIoKTsKKworICAgICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3IHJlbmRl
ciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cworICAgICAgICAvLyBzY2lzc29yIHJlY3Qg
dG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgor
ICAgICAgICBsYXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJl
Y3Q7CisKKyAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBi
ZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9kcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm07Cisg
ICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNl
Q2VudGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNl
bnRlci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKKyAgICB9
CisKKyAgICAvLyBDb21wdXRlIHRoZSBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBs
YXllciB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbgorICAgIC8vIHNvcnRpbmcgdGhlIGxheWVycyBm
b3IgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJEcmF3TWF0cml4ID0gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3JlbmRl
clN1cmZhY2UtPm1fZHJhd1RyYW5zZm9ybSA6IGxheWVyLT5tX2RyYXdUcmFuc2Zvcm07CisgICAg
aWYgKGxheWVyLT5zdXBlcmxheWVyKCkpIHsKKyAgICAgICAgaWYgKCFsYXllci0+c3VwZXJsYXll
cigpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gbGF5
ZXItPnN1cGVybGF5ZXIoKS0+bV9kcmF3RGVwdGg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGxheWVyLT5tX2RyYXdEZXB0aCA9IGxheWVyRHJhd01hdHJpeC5tNDMoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gMDsKIAotICAgIC8vIERpc2FibGUgd3JpdGVz
IHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrKDApKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSk7CisgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29y
dCBhbGwgdGhlIGRlc2NlbmRhbnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKKyAgICAv
LyBjZW50ZXIuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhl
IHN1cGVybGF5ZXIgdGhlbgorICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHN1cGVybGF5
ZXIgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgorICAgIGlmIChsYXllci0+
cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5zdXBlcmxheWVyKCkgfHwgIWxheWVyLT5zdXBlcmxh
eWVyKCktPnByZXNlcnZlczNEKCkpKQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5k
YW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJa
KTsKIH0KIAotLy8gUmVjdXJzaXZlbHkgd2FsayB0aGUgbGF5ZXIgdHJlZSBhbmQgZHJhdyB0aGUg
bGF5ZXJzLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNSZWN1cnNpdmUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVu
ZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UpCiB7Ci0gICAg
c3RhdGljIGJvb2wgZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgaW50IGN1cnJlbnRTdGVuY2lsVmFsdWUgPSAwOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGxh
eWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCi0gICAgSW50
UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3QoKTsKLSAgICBib29sIGlzTGF5ZXJW
aXNpYmxlID0gbV9jdXJyZW50U2Npc3NvclJlY3QuaW50ZXJzZWN0cyhsYXllclJlY3QpOworICAg
IGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IHJlbmRlclN1cmZhY2UpCisgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgLy8gRW5hYmxlIGRlcHRoIHRlc3RpbmcgZm9yIHRoaXMgbGF5ZXIg
YW5kIGFsbCBpdHMgZGVzY2VuZGFudHMgaWYgcHJlc2VydmVzM0QgaXMgc2V0LgotICAgIGJvb2wg
bXVzdENsZWFyRGVwdGggPSBmYWxzZTsKLSAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkpIHsK
LSAgICAgICAgaWYgKCFkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSkgewotICAgICAgICAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1QpKTsKLSAgICAgICAgICAgIGRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlID0gdHJ1ZTsK
KyAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZTsKIAotICAgICAgICAg
ICAgLy8gTmVlZCB0byBjbGVhciB0aGUgZGVwdGggYnVmZmVyIHdoZW4gd2UncmUgZG9uZSByZW5k
ZXJpbmcgdGhpcyBzdWJ0cmVlLgotICAgICAgICAgICAgbXVzdENsZWFyRGVwdGggPSB0cnVlOwot
ICAgICAgICB9CisgICAgaWYgKHJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZSkgeworICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKyAgICAgICAgc2V0RHJhd1ZpZXdw
b3J0UmVjdChyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LCB0cnVlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGlzTGF5ZXJWaXNpYmxlKQotICAgICAgICBkcmF3
TGF5ZXIobGF5ZXIpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKSk7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIGhlcmUgaWYgdGhlIGxheWVy
IGhhcyBkZXNjZW5kYW50cyB0aGF0IGRyYXcgY29udGVudAotICAgIC8vIGJlZm9yZSB3ZSBzZXR1
cCBmb3IgY2xpcHBpbmcuCi0gICAgSW50UmVjdCBwcmV2aW91c1NjaXNzb3JSZWN0ID0gbV9jdXJy
ZW50U2Npc3NvclJlY3Q7Ci0gICAgYm9vbCBtdXN0UmVzZXRTY2lzc29yUmVjdCA9IGZhbHNlOwot
ICAgIGJvb2wgZGlkU3RlbmNpbERyYXcgPSBmYWxzZTsKLSAgICBpZiAobGF5ZXItPm1hc2tzVG9C
b3VuZHMoKSkgewotICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgaXNuJ3Qgcm90YXRlZCB0aGVuIHdl
IGNhbiB1c2Ugc2Npc3NvcmluZyBvdGhlcndpc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBjbGlw
IHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAgICAgICAgaWYgKGxheWVyLT5kcmF3VHJhbnNm
b3JtKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICAgICAgSW50UmVjdCBj
dXJyZW50U2Npc3NvclJlY3QgPSBwcmV2aW91c1NjaXNzb3JSZWN0OwotICAgICAgICAgICAgY3Vy
cmVudFNjaXNzb3JSZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotICAgICAgICAgICAgaWYgKGN1
cnJlbnRTY2lzc29yUmVjdCAhPSBwcmV2aW91c1NjaXNzb3JSZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgc2Npc3NvclRvUmVjdChjdXJyZW50U2Npc3NvclJlY3QpOwotICAgICAgICAgICAgICAgIG11
c3RSZXNldFNjaXNzb3JSZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IGlmIChjdXJyZW50U3RlbmNpbFZhbHVlIDwgKCgxIDw8IG1fbnVtU3RlbmNpbEJpdHMpIC0gMSkp
IHsKLSAgICAgICAgICAgIC8vIENsaXBwaW5nIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlciB3b3Jr
cyBhcyBmb2xsb3dzOiBXaGVuIHdlIGVuY291bnRlcgotICAgICAgICAgICAgLy8gYSBjbGlwcGlu
ZyBsYXllciB3ZSBpbmNyZW1lbnQgdGhlIHN0ZW5jaWwgYnVmZmVyIHZhbHVlcyBmb3IgYWxsIHRo
ZSBwaXhlbHMKLSAgICAgICAgICAgIC8vIHRoZSBsYXllciB0b3VjaGVzLiBBcyBhIHJlc3VsdCAx
J3Mgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyIGZvciBwaXhlbHMgdW5kZXIK
LSAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBjbGlwcGluZyBsYXllciBmb3VuZCBpbiBhIHRyYXZl
cnNhbCwgMidzIGZvciBwaXhlbHMgaW4gdGhlIGludGVyc2VjdGlvbgotICAgICAgICAgICAgLy8g
b2YgdHdvIG5lc3RlZCBjbGlwcGluZyBsYXllcnMsIGV0Yy4gV2hlbiB0aGUgc3VibGF5ZXJzIG9m
IGEgY2xpcHBpbmcgbGF5ZXIgYXJlIGRyYXduCi0gICAgICAgICAgICAvLyB3ZSB0dXJuIG9uIHN0
ZW5jaWwgdGVzdGluZyB0byByZW5kZXIgb25seSBwaXhlbHMgdGhhdCBoYXZlIHRoZSBjb3JyZWN0
IHN0ZW5jaWwKLSAgICAgICAgICAgIC8vIHZhbHVlIChvbmUgdGhhdCBtYXRjaGVzIHRoZSB2YWx1
ZSBvZiBjdXJyZW50U3RlbmNpbFZhbHVlKS4gQXMgdGhlIHJlY3Vyc2lvbiB1bnJhdmVscywKLSAg
ICAgICAgICAgIC8vIHdlIGRlY3JlbWVudCB0aGUgc3RlbmNpbCBidWZmZXIgdmFsdWVzIGZvciBl
YWNoIGNsaXBwaW5nIGxheWVyLiBXaGVuIHRoZSBlbnRpcmUgbGF5ZXIgdHJlZQotICAgICAgICAg
ICAgLy8gaXMgcmVuZGVyZWQsIHRoZSBzdGVuY2lsIHZhbHVlcyBzaG91bGQgYmUgYWxsIGJhY2sg
dG8gemVyby4gQW4gOCBiaXQgc3RlbmNpbCBidWZmZXIKLSAgICAgICAgICAgIC8vIHdpbGwgYWxs
b3cgdXMgdXAgdG8gMjU1IG5lc3RlZCBjbGlwcGluZyBsYXllcnMgd2hpY2ggaXMgaG9wZWZ1bGx5
IGVub3VnaC4KLSAgICAgICAgICAgIGlmICghY3VycmVudFN0ZW5jaWxWYWx1ZSkKLSAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9URVNUKSk7CisgICAgcmVuZGVyU3VyZmFjZS0+cHJlcGFyZUNvbnRlbnRzVGV4
dHVyZSgpOwogCi0gICAgICAgICAgICBkcmF3TGF5ZXJJbnRvU3RlbmNpbEJ1ZmZlcihsYXllciwg
ZmFsc2UpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVuZGVyU3VyZmFjZS0+
bV9jb250ZW50c1RleHR1cmVJZCwgMCkpOwogCi0gICAgICAgICAgICBjdXJyZW50U3RlbmNpbFZh
bHVlKys7Ci0gICAgICAgICAgICBkaWRTdGVuY2lsRHJhdyA9IHRydWU7Ci0gICAgICAgIH0KKyNp
ZiAhZGVmaW5lZCAoIE5ERUJVRyApCisgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAvLyBTdWJsYXllcnMgd2lsbCBy
ZW5kZXIgb25seSBpZiB0aGUgdmFsdWUgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGVxdWFsIHRv
Ci0gICAgLy8gY3VycmVudFN0ZW5jaWxWYWx1ZS4KLSAgICBpZiAoZGlkU3RlbmNpbERyYXcpIHsK
LSAgICAgICAgLy8gVGhlIHN1YmxheWVycyB3aWxsIHJlbmRlciBvbmx5IGlmIHRoZSBzdGVuY2ls
IHRlc3QgcGFzc2VzLgotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnN0ZW5jaWxG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY3VycmVudFN0ZW5jaWxWYWx1ZSwgMHhmZikp
OwotICAgIH0KLQotICAgIC8vIElmIHdlJ3JlIHVzaW5nIGRlcHRoIHRlc3RpbmcgdGhlbiB3ZSBu
ZWVkIHRvIHNvcnQgdGhlIGNoaWxkcmVuIGluIFogdG8KLSAgICAvLyBnZXQgdGhlIHRyYW5zcGFy
ZW5jeSB0byB3b3JrIHByb3Blcmx5LgotICAgIGlmIChkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJl
ZSkgewotICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1Ymxh
eWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICAgICAgVmVjdG9yPExheWVyQ2hyb21p
dW0qPiBzdWJsYXllckxpc3Q7Ci0gICAgICAgIHNpemVfdCBpOwotICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgc3VibGF5ZXJMaXN0LmFw
cGVuZChzdWJsYXllcnNbaV0uZ2V0KCkpOwotCi0gICAgICAgIC8vIFNvcnQgYnkgdGhlIHogY29v
cmRpbmF0ZSBvZiB0aGUgbGF5ZXIgY2VudGVyIHNvIHRoYXQgbGF5ZXJzIGZ1cnRoZXIgYXdheQot
ICAgICAgICAvLyBhcmUgZHJhd24gZmlyc3QuCi0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoc3Vi
bGF5ZXJMaXN0LmJlZ2luKCksIHN1YmxheWVyTGlzdC5lbmQoKSwgY29tcGFyZUxheWVyWik7Cisj
ZW5kaWYKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJMaXN0LnNpemUoKTsgaSsr
KQotICAgICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllckxpc3RbaV0pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
c3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGRyYXdMYXllcnNS
ZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKLSAgICB9CisgICAgc2V0RHJhd1ZpZXdwb3J0
UmVjdChyZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LCBmYWxzZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CiAKLSAgICBpZiAoZGlkU3RlbmNpbERyYXcpIHsKLSAgICAgICAgLy8gRHJhdyBpbnRv
IHRoZSBzdGVuY2lsIGJ1ZmZlciBzdWJ0cmFjdGluZyAxIGZvciBldmVyeSBwaXhlbCBoaXQKLSAg
ICAgICAgLy8gZWZmZWN0aXZlbHkgcmVtb3ZpbmcgdGhpcyBtYXNrCi0gICAgICAgIGRyYXdMYXll
ckludG9TdGVuY2lsQnVmZmVyKGxheWVyLCB0cnVlKTsKLSAgICAgICAgY3VycmVudFN0ZW5jaWxW
YWx1ZS0tOwotICAgICAgICBpZiAoIWN1cnJlbnRTdGVuY2lsVmFsdWUpIHsKLSAgICAgICAgICAg
IC8vIERpc2FibGUgc3RlbmNpbCB0ZXN0aW5nLgotICAgICAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpKTsKLSAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OkFMV0FZUywgMCwgMHhmZikpOwotICAgICAgICB9Cit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExheWVyQ2hyb21pdW0qIGxheWVyLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHRhcmdldFN1cmZhY2UpCit7CisgICAgaWYgKGxheWVyLT5tX3JlbmRlclN1cmZh
Y2UgJiYgbGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAhPSB0YXJnZXRTdXJmYWNlKSB7CisgICAgICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fY29udGVudHNUZXh0dXJlSWQp
KTsKKyAgICAgICAgdXNlU2hhZGVyKG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSk7CisKKyAg
ICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JS
ZWN0KTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZS0+bV9jb250ZW50UmVjdDsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVk
UXVhZChtX2NvbnRleHQuZ2V0KCksIG1fcHJvamVjdGlvbk1hdHJpeCwgbGF5ZXItPm1fcmVuZGVy
U3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpLCBsYXll
ci0+bV9yZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRpb24sIG1f
dGV4dHVyZUxheWVyU2hhZGVyQWxwaGFMb2NhdGlvbik7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobXVzdFJlc2V0U2Npc3NvclJlY3QpIHsKLSAgICAgICAgc2Npc3NvclRvUmVj
dChwcmV2aW91c1NjaXNzb3JSZWN0KTsKLSAgICB9CisgICAgaWYgKGxheWVyLT5tX2JvdW5kcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtdXN0Q2xlYXJEZXB0aCkgewot
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1RFU1QpKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVh
cihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpOwotICAgICAgICBkZXB0aFRl
c3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOwotICAgIH0KLX0KKyAgICBzZXRTY2lzc29yVG9S
ZWN0KGxheWVyLT5tX3NjaXNzb3JSZWN0KTsKIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcihMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBJbnRTaXplIGJvdW5kcyA9
IGxheWVyLT5ib3VuZHMoKTsKKyAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIgZmFsbHMgd2l0aGlu
IHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9
IGxheWVyLT5nZXREcmF3UmVjdCgpOworICAgIGJvb2wgaXNMYXllclZpc2libGUgPSBsYXllci0+
bV9zY2lzc29yUmVjdC5pbnRlcnNlY3RzKGxheWVyUmVjdCk7CisgICAgaWYgKCFpc0xheWVyVmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBpbnRv
IGFjY291bnQgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY29udGFpbmluZworICAgIC8vIFJlbmRlclN1
cmZhY2UgaGVyZSwgb3RoZXJ3aXNlIHNpbmdsZS1zaWRlZCBsYXllcnMgdGhhdCBkcmF3IG9uCisg
ICAgLy8gdHJhbnNmb3JtZWQgc3VyZmFjZXMgd29uJ3QgYWx3YXlzIGJlIGN1bGxlZCBwcm9wZXJs
eS4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpICYmIGxheWVyLT5tX2RyYXdUcmFuc2Zv
cm0ubTMzKCkgPCAwKQorICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSkgewogICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBp
ZiBuZWNlc3NhcnkuCkBAIC02MjMsMTEgKzcyNyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXIoTGEKICAgICAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGF5ZXItPmRvdWJsZVNpZGVkKCkpCi0g
ICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFD
RSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0UpOwotCiAgICAgICAgIGxheWVyLT5kcmF3KCk7CiAgICAgfQog
CkBAIC02MzcsMTIgKzczNiwxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVyKExhCiAKIC8vIFNldHMgdGhlIHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBnaXZlbiByZWN0YW5n
bGUuIFRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlCiAvLyBzY2lzc29yUmVjdCBoYXMgaXRz
IG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHZpc2libGUgcmVj
dC4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzY2lzc29yVG9SZWN0KGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JU
b1JlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUg
bG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjaXNzb3IgcmVjdC4KLSAgICBpbnQgYm90dG9tID0g
c3RkOjptYXgobV9yb290VmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBzY2lzc29yUmVjdC5ib3R0b20o
KSwgMCk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JSZWN0
LngoKSwgYm90dG9tLCBzY2lzc29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWlnaHQoKSkp
OwotICAgIG1fY3VycmVudFNjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7CisgICAgLy8gVGhlIHNj
aXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3
ZSBuZWVkIHRvIG9mZnNldAorICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUg
dG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlLgorICAgIGludCBz
Y2lzc29yWCA9IHNjaXNzb3JSZWN0LngoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29u
dGVudFJlY3QueCgpOworICAgIC8vIFdoZW4gcmVuZGVyaW5nIHRvIHRoZSBkZWZhdWx0IHJlbmRl
ciBzdXJmYWNlIHdlJ3JlIHJlbmRlcmluZyB1cHNpZGUgZG93biBzbyB0aGUgdG9wCisgICAgLy8g
b2YgdGhlIEdMIHNjaXNzb3IgaXMgdGhlIGJvdHRvbSBvZiBvdXIgbGF5ZXIuCisgICAgaW50IHNj
aXNzb3JZOworICAgIGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UpCisgICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3VycmVudFJl
bmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIHNjaXNz
b3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50
UmVjdC55KCk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JY
LCBzY2lzc29yWSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsK
IH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVudCgpCkBA
IC02NTksNiArNzY1LDIwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVja1RleHR1
cmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSByYW5nZSBv
ZiBjb250ZW50IHRoYXQgZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVuZGVyIHN1
cmZhY2UuCisvLyBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8gaGF2ZSBh
biBvcmlnaW4gYXQgMCwgMCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKKy8vIG9mIHRoZSBk
cmF3UmVjdC4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3Vmlld3BvcnRSZWN0
KGNvbnN0IEludFJlY3QmIGRyYXdSZWN0LCBib29sIGZsaXBZKQoreworICAgIGlmIChmbGlwWSkK
KyAgICAgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBk
cmF3UmVjdC5yaWdodCgpLCBkcmF3UmVjdC5ib3R0b20oKSwgZHJhd1JlY3QueSgpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0Lngo
KSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5ib3R0b20oKSk7Cisg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBkcmF3UmVjdC53aWR0
aCgpLCBkcmF3UmVjdC5oZWlnaHQoKSkpOworfQorCisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJbnRTaXplJiBzaXplKQogewogICAg
IGlmIChtX2NvbnRleHQpCkBAIC02NjksMTAgKzc4OSwxMCBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAg
ICAvLyBWZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgZm9yIHJlbmRlcmluZyB0aGUgc2Nyb2xs
ZWQgcm9vdCBsYXllciBxdWFkLgotICAgIC8vIFRoZXkgZGlmZmVyIGZyb20gYSByZWd1bGFyIGNv
bnRlbnQgbGF5ZXIgc2hhZGVyIGluIHRoYXQgdGhleSBkb24ndCBzd2l6emxlCi0gICAgLy8gdGhl
IGNvbG9ycyBvciB0YWtlIGFuIGFscGhhIHZhbHVlLgotICAgIGNoYXIgc2Nyb2xsVmVydGV4U2hh
ZGVyU3RyaW5nW10gPQorICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb21wb3NpdGVzIGxh
eWVycyB3aG9zZSBjb250ZW50cyBhcmUgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91cworICAgIC8v
IHJlbmRlciBvcGVyYXRpb24gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHBlcmZvcm0gYW55IGNvbG9y
IHN3aXp6bGluZy4gSXQgaXMgdXNlZAorICAgIC8vIGluIHNjcm9sbGluZyBhbmQgZm9yIGNvbXBv
c2l0aW5nIG9mZnNjcmVlbiB0ZXh0dXJlcy4KKyAgICBjaGFyIHRleHR1cmVMYXllclZlcnRleFNo
YWRlclN0cmluZ1tdID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4i
CiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgogICAgICAgICAidW5p
Zm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKQEAgLTY4MiwyNyArODAyLDI5IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfUG9zaXRp
b24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKICAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFf
dGV4Q29vcmQ7ICAgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKLSAgICBjaGFyIHNjcm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgIGNoYXIgdGV4
dHVyZUxheWVyRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ2YXJ5
aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAg
ICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCiAgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICIgIHZlYzQgdGV4Q29sb3Ig
PSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCi0gICAgICAgICIgIGdsX0Zy
YWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29s
b3Iudyk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRl
eENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgogICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
IAotICAgIG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRl
clByb2dyYW0obV9jb250ZXh0LmdldCgpLCBzY3JvbGxWZXJ0ZXhTaGFkZXJTdHJpbmcsIHNjcm9s
bEZyYWdtZW50U2hhZGVyU3RyaW5nKTsKLSAgICBpZiAoIW1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkg
eworICAgIG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlTGF5ZXJWZXJ0ZXhTaGFkZXJT
dHJpbmcsIHRleHR1cmVMYXllckZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fdGV4
dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBMT0dfRVJST1IoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSBzY3JvbGwgc2hhZGVyIHByb2dyYW0iKTsKICAg
ICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIEdMQyhtX2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zY3JvbGxTaGFkZXJQcm9ncmFtLCAic190
ZXh0dXJlIikpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0s
ICJtYXRyaXgiKSk7Ci0gICAgaWYgKG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxvY2F0aW9uID09IC0x
IHx8IG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRpb24gPT0gLTEpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBzY3JvbGwgc2hhZGVyLiIpOworICAgIEdMQyhtX2Nv
bnRleHQsIG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24obV90ZXh0dXJlTGF5ZXJTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJl
IikpOworICAgIEdMQyhtX2NvbnRleHQsIG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RleHR1cmVMYXllclNoYWRlclBy
b2dyYW0sICJtYXRyaXgiKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV90ZXh0dXJlTGF5ZXJTaGFk
ZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90ZXh0dXJl
TGF5ZXJTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKSk7CisgICAgaWYgKG1fdGV4dHVyZUxheWVyU2hh
ZGVyU2FtcGxlckxvY2F0aW9uID09IC0xIHx8IG1fdGV4dHVyZUxheWVyU2hhZGVyTWF0cml4TG9j
YXRpb24gPT0gLTEgfHwgbV90ZXh0dXJlTGF5ZXJTaGFkZXJBbHBoYUxvY2F0aW9uID09IC0xKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGV4dHVyZSBsYXllciBz
aGFkZXIuIik7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC03MjMsOCArODQ1LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaAogICAgIC8vIEdldCB0aGUgbWF4IHRleHR1cmUgc2l6ZSBzdXBw
b3J0ZWQgYnkgdGhlIHN5c3RlbS4KICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJl
U2l6ZSkpOwogCi0gICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgYml0cyBhdmFpbGFibGUgaW4gdGhl
IHN0ZW5jaWwgYnVmZmVyLgotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUywgJm1fbnVtU3RlbmNpbEJpdHMpKTsK
KyAgICAvLyBDcmVhdGUgYW4gRkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nLgorICAg
IEdMQyhtX2NvbnRleHQsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1fY29udGV4dC0+Y3Jl
YXRlRnJhbWVidWZmZXIoKSk7CiAKICAgICBtX2xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIo
bmV3IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBt
X2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwpAQCAtNzUxLDE1ICs4NzMsMTgg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAgIG1fdmlkZW9M
YXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMu
Y2xlYXIoKTsKIAotICAgIGlmIChtX3Njcm9sbFNoYWRlclByb2dyYW0pIHsKLSAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3Jh
bSkpOwotICAgICAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIGlmIChtX3RleHR1
cmVMYXllclNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5kZWxldGVQcm9ncmFtKG1fdGV4dHVyZUxheWVyU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBt
X3RleHR1cmVMYXllclNoYWRlclByb2dyYW0gPSAwOwogICAgIH0KIAogICAgIGlmIChtX3Jvb3RM
YXllclRleHR1cmVJZCkgewogICAgICAgICBkZWxldGVMYXllclRleHR1cmUobV9yb290TGF5ZXJU
ZXh0dXJlSWQpOwogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVJZCA9IDA7CiAgICAgfQorCisg
ICAgaWYgKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkKKyAgICAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJ
KHJldmlzaW9uIDcxNjQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTk0LDggKzk1LDYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGNyZWF0ZUxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXJU
ZXh0dXJlKHVuc2lnbmVkKTsKIAotICAgIEludFJlY3QgY3VycmVudFNjaXNzb3JSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50U2Npc3NvclJlY3Q7IH0KLQogICAgIHN0YXRpYyB2b2lkIGRl
YnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciogY29tbWFuZCwgY29uc3Qg
Y2hhciogZmlsZSwgaW50IGxpbmUpOwogCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHByb2plY3Rpb25NYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX3Byb2plY3Rpb25NYXRyaXg7IH0K
QEAgLTExOCwyMSArMTE3LDIyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhp
Y3NDb250ZXh0M0QpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0
b3I8TGF5ZXJDaHJvbWl1bSo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8TGF5ZXJD
aHJvbWl1bSo+JiBsYXllckxpc3QpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1cnNpdmUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRN
YXRyaXgsIGZsb2F0IG9wYWNpdHkpOwotCi0gICAgdm9pZCBkcmF3TGF5ZXJzUmVjdXJzaXZlKExh
eWVyQ2hyb21pdW0qKTsKLQotICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0qKTsKKyAg
ICB2b2lkIGRyYXdMYXllcihMYXllckNocm9taXVtKiwgUmVuZGVyU3VyZmFjZUNocm9taXVtKik7
CiAKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKIAotICAgIHZvaWQg
ZHJhd0xheWVySW50b1N0ZW5jaWxCdWZmZXIoTGF5ZXJDaHJvbWl1bSosIGJvb2wgZGVjcmVtZW50
KTsKKyAgICB2b2lkIHNldFNjaXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgdm9p
ZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKIAotICAg
IHZvaWQgc2Npc3NvclRvUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCB1c2VSZW5kZXJT
dXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKIAorICAgIHN0YXRpYyBib29sIGNvbXBhcmVMYXllclooY29uc3QgTGF5ZXJDaHJv
bWl1bSosIGNvbnN0IExheWVyQ2hyb21pdW0qKTsKKwogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKQEAgLTE0MCwx
MCArMTQwLDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoOwog
ICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CiAKLSAgICAvLyBTY3JvbGwgc2hhZGVy
IHVuaWZvcm0gbG9jYXRpb25zLgotICAgIHVuc2lnbmVkIG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbTsK
LSAgICBpbnQgbV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1fc2Nyb2xs
U2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgLy8gU2hhZGVyIHVuaWZvcm0gbG9jYXRpb25zIHVz
ZWQgYnkgbGF5ZXJzIHdob3NlIGNvbnRlbnRzIGFyZSB0aGUgcmVzdWx0cyBvZiBhCisgICAgLy8g
cHJldmlvdXMgcmVuZGVyaW5nIG9wZXJhdGlvbi4KKyAgICB1bnNpZ25lZCBtX3RleHR1cmVMYXll
clNoYWRlclByb2dyYW07CisgICAgaW50IG1fdGV4dHVyZUxheWVyU2hhZGVyU2FtcGxlckxvY2F0
aW9uOworICAgIGludCBtX3RleHR1cmVMYXllclNoYWRlck1hdHJpeExvY2F0aW9uOworICAgIGlu
dCBtX3RleHR1cmVMYXllclNoYWRlckFscGhhTG9jYXRpb247CiAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAKQEAgLTE1Miw3ICsxNTQsMTAgQEAgcHJpdmF0
ZToKICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9oYXJkd2FyZUNv
bXBvc2l0aW5nOwogCi0gICAgdW5zaWduZWQgaW50IG1fY3VycmVudFNoYWRlcjsKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRTaGFkZXI7CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJl
bnRSZW5kZXJTdXJmYWNlOworCisgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklk
OwogCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+
IG1fcm9vdExheWVyQ2FudmFzOwpAQCAtMTY4LDEyICsxNzMsMTAgQEAgcHJpdmF0ZToKIAogICAg
IEludFJlY3QgbV9yb290VmlzaWJsZVJlY3Q7CiAgICAgSW50UmVjdCBtX3Jvb3RDb250ZW50UmVj
dDsKLSAgICBJbnRSZWN0IG1fY3VycmVudFNjaXNzb3JSZWN0OwogCisgICAgLy8gTWF4aW11bSB0
ZXh0dXJlIGRpbWVuc2lvbnMgc3VwcG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwog
Ci0gICAgaW50IG1fbnVtU3RlbmNpbEJpdHM7Ci0KICAgICAvLyBTdG9yZSB2YWx1ZXMgdGhhdCBh
cmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGVhY2ggbGF5ZXIgdHlwZQogICAgIC8vIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIG9mIHRoZSBjb21wb3NpdG9yLiBTaW5jZSB0aGVy
ZSBjYW4gYmUKICAgICAvLyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGNvbXBvc2l0b3IgcnVu
bmluZyBpbiB0aGUgc2FtZSByZW5kZXJlciBwcm9jZXNzCkBAIC0xODUsNiArMTg4LDggQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3Bs
dWdpbkxheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7CisKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fZGVmYXVsdFJlbmRlclN1
cmZhY2U7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGds
R2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRl
clN1cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKiBvd25pbmdMYXllcikKKyAgICA6IG1fb3du
aW5nTGF5ZXIob3duaW5nTGF5ZXIpCisgICAgLCBtX2NvbnRlbnRzVGV4dHVyZUlkKDApCit7Cit9
CisKK1JlbmRlclN1cmZhY2VDaHJvbWl1bTo6flJlbmRlclN1cmZhY2VDaHJvbWl1bSgpCit7Cisg
ICAgY2xlYW51cFJlc291cmNlcygpOworfQorCit2b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZUlkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKworICAgIGxheWVy
UmVuZGVyZXIoKS0+ZGVsZXRlTGF5ZXJUZXh0dXJlKG1fY29udGVudHNUZXh0dXJlSWQpOworICAg
IG1fY29udGVudHNUZXh0dXJlSWQgPSAwOworICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSBJ
bnRTaXplKCk7Cit9CisKK0xheWVyUmVuZGVyZXJDaHJvbWl1bSogUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpsYXllclJlbmRlcmVyKCkKK3sKKyAgICBBU1NFUlQobV9vd25pbmdMYXllcik7CisgICAg
cmV0dXJuIG1fb3duaW5nTGF5ZXItPmxheWVyUmVuZGVyZXIoKTsKK30KKwordm9pZCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06OnByZXBhcmVDb250ZW50c1RleHR1cmUoKQoreworICAgIEFTU0VSVCht
X293bmluZ0xheWVyKTsKKworICAgIGlmICghbV9jb250ZW50c1RleHR1cmVJZCkgeworICAgICAg
ICBtX2NvbnRlbnRzVGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlcigpLT5jcmVhdGVMYXllclRleHR1
cmUoKTsKKyAgICAgICAgQVNTRVJUKG1fY29udGVudHNUZXh0dXJlSWQpOworICAgICAgICBtX2Fs
bG9jYXRlZFRleHR1cmVTaXplID0gSW50U2l6ZSgpOworICAgIH0KKworICAgIEludFNpemUgcmVx
dWlyZWRTaXplKG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSk7
CisgICAgaWYgKG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgIT0gcmVxdWlyZWRTaXplKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZW50c1RleHR1cmVJZCkp
OworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFNpemUud2lkdGgoKSwg
cmVxdWlyZWRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAwKSk7CisgICAgICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSBy
ZXF1aXJlZFNpemU7CisgICAgfQorfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFJlbmRlclN1
cmZhY2VDaHJvbWl1bV9oCisjZGVmaW5lIFJlbmRlclN1cmZhY2VDaHJvbWl1bV9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitjbGFzcyBMYXllckNocm9taXVtOworCitjbGFzcyBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0gOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIGZyaWVuZCBj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVy
U3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qKTsKKyAgICB+UmVuZGVyU3VyZmFjZUNocm9t
aXVtKCk7CisKKyAgICB2b2lkIHByZXBhcmVDb250ZW50c1RleHR1cmUoKTsKKyAgICB2b2lkIGNs
ZWFudXBSZXNvdXJjZXMoKTsKKworICAgIEZsb2F0UG9pbnQgY29udGVudFJlY3RDZW50ZXIoKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9jb250ZW50UmVjdCkuY2VudGVyKCk7IH0KKyAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQorCitw
cml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOworCisg
ICAgTGF5ZXJDaHJvbWl1bSogbV9vd25pbmdMYXllcjsKKyAgICBJbnRSZWN0IG1fY29udGVudFJl
Y3Q7CisgICAgdW5zaWduZWQgbV9jb250ZW50c1RleHR1cmVJZDsKKyAgICBmbG9hdCBtX2RyYXdP
cGFjaXR5OworICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9vcmlnaW5UcmFuc2Zvcm07CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OworICAgIFZlY3Rv
cjxMYXllckNocm9taXVtKj4gbV9sYXllckxpc3Q7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzE2NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBA
QCBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oCiAKIHZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKKyAgICBMYXllckNocm9taXVtOjpj
bGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgcmVsZWFzZUN1cnJlbnRGcmFtZSgpOwogICAgIGlmICgh
bGF5ZXJSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="63897"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>