<?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>90841</bug_id>
          
          <creation_ts>2012-07-09 17:43:00 -0700</creation_ts>
          <short_desc>[chromium] Replace use of ManagedTexture with CCScopedTexture for impl thread and remove implTextureManager from LayerRendererChromium</short_desc>
          <delta_ts>2012-07-10 15:48:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89485</dependson>
    
    <dependson>90702</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>hayato</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>665347</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 17:43:00 -0700</bug_when>
    <thetext>[chromium] Replace use of ManagedTexture with CCScopedTexture for impl thread and remove implTextureManager from LayerRendererChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665356</commentid>
    <comment_count>1</comment_count>
      <attachid>151371</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 17:51:30 -0700</bug_when>
    <thetext>Created attachment 151371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665384</commentid>
    <comment_count>2</comment_count>
      <attachid>151371</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 18:27:11 -0700</bug_when>
    <thetext>Comment on attachment 151371
Patch

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

Can you manually test the HUD, since we have no automated tests for it?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:610
&gt; +    CCScopedTexture* contentsTexture = m_renderPassTextures.get(quad-&gt;renderPassId());
&gt; +    if (!contentsTexture || !contentsTexture-&gt;id())

Is this something we should assert about? Presumably this should have been allocated previously.

&gt; Source/WebCore/platform/graphics/chromium/TrackingTextureAllocator.h:59
&gt; -    explicit TrackingTextureAllocator(WebKit::WebGraphicsContext3D*);
&gt; +    explicit TrackingTextureAllocator(WebKit::WebGraphicsContext3D*, int maxTextureSize);

s/explicit//</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665386</commentid>
    <comment_count>3</comment_count>
      <attachid>151371</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:31:19 -0700</bug_when>
    <thetext>Comment on attachment 151371
Patch

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

I did run with fps counter and it seems to be fine.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:610
&gt;&gt; +    if (!contentsTexture || !contentsTexture-&gt;id())
&gt; 
&gt; Is this something we should assert about? Presumably this should have been allocated previously.

If a RenderPass is removed due to being empty, the DrawQuad is still kept (we don&apos;t modify the quadList). So we&apos;ll get here and there will be no texture (we did this to avoid allocating the texture).

&gt;&gt; Source/WebCore/platform/graphics/chromium/TrackingTextureAllocator.h:59
&gt;&gt; +    explicit TrackingTextureAllocator(WebKit::WebGraphicsContext3D*, int maxTextureSize);
&gt; 
&gt; s/explicit//

ah yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665392</commentid>
    <comment_count>4</comment_count>
      <attachid>151371</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:39:49 -0700</bug_when>
    <thetext>Comment on attachment 151371
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:315
&gt; +IntSize LayerRendererChromium::renderPassTextureSize(const CCRenderPass* pass)

note to self: this can return const IntSize&amp; after https://bugs.webkit.org/show_bug.cgi?id=90844 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665394</commentid>
    <comment_count>5</comment_count>
      <attachid>151380</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:44:32 -0700</bug_when>
    <thetext>Created attachment 151380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665397</commentid>
    <comment_count>6</comment_count>
      <attachid>151371</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:47:41 -0700</bug_when>
    <thetext>Comment on attachment 151371
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:610
&gt;&gt;&gt; +    if (!contentsTexture || !contentsTexture-&gt;id())
&gt;&gt; 
&gt;&gt; Is this something we should assert about? Presumably this should have been allocated previously.
&gt; 
&gt; If a RenderPass is removed due to being empty, the DrawQuad is still kept (we don&apos;t modify the quadList). So we&apos;ll get here and there will be no texture (we did this to avoid allocating the texture).

For more context, https://bugs.webkit.org/show_bug.cgi?id=90702 changes this from an assert to a return for the above reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665400</commentid>
    <comment_count>7</comment_count>
      <attachid>151382</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:48:59 -0700</bug_when>
    <thetext>Created attachment 151382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665930</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 11:58:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; For more context, https://bugs.webkit.org/show_bug.cgi?id=90702 changes this from an assert to a return for the above reason.

Another reason to not assert. If a surface is larger than the max texture size, we are not able to allocate it, but the quad will still be there trying to draw from the non-existent texture. (Similar issue came up with another assert in https://bugs.webkit.org/show_bug.cgi?id=90848)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665949</commentid>
    <comment_count>9</comment_count>
      <attachid>151382</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-10 12:24:05 -0700</bug_when>
    <thetext>Comment on attachment 151382
Patch

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

R=me, assuming the rebase is trivial and you CQ+ it to get test coverage.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1095
&gt; +    ASSERT(hudTexture-&gt;id());

I think you should be robust to this.  What if you have the HUD open and have a stupidly large browser window, larger than the max texture size?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665952</commentid>
    <comment_count>10</comment_count>
      <attachid>151382</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 12:26:47 -0700</bug_when>
    <thetext>Comment on attachment 151382
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1095
&gt;&gt; +    ASSERT(hudTexture-&gt;id());
&gt; 
&gt; I think you should be robust to this.  What if you have the HUD open and have a stupidly large browser window, larger than the max texture size?

Yaaa, good point! Max texture size has come up in these changes, I hadn&apos;t thot of it so much before. Thanks. I&apos;ll double think my other asserts in here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665972</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 12:58:04 -0700</bug_when>
    <thetext>*** Bug 90848 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666010</commentid>
    <comment_count>12</comment_count>
      <attachid>151512</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 13:46:09 -0700</bug_when>
    <thetext>Created attachment 151512
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666039</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 14:05:25 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 151382 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151382&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1095
&gt; &gt;&gt; +    ASSERT(hudTexture-&gt;id());
&gt; &gt; 
&gt; &gt; I think you should be robust to this.  What if you have the HUD open and have a stupidly large browser window, larger than the max texture size?
&gt; 
&gt; Yaaa, good point! Max texture size has come up in these changes, I hadn&apos;t thot of it so much before. Thanks. I&apos;ll double think my other asserts in here too.

We verify the texture is allocated in CCHeadsUpDisplay now before calling this function. So I think this ASSERT is not out of place. However, the allocation in useRenderPass could have failed and triggered a bad assert.

Diff:

diff --git a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
index ba3c255..657365c 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
@@ -1378,14 +1378,16 @@ bool LayerRendererChromium::useRenderPass(const CCRenderPass* renderPass)
     CCScopedTexture* texture = m_renderPassTextures.get(renderPass-&gt;id());
     ASSERT(texture);
 
-    if (!texture-&gt;id())
-        texture-&gt;allocate(renderPassTextureSize(renderPass), renderPassTextureFormat(renderPass));
+    if (!texture-&gt;id() &amp;&amp; !texture-&gt;allocate(renderPassTextureSize(renderPass), renderPassTextureFormat(renderPass)))
+        return false;
 
     return bindFramebufferToTexture(texture, renderPass-&gt;framebufferOutputRect());
 }
 
 bool LayerRendererChromium::useScopedTexture(const CCScopedTexture* texture, const IntRect&amp; viewportRect)
 {
+    ASSERT(texture-&gt;id());
+
     m_currentRenderPass = 0;
     m_currentTexture = texture;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666042</commentid>
    <comment_count>14</comment_count>
      <attachid>151522</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 14:06:05 -0700</bug_when>
    <thetext>Created attachment 151522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666051</commentid>
    <comment_count>15</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-10 14:10:38 -0700</bug_when>
    <thetext>Sounds good.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666054</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 14:11:58 -0700</bug_when>
    <thetext>Cool, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666118</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 15:48:58 -0700</bug_when>
    <thetext>Committed r122272: &lt;http://trac.webkit.org/changeset/122272&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151371</attachid>
            <date>2012-07-09 17:51:30 -0700</date>
            <delta_ts>2012-07-09 18:47:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90841-20120709205128.patch</filename>
            <type>text/plain</type>
            <size>34704</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjkwZGRkNDAyMDQ1ZGUx
ZjgwZGE0NTA1OTRkNjE0ZWY4N2YyZDQ5OC4uMGRjOGE3ODliMDhhZjk0NjYxNmJhYWQ4ZDdjZDVh
ZWI5ODIxMDMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU3IEBACiAyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUmVw
bGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUgd2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwg
dGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNo
cm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDg0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSB0aGUgVGV4dHVyZU1hbmFnZXIgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0sIHdoaWNo
IHdhcyB0aGUgbGFzdAorICAgICAgICBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgaW4gdGhlIGNvbXBv
c2l0b3IuIEluc3RlYWQgb2YgdXNpbmcgTWFuYWdlZFRleHR1cmUKKyAgICAgICAgb2JqZWN0cyBm
b3IgUmVuZGVyUGFzcyB0ZXh0dXJlcywgdXNlIGluc3RhbmNlcyBvZiBDQ1Njb3BlZFRleHR1cmUs
IHdoaWNoCisgICAgICAgIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGFsbG9jYXRlZCB0ZXh0
dXJlIGlkcy4gVGV4dHVyZU1hbmFnZXIgd2lsbCBiZQorICAgICAgICByZW1vdmVkIGVudGlyZWx5
IG9uY2UgYWxsIGNhbGxlcnMgb2YgbWVtb3J5VXNlQnl0ZXMoKSBoYXZlIGJlZW4gcmVtb3ZlZC4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxl
YXNlUmVuZGVyUGFzc1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJl
bmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFkc1VwRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVudFJlbmRlclBh
c3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQ
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVk
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRG
cmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENDSGVhZHNVcERpc3BsYXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NSZW5kZXJlcik6CisKKzIwMTItMDctMDkgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgQ0NTY29wZWRU
ZXh0dXJlIGNsYXNzIGZvciBjcmVhdGluZy9mcmVlaW5nIHRleHR1cmVzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTQ4NQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg3N2ZkNTA1YTQwZmEzYzBjY2E2YmNlNjczM2ZiNzk0YjQyNGUxY2Eu
LmNmZDYxZjAyMjc0NzAyODM5OGZiNWQzZTdlODU5YzAyNGUyMjRiOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAKIDIwMTItMDctMDkgIERhbmEgSmFuc2VucyAg
PGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBSZXBsYWNlIHVzZSBv
ZiBNYW5hZ2VkVGV4dHVyZSB3aXRoIENDU2NvcGVkVGV4dHVyZSBmb3IgaW1wbCB0aHJlYWQgYW5k
IHJlbW92ZSBpbXBsVGV4dHVyZU1hbmFnZXIgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODQxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisKKzIwMTItMDctMDkgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgQ0NTY29wZWRU
ZXh0dXJlIGNsYXNzIGZvciBjcmVhdGluZy9mcmVlaW5nIHRleHR1cmVzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTQ4NQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3NTQyOWMxNjJjZGYxMjYzYTViODEwNzhjNjgw
MmNhZTAwODk2NWI2Li5iYTNjMjU1N2I2OTk1YzNiY2Y2YmNjMGRkYzJiMDA1OTcxNGJjZWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNp
bmNsdWRlICJHclRleHR1cmUuaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQu
aCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCisjaW5jbHVkZSAiY2Mv
Q0NTY29wZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTZXR0aW5ncy5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3
UXVhZC5oIgpAQCAtMTU3LDcgKzE1Nyw3IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0
dXJlVXBsb2FkZXJTZXR0aW5nKQogICAgIDogQ0NSZW5kZXJlcihjbGllbnQpCiAgICAgLCBtX2N1
cnJlbnRSZW5kZXJQYXNzKDApCi0gICAgLCBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSgwKQorICAg
ICwgbV9jdXJyZW50VGV4dHVyZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDAp
CiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBm
LCAxLjBmKSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQpAQCAtMjc0LDEwICsyNzQsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCkKIHsK
LSAgICBpZiAoIW1faW1wbFRleHR1cmVNYW5hZ2VyKQotICAgICAgICByZXR1cm47CiAgICAgbV9y
ZW5kZXJQYXNzVGV4dHVyZXMuY2xlYXIoKTsKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAgLTMxNCw2ICsz
MTEsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnMKICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiB9CiAKKy8v
IHN0YXRpYworSW50U2l6ZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJl
U2l6ZShjb25zdCBDQ1JlbmRlclBhc3MqIHBhc3MpCit7CisgICAgcmV0dXJuIHBhc3MtPmZyYW1l
YnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKTsKK30KKworLy8gc3RhdGljCitHQzNEZW51bSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVy
UGFzcyopCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworfQogCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJh
bWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIpCiB7CkBA
IC0zMjIsNyArMzMwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGEKICAgICAgICAgcGFzc2Vz
SW5GcmFtZS5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyW2ldLmdldCgpKTsKIAogICAgIFZlY3RvcjxpbnQ+IHBhc3Nlc1RvRGVsZXRl
OwotICAgIEhhc2hNYXA8aW50LCBPd25QdHI8TWFuYWdlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJh
dG9yIHBhc3NJdGVyYXRvcjsKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVy
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwogICAgIGZvciAocGFzc0l0ZXJhdG9y
ID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVy
UGFzc1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRvcikgewogICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJh
dG9yLT5maXJzdCk7CiAgICAgICAgIGlmICghcmVuZGVyUGFzc0luRnJhbWUpIHsKQEAgLTMzMCw0
MSArMzM4LDMxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNz
QWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJl
bmRlclBhc3NJbkZyYW1lLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7Ci0gICAgICAg
IEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAg
ICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7
Ci0gICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUs
IHJlcXVpcmVkRm9ybWF0KSkgewotICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBh
c3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAg
ICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXpl
KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIENDU2Nv
cGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAg
ICBBU1NFUlQodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUtPmlkKCkgJiYgKHRleHR1
cmUtPnNpemUoKSAhPSByZXF1aXJlZFNpemUgfHwgdGV4dHVyZS0+Zm9ybWF0KCkgIT0gcmVxdWly
ZWRGb3JtYXQpKQorICAgICAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOwogICAgIH0KIAogICAgIC8v
IERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRoYXQg
d2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nl
c1RvRGVsZXRlLnNpemUoKTsgKytpKQogICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5yZW1v
dmUocGFzc2VzVG9EZWxldGVbaV0pOwotICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVF
dmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKLSAgICAvLyBB
bGwgUmVuZGVyUGFzcyB0ZXh0dXJlcyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBjdXJyZW50
IGZyYW1lLiBFdmVyeSBSZW5kZXJQYXNzIHRleHR1cmUKLSAgICAvLyBpcyBrZXB0IHJlc2VydmVk
IHVudGlsIGl0IGlzIHJlbW92ZWQgYW5kIGRlbGV0ZWQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNz
ZXNJbkRyYXdPcmRlcltpXS0+aWQoKSk7Ci0gICAgICAgIGlmICghdGV4dHVyZSkgewotICAgICAg
ICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBvd25UZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6
OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJl
ID0gb3duVGV4dHVyZS5nZXQoKTsKLSAgICAgICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNl
dChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgb3duVGV4dHVyZS5yZWxlYXNlKCkp
OworICAgICAgICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyW2ldLT5pZCgpKSkgeworICAgICAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVBbGxv
Y2F0b3IuZ2V0KCkpOworICAgICAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuc2V0KHJlbmRl
clBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCB0ZXh0dXJlLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KLQotICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzZXNJ
bkRyYXdPcmRlcltpXS0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkuc2l6ZSgpOwotICAgICAgICBH
QzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAgICAg
ICBib29sIHJlc2VydmVkID0gdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIHJlcXVpcmVk
Rm9ybWF0KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNlcnZlZCwgcmVzZXJ2ZWQpOwogICAg
IH0KIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdAogewotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0
dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAm
JiB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKKyAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQpOworICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1
cmUtPmlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdG
cmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzKQpAQCAtNDYzLDggKzQ2MSw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFk
KiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlkZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVh
ZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIt
PmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCkBAIC01MjAsNyArNTE2LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKiBxdWEKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmRyYXdFbGVt
ZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBN
YW5hZ2VkVGV4dHVyZSogc291cmNlVGV4dHVyZSkKK3N0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBw
bHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBDQ1Njb3BlZFRleHR1cmUqIHNvdXJj
ZVRleHR1cmUpCiB7CiAgICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
U2tCaXRtYXAoKTsKQEAgLTUzMSwxMCArNTI3LDEwIEBAIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXAg
YXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QK
IAogICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+Zmx1c2goKTsKIAotICAgIHJldHVybiBD
Q1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0
dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4
dHVyZS0+aWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsK
IH0KIAotUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bh
c3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNr
Z3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAgIC8v
IFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBm
aWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMg
YmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBAIC01
NTksNyArNTU1LDcgQEAgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0MKICAgICAvLyB0cmFuc2x1Y2Vu
dCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVs
cyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVu
ZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50TWFuYWdlZFRleHR1cmUpOworICAgIEFTU0VSVCgh
bV9jdXJyZW50VGV4dHVyZSk7CiAKICAgICAvLyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sg
Zm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJlcGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCBy
ZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJlcyBhcmUgbm90IHJldXNlZCkuCiAgICAgSW50UmVj
dCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVj
dChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdC
b3goKSkpOwpAQCAtNTcxLDcgKzU2Nyw3IEBAIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKICAg
ICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1cnJlbnRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91
dHB1dFJlY3QoKSk7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91
bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5n
ZXQoKSk7CisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZGV2aWNlQmFja2dyb3VuZFRleHR1
cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVyVGV4dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVy
ZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01ODIs
MTIgKzU3OCwxMiBAQCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQwogICAgIEdyVGV4dHVyZSogdGV4
dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3Jv
dW5kLmdldFRleHR1cmUoKSk7CiAgICAgaW50IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1
cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKIAotICAgIE93blB0cjxNYW5hZ2Vk
VGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1faW1w
bFRleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5yZXNl
cnZlKHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisg
ICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRl
eHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIWJh
Y2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0
IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0g
ICAgYm9vbCB1c2luZ0JhY2tncm91bmRUZXh0dXJlID0gdXNlTWFuYWdlZFRleHR1cmUoYmFja2dy
b3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1YWRSZWN0KCkpOworICAgIGJvb2wgdXNpbmdCYWNr
Z3JvdW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCks
IHF1YWQtPnF1YWRSZWN0KCkpOwogCiAgICAgaWYgKHVzaW5nQmFja2dyb3VuZFRleHR1cmUpIHsK
ICAgICAgICAgLy8gQ29weSB0aGUgcmVhZGJhY2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBi
YWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBzdXJmYWNlLgpAQCAtNjEwLDggKzYwNiw4IEBAIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tn
cm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAg
TWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdl
dChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7Ci0gICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNv
bnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkpCisgICAgQ0NTY29wZWRUZXh0dXJlKiBjb250ZW50
c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkp
OworICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlclRyYW5z
Zm9ybSA9IHF1YWQtPmxheWVyVHJhbnNmb3JtKCk7CkBAIC02MjMsMTIgKzYxOSwxMiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVy
UGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVu
dHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91
bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9u
J3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAg
ICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KICAgICBTa0JpdG1h
cCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBjb250
ZW50c1RleHR1cmUpOwotICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGNvbnRlbnRzVGV4dHVy
ZS0+dGV4dHVyZUlkKCk7CisgICAgaW50IGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0
dXJlLT5pZCgpOwogICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAg
IEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVy
Qml0bWFwLmdldFRleHR1cmUoKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVy
ZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwpAQCAtNjM3LDcgKzYzMyw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqIHF1YWQpCiAgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlz
IG9uZS4KICAgICBpZiAoYmFja2dyb3VuZFRleHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJhY2tn
cm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCkpOwotICAgICAg
ICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFja2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgp
LCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAg
ICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSwgcXVh
ZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOwogICAgIH0KIAog
ICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwpAQCAtMTA5NCw4ICsxMDkwLDEwIEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVhZChjb25zdCBDQ0lPU3VyZmFjZURy
YXdRdWFkKiBxdWFkKQogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
RXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVk
VGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiBodWRUZXh0dXJl
LCBjb25zdCBJbnRTaXplJiBodWRTaXplKQogeworICAgIEFTU0VSVChodWRUZXh0dXJlLT5pZCgp
KTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FM
UEhBKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKQEAgLTExMDQsOSArMTEwMiw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1ZFRl
eHR1cmUsIGNvbnN0CiAgICAgY29uc3QgSGVhZHNVcERpc3BsYXlQcm9ncmFtKiBwcm9ncmFtID0g
aGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIGlmICghaHVkVGV4dHVyZS0+
dGV4dHVyZUlkKCkpCi0gICAgICAgIGh1ZFRleHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGh1ZFRleHR1cmUtPnRleHR1cmVJZCgp
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgaHVkVGV4dHVyZS0+aWQoKSkpOwogICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAKQEAgLTEzNTAsMTQgKzEzNDYsMTQgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIGRldmljZVJlY3QpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVi
dWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGV2
aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1cmUtPnJlc2VydmUoZGV2aWNlUmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQorICAgIEFTU0VSVCghdGV4dHVyZS0+aWQoKSB8fCAo
dGV4dHVyZS0+c2l6ZSgpID09IGRldmljZVJlY3Quc2l6ZSgpICYmIHRleHR1cmUtPmZvcm1hdCgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKTsKKworICAgIGlmICghdGV4dHVyZS0+aWQoKSAm
JiAhdGV4dHVyZS0+YWxsb2NhdGUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXRleHR1cmUtPnRleHR1
cmVJZCgpKQotICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9y
LmdldCgpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmUtPmlkKCkpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJl
LT5mb3JtYXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0LnkoKSwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZp
Y2VSZWN0LmhlaWdodCgpLCAwKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzY1LDEzICsxMzYx
LDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUo
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykK
IHsKLSAgICByZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1
cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICByZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSBy
ZW5kZXJQYXNzICYmICFtX2N1cnJlbnRUZXh0dXJlOwogfQogCiBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7
CiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IHJlbmRlclBhc3M7Ci0gICAgbV9jdXJyZW50TWFu
YWdlZFRleHR1cmUgPSAwOworICAgIG1fY3VycmVudFRleHR1cmUgPSAwOwogCiAgICAgaWYgKHJl
bmRlclBhc3MgPT0gbV9kZWZhdWx0UmVuZGVyUGFzcykgewogICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApKTsKQEAgLTEzNzksMjcgKzEzNzUsMjkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1f
cmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBDQ1Njb3BlZFRl
eHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQo
KSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwogCisgICAgaWYgKCF0ZXh0dXJlLT5pZCgpKQorICAg
ICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShyZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyks
IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpKTsKKwogICAgIHJldHVybiBiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRw
dXRSZWN0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlTWFuYWdlZFRl
eHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVj
dCkKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRUZXh0dXJlKGNvbnN0IEND
U2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewog
ICAgIG1fY3VycmVudFJlbmRlclBhc3MgPSAwOwotICAgIG1fY3VycmVudE1hbmFnZWRUZXh0dXJl
ID0gdGV4dHVyZTsKKyAgICBtX2N1cnJlbnRUZXh0dXJlID0gdGV4dHVyZTsKIAogICAgIHJldHVy
biBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgdmlld3BvcnRSZWN0KTsKIH0KIAot
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KQorYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBD
Q1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkK
IHsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOworICAg
IEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAotICAgIGlmICghdGV4dHVyZS0+dGV4dHVyZUlkKCkp
Ci0gICAgICAgIHRleHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkp
OwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLT50ZXh0dXJl
SWQoKSwgMCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklk
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUtPmlkKCks
IDApKTsKIAogI2lmICFkZWZpbmVkICggTkRFQlVHICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CkBAIC0xNDcxLDE0ICsxNDY5
LDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpCiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9p
bXBsVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCks
IG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBtX3RleHR1cmVDb3BpZXIgPSBB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRV
bmlmb3JtKTsKICAgICBpZiAobV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nID09IFRocm90dGxlZFVw
bG9hZGVyKQogICAgICAgICBtX3RleHR1cmVVcGxvYWRlciA9IFRocm90dGxlZFRleHR1cmVVcGxv
YWRlcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgZWxzZQogICAgICAgICBtX3RleHR1cmVVcGxv
YWRlciA9IFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1f
Y29udGV4dCk7Ci0gICAgbV9pbXBsVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dCk7CisgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0
b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQsIG1fY2FwYWJp
bGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yID0gVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LCBtX2NhcGFiaWxpdGllcy5t
YXhUZXh0dXJlU2l6ZSk7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVVzYWdl
SGludCkKICAgICAgICAgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci0+c2V0VGV4dHVyZVVzYWdlSGlu
dChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OkZyYW1lYnVmZmVyQXR0YWNobWVudCk7CiAgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24pIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZjQ2NGVhZTFiNTgwNDY3ZTRhZTkyMjU1
Nzg5ZDczMjZhYjc4ZTE5ZC4uNmFmZTY2ODA2Y2U5ODFmNGIzZTAwOGU3OTg2NjZhNTJhMDlkZDlh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTUxLDEzICs1MSwxMyBA
QCBjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ7CiBjbGFzcyBDQ0RyYXdRdWFkOwogY2xhc3Mg
Q0NJT1N1cmZhY2VEcmF3UXVhZDsKIGNsYXNzIENDUmVuZGVyUGFzc0RyYXdRdWFkOworY2xhc3Mg
Q0NTY29wZWRUZXh0dXJlOwogY2xhc3MgQ0NTb2xpZENvbG9yRHJhd1F1YWQ7CiBjbGFzcyBDQ1N0
cmVhbVZpZGVvRHJhd1F1YWQ7CiBjbGFzcyBDQ1RleHR1cmVEcmF3UXVhZDsKIGNsYXNzIENDVGls
ZURyYXdRdWFkOwogY2xhc3MgQ0NZVVZWaWRlb0RyYXdRdWFkOwogY2xhc3MgR2VvbWV0cnlCaW5k
aW5nOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZl
ckFsbG9jYXRpb247CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0
ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBG
bG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NT
Y29wZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CiAKICAgICAv
LyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2go
KSBPVkVSUklERTsKQEAgLTEwMCw5ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2VvbWV0
cnlCaW5kaW5nKiBzaGFyZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0
cnkuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lk
ICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICBib29sIGdldEZyYW1lYnVm
ZmVyVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOwor
ICAgIGJvb2wgZ2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIGRldmljZVJlY3QpOwogCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogaW1wbFRl
eHR1cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbXBsVGV4dHVyZU1hbmFn
ZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVDb3BpZXIqIHRleHR1cmVDb3BpZXIoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX3RleHR1cmVDb3BpZXIuZ2V0KCk7IH0KICAgICB2aXJ0
dWFsIFRleHR1cmVVcGxvYWRlciogdGV4dHVyZVVwbG9hZGVyKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV90ZXh0dXJlVXBsb2FkZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVBbGxv
Y2F0b3IqIGltcGxUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
bXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKTsgfQpAQCAtMTMzLDcgKzEzMiw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hl
Y2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRldmljZVRyYW5zZm9ybSk7CisgICAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRyYXdC
YWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7CiAgICAgdm9pZCBk
cmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKICAgICB2b2lk
IGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKQEAg
LTE0NCwxMiArMTQzLDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZl
clJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgLy8gVGhlIGN1cnJlbnQg
ZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVyUGFzcyBvciBNYW5hZ2VkVGV4dHVyZS4g
VXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBuZXcgZHJhd2luZyB0YXJnZXQuCisg
ICAgLy8gVGhlIGN1cnJlbnQgZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVyUGFzcyBv
ciBTY29wZWRUZXh0dXJlLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBhIG5ldyBk
cmF3aW5nIHRhcmdldC4KICAgICBib29sIHVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
Kik7Ci0gICAgYm9vbCB1c2VNYW5hZ2VkVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCB1c2VTY29wZWRUZXh0dXJlKGNvbnN0IEND
U2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CiAgICAgYm9vbCBp
c0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOwogCi0gICAgYm9vbCBiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3
cG9ydFJlY3QpOworICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGNvbnN0IENDU2Nv
cGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CiAKICAgICB2b2lkIGNs
ZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1l
YnVmZmVyRGFtYWdlUmVjdCk7CiAKQEAgLTE3MCwxMCArMTY5LDEzIEBAIHByaXZhdGU6CiAgICAg
Ly8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFjayBp
bXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIE9WRVJSSURF
OwogCisgICAgc3RhdGljIEludFNpemUgcmVuZGVyUGFzc1RleHR1cmVTaXplKGNvbnN0IENDUmVu
ZGVyUGFzcyopOworICAgIHN0YXRpYyBHQzNEZW51bSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChj
b25zdCBDQ1JlbmRlclBhc3MqKTsKKwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9j
YXBhYmlsaXRpZXM7CiAKICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIG1fY3VycmVudFJlbmRlclBh
c3M7Ci0gICAgTWFuYWdlZFRleHR1cmUqIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlOworICAgIGNv
bnN0IENDU2NvcGVkVGV4dHVyZSogbV9jdXJyZW50VGV4dHVyZTsKICAgICB1bnNpZ25lZCBtX29m
ZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKICAgICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3No
YXJlZEdlb21ldHJ5OwpAQCAtMjU5LDEzICsyNjEsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
U29saWRDb2xvclByb2dyYW0+IG1fc29saWRDb2xvclByb2dyYW07CiAgICAgT3duUHRyPEhlYWRz
VXBEaXNwbGF5UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07CiAKLSAgICBPd25QdHI8
VGV4dHVyZU1hbmFnZXI+IG1faW1wbFRleHR1cmVNYW5hZ2VyOwogICAgIE93blB0cjxBY2NlbGVy
YXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VGV4dHVyZVVw
bG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25QdHI8VHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yPiBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yOwogCi0gICAgSGFzaE1hcDxp
bnQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsKKyAgICBI
YXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJl
czsKIAogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKaW5kZXggOGU1ODZlMjVhMDVh
Zjc4YWQxM2I3ZGFmNzIzYmEzY2JhMDMzY2E4Ny4uYzU4OWEzYzZlZDNkMDBhZmYxZmJhMGQ3ZDQz
NTk0ZjNhYWM5MWU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3Iu
Y3BwCkBAIC0zMyw4ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9t
YXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fY3VycmVudE1lbW9yeVVzZUJ5
dGVzKDApCiAgICAgLCBtX3RleHR1cmVVc2FnZUhpbnQoQW55KQogICAgICwgbV91c2VUZXh0dXJl
U3RvcmFnZUV4dChmYWxzZSkKQEAgLTcxLDYgKzcyLDkgQEAgc3RhdGljIGJvb2wgaXNUZXh0dXJl
Rm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3JtYXQpCiAKIHVuc2lnbmVkIFRy
YWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEZW51bSBmb3JtYXQpCiB7CisgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4dHVy
ZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgbV9jdXJyZW50TWVtb3J5VXNlQnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1l
bW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CiAKICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaAppbmRleCBjMTBjMjU3MjE0
ZTYyZWZlMzQwMmVmY2I2MTIxOGY2MjgwMTRkMjUzLi45NTVlNjk2N2JlZTQzNjczMTUyNzcwNmY5
MzY0NzU1MGYzNzRhNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3Iu
aApAQCAtMzgsOSArMzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IGNyZWF0ZShXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvcj4gY3JlYXRlKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoY29udGV4dCwgbWF4VGV4
dHVyZVNpemUpKTsKICAgICB9CiAgICAgdmlydHVhbCB+VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
KCk7CiAKQEAgLTU2LDkgKzU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVRleHR1cmVT
dG9yYWdlRXh0KGJvb2wgdXNlU3RvcmFnZUV4dCkgeyBtX3VzZVRleHR1cmVTdG9yYWdlRXh0ID0g
dXNlU3RvcmFnZUV4dDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICBleHBsaWNp
dCBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCos
IGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
KiBtX2NvbnRleHQ7CisgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgc2l6ZV90IG1fY3Vy
cmVudE1lbW9yeVVzZUJ5dGVzOwogICAgIFRleHR1cmVVc2FnZUhpbnQgbV90ZXh0dXJlVXNhZ2VI
aW50OwogICAgIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAKaW5kZXggMjRkNDBiZmI0ZTVhM2I2NGExOGNkZDNjZGRiZGJkMDYzY2Ri
MmIwNS4uNzMxZjc3MGMwOTY2MzE4NThhMGFjM2M0YmM4ZjNkNzEzZjY3MTI2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBDQ0hlYWRz
VXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9odWRUZXh0dXJlKQotICAgICAgICBt
X2h1ZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPmltcGxU
ZXh0dXJlTWFuYWdlcigpKTsKKyAgICAgICAgbV9odWRUZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJl
OjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVBbGxvY2F0b3IoKSk7CiAKICAgICBj
b25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncyA9IGxheWVyVHJlZUhvc3RJbXBsLT5z
ZXR0aW5ncygpOwogICAgIC8vIFVzZSBhIGZ1bGxzY3JlZW4gdGV4dHVyZSBvbmx5IGlmIHdlIG5l
ZWQgdG8uLi4KQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KEND
TGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICBodWRTaXplLnNl
dEhlaWdodCgxMjgpOwogICAgIH0KIAotICAgIGlmICghbV9odWRUZXh0dXJlLT5yZXNlcnZlKGh1
ZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1faHVkVGV4dHVyZS0+
aWQoKSAmJiAhbV9odWRUZXh0dXJlLT5hbGxvY2F0ZShodWRTaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJlbmRlciBwaXhlbHMgaW50byB0
aGUgdGV4dHVyZS4KQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRy
YXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgewogICAgICAg
ICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJmNhbnZhcyk7CiAKLSAgICAgICAg
bV9odWRUZXh0dXJlLT5iaW5kVGV4dHVyZShsYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCBs
YXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZUFsbG9jYXRvcigpKTsKKyAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2h1ZFRleHR1cmUtPmlkKCkpKTsKICAgICAgICAgYm9vbCB1cGxvYWRlZFZpYU1hcCA9IGZhbHNl
OwogICAgICAgICBpZiAobGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIp
IHsKICAgICAgICAgICAgIHVpbnQ4X3QqIHBpeGVsRGVzdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
Pihjb250ZXh0LT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIGh1ZFNpemUud2lkdGgoKSwgaHVkU2l6ZS5oZWlnaHQoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOwpAQCAtMTIyLDggKzEyMiw2IEBAIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVI
b3N0SW1wbCkKICAgICB9CiAKICAgICBsYXllclJlbmRlcmVyLT5kcmF3SGVhZHNVcERpc3BsYXko
bV9odWRUZXh0dXJlLmdldCgpLCBodWRTaXplKTsKLQotICAgIG1faHVkVGV4dHVyZS0+dW5yZXNl
cnZlKCk7CiB9CiAKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdElt
cGwsIGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzLCBjb25zdCBJbnRTaXplJiBo
dWRTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGM1MDVhMjA4NjJmMjA5
MGM0YmUwNTVlZDQxMzE5ODQyNGY4MmQzNzMuLjI2NmJmNTFlMWY0ZWRjNmM2MGMyMTYzMjMwOGNl
MjY4ZjFkM2FhNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTI3LDggKzI3
LDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIk1h
bmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGb250QXRsYXMuaCIKKyNpbmNsdWRlICJj
Yy9DQ1Njb3BlZFRleHR1cmUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw2ICsz
Niw3IEBAIGNsYXNzIENDRGVidWdSZWN0SGlzdG9yeTsKIGNsYXNzIENDRnJhbWVSYXRlQ291bnRl
cjsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBUZXh1cmVBbGxvY2F0b3I7CiAKIHN0cnVjdCBDQ0xheWVyVHJlZVNldHRpbmdzOwogCkBA
IC02Niw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUo
Y29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYpIGNvbnN0OwogICAgIGJvb2wgc2hvd0RlYnVnUmVj
dHMoY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYpIGNvbnN0OwogCi0gICAgT3duUHRyPE1hbmFn
ZWRUZXh0dXJlPiBtX2h1ZFRleHR1cmU7CisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gbV9o
dWRUZXh0dXJlOwogICAgIE93blB0cjxDQ0ZvbnRBdGxhcz4gbV9mb250QXRsYXM7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlcmVyLmgKaW5kZXggNDE4NTlmMzAyZWVhOWY5MTkzYjMyNDVmOGJlM2Y5ODJmNzZl
ODIxOS4uZGVkMGVmZGMzOGVmOTMxYWZiMzAxN2UyNzAyZjVjN2YyZDEwNGY5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyZXIuaApAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIENDU2NvcGVkVGV4dHVyZTsKIGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBUZXh0
dXJlQ29waWVyOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CkBAIC03OCw3ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwg
Y29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRQYXNzKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRT
aXplKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShjb25zdCBDQ1Nj
b3BlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKSA9IDA7CiAKICAgICAvLyB3YWl0
cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7
CkBAIC04OSw3ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1
ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIFRleHR1cmVNYW5hZ2VyKiBpbXBsVGV4dHVyZU1hbmFnZXIoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgVGV4dHVyZVVwbG9hZGVyKiB0ZXh0dXJlVXBsb2FkZXIoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBUZXh0dXJlQWxsb2NhdG9yKiBpbXBsVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0ID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggYjExYjAwNmY3NGY2NzM1ZWYyMzJiYzc0N2M3NTE2MjFh
ODVkNjBjYS4uZmJlZGU2Y2VkMTg1Y2M1ZThjZDUxYWU1OWRiYmEzNGYwMzZmZjM5NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAKQEAgLTIzNjcsOCArMjM2Nyw2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgbGF5ZXJzRnJlZVRleHR1cmVzKQogCiAgICAgLy8gS2lsbCB0aGUgbGF5ZXIgdHJl
ZS4KICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoQ0NMYXllckltcGw6OmNyZWF0ZSgxMDAp
KTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSBkb24ndCB1c2UgTWFuYWdlZFRl
eHR1cmVzIGluIGltcGwgbGF5ZXJzLgotICAgIG1faG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+
aW1wbFRleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2hvc3RJbXBsLT5s
YXllclJlbmRlcmVyKCktPmltcGxUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIC8vIFRoZXJlIHNo
b3VsZCBiZSBubyB0ZXh0dXJlcyBsZWZ0IGluIHVzZSBhZnRlci4KICAgICBFWFBFQ1RfRVEoMHUs
IHRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151380</attachid>
            <date>2012-07-09 18:44:32 -0700</date>
            <delta_ts>2012-07-09 18:48:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90841-20120709214431.patch</filename>
            <type>text/plain</type>
            <size>72376</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJiNWY1NGEzZmM2MzQ4
NTZhNjcwNDc2ODY2NDQ0YjljMmEzMDMxYy4uMGRjOGE3ODliMDhhZjk0NjYxNmJhYWQ4ZDdjZDVh
ZWI5ODIxMDMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0NCBAQAogMjAxMi0wNy0wOSAgRGFu
YSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIFJl
cGxhY2UgdXNlIG9mIE1hbmFnZWRUZXh0dXJlIHdpdGggQ0NTY29wZWRUZXh0dXJlIGZvciBpbXBs
IHRocmVhZCBhbmQgcmVtb3ZlIGltcGxUZXh0dXJlTWFuYWdlciBmcm9tIExheWVyUmVuZGVyZXJD
aHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA4NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgdGhlIFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtLCB3aGlj
aCB3YXMgdGhlIGxhc3QKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGluIHRoZSBjb21w
b3NpdG9yLiBJbnN0ZWFkIG9mIHVzaW5nIE1hbmFnZWRUZXh0dXJlCisgICAgICAgIG9iamVjdHMg
Zm9yIFJlbmRlclBhc3MgdGV4dHVyZXMsIHVzZSBpbnN0YW5jZXMgb2YgQ0NTY29wZWRUZXh0dXJl
LCB3aGljaAorICAgICAgICBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHRoZSBhbGxvY2F0ZWQgdGV4
dHVyZSBpZHMuIFRleHR1cmVNYW5hZ2VyIHdpbGwgYmUKKyAgICAgICAgcmVtb3ZlZCBlbnRpcmVs
eSBvbmNlIGFsbCBjYWxsZXJzIG9mIG1lbW9yeVVzZUJ5dGVzKCkgaGF2ZSBiZWVuIHJlbW92ZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVS
ZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQ
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVy
UGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3Bl
ZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2Nh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3I6OmNyZWF0ZSk6CisgICAgICAgIChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENDUmVuZGVyZXIpOgorCisyMDEyLTA3LTA5ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIENDU2NvcGVk
VGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGEg
c3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0aGF0CisgICAgICAg
IGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLgorCisgICAgICAgIEFsc28gaW5jbHVk
ZXMgYSBDQ1RleHR1cmUgYmFzZSBjbGFzcyB0aGF0IGhvbGRzIHRleHR1cmVJZCwgc2l6ZSwgYW5k
CisgICAgICAgIGZvcm1hdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0aGF0IGNhbiBiZSB1c2VkIGlu
IHBsYWNlIG9mIHN0b3JpbmcgYW4KKyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkIGluIG90aGVy
IGNsYXNzZXMuCisKKyAgICAgICAgVW5pdCB0ZXN0czogQ0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Nj
b3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1cmVUZXN0LkNyZWF0
ZVNjb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1cmVUZXN0LlNj
b3BlZFRleHR1cmVJc0RlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1cmVU
ZXN0Lkxvc2VTY29wZWRUZXh0dXJlCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVy
ZTo6Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
fkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmFs
bG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6ZnJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmxlYWspOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQ0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjpzZXREaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGV4dHVyZTo6Ynl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjptZW1v
cnlTaXplQnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Q0NUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Zm9ybWF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGV4dHVyZTo6c2V0SWQpOgorCisyMDEyLTA3LTA2ICBEYW5hIEphbnNlbnMgIDxkYW5h
a2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQXZvaWQgYWxsb2NhdGluZyBy
ZW5kZXIgcGFzcyB0ZXh0dXJlcyB0aGF0IGhhdmUgbm8gY29udGVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3MDIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIE9PTSBjb25kaXRpb25zIGFyZSBo
aXQsIHRleHR1cmVzIGFyZSBub3QgYWxsb2NhdGVkIGZvciBzb21lIGxheWVycworICAgICAgICB3
aGljaCBjYW4gcHJldmVudCBhbnkgcXVhZHMgZnJvbSBiZWluZyBwcmVzZW50IGZvciBhIHJlbmRl
ciBzdXJmYWNlLgorICAgICAgICBUaGlzIGlzIHVzZWQgYXMgYSBzaWduYWwgdG8gcHJldmVudCB0
aGUgUmVuZGVyUGFzcyBmcm9tIGFsbG9jYXRpbmcgYQorICAgICAgICB0ZXh0dXJlLgorCisgICAg
ICAgIFJlcGxhY2UgdGhlIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNo
ZWRUZXh0dXJlcygpIG1ldGhvZAorICAgICAgICB3aXRoIGEgZ2VuZXJhbCByZW1vdmVSZW5kZXJQ
YXNzZXMoKSB3aGljaCB0YWtlcyBhIGN1bGxpbmcgY29udHJvbCBvYmplY3QKKyAgICAgICAgYW5k
IHdpbGwgcmVtb3ZlIHBhc3NlcyBiYXNlZCBvbiB0aGUgaW5wdXRzIGZyb20gdGhlIGNvbnRyb2wg
b2JqZWN0LgorCisgICAgICAgIFRoaXMgbmV3IG1ldGhvZCBpcyB1c2VkIGZvciB0aGUgb2xkIHB1
cnBvc2Ugb2YgcmVtb3ZpbmcgcGFzc2VzIHdpdGggY2FjaGVkCisgICAgICAgIHRleHR1cmVzLCBh
cyB3ZWxsIGFzIHRvIHJlbW92ZSBwYXNzZXMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgcXVhZCBpbnB1
dHMuCisKKyAgICAgICAgVGVzdDogQ0NMYXllclRyZWVIb3N0VGVzdFN1cmZhY2VOb3RBbGxvY2F0
ZWRGb3JMYXllcnNPdXRzaWRlTWVtb3J5TGltaXQKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNz
ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpzaG91bGRSZW1vdmVS
ZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxS
ZW5kZXJQYXNzZXNXaXRoTm9RdWFkczo6c2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVSZW5kZXJQYXNzZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ3VsbFJlbmRlclBhc3Nlc1dpdGhDYWNo
ZWRUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxs
UmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpyZW5kZXJQYXNzTGlzdEJlZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRo
Q2FjaGVkVGV4dHVyZXM6OnJlbmRlclBhc3NMaXN0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXM6OnJl
bmRlclBhc3NMaXN0TmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzOjpDdWxsUmVuZGVyUGFzc2VzV2l0
aENhY2hlZFRleHR1cmVzKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAg
ICAoQ3VsbFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkczo6cmVuZGVyUGFzc0xp
c3RCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVu
ZGVyUGFzc2VzV2l0aE5vUXVhZHM6OnJlbmRlclBhc3NMaXN0RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkN1bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkczo6cmVu
ZGVyUGFzc0xpc3ROZXh0KToKKworMjAxMi0wNy0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIFJlbmRlclBhc3MgZHJh
d2luZyBmcm9tIENDUmVuZGVyU3VyZmFjZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTA1NzMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAx
NTRiM2M1OGFlMzAzNmEwNDYzMTk1NGE0ZTIwNTc0MWQ4ODY3NGJkLi5jZmQ2MWYwMjI3NDcwMjgz
OThmYjVkM2U3ZTg1OWMwMjRlMjI0YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDQ3IEBACiAyMDEyLTA3LTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0u
b3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUmVwbGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUg
d2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwgdGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1
cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg0MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwOgorCisyMDEyLTA3LTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3Ig
Y3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDU2NvcGVk
VGV4dHVyZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcik6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvcjo6bnVtVGV4dHVyZXMpOgorCisyMDEyLTA3LTA2ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQXZvaWQgYWxsb2NhdGlu
ZyByZW5kZXIgcGFzcyB0ZXh0dXJlcyB0aGF0IGhhdmUgbm8gY29udGVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3MDIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoK
KyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OkNv
bnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nKToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdFRlc3RTdXJmYWNlTm90QWxsb2NhdGVkRm9yTGF5ZXJzT3V0c2lkZU1lbW9yeUxpbWl0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdFN1cmZhY2VOb3RBbGxvY2F0ZWRG
b3JMYXllcnNPdXRzaWRlTWVtb3J5TGltaXQ6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTdXJmYWNlTm90
QWxsb2NhdGVkRm9yTGF5ZXJzT3V0c2lkZU1lbW9yeUxpbWl0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFN1cmZhY2VOb3RBbGxvY2F0ZWRGb3JMYXllcnNPdXRzaWRlTWVtb3J5
TGltaXQ6OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTdXJm
YWNlTm90QWxsb2NhdGVkRm9yTGF5ZXJzT3V0c2lkZU1lbW9yeUxpbWl0OjpkaWRDb21taXQpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U3VyZmFjZU5vdEFsbG9jYXRlZEZvckxh
eWVyc091dHNpZGVNZW1vcnlMaW1pdDo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U3VyZmFjZU5vdEFsbG9jYXRlZEZvckxheWVyc091dHNp
ZGVNZW1vcnlMaW1pdDo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURik6CisKKzIwMTItMDctMDkg
IERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVt
XSBEZWNvdXBsZSBSZW5kZXJQYXNzIGRyYXdpbmcgZnJvbSBDQ1JlbmRlclN1cmZhY2UKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTczCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA3OWVjMTY1MzJiNWZhNDYwOWY3OWU5ZWQ3ZTQ4MDNmZjlmMTZlYjliLi5l
MjQ4M2U1ODVmMzE1NDRmNTRmMzEwOGIzM2RhN2MyNDQyOTI2M2VlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC04MzYxLDYgKzgzNjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2NoZWR1bGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y29wZWRUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oJywKQEAg
LTgzNzYsNiArODM3OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU3RyZWFtVmlkZW9EcmF3UXVhZC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU3RyZWFtVmlkZW9EcmF3UXVhZC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmUu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDU5Y2VkODY5YmJjNzIwOGQwM2Q1ZWNjZWIwZTEyYTcz
NjNhODkyYzkuLmJhM2MyNTU3YjY5OTVjM2JjZjZiY2MwZGRjMmIwMDU5NzE0YmNlZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzgsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgogI2luY2x1
ZGUgIkdyVGV4dHVyZS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5jbHVkZSAi
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJj
Yy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIgog
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZUZpbHRlcnMuaCIKKyNpbmNsdWRlICJjYy9DQ1Nj
b3BlZFRleHR1cmUuaCIKICNpbmNsdWRlICJjYy9DQ1NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFk
LmgiCkBAIC0xNTcsNyArMTU3LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRl
cmVyQ2hyb21pdW0oQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVVwbG9hZGVyT3B0aW9uIHRleHR1cmVV
cGxvYWRlclNldHRpbmcpCiAgICAgOiBDQ1JlbmRlcmVyKGNsaWVudCkKICAgICAsIG1fY3VycmVu
dFJlbmRlclBhc3MoMCkKLSAgICAsIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlKDApCisgICAgLCBt
X2N1cnJlbnRUZXh0dXJlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAg
ICAsIG1fc2hhcmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41ZiwgLTAuNWYsIDEuMGYsIDEu
MGYpKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC0yNzQsMTAgKzI3NCw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKQogewotICAg
IGlmICghbV9pbXBsVGV4dHVyZU1hbmFnZXIpCi0gICAgICAgIHJldHVybjsKICAgICBtX3JlbmRl
clBhc3NUZXh0dXJlcy5jbGVhcigpOwotICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVF
dmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMzE0LDYgKzMxMSwx
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29ucwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIH0KIAorLy8gc3Rh
dGljCitJbnRTaXplIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVTaXpl
KGNvbnN0IENDUmVuZGVyUGFzcyogcGFzcykKK3sKKyAgICByZXR1cm4gcGFzcy0+ZnJhbWVidWZm
ZXJPdXRwdXRSZWN0KCkuc2l6ZSgpOworfQorCisvLyBzdGF0aWMKK0dDM0RlbnVtIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NSZW5kZXJQYXNz
KikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Cit9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShj
b25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKIHsKQEAgLTMy
Miw3ICszMzAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFz
c0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYQogICAgICAgICBwYXNzZXNJbkZy
YW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXJbaV0uZ2V0KCkpOwogCiAgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7Ci0g
ICAgSGFzaE1hcDxpbnQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPjo6Y29uc3RfaXRlcmF0b3Ig
cGFzc0l0ZXJhdG9yOworICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiA+
Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CiAgICAgZm9yIChwYXNzSXRlcmF0b3IgPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNz
VGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7CiAgICAgICAgIGNvbnN0IENDUmVuZGVy
UGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSBwYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3It
PmZpcnN0KTsKICAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewpAQCAtMzMwLDQxICsz
MzgsMzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBhc3NBbGxv
Y2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGEKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVy
UGFzc0luRnJhbWUtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKTsKLSAgICAgICAgR0Mz
RGVudW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAg
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKLSAg
ICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkU2l6ZSwgcmVx
dWlyZWRGb3JtYXQpKSB7Ci0gICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0
ZXJhdG9yLT5maXJzdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgICAg
ICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVu
ZGVyUGFzc0luRnJhbWUpOworICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRl
clBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgQ0NTY29wZWRU
ZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEFT
U0VSVCh0ZXh0dXJlKTsKKworICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4dHVyZS0+
c2l6ZSgpICE9IHJlcXVpcmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1aXJlZEZv
cm1hdCkpCisgICAgICAgICAgICB0ZXh0dXJlLT5mcmVlKCk7CiAgICAgfQogCiAgICAgLy8gRGVs
ZXRlIFJlbmRlclBhc3MgdGV4dHVyZXMgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUgdGhhdCB3aWxs
IG5vdCBiZSB1c2VkIGFnYWluLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzVG9E
ZWxldGUuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnJlbW92ZShw
YXNzZXNUb0RlbGV0ZVtpXSk7Ci0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0
ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAotICAgIC8vIEFsbCBS
ZW5kZXJQYXNzIHRleHR1cmVzIHNob3VsZCBiZSByZXNlcnZlZCBmb3IgdGhlIGN1cnJlbnQgZnJh
bWUuIEV2ZXJ5IFJlbmRlclBhc3MgdGV4dHVyZQotICAgIC8vIGlzIGtlcHQgcmVzZXJ2ZWQgdW50
aWwgaXQgaXMgcmVtb3ZlZCBhbmQgZGVsZXRlZC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE1hbmFnZWRU
ZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3Nlc0lu
RHJhd09yZGVyW2ldLT5pZCgpKTsKLSAgICAgICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgICAg
ICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG93blRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3Jl
YXRlKG1faW1wbFRleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICAgICAgICAgIHRleHR1cmUgPSBv
d25UZXh0dXJlLmdldCgpOwotICAgICAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuc2V0KHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCBvd25UZXh0dXJlLnJlbGVhc2UoKSk7Cisg
ICAgICAgIGlmICghbV9yZW5kZXJQYXNzVGV4dHVyZXMuY29udGFpbnMocmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXJbaV0tPmlkKCkpKSB7CisgICAgICAgICAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJl
PiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZUFsbG9jYXRv
ci5nZXQoKSk7CisgICAgICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5zZXQocmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHRleHR1cmUucmVsZWFzZSgpKTsKICAgICAgICAgfQot
Ci0gICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3Nlc0luRHJh
d09yZGVyW2ldLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7Ci0gICAgICAgIEdDM0Rl
bnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgICAgIGJv
b2wgcmVzZXJ2ZWQgPSB0ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgcmVxdWlyZWRGb3Jt
YXQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2VydmVkLCByZXNlcnZlZCk7CiAgICAgfQog
fQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZChpbnQgaWQpIGNvbnN0CiB7Ci0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUg
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQpOwotICAgIHJldHVybiB0ZXh0dXJlICYmIHRl
eHR1cmUtPnRleHR1cmVJZCgpOworICAgIENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVu
ZGVyUGFzc1RleHR1cmVzLmdldChpZCk7CisgICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+
aWQoKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1l
KGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MpCkBAIC00NjMsOCArNDYxLDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1
YWQpCiAgICAgICAgIGRyYXdZVVZWaWRlb1F1YWQocXVhZC0+dG9ZVVZWaWRlb0RyYXdRdWFkKCkp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0ND
aGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkKQEAgLTUyMCw3ICs1MTYsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVy
RHJhd1F1YWQqIHF1YQogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+ZHJhd0VsZW1lbnRz
KEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIE1hbmFn
ZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJlKQorc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIENDU2NvcGVkVGV4dHVyZSogc291cmNlVGV4
dHVyZSkKIHsKICAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTa0Jp
dG1hcCgpOwpAQCAtNTMxLDEwICs1MjcsMTAgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBs
eUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogCiAg
ICAgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5mbHVzaCgpOwogCi0gICAgcmV0dXJuIENDUmVu
ZGVyU3VyZmFjZUZpbHRlcnM6OmFwcGx5KGZpbHRlcnMsIHNvdXJjZVRleHR1cmUtPnRleHR1cmVJ
ZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNvbnRleHQuZ2V0KCkpOworICAgIHJl
dHVybiBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJl
LT5pZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNvbnRleHQuZ2V0KCkpOwogfQog
Ci1QYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdC
YWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQorUGFzc093
blB0cjxDQ1Njb3BlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91
bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pCiB7CiAgICAgLy8gVGhp
cyBtZXRob2QgZHJhd3MgYSBiYWNrZ3JvdW5kIGZpbHRlciwgd2hpY2ggYXBwbGllcyBhIGZpbHRl
ciB0byBhbnkgcGl4ZWxzIGJlaGluZCB0aGUgcXVhZCBhbmQgc2VlbiB0aHJvdWdoIGl0cyBiYWNr
Z3JvdW5kLgogICAgIC8vIFRoZSBhbGdvcml0aG0gd29ya3MgYXMgZm9sbG93czoKQEAgLTU1OSw3
ICs1NTUsNyBAQCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQwogICAgIC8vIHRyYW5zbHVjZW50IHBp
eGVscywgYW5kIHRoZSBjb250ZW50cyBiZWhpbmQgdGhvc2UgdHJhbnNsdWNlbnQgcGl4ZWxzIHdv
dWxkbid0IGhhdmUgdGhlIGZpbHRlciBhcHBsaWVkLgogICAgIGlmIChtX2N1cnJlbnRSZW5kZXJQ
YXNzLT5oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSk7CisgICAgQVNTRVJUKCFtX2N1
cnJlbnRUZXh0dXJlKTsKIAogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3Ig
Ym90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3Vs
dHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KICAgICBJbnRSZWN0IGRl
dmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQoKS5ib3VuZGluZ0JveCgp
KSk7CkBAIC01NzEsNyArNTY3LDcgQEAgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0MKIAogICAgIGRl
dmljZVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudFJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0
UmVjdCgpKTsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gZGV2aWNlQmFja2dyb3VuZFRl
eHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVNYW5hZ2VyLmdldCgp
KTsKKyAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9
IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwog
ICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdl
dCgpLCBkZXZpY2VSZWN0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTU4MiwxMiAr
NTc4LDEyIEBAIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAgICAgR3JUZXh0dXJlKiB0ZXh0dXJl
ID0gcmVpbnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJlZERldmljZUJhY2tncm91bmQu
Z2V0VGV4dHVyZSgpKTsKICAgICBpbnQgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlk
ID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogCi0gICAgT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4
dHVyZU1hbmFnZXIuZ2V0KCkpOwotICAgIGlmICghYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUo
cXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBP
d25QdHI8Q0NTY29wZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9IENDU2NvcGVkVGV4dHVy
ZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworICAgIGlmICghYmFja2dy
b3VuZFRleHR1cmUtPmFsbG9jYXRlKHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgY29uc3QgQ0NS
ZW5kZXJQYXNzKiB0YXJnZXRSZW5kZXJQYXNzID0gbV9jdXJyZW50UmVuZGVyUGFzczsKLSAgICBi
b29sIHVzaW5nQmFja2dyb3VuZFRleHR1cmUgPSB1c2VNYW5hZ2VkVGV4dHVyZShiYWNrZ3JvdW5k
VGV4dHVyZS5nZXQoKSwgcXVhZC0+cXVhZFJlY3QoKSk7CisgICAgYm9vbCB1c2luZ0JhY2tncm91
bmRUZXh0dXJlID0gdXNlU2NvcGVkVGV4dHVyZShiYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgcXVh
ZC0+cXVhZFJlY3QoKSk7CiAKICAgICBpZiAodXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkgewogICAg
ICAgICAvLyBDb3B5IHRoZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tn
cm91bmQgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2UuCkBAIC02MTAsNiArNjA2LDEwIEBAIFBhc3NP
d25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91
bmRGaWx0ZXJzKGNvbnN0IENDCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVu
ZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7CisgICAgQ0NT
Y29wZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQo
cXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250
ZW50c1RleHR1cmUtPmlkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlbmRlclRyYW5zZm9ybSA9IHF1YWQtPmxheWVyVHJhbnNmb3JtKCk7CiAgICAg
Ly8gQXBwbHkgYSBzY2FsaW5nIGZhY3RvciB0byBzaXplIHRoZSBxdWFkIGZyb20gMXgxIHRvIGl0
cyBpbnRlbmRlZCBzaXplLgogICAgIHJlbmRlclRyYW5zZm9ybS5zY2FsZTNkKHF1YWQtPnF1YWRS
ZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSwgMSk7CkBAIC02MTksMTUg
KzYxOSwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFk
KGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlmICghY29udGVudHNEZXZp
Y2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE1hbmFn
ZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVh
ZC0+cmVuZGVyUGFzc0lkKCkpOwotICAgIEFTU0VSVChjb250ZW50c1RleHR1cmUgJiYgY29udGVu
dHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0KLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGJh
Y2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2
aWNlVHJhbnNmb3JtKTsKKyAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4
dHVyZSA9IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9y
bSk7CiAKICAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8v
IEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1cmUuCiAgICAgU2tCaXRtYXAgZmls
dGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgY29udGVudHNU
ZXh0dXJlKTsKLSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBjb250ZW50c1RleHR1cmUtPnRl
eHR1cmVJZCgpOworICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGNvbnRlbnRzVGV4dHVyZS0+
aWQoKTsKICAgICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSkgewogICAgICAgICBHclRl
eHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1h
cC5nZXRUZXh0dXJlKCkpOwogICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdl
dFRleHR1cmVIYW5kbGUoKTsKQEAgLTYzNiw3ICs2MzMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBx
dWFkKQogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUu
CiAgICAgaWYgKGJhY2tncm91bmRUZXh0dXJlKSB7CiAgICAgICAgIEFTU0VSVChiYWNrZ3JvdW5k
VGV4dHVyZS0+c2l6ZSgpID09IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpKTsKLSAgICAgICAgY29w
eVRleHR1cmVUb0ZyYW1lYnVmZmVyKGJhY2tncm91bmRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgcXVh
ZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOworICAgICAgICBj
b3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFja2dyb3VuZFRleHR1cmUtPmlkKCksIHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpLCBxdWFkLT5sYXllclRyYW5zZm9ybSgpKTsKICAgICB9CiAKICAgICBi
b29sIGNsaXBwZWQgPSBmYWxzZTsKQEAgLTEwOTMsOCArMTA5MCwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFjZVF1YWQoY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVh
ZCogcXVhZCkKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVu
c2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1ZFRleHR1
cmUsIGNvbnN0IEludFNpemUmIGh1ZFNpemUpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0hlYWRzVXBEaXNwbGF5KGNvbnN0IENDU2NvcGVkVGV4dHVyZSogaHVkVGV4dHVyZSwgY29u
c3QgSW50U2l6ZSYgaHVkU2l6ZSkKIHsKKyAgICBBU1NFUlQoaHVkVGV4dHVyZS0+aWQoKSk7CisK
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGlj
c0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkp
OwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSk7CkBAIC0xMTAzLDkgKzExMDIsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiBodWRUZXh0dXJl
LCBjb25zdAogICAgIGNvbnN0IEhlYWRzVXBEaXNwbGF5UHJvZ3JhbSogcHJvZ3JhbSA9IGhlYWRz
VXBEaXNwbGF5UHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRp
YWxpemVkKCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBpZiAoIWh1ZFRleHR1cmUtPnRleHR1
cmVJZCgpKQotICAgICAgICBodWRUZXh0dXJlLT5hbGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2Nh
dG9yLmdldCgpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBodWRUZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGh1ZFRleHR1cmUtPmlkKCkpKTsKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1w
bGVyTG9jYXRpb24oKSwgMCkpOwogCkBAIC0xMzQ5LDE0ICsxMzQ2LDE0IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlCiAgICAgfQogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0
RnJhbWVidWZmZXJUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBkZXZpY2VSZWN0KQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVy
VGV4dHVyZShDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRldmljZVJl
Y3QpCiB7Ci0gICAgaWYgKCF0ZXh0dXJlLT5yZXNlcnZlKGRldmljZVJlY3Quc2l6ZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCKSkKKyAgICBBU1NFUlQoIXRleHR1cmUtPmlkKCkgfHwgKHRleHR1
cmUtPnNpemUoKSA9PSBkZXZpY2VSZWN0LnNpemUoKSAmJiB0ZXh0dXJlLT5mb3JtYXQoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCKSk7CisKKyAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYgIXRl
eHR1cmUtPmFsbG9jYXRlKGRldmljZVJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCF0ZXh0dXJlLT50ZXh0dXJlSWQo
KSkKLSAgICAgICAgdGV4dHVyZS0+YWxsb2NhdGUobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQo
KSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB0ZXh0dXJlLT5pZCgpKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jb3B5
VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZS0+Zm9y
bWF0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZp
Y2VSZWN0LngoKSwgZGV2aWNlUmVjdC55KCksIGRldmljZVJlY3Qud2lkdGgoKSwgZGV2aWNlUmVj
dC5oZWlnaHQoKSwgMCkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTM2NCwxMyArMTM2MSwxMyBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdAogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aXNDdXJyZW50UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7Ci0g
ICAgcmV0dXJuIG1fY3VycmVudFJlbmRlclBhc3MgPT0gcmVuZGVyUGFzcyAmJiAhbV9jdXJyZW50
TWFuYWdlZFRleHR1cmU7CisgICAgcmV0dXJuIG1fY3VycmVudFJlbmRlclBhc3MgPT0gcmVuZGVy
UGFzcyAmJiAhbV9jdXJyZW50VGV4dHVyZTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogewogICAg
IG1fY3VycmVudFJlbmRlclBhc3MgPSByZW5kZXJQYXNzOwotICAgIG1fY3VycmVudE1hbmFnZWRU
ZXh0dXJlID0gMDsKKyAgICBtX2N1cnJlbnRUZXh0dXJlID0gMDsKIAogICAgIGlmIChyZW5kZXJQ
YXNzID09IG1fZGVmYXVsdFJlbmRlclBhc3MpIHsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KSk7CkBAIC0xMzc4LDI3ICsxMzc1LDI5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRl
clBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7CisgICAgQ0NTY29wZWRUZXh0dXJl
KiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOwog
ICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAorICAgIGlmICghdGV4dHVyZS0+aWQoKSkKKyAgICAgICAg
dGV4dHVyZS0+YWxsb2NhdGUocmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3MpLCByZW5k
ZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzKSk7CisKICAgICByZXR1cm4gYmluZEZyYW1l
YnVmZmVyVG9UZXh0dXJlKHRleHR1cmUsIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVj
dCgpKTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZU1hbmFnZWRUZXh0dXJl
KE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCiti
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVyZShjb25zdCBDQ1Njb3Bl
ZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKIHsKICAgICBt
X2N1cnJlbnRSZW5kZXJQYXNzID0gMDsKLSAgICBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSA9IHRl
eHR1cmU7CisgICAgbV9jdXJyZW50VGV4dHVyZSA9IHRleHR1cmU7CiAKICAgICByZXR1cm4gYmlu
ZEZyYW1lYnVmZmVyVG9UZXh0dXJlKHRleHR1cmUsIHZpZXdwb3J0UmVjdCk7CiB9CiAKLWJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKK2Jvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoY29uc3QgQ0NTY29w
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpCiB7Ci0g
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKKyAgICBBU1NF
UlQodGV4dHVyZS0+aWQoKSk7CiAKLSAgICBpZiAoIXRleHR1cmUtPnRleHR1cmVJZCgpKQotICAg
ICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZS0+dGV4dHVyZUlkKCks
IDApKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwor
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLT5pZCgpLCAwKSk7
CiAKICNpZiAhZGVmaW5lZCAoIE5ERUJVRyApCiAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewpAQCAtMTQ3MCwxNCArMTQ2OSwxMyBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQog
CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1faW1wbFRl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBtX2Nh
cGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgbV90ZXh0dXJlQ29waWVyID0gQWNjZWxl
cmF0ZWRUZXh0dXJlQ29waWVyOjpjcmVhdGUobV9jb250ZXh0LCBtX2lzVXNpbmdCaW5kVW5pZm9y
bSk7CiAgICAgaWYgKG1fdGV4dHVyZVVwbG9hZGVyU2V0dGluZyA9PSBUaHJvdHRsZWRVcGxvYWRl
cikKICAgICAgICAgbV90ZXh0dXJlVXBsb2FkZXIgPSBUaHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI6
OmNyZWF0ZShtX2NvbnRleHQpOwogICAgIGVsc2UKICAgICAgICAgbV90ZXh0dXJlVXBsb2FkZXIg
PSBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6Y3JlYXRlKCk7Ci0gICAgbV9jb250ZW50c1Rl
eHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRl
eHQpOwotICAgIG1faW1wbFRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3I6OmNyZWF0ZShtX2NvbnRleHQpOworICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0g
VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LCBtX2NhcGFiaWxpdGll
cy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9pbXBsVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dCwgbV9jYXBhYmlsaXRpZXMubWF4VGV4
dHVyZVNpemUpOwogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQp
CiAgICAgICAgIG1faW1wbFRleHR1cmVBbGxvY2F0b3ItPnNldFRleHR1cmVVc2FnZUhpbnQoVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpGcmFtZWJ1ZmZlckF0dGFjaG1lbnQpOwogICAgIGlmICht
X2NhcGFiaWxpdGllcy51c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGY0NjRlYWUxYjU4MDQ2N2U0YWU5MjI1NTc4OWQ3
MzI2YWI3OGUxOWQuLjZhZmU2NjgwNmNlOTgxZjRiM2UwMDhlNzk4NjY2YTUyYTA5ZGQ5YWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC01MSwxMyArNTEsMTMgQEAgY2xh
c3MgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOwogY2xhc3MgQ0NEcmF3UXVhZDsKIGNsYXNzIENDSU9T
dXJmYWNlRHJhd1F1YWQ7CiBjbGFzcyBDQ1JlbmRlclBhc3NEcmF3UXVhZDsKK2NsYXNzIENDU2Nv
cGVkVGV4dHVyZTsKIGNsYXNzIENDU29saWRDb2xvckRyYXdRdWFkOwogY2xhc3MgQ0NTdHJlYW1W
aWRlb0RyYXdRdWFkOwogY2xhc3MgQ0NUZXh0dXJlRHJhd1F1YWQ7CiBjbGFzcyBDQ1RpbGVEcmF3
UXVhZDsKIGNsYXNzIENDWVVWVmlkZW9EcmF3UXVhZDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsK
LWNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxv
Y2F0aW9uOwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJl
bmRlciBsYXllcnMgdXNpbmcgR0wuCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRS
ZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hEcmF3aW5nRnJhbWUoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVh
ZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KGNvbnN0IENDU2NvcGVk
VGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpIE9WRVJSSURFOwogCiAgICAgLy8gd2Fp
dHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgT1ZF
UlJJREU7CkBAIC0xMDAsOSArMTAwLDggQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5Qmlu
ZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5Lmdl
dCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgYm9vbCBnZXRGcmFtZWJ1ZmZlclRl
eHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBkZXZpY2VSZWN0KTsKKyAgICBi
b29sIGdldEZyYW1lYnVmZmVyVGV4dHVyZShDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiBkZXZpY2VSZWN0KTsKIAotICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGltcGxUZXh0dXJl
TWFuYWdlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW1wbFRleHR1cmVNYW5hZ2VyLmdl
dCgpOyB9CiAgICAgdmlydHVhbCBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV90ZXh0dXJlQ29waWVyLmdldCgpOyB9CiAgICAgdmlydHVhbCBU
ZXh0dXJlVXBsb2FkZXIqIHRleHR1cmVVcGxvYWRlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fdGV4dHVyZVVwbG9hZGVyLmdldCgpOyB9CiAgICAgdmlydHVhbCBUZXh0dXJlQWxsb2NhdG9y
KiBpbXBsVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW1wbFRl
eHR1cmVBbGxvY2F0b3IuZ2V0KCk7IH0KQEAgLTEzMyw3ICsxMzIsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0NoZWNrZXJi
b2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0Rl
YnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKLSAgICBQYXNzT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZp
Y2VUcmFuc2Zvcm0pOworICAgIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3QmFja2dy
b3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1Jl
bmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRy
YXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7CkBAIC0xNDQs
MTIgKzE0MywxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXREcmF3RnJhbWVidWZmZXJSZWN0
KGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKIAotICAgIC8vIFRoZSBjdXJyZW50IGRyYXdp
bmcgdGFyZ2V0IGlzIGVpdGhlciBhIFJlbmRlclBhc3Mgb3IgTWFuYWdlZFRleHR1cmUuIFVzZSB0
aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0LgorICAgIC8v
IFRoZSBjdXJyZW50IGRyYXdpbmcgdGFyZ2V0IGlzIGVpdGhlciBhIFJlbmRlclBhc3Mgb3IgU2Nv
cGVkVGV4dHVyZS4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBuZXcgZHJhd2lu
ZyB0YXJnZXQuCiAgICAgYm9vbCB1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOwot
ICAgIGJvb2wgdXNlTWFuYWdlZFRleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0
JiB2aWV3cG9ydFJlY3QpOworICAgIGJvb2wgdXNlU2NvcGVkVGV4dHVyZShjb25zdCBDQ1Njb3Bl
ZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwogICAgIGJvb2wgaXNDdXJy
ZW50UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKIAotICAgIGJvb2wgYmluZEZyYW1l
YnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KTsKKyAgICBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBDQ1Njb3BlZFRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwogCiAgICAgdm9pZCBjbGVhclJl
bmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZl
ckRhbWFnZVJlY3QpOwogCkBAIC0xNzAsMTAgKzE2OSwxMyBAQCBwcml2YXRlOgogICAgIC8vIFdl
YkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgaW1wbGVt
ZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBPVkVSUklERTsKIAor
ICAgIHN0YXRpYyBJbnRTaXplIHJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25zdCBDQ1JlbmRlclBh
c3MqKTsKKyAgICBzdGF0aWMgR0MzRGVudW0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQoY29uc3Qg
Q0NSZW5kZXJQYXNzKik7CisKICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJp
bGl0aWVzOwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2N1cnJlbnRSZW5kZXJQYXNzOwot
ICAgIE1hbmFnZWRUZXh0dXJlKiBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICBjb25zdCBD
Q1Njb3BlZFRleHR1cmUqIG1fY3VycmVudFRleHR1cmU7CiAgICAgdW5zaWduZWQgbV9vZmZzY3Jl
ZW5GcmFtZWJ1ZmZlcklkOwogCiAgICAgT3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRH
ZW9tZXRyeTsKQEAgLTI1OSwxMyArMjYxLDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNvbGlk
Q29sb3JQcm9ncmFtPiBtX3NvbGlkQ29sb3JQcm9ncmFtOwogICAgIE93blB0cjxIZWFkc1VwRGlz
cGxheVByb2dyYW0+IG1faGVhZHNVcERpc3BsYXlQcm9ncmFtOwogCi0gICAgT3duUHRyPFRleHR1
cmVNYW5hZ2VyPiBtX2ltcGxUZXh0dXJlTWFuYWdlcjsKICAgICBPd25QdHI8QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyPiBtX3RleHR1cmVDb3BpZXI7CiAgICAgT3duUHRyPFRleHR1cmVVcGxvYWRl
cj4gbV90ZXh0dXJlVXBsb2FkZXI7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cj4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3I7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvcj4gbV9pbXBsVGV4dHVyZUFsbG9jYXRvcjsKIAotICAgIEhhc2hNYXA8aW50LCBP
d25QdHI8TWFuYWdlZFRleHR1cmU+ID4gbV9yZW5kZXJQYXNzVGV4dHVyZXM7CisgICAgSGFzaE1h
cDxpbnQsIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+ID4gbV9yZW5kZXJQYXNzVGV4dHVyZXM7CiAK
ICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwCmluZGV4IDhlNTg2ZTI1YTA1YWY3OGFk
MTNiN2RhZjcyM2JhM2NiYTAzM2NhODcuLmM1ODlhM2M2ZWQzZDAwYWZmMWZiYTBkN2Q0MzU5NGYz
YWFjOTFlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcApA
QCAtMzMsOCArMzMsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCitUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OlRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBpbnQg
bWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbWF4VGV4
dHVyZVNpemUobWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX2N1cnJlbnRNZW1vcnlVc2VCeXRlcygw
KQogICAgICwgbV90ZXh0dXJlVXNhZ2VIaW50KEFueSkKICAgICAsIG1fdXNlVGV4dHVyZVN0b3Jh
Z2VFeHQoZmFsc2UpCkBAIC03MSw2ICs3Miw5IEBAIHN0YXRpYyBib29sIGlzVGV4dHVyZUZvcm1h
dFN1cHBvcnRlZEZvclN0b3JhZ2UoR0MzRGVudW0gZm9ybWF0KQogCiB1bnNpZ25lZCBUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZVRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0Mz
RGVudW0gZm9ybWF0KQogeworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX21heFRleHR1cmVTaXpl
IHx8IHNpemUuaGVpZ2h0KCkgPiBtX21heFRleHR1cmVTaXplKQorICAgICAgICByZXR1cm4gMDsK
KwogICAgIG1fY3VycmVudE1lbW9yeVVzZUJ5dGVzICs9IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlV
c2VCeXRlcyhzaXplLCBmb3JtYXQpOwogCiAgICAgdW5zaWduZWQgdGV4dHVyZUlkID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgKaW5kZXggYzEwYzI1NzIxNGU2MmVm
ZTM0MDJlZmNiNjEyMThmNjI4MDE0ZDI1My4uNzhlZjQwZDFiNDNlN2IzNDI0NTRhNTJhMTQwMDI0
YzU5MTgxOWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgKQEAg
LTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBjcmVhdGUoV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3I+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcihjb250ZXh0KSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKGNvbnRleHQsIG1heFRleHR1cmVT
aXplKSk7CiAgICAgfQogICAgIHZpcnR1YWwgflRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcigpOwog
CkBAIC01Niw5ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VUZXh0dXJlU3RvcmFn
ZUV4dChib29sIHVzZVN0b3JhZ2VFeHQpIHsgbV91c2VUZXh0dXJlU3RvcmFnZUV4dCA9IHVzZVN0
b3JhZ2VFeHQ7IH0KIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqLCBpbnQgbWF4VGV4dHVy
ZVNpemUpOwogCiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owor
ICAgIGludCBtX21heFRleHR1cmVTaXplOwogICAgIHNpemVfdCBtX2N1cnJlbnRNZW1vcnlVc2VC
eXRlczsKICAgICBUZXh0dXJlVXNhZ2VIaW50IG1fdGV4dHVyZVVzYWdlSGludDsKICAgICBib29s
IG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
CmluZGV4IDI0ZDQwYmZiNGU1YTNiNjRhMThjZGQzY2RkYmRiZDA2M2NkYjJiMDUuLjczMWY3NzBj
MDk2NjMxODU4YTBhYzNjNGJjOGYzZDcxM2Y2NzEyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJh
dyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAoIW1faHVkVGV4dHVyZSkKLSAgICAgICAgbV9odWRUZXh0dXJlID0g
TWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIo
KSk7CisgICAgICAgIG1faHVkVGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKGxheWVy
UmVuZGVyZXItPmltcGxUZXh0dXJlQWxsb2NhdG9yKCkpOwogCiAgICAgY29uc3QgQ0NMYXllclRy
ZWVTZXR0aW5ncyYgc2V0dGluZ3MgPSBsYXllclRyZWVIb3N0SW1wbC0+c2V0dGluZ3MoKTsKICAg
ICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRleHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdyhDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBsYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQoMTI4KTsK
ICAgICB9CiAKLSAgICBpZiAoIW1faHVkVGV4dHVyZS0+cmVzZXJ2ZShodWRTaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpCisgICAgaWYgKCFtX2h1ZFRleHR1cmUtPmlkKCkgJiYgIW1faHVk
VGV4dHVyZS0+YWxsb2NhdGUoaHVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBSZW5kZXIgcGl4ZWxzIGludG8gdGhlIHRleHR1cmUuCkBA
IC0xMDQsNyArMTA0LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVl
SG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAgIHsKICAgICAgICAgUGxhdGZvcm1DYW52
YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZjYW52YXMpOwogCi0gICAgICAgIG1faHVkVGV4dHVyZS0+
YmluZFRleHR1cmUobGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+
aW1wbFRleHR1cmVBbGxvY2F0b3IoKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9odWRUZXh0dXJlLT5p
ZCgpKSk7CiAgICAgICAgIGJvb2wgdXBsb2FkZWRWaWFNYXAgPSBmYWxzZTsKICAgICAgICAgaWYg
KGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKSB7CiAgICAgICAgICAg
ICB1aW50OF90KiBwaXhlbERlc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29udGV4dC0+bWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAw
LCAwLCBodWRTaXplLndpZHRoKCksIGh1ZFNpemUuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hy
b21pdW06OldSSVRFX09OTFkpKTsKQEAgLTEyMiw4ICsxMjIsNiBAQCB2b2lkIENDSGVhZHNVcERp
c3BsYXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAg
fQogCiAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd0hlYWRzVXBEaXNwbGF5KG1faHVkVGV4dHVyZS5n
ZXQoKSwgaHVkU2l6ZSk7Ci0KLSAgICBtX2h1ZFRleHR1cmUtPnVucmVzZXJ2ZSgpOwogfQogCiB2
b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsLCBjb25zdCBDQ0xh
eWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncywgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCBjNTA1YTIwODYyZjIwOTBjNGJlMDU1ZWQ0MTMx
OTg0MjRmODJkMzczLi4yNjZiZjUxZTFmNGVkYzZjNjBjMjE2MzIzMDhjZTI2OGYxZDNhYTYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgogI2luY2x1ZGUgImNjL0NDRm9udEF0bGFzLmgiCisjaW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0
dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArMzYsNyBAQCBjbGFzcyBD
Q0RlYnVnUmVjdEhpc3Rvcnk7CiBjbGFzcyBDQ0ZyYW1lUmF0ZUNvdW50ZXI7CiBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgVGV4dXJlQWxs
b2NhdG9yOwogCiBzdHJ1Y3QgQ0NMYXllclRyZWVTZXR0aW5nczsKIApAQCAtNjYsNyArNjcsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGNvbnN0IENDTGF5ZXJU
cmVlU2V0dGluZ3MmKSBjb25zdDsKICAgICBib29sIHNob3dEZWJ1Z1JlY3RzKGNvbnN0IENDTGF5
ZXJUcmVlU2V0dGluZ3MmKSBjb25zdDsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9o
dWRUZXh0dXJlOworICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IG1faHVkVGV4dHVyZTsKICAg
ICBPd25QdHI8Q0NGb250QXRsYXM+IG1fZm9udEF0bGFzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwMjhiMjE1YWZmNjUxYzgwYWYwNjhiMTMzMWU3
MGI4OTNhYzBhNmQxLi4yNmEwOWU3MGZlMjBkOTc5ZWJmYTA4NTQ4MDFjOTNhM2Q3NTg1MWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzUzLDggKzM1Myw5
IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEZyYW1l
RGF0YSYgZnJhbWUpCiAgICAgaWYgKGRyYXdGcmFtZSkKICAgICAgICAgb2NjbHVzaW9uVHJhY2tl
ci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRyaWNzKHRoaXMpOwogCisgICAgcmVtb3ZlUmVu
ZGVyUGFzc2VzKEN1bGxSZW5kZXJQYXNzZXNXaXRoTm9RdWFkcygpLCBmcmFtZSk7CiAgICAgbV9s
YXllclJlbmRlcmVyLT5kZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShmcmFtZS5y
ZW5kZXJQYXNzZXMpOwotICAgIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhmcmFtZS5y
ZW5kZXJQYXNzZXMsIGZyYW1lLnNraXBwZWRQYXNzZXMsIG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7
CisgICAgcmVtb3ZlUmVuZGVyUGFzc2VzKEN1bGxSZW5kZXJQYXNzZXNXaXRoQ2FjaGVkVGV4dHVy
ZXMoKm1fbGF5ZXJSZW5kZXJlciksIGZyYW1lKTsKIAogICAgIHJldHVybiBkcmF3RnJhbWU7CiB9
CkBAIC00MDUsNiArNDA2LDcgQEAgSW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50
U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcm9vdFNjcm9sbExheWVySW1wbC0+Y2hpbGRyZW4o
KVswXS0+Y29udGVudEJvdW5kcygpOwogfQogCisvLyBzdGF0aWMKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBh
c3Nlcywgc2l6ZV90IGJvdHRvbVBhc3MsIGNvbnN0IENDUmVuZGVyUGFzcyogZmlyc3RUb1JlbW92
ZSwgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3NlcykKIHsKICAgICBzaXplX3QgcmVtb3Zl
SW5kZXggPSBwYXNzZXMuZmluZChmaXJzdFRvUmVtb3ZlKTsKQEAgLTQzNCwxMCArNDM2LDQxIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKEND
UmVuZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVk
UGFzcy5yZWxlYXNlKCkpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBh
c3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVy
UGFzc0xpc3QmIHNraXBwZWRQYXNzZXMsIGNvbnN0IENDUmVuZGVyZXIqIHJlbmRlcmVyKQorYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVz
OjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmLCBjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCkgY29uc3QKIHsKLSAgICBmb3IgKGludCBwYXNzSW5k
ZXggPSBwYXNzZXMuc2l6ZSgpIC0gMTsgcGFzc0luZGV4ID49IDA7IC0tcGFzc0luZGV4KSB7Ci0g
ICAgICAgIENDUmVuZGVyUGFzcyogY3VycmVudFBhc3MgPSBwYXNzZXNbcGFzc0luZGV4XS5nZXQo
KTsKKyAgICByZXR1cm4gcXVhZC5jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSgpLmlzRW1w
dHkoKSAmJiBtX3JlbmRlcmVyLmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocXVh
ZC5yZW5kZXJQYXNzSWQoKSk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJl
bmRlclBhc3Nlc1dpdGhOb1F1YWRzOjpzaG91bGRSZW1vdmVSZW5kZXJQYXNzKGNvbnN0IENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NMaXN0LCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCYgcXVhZCkg
Y29uc3QKK3sKKyAgICBzaXplX3QgcGFzc0luZGV4ID0gcGFzc0xpc3QuZmluZChxdWFkLnJlbmRl
clBhc3MoKSk7CisgICAgQVNTRVJUKHBhc3NJbmRleCAhPSBub3RGb3VuZCk7CisKKyAgICAvLyBJ
ZiBhbnkgcXVhZCBvciBSZW5kZXJQYXNzIGRyYXdzIGludG8gdGhpcyBSZW5kZXJQYXNzLCB0aGVu
IGtlZXAgaXQuCisgICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSBwYXNzTGlzdFtwYXNz
SW5kZXhdLT5xdWFkTGlzdCgpOworICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9u
dEl0ZXJhdG9yIHF1YWRMaXN0SXRlcmF0b3IgPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7
IHF1YWRMaXN0SXRlcmF0b3IgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytxdWFkTGlz
dEl0ZXJhdG9yKSB7CisgICAgICAgIENDRHJhd1F1YWQqIGN1cnJlbnRRdWFkID0gcXVhZExpc3RJ
dGVyYXRvci0+Z2V0KCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRRdWFkLT5tYXRlcmlhbCgpICE9
IENDRHJhd1F1YWQ6OlJlbmRlclBhc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWRJblBhc3MgPSBzdGF0aWNfY2Fz
dDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKKyAgICAgICAgaWYgKHBhc3NM
aXN0LmNvbnRhaW5zKHF1YWRJblBhc3MtPnJlbmRlclBhc3MoKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBEZWZpbmVkIGZvciBs
aW5raW5nIHRlc3RzLgordGVtcGxhdGUgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVS
ZW5kZXJQYXNzZXM8Q0NMYXllclRyZWVIb3N0SW1wbDo6Q3VsbFJlbmRlclBhc3Nlc1dpdGhDYWNo
ZWRUZXh0dXJlcz4oQ3VsbFJlbmRlclBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcywgRnJhbWVEYXRh
Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVJlbmRlclBhc3Nl
czxDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aE5vUXVhZHM+KEN1bGxS
ZW5kZXJQYXNzZXNXaXRoTm9RdWFkcywgRnJhbWVEYXRhJik7CisKKy8vIHN0YXRpYwordGVtcGxh
dGU8dHlwZW5hbWUgUmVuZGVyUGFzc0N1bGxlcj4KK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cmVtb3ZlUmVuZGVyUGFzc2VzKFJlbmRlclBhc3NDdWxsZXIgY3VsbGVyLCBGcmFtZURhdGEmIGZy
YW1lKQoreworICAgIGZvciAoc2l6ZV90IGl0ID0gY3VsbGVyLnJlbmRlclBhc3NMaXN0QmVnaW4o
ZnJhbWUucmVuZGVyUGFzc2VzKTsgaXQgIT0gY3VsbGVyLnJlbmRlclBhc3NMaXN0RW5kKGZyYW1l
LnJlbmRlclBhc3Nlcyk7IGl0ID0gY3VsbGVyLnJlbmRlclBhc3NMaXN0TmV4dChpdCkpIHsKKyAg
ICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IGZyYW1lLnJlbmRlclBhc3Nlc1tpdF0u
Z2V0KCk7CiAgICAgICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gY3VycmVudFBhc3Mt
PnF1YWRMaXN0KCk7CiAgICAgICAgIENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRv
ciBxdWFkTGlzdEl0ZXJhdG9yID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOwogCkBAIC00
NDgsMTggKzQ4MSwxOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dp
dGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFz
c1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsK
LSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc1F1YWQtPmNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFz
dEZyYW1lKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlci0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChyZW5k
ZXJQYXNzUXVhZC0+cmVuZGVyUGFzc0lkKCkpKQorICAgICAgICAgICAgaWYgKCFjdWxsZXIuc2hv
dWxkUmVtb3ZlUmVuZGVyUGFzcyhmcmFtZS5yZW5kZXJQYXNzZXMsICpyZW5kZXJQYXNzUXVhZCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjaGFu
Z2luZyB0aGUgdmVjdG9yIGluIHRoZSBtaWRkbGUgb2YgcmV2ZXJzZSBpdGVyYXRpb24uCi0gICAg
ICAgICAgICAvLyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGFueSBkYXRhIGZyb20gaXRlcmF0b3Ig
dG8gdGhlIGVuZCB3aWxsIG5vdCBjaGFuZ2UuCi0gICAgICAgICAgICAvLyBDYXB0dXJlIHRoZSBp
dGVyYXRvciBwb3NpdGlvbiBmcm9tIHRoZSBlbmQsIGFuZCByZXN0b3JlIGl0IGFmdGVyIHRoZSBj
aGFuZ2UuCi0gICAgICAgICAgICBpbnQgcG9zaXRpb25Gcm9tRW5kID0gcGFzc2VzLnNpemUoKSAt
IHBhc3NJbmRleDsKLSAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShwYXNz
ZXMsIHBhc3NJbmRleCwgcmVuZGVyUGFzc1F1YWQtPnJlbmRlclBhc3MoKSwgc2tpcHBlZFBhc3Nl
cyk7Ci0gICAgICAgICAgICBwYXNzSW5kZXggPSBwYXNzZXMuc2l6ZSgpIC0gcG9zaXRpb25Gcm9t
RW5kOwotICAgICAgICAgICAgQVNTRVJUKHBhc3NJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIC8v
IFdlIGFyZSBjaGFuZ2luZyB0aGUgdmVjdG9yIGluIHRoZSBtaWRkbGUgb2YgaXRlcmF0aW9uLiBC
ZWNhdXNlIHdlCisgICAgICAgICAgICAvLyBkZWxldGUgcmVuZGVyIHBhc3NlcyB0aGF0IGRyYXcg
aW50byB0aGUgY3VycmVudCBwYXNzLCB3ZSBhcmUKKyAgICAgICAgICAgIC8vIGd1YXJhbnRlZWQg
dGhhdCBhbnkgZGF0YSBmcm9tIHRoZSBpdGVyYXRvciB0byB0aGUgZW5kIHdpbGwgbm90CisgICAg
ICAgICAgICAvLyBjaGFuZ2UuIFNvLCBjYXB0dXJlIHRoZSBpdGVyYXRvciBwb3NpdGlvbiBmcm9t
IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAvLyBsaXN0LCBhbmQgcmVzdG9yZSBpdCBhZnRl
ciB0aGUgY2hhbmdlLgorICAgICAgICAgICAgaW50IHBvc2l0aW9uRnJvbUVuZCA9IGZyYW1lLnJl
bmRlclBhc3Nlcy5zaXplKCkgLSBpdDsKKyAgICAgICAgICAgIHJlbW92ZVJlbmRlclBhc3Nlc1Jl
Y3Vyc2l2ZShmcmFtZS5yZW5kZXJQYXNzZXMsIGl0LCByZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFz
cygpLCBmcmFtZS5za2lwcGVkUGFzc2VzKTsKKyAgICAgICAgICAgIGl0ID0gZnJhbWUucmVuZGVy
UGFzc2VzLnNpemUoKSAtIHBvc2l0aW9uRnJvbUVuZDsKKyAgICAgICAgICAgIEFTU0VSVChpdCA+
PSAwKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCA5NjdkZjgxYTRkMWU4YzEyYmQ4ZmI4MTA5MjI1YzIxMDBmZDhlZmY2Li40OWYy
ZmM2MmI5NzBkMDRjZWE0ODZkMzI2MTlmYTdkNjhlOWQ4ODlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC00Miw5ICs0MiwxMCBAQCBjbGFzcyBDQ0RlYnVnUmVjdEhp
c3Rvcnk7CiBjbGFzcyBDQ0ZvbnRBdGxhczsKIGNsYXNzIENDRnJhbWVSYXRlQ291bnRlcjsKIGNs
YXNzIENDSGVhZHNVcERpc3BsYXk7Ci1jbGFzcyBDQ1BhZ2VTY2FsZUFuaW1hdGlvbjsKIGNsYXNz
IENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFRpbWVTb3VyY2VBZGFwdGVy
OworY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CitjbGFzcyBDQ1JlbmRlclBhc3NEcmF3UXVh
ZDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7
CiBzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKQEAgLTE3Nyw4ICsxNzgsMzUgQEAg
cHVibGljOgogICAgIENDRnJhbWVSYXRlQ291bnRlciogZnBzQ291bnRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZnBzQ291bnRlci5nZXQoKTsgfQogICAgIENDRGVidWdSZWN0SGlzdG9yeSogZGVidWdS
ZWN0SGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdSZWN0SGlzdG9yeS5nZXQoKTsgfQog
Ci0gICAgLy8gUmVtb3ZlcyBhbGwgcmVuZGVyIHBhc3NlcyBmb3Igd2hpY2ggd2UgaGF2ZSBjYWNo
ZWQgdGV4dHVyZXMsIGFuZCB3aGljaCBkaWQgbm90IGNoYW5nZSB0aGVpciBjb250ZW50LgotICAg
IHN0YXRpYyB2b2lkIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NM
aXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMsIGNvbnN0IENDUmVu
ZGVyZXIqKTsKKyAgICBjbGFzcyBDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBD
Q1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmKSBjb25zdDsKKwor
ICAgICAgICAvLyBJdGVyYXRlcyBmcm9tIHRoZSByb290IGZpcnN0LCBpbiBvcmRlciB0byByZW1v
dmUgdGhlIHN1cmZhY2VzIGNsb3Nlc3QKKyAgICAgICAgLy8gdG8gdGhlIHJvb3Qgd2l0aCBjYWNo
ZWQgdGV4dHVyZXMsIGFuZCBhbGwgc3VyZmFjZXMgdGhhdCBkcmF3IGludG8KKyAgICAgICAgLy8g
dGhlbS4KKyAgICAgICAgc2l6ZV90IHJlbmRlclBhc3NMaXN0QmVnaW4oY29uc3QgQ0NSZW5kZXJQ
YXNzTGlzdCYgbGlzdCkgY29uc3QgeyByZXR1cm4gbGlzdC5zaXplKCkgLSAxOyB9CisgICAgICAg
IHNpemVfdCByZW5kZXJQYXNzTGlzdEVuZChjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgY29uc3Qg
eyByZXR1cm4gMCAtIDE7IH0KKyAgICAgICAgc2l6ZV90IHJlbmRlclBhc3NMaXN0TmV4dChzaXpl
X3QgaXQpIGNvbnN0IHsgcmV0dXJuIGl0IC0gMTsgfQorCisgICAgICAgIEN1bGxSZW5kZXJQYXNz
ZXNXaXRoQ2FjaGVkVGV4dHVyZXMoQ0NSZW5kZXJlciYgcmVuZGVyZXIpIDogbV9yZW5kZXJlcihy
ZW5kZXJlcikgeyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NSZW5kZXJlciYgbV9yZW5kZXJl
cjsKKyAgICB9OworCisgICAgY2xhc3MgQ3VsbFJlbmRlclBhc3Nlc1dpdGhOb1F1YWRzIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlUmVuZGVyUGFzcyhjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQmKSBjb25zdDsKKworICAg
ICAgICAvLyBJdGVyYXRlcyBpbiBkcmF3IG9yZGVyLCBzbyB0aGF0IHdoZW4gYSBzdXJmYWNlIGlz
IHJlbW92ZWQsIGFuZCBpdHMKKyAgICAgICAgLy8gdGFyZ2V0IGJlY29tZXMgZW1wdHksIHRoZW4g
aXRzIHRhcmdldCBjYW4gYmUgcmVtb3ZlZCBhbHNvLgorICAgICAgICBzaXplX3QgcmVuZGVyUGFz
c0xpc3RCZWdpbihjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgICAgICBzaXplX3QgcmVuZGVyUGFzc0xpc3RFbmQoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYg
bGlzdCkgY29uc3QgeyByZXR1cm4gbGlzdC5zaXplKCk7IH0KKyAgICAgICAgc2l6ZV90IHJlbmRl
clBhc3NMaXN0TmV4dChzaXplX3QgaXQpIGNvbnN0IHsgcmV0dXJuIGl0ICsgMTsgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJQYXNzQ3VsbGVyPgorICAgIHN0YXRpYyB2
b2lkIHJlbW92ZVJlbmRlclBhc3NlcyhSZW5kZXJQYXNzQ3VsbGVyLCBGcmFtZURhdGEmKTsKIAog
cHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NMYXllclRyZWVTZXR0
aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaAppbmRl
eCA0MTg1OWYzMDJlZWE5ZjkxOTNiMzI0NWY4YmUzZjk4MmY3NmU4MjE5Li5kZWQwZWZkYzM4ZWY5
MzFhZmIzMDE3ZTI3MDJmNWM3ZjJkMTA0ZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCkBAIC0zNSw2
ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NTY29wZWRUZXh0dXJl
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVDb3BpZXI7CiBjbGFzcyBU
ZXh0dXJlTWFuYWdlcjsKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJv
b3RTY2lzc29yUmVjdEluQ3VycmVudFBhc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
RHJhd2luZ0ZyYW1lKCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxh
eShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0
IEludFNpemUmIGh1ZFNpemUpID0gMDsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8g
ZmluaXNoCiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKQEAgLTg5LDcgKzkwLDYgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBp
eGVscywgY29uc3QgSW50UmVjdCYpID0gMDsKIAotICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIq
IGltcGxUZXh0dXJlTWFuYWdlcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVDb3Bp
ZXIqIHRleHR1cmVDb3BpZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlVXBsb2Fk
ZXIqIHRleHR1cmVVcGxvYWRlcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVBbGxv
Y2F0b3IqIGltcGxUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nv
cGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODBmODMxNTQxMWJlNTUxZWE2ZGNhNDAzNmVjYjli
ZWI3ZDY1NjdmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVy
ZS5oIgorCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIgLy8gRm9yIFRleHR1cmVBbGxvY2F0
b3IKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1Njb3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4
dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBtX2FsbG9jYXRvcihhbGxv
Y2F0b3IpCit7CisgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKK30KKworQ0NTY29wZWRUZXh0dXJl
Ojp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBmcmVlKCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRU
ZXh0dXJlOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7
CisgICAgQVNTRVJUKCFpZCgpKTsKKyAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKworICAg
IHNldERpbWVuc2lvbnMoc2l6ZSwgZm9ybWF0KTsKKyAgICBzZXRJZChtX2FsbG9jYXRvci0+Y3Jl
YXRlVGV4dHVyZShzaXplLCBmb3JtYXQpKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBt
X2FsbG9jYXRlVGhyZWFkSWRlbnRpZmllciA9IFdURjo6Y3VycmVudFRocmVhZCgpOworI2VuZGlm
CisKKyAgICByZXR1cm4gaWQoKTsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmZyZWUoKQor
eworICAgIGlmIChpZCgpKSB7CisgICAgICAgIEFTU0VSVChtX2FsbG9jYXRlVGhyZWFkSWRlbnRp
ZmllciA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWxl
dGVUZXh0dXJlKGlkKCksIHNpemUoKSwgZm9ybWF0KCkpOworICAgIH0KKyAgICBzZXRJZCgwKTsK
K30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmxlYWsoKQoreworICAgIHNldElkKDApOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmOWM5N2Q5NTRmN2Zl
M2M3Njk0ZmM2Y2ZhZjQ4NjM0MWFkMTQxODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaApAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Njb3BlZFRleHR1cmVfaAorI2RlZmluZSBD
Q1Njb3BlZFRleHR1cmVfaAorCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlLmgiCisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVBbGxvY2F0b3I7CisKK2NsYXNzIENDU2Nv
cGVkVGV4dHVyZSA6IHByb3RlY3RlZCBDQ1RleHR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDU2NvcGVkVGV4dHVyZSk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NT
Y29wZWRUZXh0dXJlPiBjcmVhdGUoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKSB7IHJldHVy
biBhZG9wdFB0cihuZXcgQ0NTY29wZWRUZXh0dXJlKGFsbG9jYXRvcikpOyB9CisgICAgdmlydHVh
bCB+Q0NTY29wZWRUZXh0dXJlKCk7CisKKyAgICB1c2luZyBDQ1RleHR1cmU6OmlkOworICAgIHVz
aW5nIENDVGV4dHVyZTo6c2l6ZTsKKyAgICB1c2luZyBDQ1RleHR1cmU6OmZvcm1hdDsKKyAgICB1
c2luZyBDQ1RleHR1cmU6OmJ5dGVzOworCisgICAgYm9vbCBhbGxvY2F0ZShjb25zdCBJbnRTaXpl
JiwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICB2b2lkIGZyZWUoKTsKKyAgICB2b2lkIGxlYWsoKTsK
KworcHJvdGVjdGVkOgorICAgIENDU2NvcGVkVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKik7CisK
K3ByaXZhdGU6CisgICAgVGV4dHVyZUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgVGhyZWFkSWRlbnRpZmllciBtX2FsbG9jYXRlVGhyZWFkSWRlbnRp
ZmllcjsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE0OGUyZDBmOTllZTA5NGQxMmU4N2JjOGY4YmY0NTJkYWY5YTdiMDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIENDVGV4dHVyZTo6c2V0RGltZW5zaW9ucyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51
bSBmb3JtYXQpCit7CisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX2Zvcm1hdCA9IGZvcm1hdDsK
K30KKworc2l6ZV90IENDVGV4dHVyZTo6Ynl0ZXMoKSBjb25zdAoreworICAgIGlmIChtX3NpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMHU7CisKKyAgICByZXR1cm4gbWVtb3J5U2l6ZUJ5
dGVzKG1fc2l6ZSwgbV9mb3JtYXQpOworfQorCitzaXplX3QgQ0NUZXh0dXJlOjptZW1vcnlTaXpl
Qnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIHVuc2ln
bmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29t
cG9uZW50OworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29t
cG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMHU7CisgICAgfQorICAgIHJldHVybiBjb21w
b25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAqIHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI5NjEwNDY5M2Rk
NDUyZjJiOTg1NzgyMDQ1ZWYwY2E3NmMxMmU4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5oCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGV4dHVyZV9oCisjZGVmaW5lIENDVGV4dHVyZV9o
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJjYy9DQ1RleHR1cmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ1RleHR1cmUgeworcHVibGljOgorICAgIENDVGV4dHVyZSgpIDogbV9pZCgwKSB7IH0KKwor
ICAgIHVuc2lnbmVkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IEludFNp
emUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBHQzNEZW51bSBmb3JtYXQo
KSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQorCisgICAgdm9pZCBzZXRJZCh1bnNpZ25lZCBp
ZCkgeyBtX2lkID0gaWQ7IH0KKyAgICB2b2lkIHNldERpbWVuc2lvbnMoY29uc3QgSW50U2l6ZSYs
IEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzaXplX3QgYnl0ZXMoKSBjb25zdDsKKworICAgIHN0
YXRpYyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3Jt
YXQpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1faWQ7CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgR0MzRGVudW0gbV9mb3JtYXQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggN2IzZTY4YzhiODJhZmVlMTFkMThhYTcyMGY2ODllNGYyZTY1
MTU0YS4uOWNkMmYzNzY2ZWQxZmQ1NDk1OWZlN2ViZjBhMGUxNTM5NjE1MjFlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4Niw3IEBACiAgICAgICAgICAgICAndGVz
dHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVy
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGls
ZWRMYXllckltcGxUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDYzNmUxMGYyMjY1Mjkz
N2M3YjY5ZjVmODBkNTljOWUwYTVhNDdhOTYuLmZiZWRlNmNlZDE4NWNjNWU4Y2Q1MWFlNTlkYmJh
MzRmMDM2ZmYzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0yMzY3LDggKzIzNjcsNiBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGxheWVyc0ZyZWVUZXh0dXJlcykKIAogICAgIC8v
IEtpbGwgdGhlIGxheWVyIHRyZWUuCiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKENDTGF5
ZXJJbXBsOjpjcmVhdGUoMTAwKSk7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gd2Ug
ZG9uJ3QgdXNlIE1hbmFnZWRUZXh0dXJlcyBpbiBpbXBsIGxheWVycy4KLSAgICBtX2hvc3RJbXBs
LT5sYXllclJlbmRlcmVyKCktPmltcGxUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9ob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5pbXBsVGV4dHVyZUFsbG9jYXRvcigp
KTsKICAgICAvLyBUaGVyZSBzaG91bGQgYmUgbm8gdGV4dHVyZXMgbGVmdCBpbiB1c2UgYWZ0ZXIu
CiAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dC0+bnVtVGV4dHVy
ZXMoKSk7CiB9CkBAIC0yODc3LDggKzI4NzUsNyBAQCBzdHJ1Y3QgUmVuZGVyUGFzc0NhY2hlRW50
cnkgewogICAgIH0KIH07CiAKLXN0cnVjdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhIHsKLSAg
ICBDQ1JlbmRlclBhc3NMaXN0IHJlbmRlclBhc3NMaXN0Oworc3RydWN0IFJlbmRlclBhc3NSZW1v
dmFsVGVzdERhdGEgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbDo6RnJhbWVEYXRhIHsKICAg
ICBzdGQ6Om1hcDxjaGFyLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4gcmVuZGVyUGFzc0NhY2hlOwog
ICAgIHN0ZDo6bWFwPGNvbnN0IENDUmVuZGVyUGFzcyosIGNoYXI+IHJlbmRlclBhc3NJZDsKICAg
ICBWZWN0b3I8T3duUHRyPENDUmVuZGVyU3VyZmFjZT4gPiByZW5kZXJTdXJmYWNlU3RvcmU7CkBA
IC0zMDE5LDcgKzMwMTYsNyBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERh
dGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENDVGVzdFJlbmRlclBhc3MqPihyZW5kZXJQYXNzLmdldCgpKS0+YXBw
ZW5kUXVhZChxdWFkLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgdGVzdERhdGEucmVuZGVyUGFzc0xpc3QuaW5zZXJ0KDAsIHJlbmRlclBhc3MucmVsZWFzZSgp
KTsKKyAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc2VzLmluc2VydCgwLCByZW5kZXJQYXNzLnJl
bGVhc2UoKSk7CiAgICAgICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAgICBjdXJyZW50
Q2hhcisrOwogICAgIH0KQEAgLTMwMjgsOCArMzAyNSw3IEBAIHN0YXRpYyB2b2lkIGNvbmZpZ3Vy
ZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVt
b3ZhCiB2b2lkIGR1bXBSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgUmVuZGVyUGFzc1JlbW92YWxU
ZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIqIGJ1ZmZlcikKIHsKICAgICBjaGFyKiBwb3MgPSBidWZm
ZXI7Ci0gICAgQ0NSZW5kZXJQYXNzTGlzdDo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBpdCA9IHRl
c3REYXRhLnJlbmRlclBhc3NMaXN0LnJiZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSB0ZXN0RGF0
YS5yZW5kZXJQYXNzTGlzdC5yZW5kKCkpIHsKKyAgICBmb3IgKENDUmVuZGVyUGFzc0xpc3Q6OmNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzZXMucmJlZ2luKCk7
IGl0ICE9IHRlc3REYXRhLnJlbmRlclBhc3Nlcy5yZW5kKCk7ICsraXQpIHsKICAgICAgICAgQ0NS
ZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IGl0LT5nZXQoKTsKICAgICAgICAgY2hhciBwYXNzSWQg
PSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChjdXJyZW50UGFzcyktPnNlY29uZDsKICAgICAg
ICAgKnBvcyA9IHBhc3NJZDsKQEAgLTMwNjEsNyArMzA1Nyw2IEBAIHZvaWQgZHVtcFJlbmRlclBh
c3NUZXN0RGF0YShjb25zdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgY2hh
ciogYnVmCiAgICAgICAgIH0KICAgICAgICAgKnBvcyA9ICdcbic7CiAgICAgICAgIHBvcysrOwot
ICAgICAgICBpdCsrOwogICAgIH0KICAgICAqcG9zID0gJ1wwJzsKIH0KQEAgLTMyMjQsOSArMzIx
OSw4IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdGVzdFJlbW92ZVJlbmRlclBh
c3NlcykKICAgICBpbnQgdGVzdENhc2VJbmRleCA9IDA7CiAgICAgd2hpbGUgKHJlbW92ZVJlbmRl
clBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLm5hbWUpIHsKICAgICAgICAgUmVuZGVyUGFzc1Jl
bW92YWxUZXN0RGF0YSB0ZXN0RGF0YTsKLSAgICAgICAgQ0NSZW5kZXJQYXNzTGlzdCBza2lwcGVk
UGFzc2VzOwogICAgICAgICBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEocmVtb3ZlUmVuZGVy
UGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRleF0uaW5pdFNjcmlwdCwgdGVzdERhdGEsIHJlbmRlcmVy
LmdldCgpKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENh
Y2hlZFRleHR1cmVzKHRlc3REYXRhLnJlbmRlclBhc3NMaXN0LCBza2lwcGVkUGFzc2VzLCByZW5k
ZXJlci5nZXQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVJlbmRlclBh
c3NlcyhDQ0xheWVyVHJlZUhvc3RJbXBsOjpDdWxsUmVuZGVyUGFzc2VzV2l0aENhY2hlZFRleHR1
cmVzKCpyZW5kZXJlciksIHRlc3REYXRhKTsKICAgICAgICAgdmVyaWZ5UmVuZGVyUGFzc1Rlc3RE
YXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLCB0ZXN0RGF0YSk7CiAg
ICAgICAgIHRlc3RDYXNlSW5kZXgrKzsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA0NDYwYzk5NmJjNTll
MjQ5YWNlMzdiOWIzYjc4MTQyYzZhYzVlMjljLi5iYjVhOGRjNTZjMzc5NzRiZTFiOWQ4MzE2ODA1
MzZmYzliODc0MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTExNzksNiArMTE3OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICwgbV9wYWludENvbnRlbnRzQ291bnQoMCkKICAgICAgICAgLCBtX2lkbGVQYWludENv
bnRlbnRzQ291bnQoMCkKICAgICB7CisgICAgICAgIHNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOwogICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICAgICAgc2V0
SXNEcmF3YWJsZSh0cnVlKTsKICAgICB9CkBAIC0yMjczLDQgKzIyNzQsNzUgQEAgcHVibGljOgog
CiBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdENvbXBv
c2l0ZUFuZFJlYWRiYWNrQ2xlYW51cCkKIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFN1cmZh
Y2VOb3RBbGxvY2F0ZWRGb3JMYXllcnNPdXRzaWRlTWVtb3J5TGltaXQgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFN1cmZhY2VO
b3RBbGxvY2F0ZWRGb3JMYXllcnNPdXRzaWRlTWVtb3J5TGltaXQoKQorICAgICAgICA6IG1fcm9v
dExheWVyKENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjpjcmVhdGUoJm1f
bW9ja0RlbGVnYXRlKSkKKyAgICAgICAgLCBtX3N1cmZhY2VMYXllcjEoQ29udGVudExheWVyQ2hy
b21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmNyZWF0ZSgmbV9tb2NrRGVsZWdhdGUpKQorICAgICAg
ICAsIG1fc3VyZmFjZUxheWVyMihDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zzo6Y3JlYXRlKCZtX21vY2tEZWxlZ2F0ZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3
cG9ydFNpemUoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgICAgIG1fcm9vdExheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX3N1cmZhY2VMYXllcjEtPnNldEJv
dW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIG1fc3VyZmFjZUxheWVyMS0+c2V0Rm9y
Y2VSZW5kZXJTdXJmYWNlKHRydWUpOworICAgICAgICBtX3N1cmZhY2VMYXllcjEtPnNldE9wYWNp
dHkoMC41KTsKKyAgICAgICAgbV9zdXJmYWNlTGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAs
IDEwMCkpOworICAgICAgICBtX3N1cmZhY2VMYXllcjItPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0
cnVlKTsKKyAgICAgICAgbV9zdXJmYWNlTGF5ZXIyLT5zZXRPcGFjaXR5KDAuNSk7CisKKyAgICAg
ICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fc3VyZmFjZUxheWVyMSk7CisgICAgICAgIG1fc3Vy
ZmFjZUxheWVyMS0+YWRkQ2hpbGQobV9zdXJmYWNlTGF5ZXIyKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRSb290TGF5ZXIobV9yb290TGF5ZXIpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkK
KyAgICB7CisgICAgICAgIENDUmVuZGVyZXIqIHJlbmRlcmVyID0gaG9zdEltcGwtPmxheWVyUmVu
ZGVyZXIoKTsKKyAgICAgICAgdW5zaWduZWQgc3VyZmFjZTFSZW5kZXJQYXNzSWQgPSBob3N0SW1w
bC0+cm9vdExheWVyKCktPmNoaWxkcmVuKClbMF0tPmlkKCk7CisgICAgICAgIHVuc2lnbmVkIHN1
cmZhY2UyUmVuZGVyUGFzc0lkID0gaG9zdEltcGwtPnJvb3RMYXllcigpLT5jaGlsZHJlbigpWzBd
LT5jaGlsZHJlbigpWzBdLT5pZCgpOworCisgICAgICAgIHN3aXRjaCAoaG9zdEltcGwtPnNvdXJj
ZUZyYW1lTnVtYmVyKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgRVhQRUNUX1RS
VUUocmVuZGVyZXItPmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoc3VyZmFjZTFS
ZW5kZXJQYXNzSWQpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbmRlcmVyLT5oYXZlQ2Fj
aGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHN1cmZhY2UyUmVuZGVyUGFzc0lkKSk7CisKKyAg
ICAgICAgICAgIC8vIFJlZHVjZSB0aGUgbWVtb3J5IGxpbWl0IHRvIG9ubHkgZml0IHRoZSByb290
IGxheWVyIGFuZCBvbmUgcmVuZGVyIHN1cmZhY2UuIFRoaXMKKyAgICAgICAgICAgIC8vIHByZXZl
bnRzIGFueSBjb250ZW50cyBkcmF3aW5nIGludG8gc3VyZmFjZXMgZnJvbSBiZWluZyBhbGxvY2F0
ZWQuCisgICAgICAgICAgICBob3N0SW1wbC0+c2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMo
MTAwICogMTAwICogNCAqIDIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShyZW5kZXJlci0+aGF2ZUNhY2hlZFJlc291cmNlc0Zv
clJlbmRlclBhc3NJZChzdXJmYWNlMVJlbmRlclBhc3NJZCkpOworICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHJlbmRlcmVyLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHN1cmZh
Y2UyUmVuZGVyUGFzc0lkKSk7CisKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
CisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9yb290TGF5ZXItPnBhaW50Q29udGVudHND
b3VudCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIG1fc3VyZmFjZUxheWVyMS0+cGFpbnRDb250
ZW50c0NvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgbV9zdXJmYWNlTGF5ZXIyLT5wYWlu
dENvbnRlbnRzQ291bnQoKSk7CisKKyAgICAgICAgLy8gQ2xlYXIgbGF5ZXIgcmVmZXJlbmNlcyBz
byBDQ0xheWVyVHJlZUhvc3QgZGllcy4KKyAgICAgICAgbV9yb290TGF5ZXIuY2xlYXIoKTsKKyAg
ICAgICAgbV9zdXJmYWNlTGF5ZXIxLmNsZWFyKCk7CisgICAgICAgIG1fc3VyZmFjZUxheWVyMi5j
bGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUg
bV9tb2NrRGVsZWdhdGU7CisgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0
ZVRyYWNraW5nPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW1X
aXRoVXBkYXRlVHJhY2tpbmc+IG1fc3VyZmFjZUxheWVyMTsKKyAgICBSZWZQdHI8Q29udGVudExh
eWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc+IG1fc3VyZmFjZUxheWVyMjsKK307CisKK1NJ
TkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U3VyZmFjZU5v
dEFsbG9jYXRlZEZvckxheWVyc091dHNpZGVNZW1vcnlMaW1pdCkKKwogfSAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY29wZWRUZXh0dXJl
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRkNDY0ZWE1MTQzOGVhODNmNzAyZTlmNTY2MzBmNWRiMWY3YjY2
ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2Nv
cGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2lu
Y2x1ZGUgIkNDVGlsZWRMYXllclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOworCituYW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIE5ld1Njb3Bl
ZFRleHR1cmUpCit7CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgm
YWxsb2NhdG9yKTsKKworICAgIC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhvbGQgYSB0
ZXh0dXJlIHlldC4KKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworCisgICAgLy8g
TmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaGF2ZSBhIHNpemUgeWV0LgorICAgIEVYUEVDVF9F
UShJbnRTaXplKCksIHRleHR1cmUtPnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJl
LT5ieXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVTY29wZWRU
ZXh0dXJlKQoreworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBPd25Q
dHI8Q0NTY29wZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUoJmFs
bG9jYXRvcik7CisgICAgdGV4dHVyZS0+YWxsb2NhdGUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAvLyBUaGUgdGV4dHVyZSBoYXMgYW4gYWxsb2NhdGVk
IGJ5dGUtc2l6ZSBub3cuCisgICAgc2l6ZV90IGV4cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICogNDsK
KyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRlcywgdGV4dHVyZS0+Ynl0ZXMoKSk7CisKKyAgICBF
WFBFQ1RfTFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgIEVYUEVDVF9FUShHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgdGV4dHVyZS0+Zm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMw
LCAzMCksIHRleHR1cmUtPnNpemUoKSk7Cit9CisKKy8vIEZha2UgVGV4dHVyZUFsbG9jYXRvciB0
aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIGluIHVzZS4KK2NsYXNzIFRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAg
ICBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoKQorICAgICAgICA6IG1fbmV4dFRleHR1cmVJZCgx
KQorICAgICAgICAsIG1fbnVtVGV4dHVyZXMoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgdW5z
aWduZWQgY3JlYXRlVGV4dHVyZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgR0MzRGVudW0pIE9W
RVJSSURFCisgICAgeworICAgICAgICB1bnNpZ25lZCBpZCA9IG1fbmV4dFRleHR1cmVJZDsKKyAg
ICAgICAgKyttX25leHRUZXh0dXJlSWQ7CisKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQoaWQsIHRy
dWUpOworICAgICAgICArK21fbnVtVGV4dHVyZXM7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCBpZCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3RleHR1cmVzLmdldChpZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV90ZXh0
dXJlcy5zZXQoaWQsIGZhbHNlKTsKKyAgICAgICAgLS1tX251bVRleHR1cmVzOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVBbGxUZXh0dXJlcygpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBtX3RleHR1cmVzLmNsZWFyKCk7CisgICAgICAgIG1fbnVtVGV4dHVyZXMgPSAwOworICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1UZXh0
dXJlczsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbmV4dFRleHR1cmVJZDsKKyAgICBI
YXNoTWFwPHVuc2lnbmVkLCBib29sPiBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1fbnVtVGV4
dHVyZXM7Cit9OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3BlZFRleHR1cmVJc0Rl
bGV0ZWQpCit7CisgICAgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAg
IHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4
dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2Nh
dG9yLm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMw
LCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0
ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVy
ZXMoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDB1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMo
KSk7CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBD
Q1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgmYWxsb2NhdG9yKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1
LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUtPmFsbG9jYXRlKElu
dFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgICAgICBFWFBFQ1Rf
TFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFsbG9jYXRvci5u
dW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOworICAgICAgICBFWFBFQ1Rf
RVEoMHUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NTY29w
ZWRUZXh0dXJlVGVzdCwgTGVha1Njb3BlZFRleHR1cmUpCit7CisgICAgVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAgIHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOworCisg
ICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgICAgICB0
ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisKKyAgICAgICAgdGV4dHVyZS0+bGVh
aygpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMXUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKworICAgICAgICB0ZXh0dXJlLT5m
cmVlKCk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS0+aWQoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KKworICAgIEVYUEVD
VF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151382</attachid>
            <date>2012-07-09 18:48:59 -0700</date>
            <delta_ts>2012-07-10 13:46:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90841-20120709214858.patch</filename>
            <type>text/plain</type>
            <size>34695</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjkwZGRkNDAyMDQ1ZGUx
ZjgwZGE0NTA1OTRkNjE0ZWY4N2YyZDQ5OC4uMGRjOGE3ODliMDhhZjk0NjYxNmJhYWQ4ZDdjZDVh
ZWI5ODIxMDMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU3IEBACiAyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUmVw
bGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUgd2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwg
dGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNo
cm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDg0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSB0aGUgVGV4dHVyZU1hbmFnZXIgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0sIHdoaWNo
IHdhcyB0aGUgbGFzdAorICAgICAgICBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgaW4gdGhlIGNvbXBv
c2l0b3IuIEluc3RlYWQgb2YgdXNpbmcgTWFuYWdlZFRleHR1cmUKKyAgICAgICAgb2JqZWN0cyBm
b3IgUmVuZGVyUGFzcyB0ZXh0dXJlcywgdXNlIGluc3RhbmNlcyBvZiBDQ1Njb3BlZFRleHR1cmUs
IHdoaWNoCisgICAgICAgIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGFsbG9jYXRlZCB0ZXh0
dXJlIGlkcy4gVGV4dHVyZU1hbmFnZXIgd2lsbCBiZQorICAgICAgICByZW1vdmVkIGVudGlyZWx5
IG9uY2UgYWxsIGNhbGxlcnMgb2YgbWVtb3J5VXNlQnl0ZXMoKSBoYXZlIGJlZW4gcmVtb3ZlZC4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxl
YXNlUmVuZGVyUGFzc1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJl
bmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFkc1VwRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVudFJlbmRlclBh
c3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQ
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVk
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRG
cmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENDSGVhZHNVcERpc3BsYXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQ0NSZW5kZXJlcik6CisKKzIwMTItMDctMDkgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgQ0NTY29wZWRU
ZXh0dXJlIGNsYXNzIGZvciBjcmVhdGluZy9mcmVlaW5nIHRleHR1cmVzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTQ4NQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg3N2ZkNTA1YTQwZmEzYzBjY2E2YmNlNjczM2ZiNzk0YjQyNGUxY2Eu
LmNmZDYxZjAyMjc0NzAyODM5OGZiNWQzZTdlODU5YzAyNGUyMjRiOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAKIDIwMTItMDctMDkgIERhbmEgSmFuc2VucyAg
PGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBSZXBsYWNlIHVzZSBv
ZiBNYW5hZ2VkVGV4dHVyZSB3aXRoIENDU2NvcGVkVGV4dHVyZSBmb3IgaW1wbCB0aHJlYWQgYW5k
IHJlbW92ZSBpbXBsVGV4dHVyZU1hbmFnZXIgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODQxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisKKzIwMTItMDctMDkgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgQ0NTY29wZWRU
ZXh0dXJlIGNsYXNzIGZvciBjcmVhdGluZy9mcmVlaW5nIHRleHR1cmVzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTQ4NQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3NTQyOWMxNjJjZGYxMjYzYTViODEwNzhjNjgw
MmNhZTAwODk2NWI2Li5iYTNjMjU1N2I2OTk1YzNiY2Y2YmNjMGRkYzJiMDA1OTcxNGJjZWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNp
bmNsdWRlICJHclRleHR1cmUuaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQu
aCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCisjaW5jbHVkZSAiY2Mv
Q0NTY29wZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiY2MvQ0NTZXR0aW5ncy5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3
UXVhZC5oIgpAQCAtMTU3LDcgKzE1Nyw3IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0
dXJlVXBsb2FkZXJTZXR0aW5nKQogICAgIDogQ0NSZW5kZXJlcihjbGllbnQpCiAgICAgLCBtX2N1
cnJlbnRSZW5kZXJQYXNzKDApCi0gICAgLCBtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSgwKQorICAg
ICwgbV9jdXJyZW50VGV4dHVyZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDAp
CiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBm
LCAxLjBmKSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQpAQCAtMjc0LDEwICsyNzQsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCkKIHsK
LSAgICBpZiAoIW1faW1wbFRleHR1cmVNYW5hZ2VyKQotICAgICAgICByZXR1cm47CiAgICAgbV9y
ZW5kZXJQYXNzVGV4dHVyZXMuY2xlYXIoKTsKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAgLTMxNCw2ICsz
MTEsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnMKICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiB9CiAKKy8v
IHN0YXRpYworSW50U2l6ZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJl
U2l6ZShjb25zdCBDQ1JlbmRlclBhc3MqIHBhc3MpCit7CisgICAgcmV0dXJuIHBhc3MtPmZyYW1l
YnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKTsKK30KKworLy8gc3RhdGljCitHQzNEZW51bSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVy
UGFzcyopCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworfQogCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJh
bWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIpCiB7CkBA
IC0zMjIsNyArMzMwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGEKICAgICAgICAgcGFzc2Vz
SW5GcmFtZS5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyW2ldLmdldCgpKTsKIAogICAgIFZlY3RvcjxpbnQ+IHBhc3Nlc1RvRGVsZXRl
OwotICAgIEhhc2hNYXA8aW50LCBPd25QdHI8TWFuYWdlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJh
dG9yIHBhc3NJdGVyYXRvcjsKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVy
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwogICAgIGZvciAocGFzc0l0ZXJhdG9y
ID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVy
UGFzc1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRvcikgewogICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJh
dG9yLT5maXJzdCk7CiAgICAgICAgIGlmICghcmVuZGVyUGFzc0luRnJhbWUpIHsKQEAgLTMzMCw0
MSArMzM4LDMxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNz
QWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJl
bmRlclBhc3NJbkZyYW1lLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7Ci0gICAgICAg
IEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAg
ICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7
Ci0gICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUs
IHJlcXVpcmVkRm9ybWF0KSkgewotICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBh
c3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAg
ICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXpl
KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIENDU2Nv
cGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAg
ICBBU1NFUlQodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUtPmlkKCkgJiYgKHRleHR1
cmUtPnNpemUoKSAhPSByZXF1aXJlZFNpemUgfHwgdGV4dHVyZS0+Zm9ybWF0KCkgIT0gcmVxdWly
ZWRGb3JtYXQpKQorICAgICAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOwogICAgIH0KIAogICAgIC8v
IERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRoYXQg
d2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nl
c1RvRGVsZXRlLnNpemUoKTsgKytpKQogICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5yZW1v
dmUocGFzc2VzVG9EZWxldGVbaV0pOwotICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVF
dmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKLSAgICAvLyBB
bGwgUmVuZGVyUGFzcyB0ZXh0dXJlcyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBjdXJyZW50
IGZyYW1lLiBFdmVyeSBSZW5kZXJQYXNzIHRleHR1cmUKLSAgICAvLyBpcyBrZXB0IHJlc2VydmVk
IHVudGlsIGl0IGlzIHJlbW92ZWQgYW5kIGRlbGV0ZWQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNz
ZXNJbkRyYXdPcmRlcltpXS0+aWQoKSk7Ci0gICAgICAgIGlmICghdGV4dHVyZSkgewotICAgICAg
ICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBvd25UZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6
OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJl
ID0gb3duVGV4dHVyZS5nZXQoKTsKLSAgICAgICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNl
dChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgb3duVGV4dHVyZS5yZWxlYXNlKCkp
OworICAgICAgICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyW2ldLT5pZCgpKSkgeworICAgICAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVBbGxv
Y2F0b3IuZ2V0KCkpOworICAgICAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuc2V0KHJlbmRl
clBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCB0ZXh0dXJlLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KLQotICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzZXNJ
bkRyYXdPcmRlcltpXS0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkuc2l6ZSgpOwotICAgICAgICBH
QzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAgICAg
ICBib29sIHJlc2VydmVkID0gdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIHJlcXVpcmVk
Rm9ybWF0KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNlcnZlZCwgcmVzZXJ2ZWQpOwogICAg
IH0KIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdAogewotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0
dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAm
JiB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKKyAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQpOworICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1
cmUtPmlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdG
cmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzKQpAQCAtNDYzLDggKzQ2MSw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFk
KiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlkZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVh
ZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIt
PmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCkBAIC01MjAsNyArNTE2LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKiBxdWEKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmRyYXdFbGVt
ZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBN
YW5hZ2VkVGV4dHVyZSogc291cmNlVGV4dHVyZSkKK3N0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBw
bHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBDQ1Njb3BlZFRleHR1cmUqIHNvdXJj
ZVRleHR1cmUpCiB7CiAgICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
U2tCaXRtYXAoKTsKQEAgLTUzMSwxMCArNTI3LDEwIEBAIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXAg
YXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QK
IAogICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+Zmx1c2goKTsKIAotICAgIHJldHVybiBD
Q1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0
dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4
dHVyZS0+aWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsK
IH0KIAotUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bh
c3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNr
Z3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAgIC8v
IFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBm
aWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMg
YmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBAIC01
NTksNyArNTU1LDcgQEAgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0MKICAgICAvLyB0cmFuc2x1Y2Vu
dCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVs
cyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVu
ZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50TWFuYWdlZFRleHR1cmUpOworICAgIEFTU0VSVCgh
bV9jdXJyZW50VGV4dHVyZSk7CiAKICAgICAvLyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sg
Zm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJlcGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCBy
ZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJlcyBhcmUgbm90IHJldXNlZCkuCiAgICAgSW50UmVj
dCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVj
dChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdC
b3goKSkpOwpAQCAtNTcxLDcgKzU2Nyw3IEBAIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKICAg
ICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1cnJlbnRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91
dHB1dFJlY3QoKSk7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91
bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5n
ZXQoKSk7CisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gZGV2aWNlQmFja2dyb3VuZFRleHR1
cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVyVGV4dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVy
ZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01ODIs
MTIgKzU3OCwxMiBAQCBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQwogICAgIEdyVGV4dHVyZSogdGV4
dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3Jv
dW5kLmdldFRleHR1cmUoKSk7CiAgICAgaW50IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1
cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKIAotICAgIE93blB0cjxNYW5hZ2Vk
VGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1faW1w
bFRleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5yZXNl
cnZlKHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisg
ICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRl
eHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIWJh
Y2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0
IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0g
ICAgYm9vbCB1c2luZ0JhY2tncm91bmRUZXh0dXJlID0gdXNlTWFuYWdlZFRleHR1cmUoYmFja2dy
b3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1YWRSZWN0KCkpOworICAgIGJvb2wgdXNpbmdCYWNr
Z3JvdW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCks
IHF1YWQtPnF1YWRSZWN0KCkpOwogCiAgICAgaWYgKHVzaW5nQmFja2dyb3VuZFRleHR1cmUpIHsK
ICAgICAgICAgLy8gQ29weSB0aGUgcmVhZGJhY2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBi
YWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBzdXJmYWNlLgpAQCAtNjEwLDggKzYwNiw4IEBAIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tn
cm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAg
TWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdl
dChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7Ci0gICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNv
bnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkpCisgICAgQ0NTY29wZWRUZXh0dXJlKiBjb250ZW50
c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkp
OworICAgIGlmICghY29udGVudHNUZXh0dXJlIHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlclRyYW5z
Zm9ybSA9IHF1YWQtPmxheWVyVHJhbnNmb3JtKCk7CkBAIC02MjMsMTIgKzYxOSwxMiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVy
UGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVu
dHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91
bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9u
J3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAg
ICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KICAgICBTa0JpdG1h
cCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBjb250
ZW50c1RleHR1cmUpOwotICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGNvbnRlbnRzVGV4dHVy
ZS0+dGV4dHVyZUlkKCk7CisgICAgaW50IGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0
dXJlLT5pZCgpOwogICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAg
IEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVy
Qml0bWFwLmdldFRleHR1cmUoKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVy
ZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwpAQCAtNjM3LDcgKzYzMyw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqIHF1YWQpCiAgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlz
IG9uZS4KICAgICBpZiAoYmFja2dyb3VuZFRleHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJhY2tn
cm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCkpOwotICAgICAg
ICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFja2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgp
LCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAg
ICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSwgcXVh
ZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOwogICAgIH0KIAog
ICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwpAQCAtMTA5NCw4ICsxMDkwLDEwIEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVhZChjb25zdCBDQ0lPU3VyZmFjZURy
YXdRdWFkKiBxdWFkKQogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
RXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVk
VGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiBodWRUZXh0dXJl
LCBjb25zdCBJbnRTaXplJiBodWRTaXplKQogeworICAgIEFTU0VSVChodWRUZXh0dXJlLT5pZCgp
KTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FM
UEhBKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKQEAgLTExMDQsOSArMTEwMiw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1ZFRl
eHR1cmUsIGNvbnN0CiAgICAgY29uc3QgSGVhZHNVcERpc3BsYXlQcm9ncmFtKiBwcm9ncmFtID0g
aGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIGlmICghaHVkVGV4dHVyZS0+
dGV4dHVyZUlkKCkpCi0gICAgICAgIGh1ZFRleHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGh1ZFRleHR1cmUtPnRleHR1cmVJZCgp
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgaHVkVGV4dHVyZS0+aWQoKSkpOwogICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAKQEAgLTEzNTAsMTQgKzEzNDYsMTQgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIGRldmljZVJlY3QpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVi
dWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGV2
aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1cmUtPnJlc2VydmUoZGV2aWNlUmVjdC5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQorICAgIEFTU0VSVCghdGV4dHVyZS0+aWQoKSB8fCAo
dGV4dHVyZS0+c2l6ZSgpID09IGRldmljZVJlY3Quc2l6ZSgpICYmIHRleHR1cmUtPmZvcm1hdCgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKTsKKworICAgIGlmICghdGV4dHVyZS0+aWQoKSAm
JiAhdGV4dHVyZS0+YWxsb2NhdGUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXRleHR1cmUtPnRleHR1
cmVJZCgpKQotICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9y
LmdldCgpKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmUtPmlkKCkpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJl
LT5mb3JtYXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0LnkoKSwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZp
Y2VSZWN0LmhlaWdodCgpLCAwKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzY1LDEzICsxMzYx
LDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUo
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykK
IHsKLSAgICByZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1
cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICByZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSBy
ZW5kZXJQYXNzICYmICFtX2N1cnJlbnRUZXh0dXJlOwogfQogCiBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7
CiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IHJlbmRlclBhc3M7Ci0gICAgbV9jdXJyZW50TWFu
YWdlZFRleHR1cmUgPSAwOworICAgIG1fY3VycmVudFRleHR1cmUgPSAwOwogCiAgICAgaWYgKHJl
bmRlclBhc3MgPT0gbV9kZWZhdWx0UmVuZGVyUGFzcykgewogICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApKTsKQEAgLTEzNzksMjcgKzEzNzUsMjkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1f
cmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBDQ1Njb3BlZFRl
eHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQo
KSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwogCisgICAgaWYgKCF0ZXh0dXJlLT5pZCgpKQorICAg
ICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShyZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyks
IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpKTsKKwogICAgIHJldHVybiBiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRw
dXRSZWN0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlTWFuYWdlZFRl
eHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVj
dCkKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRUZXh0dXJlKGNvbnN0IEND
U2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewog
ICAgIG1fY3VycmVudFJlbmRlclBhc3MgPSAwOwotICAgIG1fY3VycmVudE1hbmFnZWRUZXh0dXJl
ID0gdGV4dHVyZTsKKyAgICBtX2N1cnJlbnRUZXh0dXJlID0gdGV4dHVyZTsKIAogICAgIHJldHVy
biBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgdmlld3BvcnRSZWN0KTsKIH0KIAot
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KQorYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBD
Q1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkK
IHsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOworICAg
IEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAotICAgIGlmICghdGV4dHVyZS0+dGV4dHVyZUlkKCkp
Ci0gICAgICAgIHRleHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkp
OwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLT50ZXh0dXJl
SWQoKSwgMCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklk
KSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUtPmlkKCks
IDApKTsKIAogI2lmICFkZWZpbmVkICggTkRFQlVHICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CkBAIC0xNDcxLDE0ICsxNDY5
LDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpCiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9p
bXBsVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCks
IG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBtX3RleHR1cmVDb3BpZXIgPSBB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRV
bmlmb3JtKTsKICAgICBpZiAobV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nID09IFRocm90dGxlZFVw
bG9hZGVyKQogICAgICAgICBtX3RleHR1cmVVcGxvYWRlciA9IFRocm90dGxlZFRleHR1cmVVcGxv
YWRlcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgZWxzZQogICAgICAgICBtX3RleHR1cmVVcGxv
YWRlciA9IFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1f
Y29udGV4dCk7Ci0gICAgbV9pbXBsVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dCk7CisgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0
b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQsIG1fY2FwYWJp
bGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yID0gVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LCBtX2NhcGFiaWxpdGllcy5t
YXhUZXh0dXJlU2l6ZSk7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVVzYWdl
SGludCkKICAgICAgICAgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci0+c2V0VGV4dHVyZVVzYWdlSGlu
dChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OkZyYW1lYnVmZmVyQXR0YWNobWVudCk7CiAgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24pIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZjQ2NGVhZTFiNTgwNDY3ZTRhZTkyMjU1
Nzg5ZDczMjZhYjc4ZTE5ZC4uNmFmZTY2ODA2Y2U5ODFmNGIzZTAwOGU3OTg2NjZhNTJhMDlkZDlh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTUxLDEzICs1MSwxMyBA
QCBjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ7CiBjbGFzcyBDQ0RyYXdRdWFkOwogY2xhc3Mg
Q0NJT1N1cmZhY2VEcmF3UXVhZDsKIGNsYXNzIENDUmVuZGVyUGFzc0RyYXdRdWFkOworY2xhc3Mg
Q0NTY29wZWRUZXh0dXJlOwogY2xhc3MgQ0NTb2xpZENvbG9yRHJhd1F1YWQ7CiBjbGFzcyBDQ1N0
cmVhbVZpZGVvRHJhd1F1YWQ7CiBjbGFzcyBDQ1RleHR1cmVEcmF3UXVhZDsKIGNsYXNzIENDVGls
ZURyYXdRdWFkOwogY2xhc3MgQ0NZVVZWaWRlb0RyYXdRdWFkOwogY2xhc3MgR2VvbWV0cnlCaW5k
aW5nOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZl
ckFsbG9jYXRpb247CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0
ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBG
bG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NT
Y29wZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CiAKICAgICAv
LyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2go
KSBPVkVSUklERTsKQEAgLTEwMCw5ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2VvbWV0
cnlCaW5kaW5nKiBzaGFyZWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0
cnkuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lk
ICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICBib29sIGdldEZyYW1lYnVm
ZmVyVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOwor
ICAgIGJvb2wgZ2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIGRldmljZVJlY3QpOwogCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogaW1wbFRl
eHR1cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbXBsVGV4dHVyZU1hbmFn
ZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVDb3BpZXIqIHRleHR1cmVDb3BpZXIoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX3RleHR1cmVDb3BpZXIuZ2V0KCk7IH0KICAgICB2aXJ0
dWFsIFRleHR1cmVVcGxvYWRlciogdGV4dHVyZVVwbG9hZGVyKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV90ZXh0dXJlVXBsb2FkZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVBbGxv
Y2F0b3IqIGltcGxUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
bXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKTsgfQpAQCAtMTMzLDcgKzEzMiw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hl
Y2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRldmljZVRyYW5zZm9ybSk7CisgICAgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRyYXdC
YWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7CiAgICAgdm9pZCBk
cmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKICAgICB2b2lk
IGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKQEAg
LTE0NCwxMiArMTQzLDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZl
clJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgLy8gVGhlIGN1cnJlbnQg
ZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVyUGFzcyBvciBNYW5hZ2VkVGV4dHVyZS4g
VXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBuZXcgZHJhd2luZyB0YXJnZXQuCisg
ICAgLy8gVGhlIGN1cnJlbnQgZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVyUGFzcyBv
ciBTY29wZWRUZXh0dXJlLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBhIG5ldyBk
cmF3aW5nIHRhcmdldC4KICAgICBib29sIHVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
Kik7Ci0gICAgYm9vbCB1c2VNYW5hZ2VkVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCB1c2VTY29wZWRUZXh0dXJlKGNvbnN0IEND
U2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CiAgICAgYm9vbCBp
c0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyopOwogCi0gICAgYm9vbCBiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3
cG9ydFJlY3QpOworICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGNvbnN0IENDU2Nv
cGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CiAKICAgICB2b2lkIGNs
ZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1l
YnVmZmVyRGFtYWdlUmVjdCk7CiAKQEAgLTE3MCwxMCArMTY5LDEzIEBAIHByaXZhdGU6CiAgICAg
Ly8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFjayBp
bXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIE9WRVJSSURF
OwogCisgICAgc3RhdGljIEludFNpemUgcmVuZGVyUGFzc1RleHR1cmVTaXplKGNvbnN0IENDUmVu
ZGVyUGFzcyopOworICAgIHN0YXRpYyBHQzNEZW51bSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChj
b25zdCBDQ1JlbmRlclBhc3MqKTsKKwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9j
YXBhYmlsaXRpZXM7CiAKICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIG1fY3VycmVudFJlbmRlclBh
c3M7Ci0gICAgTWFuYWdlZFRleHR1cmUqIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlOworICAgIGNv
bnN0IENDU2NvcGVkVGV4dHVyZSogbV9jdXJyZW50VGV4dHVyZTsKICAgICB1bnNpZ25lZCBtX29m
ZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKICAgICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3No
YXJlZEdlb21ldHJ5OwpAQCAtMjU5LDEzICsyNjEsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
U29saWRDb2xvclByb2dyYW0+IG1fc29saWRDb2xvclByb2dyYW07CiAgICAgT3duUHRyPEhlYWRz
VXBEaXNwbGF5UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07CiAKLSAgICBPd25QdHI8
VGV4dHVyZU1hbmFnZXI+IG1faW1wbFRleHR1cmVNYW5hZ2VyOwogICAgIE93blB0cjxBY2NlbGVy
YXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VGV4dHVyZVVw
bG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25QdHI8VHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yPiBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yOwogCi0gICAgSGFzaE1hcDxp
bnQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsKKyAgICBI
YXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJl
czsKIAogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKaW5kZXggOGU1ODZlMjVhMDVh
Zjc4YWQxM2I3ZGFmNzIzYmEzY2JhMDMzY2E4Ny4uYzU4OWEzYzZlZDNkMDBhZmYxZmJhMGQ3ZDQz
NTk0ZjNhYWM5MWU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3Iu
Y3BwCkBAIC0zMyw4ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9t
YXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fY3VycmVudE1lbW9yeVVzZUJ5
dGVzKDApCiAgICAgLCBtX3RleHR1cmVVc2FnZUhpbnQoQW55KQogICAgICwgbV91c2VUZXh0dXJl
U3RvcmFnZUV4dChmYWxzZSkKQEAgLTcxLDYgKzcyLDkgQEAgc3RhdGljIGJvb2wgaXNUZXh0dXJl
Rm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3JtYXQpCiAKIHVuc2lnbmVkIFRy
YWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEZW51bSBmb3JtYXQpCiB7CisgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4dHVy
ZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgbV9jdXJyZW50TWVtb3J5VXNlQnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1l
bW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7CiAKICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaAppbmRleCBjMTBjMjU3MjE0
ZTYyZWZlMzQwMmVmY2I2MTIxOGY2MjgwMTRkMjUzLi43OGVmNDBkMWI0M2U3YjM0MjQ1NGE1MmEx
NDAwMjRjNTkxODE5ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3Iu
aApAQCAtMzgsOSArMzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IGNyZWF0ZShXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvcj4gY3JlYXRlKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoY29udGV4dCwgbWF4VGV4
dHVyZVNpemUpKTsKICAgICB9CiAgICAgdmlydHVhbCB+VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
KCk7CiAKQEAgLTU2LDkgKzU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVRleHR1cmVT
dG9yYWdlRXh0KGJvb2wgdXNlU3RvcmFnZUV4dCkgeyBtX3VzZVRleHR1cmVTdG9yYWdlRXh0ID0g
dXNlU3RvcmFnZUV4dDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICBUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIGludCBtYXhU
ZXh0dXJlU2l6ZSk7CiAKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CisgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lbW9y
eVVzZUJ5dGVzOwogICAgIFRleHR1cmVVc2FnZUhpbnQgbV90ZXh0dXJlVXNhZ2VIaW50OwogICAg
IGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxh
eS5jcHAKaW5kZXggMjRkNDBiZmI0ZTVhM2I2NGExOGNkZDNjZGRiZGJkMDYzY2RiMmIwNS4uNzMx
Zjc3MGMwOTY2MzE4NThhMGFjM2M0YmM4ZjNkNzEzZjY3MTI2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5
OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmICghbV9odWRUZXh0dXJlKQotICAgICAgICBtX2h1ZFRleHR1
cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFu
YWdlcigpKTsKKyAgICAgICAgbV9odWRUZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUo
bGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVBbGxvY2F0b3IoKSk7CiAKICAgICBjb25zdCBDQ0xh
eWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncyA9IGxheWVyVHJlZUhvc3RJbXBsLT5zZXR0aW5ncygp
OwogICAgIC8vIFVzZSBhIGZ1bGxzY3JlZW4gdGV4dHVyZSBvbmx5IGlmIHdlIG5lZWQgdG8uLi4K
QEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVl
SG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICBodWRTaXplLnNldEhlaWdodCgx
MjgpOwogICAgIH0KIAotICAgIGlmICghbV9odWRUZXh0dXJlLT5yZXNlcnZlKGh1ZFNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1faHVkVGV4dHVyZS0+aWQoKSAmJiAh
bV9odWRUZXh0dXJlLT5hbGxvY2F0ZShodWRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJlbmRlciBwaXhlbHMgaW50byB0aGUgdGV4dHVy
ZS4KQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXll
clRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgewogICAgICAgICBQbGF0Zm9y
bUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJmNhbnZhcyk7CiAKLSAgICAgICAgbV9odWRUZXh0
dXJlLT5iaW5kVGV4dHVyZShsYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpLCBsYXllclJlbmRl
cmVyLT5pbXBsVGV4dHVyZUFsbG9jYXRvcigpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2h1ZFRleHR1
cmUtPmlkKCkpKTsKICAgICAgICAgYm9vbCB1cGxvYWRlZFZpYU1hcCA9IGZhbHNlOwogICAgICAg
ICBpZiAobGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpIHsKICAgICAg
ICAgICAgIHVpbnQ4X3QqIHBpeGVsRGVzdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsIGh1ZFNpemUud2lkdGgoKSwgaHVkU2l6ZS5oZWlnaHQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOwpAQCAtMTIyLDggKzEyMiw2IEBAIHZvaWQgQ0NIZWFk
c1VwRGlzcGxheTo6ZHJhdyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkK
ICAgICB9CiAKICAgICBsYXllclJlbmRlcmVyLT5kcmF3SGVhZHNVcERpc3BsYXkobV9odWRUZXh0
dXJlLmdldCgpLCBodWRTaXplKTsKLQotICAgIG1faHVkVGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9
CiAKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwsIGNvbnN0
IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGM1MDVhMjA4NjJmMjA5MGM0YmUwNTVl
ZDQxMzE5ODQyNGY4MmQzNzMuLjI2NmJmNTFlMWY0ZWRjNmM2MGMyMTYzMjMwOGNlMjY4ZjFkM2Fh
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTI3LDggKzI3LDggQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIk1hbmFnZWRUZXh0
dXJlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGb250QXRsYXMuaCIKKyNpbmNsdWRlICJjYy9DQ1Njb3Bl
ZFRleHR1cmUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw2ICszNiw3IEBAIGNs
YXNzIENDRGVidWdSZWN0SGlzdG9yeTsKIGNsYXNzIENDRnJhbWVSYXRlQ291bnRlcjsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBUZXh1
cmVBbGxvY2F0b3I7CiAKIHN0cnVjdCBDQ0xheWVyVHJlZVNldHRpbmdzOwogCkBAIC02Niw3ICs2
Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWUoY29uc3QgQ0NM
YXllclRyZWVTZXR0aW5ncyYpIGNvbnN0OwogICAgIGJvb2wgc2hvd0RlYnVnUmVjdHMoY29uc3Qg
Q0NMYXllclRyZWVTZXR0aW5ncyYpIGNvbnN0OwogCi0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBtX2h1ZFRleHR1cmU7CisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gbV9odWRUZXh0dXJl
OwogICAgIE93blB0cjxDQ0ZvbnRBdGxhcz4gbV9mb250QXRsYXM7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
cmVyLmgKaW5kZXggNDE4NTlmMzAyZWVhOWY5MTkzYjMyNDVmOGJlM2Y5ODJmNzZlODIxOS4uZGVk
MGVmZGMzOGVmOTMxYWZiMzAxN2UyNzAyZjVjN2YyZDEwNGY5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIu
aApAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDU2Nv
cGVkVGV4dHVyZTsKIGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBUZXh0dXJlQ29waWVy
OwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxv
YXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRQYXNzKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVh
ZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShjb25zdCBDQ1Njb3BlZFRleHR1
cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKSA9IDA7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVu
ZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CkBAIC04OSw3
ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVs
cyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFRleHR1
cmVNYW5hZ2VyKiBpbXBsVGV4dHVyZU1hbmFnZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBU
ZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVyKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVGV4
dHVyZVVwbG9hZGVyKiB0ZXh0dXJlVXBsb2FkZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBU
ZXh0dXJlQWxsb2NhdG9yKiBpbXBsVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0ID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKaW5kZXggYjExYjAwNmY3NGY2NzM1ZWYyMzJiYzc0N2M3NTE2MjFhODVkNjBjYS4u
ZmJlZGU2Y2VkMTg1Y2M1ZThjZDUxYWU1OWRiYmEzNGYwMzZmZjM5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKQEAgLTIzNjcsOCArMjM2Nyw2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
bGF5ZXJzRnJlZVRleHR1cmVzKQogCiAgICAgLy8gS2lsbCB0aGUgbGF5ZXIgdHJlZS4KICAgICBt
X2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoQ0NMYXllckltcGw6OmNyZWF0ZSgxMDApKTsKLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSBkb24ndCB1c2UgTWFuYWdlZFRleHR1cmVzIGlu
IGltcGwgbGF5ZXJzLgotICAgIG1faG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aW1wbFRleHR1
cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2hvc3RJbXBsLT5sYXllclJlbmRl
cmVyKCktPmltcGxUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIC8vIFRoZXJlIHNob3VsZCBiZSBu
byB0ZXh0dXJlcyBsZWZ0IGluIHVzZSBhZnRlci4KICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5n
V2ViR3JhcGhpY3NDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151512</attachid>
            <date>2012-07-10 13:46:09 -0700</date>
            <delta_ts>2012-07-10 14:05:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90841-20120710164608.patch</filename>
            <type>text/plain</type>
            <size>34782</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc0ODIxY2Q3NjZmNmVm
ZDQzYTJhZThhNDhkNzM3YjU0YmMzMDEyMy4uMjhmZTlkOWVkZGUzMGJmNThlODVkYWYxMDlhMThh
ZTJiNGU0YjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVw
bGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUgd2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwg
dGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNo
cm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDg0MQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBS
ZW1vdmUgdGhlIFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtLCB3aGlj
aCB3YXMgdGhlIGxhc3QKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGluIHRoZSBjb21w
b3NpdG9yLiBJbnN0ZWFkIG9mIHVzaW5nIE1hbmFnZWRUZXh0dXJlCisgICAgICAgIG9iamVjdHMg
Zm9yIFJlbmRlclBhc3MgdGV4dHVyZXMsIHVzZSBpbnN0YW5jZXMgb2YgQ0NTY29wZWRUZXh0dXJl
LCB3aGljaAorICAgICAgICBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHRoZSBhbGxvY2F0ZWQgdGV4
dHVyZSBpZHMuIFRleHR1cmVNYW5hZ2VyIHdpbGwgYmUKKyAgICAgICAgcmVtb3ZlZCBlbnRpcmVs
eSBvbmNlIGFsbCBjYWxsZXJzIG9mIG1lbW9yeVVzZUJ5dGVzKCkgaGF2ZSBiZWVuIHJlbW92ZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVS
ZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQ
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVy
UGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3Bl
ZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2Nh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3I6OmNyZWF0ZSk6CisgICAgICAgIChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENDUmVuZGVyZXIpOgorCiAyMDEyLTA3LTEwICBYaWFuemh1IFdhbmcgIDx3
YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFVz
ZSBkZWZhdWx0IGZvbnQgcmVuZGVyaW5nIHN0eWxlcyBpbiBGb250UGxhdGZvcm1EYXRhOjpxdWVy
eVN5c3RlbUZvclJlbmRlclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjk4
ZTBkOGJhOTY4MzMzZTkxOGM5YjQ3ZDEyYjAyYjNjMzg3ZjI2NC4uMDg4MjA0ZGY5ZDdhMDcwYjI0
NjZiZTlkYTA3MzNjODczMWY3MmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMi0wNy0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIFJlcGxhY2UgdXNlIG9mIE1hbmFnZWRUZXh0dXJlIHdp
dGggQ0NTY29wZWRUZXh0dXJlIGZvciBpbXBsIHRocmVhZCBhbmQgcmVtb3ZlIGltcGxUZXh0dXJl
TWFuYWdlciBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4NDEKKworICAgICAgICBSZXZpZXdlZCBieSBB
ZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHA6CisKIDIwMTItMDctMTAgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gVXNlIGRlZmF1bHQgZm9udCByZW5k
ZXJpbmcgc3R5bGVzIGluIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5
bGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMmI1OTIzMWM4
YWRiYzNhYzhiMDk4ZWRkZWE1ZDdjNTBmMjcwNjY3MC4uYmEzYzI1NTdiNjk5NWMzYmNmNmJjYzBk
ZGMyYjAwNTk3MTRiY2VkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR2Vv
bWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JUZXh0dXJlLmgiCi0jaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtNTcs
NiArNTYsNyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRmlsdGVy
cy5oIgorI2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgogI2luY2x1ZGUgImNjL0NDU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKQEAgLTE1Nyw3ICsxNTcsNyBAQCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGll
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJl
VXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKICAgICA6IENDUmVuZGVyZXIo
Y2xpZW50KQogICAgICwgbV9jdXJyZW50UmVuZGVyUGFzcygwKQotICAgICwgbV9jdXJyZW50TWFu
YWdlZFRleHR1cmUoMCkKKyAgICAsIG1fY3VycmVudFRleHR1cmUoMCkKICAgICAsIG1fb2Zmc2Ny
ZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0
KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAg
LTI3NCwxMCArMjc0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRl
clBhc3NUZXh0dXJlcygpCiB7Ci0gICAgaWYgKCFtX2ltcGxUZXh0dXJlTWFuYWdlcikKLSAgICAg
ICAgcmV0dXJuOwogICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLmNsZWFyKCk7Ci0gICAgbV9pbXBs
VGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2Nh
dG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hh
bmdlZCgpCkBAIC0zMTQsNiArMzExLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
bGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zCiAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogfQogCisvLyBzdGF0aWMKK0ludFNpemUgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpyZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKiBwYXNzKQoreworICAg
IHJldHVybiBwYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7Cit9CisKKy8vIHN0
YXRpYworR0MzRGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKK30KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKQogewpAQCAtMzIyLDcgKzMzMCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRl
clBhCiAgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ld
LT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQoKSk7CiAKICAgICBWZWN0b3I8
aW50PiBwYXNzZXNUb0RlbGV0ZTsKLSAgICBIYXNoTWFwPGludCwgT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CisgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAg
ICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJ
dGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsK
ICAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHBhc3Nlc0lu
RnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJ
bkZyYW1lKSB7CkBAIC0zMzAsNDMgKzMzOCwzMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzSW5GcmFtZS0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0
KCkuc2l6ZSgpOwotICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOwotICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVy
YXRvci0+c2Vjb25kLmdldCgpOwotICAgICAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlz
VmFsaWQocmVxdWlyZWRTaXplLCByZXF1aXJlZEZvcm1hdCkpIHsKLSAgICAgICAgICAgIHBhc3Nl
c1RvRGVsZXRlLmFwcGVuZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisgICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJl
bmRlclBhc3NUZXh0dXJlU2l6ZShyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIEdDM0RlbnVt
IHJlcXVpcmVkRm9ybWF0ID0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzc0luRnJh
bWUpOworICAgICAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgQVNTRVJUKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0
dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRleHR1cmUt
PmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKKyAgICAgICAgICAgIHRleHR1cmUtPmZyZWUo
KTsKICAgICB9CiAKICAgICAvLyBEZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBw
cmV2aW91cyBmcmFtZSB0aGF0IHdpbGwgbm90IGJlIHVzZWQgYWdhaW4uCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXNzZXNUb0RlbGV0ZS5zaXplKCk7ICsraSkKICAgICAgICAgbV9yZW5k
ZXJQYXNzVGV4dHVyZXMucmVtb3ZlKHBhc3Nlc1RvRGVsZXRlW2ldKTsKLSAgICBtX2ltcGxUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3Iu
Z2V0KCkpOwogCi0gICAgLy8gQWxsIFJlbmRlclBhc3MgdGV4dHVyZXMgc2hvdWxkIGJlIHJlc2Vy
dmVkIGZvciB0aGUgY3VycmVudCBmcmFtZS4gRXZlcnkgUmVuZGVyUGFzcyB0ZXh0dXJlCi0gICAg
Ly8gaXMga2VwdCByZXNlcnZlZCB1bnRpbCBpdCBpcyByZW1vdmVkIGFuZCBkZWxldGVkLgogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0
dXJlcy5nZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkpOwotICAgICAgICBpZiAo
IXRleHR1cmUpIHsKLSAgICAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gb3duVGV4dHVy
ZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgdGV4dHVyZSA9IG93blRleHR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBtX3Jl
bmRlclBhc3NUZXh0dXJlcy5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIG93
blRleHR1cmUucmVsZWFzZSgpKTsKKyAgICAgICAgaWYgKCFtX3JlbmRlclBhc3NUZXh0dXJlcy5j
b250YWlucyhyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSkpIHsKKyAgICAgICAgICAg
IE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVuZGVyUGFz
c1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgdGV4dHVyZS5y
ZWxlYXNlKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRT
aXplID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgp
LnNpemUoKTsKLSAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKLSAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDg0OAotICAgICAgICAvLyBib29sIHJlc2VydmVkID0gdGV4dHVyZS0+cmVz
ZXJ2ZShyZXF1aXJlZFNpemUsIHJlcXVpcmVkRm9ybWF0KTsKLSAgICAgICAgLy8gQVNTRVJUX1VO
VVNFRChyZXNlcnZlZCwgcmVzZXJ2ZWQpOwotICAgICAgICB0ZXh0dXJlLT5yZXNlcnZlKHJlcXVp
cmVkU2l6ZSwgcmVxdWlyZWRGb3JtYXQpOwogICAgIH0KIH0KIAogYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25z
dAogewotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMu
Z2V0KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKKyAg
ICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQp
OworICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1cmUtPmlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJv
b3RSZW5kZXJQYXNzKQpAQCAtNDY1LDggKzQ2MSw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlk
ZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVhZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2lt
cGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1
YWQpCkBAIC01MjIsNyArNTE2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdE
ZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBxdWEKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElO
RV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0
ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBNYW5hZ2VkVGV4dHVyZSogc291cmNlVGV4dHVy
ZSkKK3N0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzLCBDQ1Njb3BlZFRleHR1cmUqIHNvdXJjZVRleHR1cmUpCiB7CiAgICAgaWYgKGZpbHRl
cnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKQEAgLTUzMywxMCArNTI3
LDEwIEBAIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QKIAogICAgIGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKS0+Zmx1c2goKTsKIAotICAgIHJldHVybiBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBs
eShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6
ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmls
dGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4dHVyZS0+aWQoKSwgc291cmNlVGV4dHVyZS0+
c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKIH0KIAotUGFzc093blB0cjxNYW5hZ2VkVGV4
dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRl
bnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dy
b3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQg
dGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMgYmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxn
b3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBAIC01NjEsNyArNTU1LDcgQEAgUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgQ0MKICAgICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMg
YmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIg
YXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50
TWFuYWdlZFRleHR1cmUpOworICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dHVyZSk7CiAKICAgICAv
LyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJl
cGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJl
cyBhcmUgbm90IHJldXNlZCkuCiAgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9ybSwg
c2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOwpAQCAtNTczLDcgKzU2Nyw3IEBA
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKICAgICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1
cnJlbnRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSk7CiAKLSAgICBPd25QdHI8
TWFuYWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6
OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gZGV2aWNlQmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVy
VGV4dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC01ODQsMTIgKzU3OCwxMiBAQCBQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhjb25zdCBDQwogICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JU
ZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSk7CiAgICAgaW50
IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVI
YW5kbGUoKTsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUg
PSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAg
ICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5yZXNlcnZlKHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
YmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJl
QWxsb2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShx
dWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVuZGVy
UGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgYm9vbCB1c2luZ0JhY2tncm91bmRUZXh0
dXJlID0gdXNlTWFuYWdlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1
YWRSZWN0KCkpOworICAgIGJvb2wgdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRl
eHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1YWRSZWN0KCkpOwogCiAgICAg
aWYgKHVzaW5nQmFja2dyb3VuZFRleHR1cmUpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcmVhZGJh
Y2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBz
dXJmYWNlLgpAQCAtNjEyLDggKzYwNiw4IEBAIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4
dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7Ci0g
ICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkp
CisgICAgQ0NTY29wZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0
dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIGlmICghY29udGVudHNUZXh0dXJl
IHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlclRyYW5zZm9ybSA9IHF1YWQtPmxheWVyVHJhbnNmb3Jt
KCk7CkBAIC02MjUsMTIgKzYxOSwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlm
ICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3
QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRG
aWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBD
YWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0
aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUg
Y29udGVudHMgdGV4dHVyZS4KICAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRl
cnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUpOwotICAgIGludCBjb250
ZW50c1RleHR1cmVJZCA9IGNvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCk7CisgICAgaW50IGNv
bnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0dXJlLT5pZCgpOwogICAgIGlmIChmaWx0ZXJC
aXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSk7CiAgICAg
ICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwpAQCAt
NjM5LDcgKzYzMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFz
c1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAgICAgLy8gRHJhdyB0aGUg
YmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9uZS4KICAgICBpZiAoYmFja2dyb3VuZFRl
eHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVh
ZC0+cXVhZFJlY3QoKS5zaXplKCkpOwotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIo
YmFja2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwg
cXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZl
cihiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQt
PmxheWVyVHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwpA
QCAtMTA5Niw4ICsxMDkwLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9T
dXJmYWNlUXVhZChjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBxdWFkKQogICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RB
TkdMRV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFk
c1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVkVGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgaHVk
U2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoY29u
c3QgQ0NTY29wZWRUZXh0dXJlKiBodWRUZXh0dXJlLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQog
eworICAgIEFTU0VSVChodWRUZXh0dXJlLT5pZCgpKTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBo
aWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKQEAg
LTExMDYsOSArMTEwMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNV
cERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1ZFRleHR1cmUsIGNvbnN0CiAgICAgY29uc3QgSGVh
ZHNVcERpc3BsYXlQcm9ncmFtKiBwcm9ncmFtID0gaGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAg
ICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMCkpOwotICAgIGlmICghaHVkVGV4dHVyZS0+dGV4dHVyZUlkKCkpCi0gICAgICAgIGh1ZFRl
eHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwotICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGh1ZFRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaHVkVGV4
dHVyZS0+aWQoKSkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShw
cm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAK
QEAgLTEzNTIsMTQgKzEzNDYsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZy
YW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9
CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpCitib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGV2aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1
cmUtPnJlc2VydmUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQor
ICAgIEFTU0VSVCghdGV4dHVyZS0+aWQoKSB8fCAodGV4dHVyZS0+c2l6ZSgpID09IGRldmljZVJl
Y3Quc2l6ZSgpICYmIHRleHR1cmUtPmZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ip
KTsKKworICAgIGlmICghdGV4dHVyZS0+aWQoKSAmJiAhdGV4dHVyZS0+YWxsb2NhdGUoZGV2aWNl
UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoIXRleHR1cmUtPnRleHR1cmVJZCgpKQotICAgICAgICB0ZXh0dXJlLT5h
bGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUtPmlkKCkpKTsK
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLT5mb3JtYXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0
LnkoKSwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZpY2VSZWN0LmhlaWdodCgpLCAwKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMzY3LDEzICsxMzYxLDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50UmVu
ZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICBy
ZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1cnJlbnRUZXh0
dXJlOwogfQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7CiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9
IHJlbmRlclBhc3M7Ci0gICAgbV9jdXJyZW50TWFuYWdlZFRleHR1cmUgPSAwOworICAgIG1fY3Vy
cmVudFRleHR1cmUgPSAwOwogCiAgICAgaWYgKHJlbmRlclBhc3MgPT0gbV9kZWZhdWx0UmVuZGVy
UGFzcykgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKQEAgLTEzODEsMjcgKzEzNzUs
MjkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5k
ZXJQYXNzLT5pZCgpKTsKKyAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBh
c3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwog
CisgICAgaWYgKCF0ZXh0dXJlLT5pZCgpKQorICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShyZW5k
ZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJl
bmRlclBhc3MpKTsKKwogICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVy
ZSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOwogfQogCi1ib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXNlTWFuYWdlZFRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1c2VTY29wZWRUZXh0dXJlKGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewogICAgIG1fY3VycmVudFJlbmRlclBhc3MgPSAw
OwotICAgIG1fY3VycmVudE1hbmFnZWRUZXh0dXJlID0gdGV4dHVyZTsKKyAgICBtX2N1cnJlbnRU
ZXh0dXJlID0gdGV4dHVyZTsKIAogICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUo
dGV4dHVyZSwgdmlld3BvcnRSZWN0KTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3Qg
SW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJp
bmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShjb25zdCBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKIHsKLSAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
b2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOworICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKIAot
ICAgIGlmICghdGV4dHVyZS0+dGV4dHVyZUlkKCkpCi0gICAgICAgIHRleHR1cmUtPmFsbG9jYXRl
KG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB0ZXh0dXJlLT50ZXh0dXJlSWQoKSwgMCkpOworICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUtPmlkKCksIDApKTsKIAogI2lmICFkZWZpbmVkICggTkRF
QlVHICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CkBAIC0xNDczLDE0ICsxNDY5LDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVT
aXplKTsKICAgICBtX3RleHR1cmVDb3BpZXIgPSBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNy
ZWF0ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKICAgICBpZiAobV90ZXh0dXJl
VXBsb2FkZXJTZXR0aW5nID09IFRocm90dGxlZFVwbG9hZGVyKQogICAgICAgICBtX3RleHR1cmVV
cGxvYWRlciA9IFRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAg
ICAgZWxzZQogICAgICAgICBtX3RleHR1cmVVcGxvYWRlciA9IFVudGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dCk7Ci0gICAgbV9pbXBsVGV4dHVy
ZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dCk7
CisgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3I6OmNyZWF0ZShtX2NvbnRleHQsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAg
ICBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVh
dGUobV9jb250ZXh0LCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgaWYgKG1f
Y2FwYWJpbGl0aWVzLnVzaW5nVGV4dHVyZVVzYWdlSGludCkKICAgICAgICAgbV9pbXBsVGV4dHVy
ZUFsbG9jYXRvci0+c2V0VGV4dHVyZVVzYWdlSGludChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6
OkZyYW1lYnVmZmVyQXR0YWNobWVudCk7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nVGV4
dHVyZVN0b3JhZ2VFeHRlbnNpb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
aW5kZXggZjQ2NGVhZTFiNTgwNDY3ZTRhZTkyMjU1Nzg5ZDczMjZhYjc4ZTE5ZC4uNmFmZTY2ODA2
Y2U5ODFmNGIzZTAwOGU3OTg2NjZhNTJhMDlkZDlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKQEAgLTUxLDEzICs1MSwxMyBAQCBjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1
YWQ7CiBjbGFzcyBDQ0RyYXdRdWFkOwogY2xhc3MgQ0NJT1N1cmZhY2VEcmF3UXVhZDsKIGNsYXNz
IENDUmVuZGVyUGFzc0RyYXdRdWFkOworY2xhc3MgQ0NTY29wZWRUZXh0dXJlOwogY2xhc3MgQ0NT
b2xpZENvbG9yRHJhd1F1YWQ7CiBjbGFzcyBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQ7CiBjbGFzcyBD
Q1RleHR1cmVEcmF3UXVhZDsKIGNsYXNzIENDVGlsZURyYXdRdWFkOwogY2xhc3MgQ0NZVVZWaWRl
b0RyYXdRdWFkOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7
CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247CiAKIC8vIENsYXNzIHRo
YXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4K
QEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFz
cyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdl
UmVjdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpIE9W
RVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4
dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3SGVhZHNVcERpc3BsYXkoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50U2l6
ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZp
bmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSBPVkVSUklERTsKQEAgLTEwMCw5ICsxMDAs
OCBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2VvbWV0cnlCaW5kaW5nKiBzaGFyZWRHZW9tZXRyeSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnkuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSBP
VkVSUklERTsKLSAgICBib29sIGdldEZyYW1lYnVmZmVyVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSos
IGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOworICAgIGJvb2wgZ2V0RnJhbWVidWZmZXJUZXh0
dXJlKENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOwogCi0gICAg
dmlydHVhbCBUZXh0dXJlTWFuYWdlciogaW1wbFRleHR1cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRl
eHR1cmVDb3BpZXIqIHRleHR1cmVDb3BpZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Rl
eHR1cmVDb3BpZXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVVcGxvYWRlciogdGV4dHVy
ZVVwbG9hZGVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90ZXh0dXJlVXBsb2FkZXIuZ2V0
KCk7IH0KICAgICB2aXJ0dWFsIFRleHR1cmVBbGxvY2F0b3IqIGltcGxUZXh0dXJlQWxsb2NhdG9y
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKTsg
fQpAQCAtMTMzLDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBD
Q0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNr
ZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IEND
RGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRy
YXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7CisgICAgUGFz
c093blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRldmljZVRyYW5zZm9ybSk7CiAgICAgdm9pZCBkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBD
Q1NvbGlkQ29sb3JEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1N0cmVhbVZpZGVvUXVhZChjb25z
dCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKQEAgLTE0NCwxMiArMTQzLDEyIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wg
ZmxpcFkpOwogCi0gICAgLy8gVGhlIGN1cnJlbnQgZHJhd2luZyB0YXJnZXQgaXMgZWl0aGVyIGEg
UmVuZGVyUGFzcyBvciBNYW5hZ2VkVGV4dHVyZS4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzd2l0
Y2ggdG8gYSBuZXcgZHJhd2luZyB0YXJnZXQuCisgICAgLy8gVGhlIGN1cnJlbnQgZHJhd2luZyB0
YXJnZXQgaXMgZWl0aGVyIGEgUmVuZGVyUGFzcyBvciBTY29wZWRUZXh0dXJlLiBVc2UgdGhlc2Ug
ZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBhIG5ldyBkcmF3aW5nIHRhcmdldC4KICAgICBib29sIHVz
ZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgYm9vbCB1c2VNYW5hZ2VkVGV4
dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAg
Ym9vbCB1c2VTY29wZWRUZXh0dXJlKGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJl
Y3QmIHZpZXdwb3J0UmVjdCk7CiAgICAgYm9vbCBpc0N1cnJlbnRSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyopOwogCi0gICAgYm9vbCBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoTWFuYWdl
ZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOworICAgIGJvb2wgYmluZEZy
YW1lYnVmZmVyVG9UZXh0dXJlKGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHZpZXdwb3J0UmVjdCk7CiAKICAgICB2b2lkIGNsZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCk7CiAKQEAgLTE3
MCwxMCArMTY5LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6Oldl
YkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgb25Db250ZXh0TG9zdCgpIE9WRVJSSURFOwogCisgICAgc3RhdGljIEludFNpemUgcmVu
ZGVyUGFzc1RleHR1cmVTaXplKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHN0YXRpYyBHQzNE
ZW51bSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKTsKKwogICAg
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgTWFuYWdlZFRleHR1cmUqIG1f
Y3VycmVudE1hbmFnZWRUZXh0dXJlOworICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogbV9jdXJy
ZW50VGV4dHVyZTsKICAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKICAg
ICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwpAQCAtMjU5LDEzICsy
NjEsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8U29saWRDb2xvclByb2dyYW0+IG1fc29saWRD
b2xvclByb2dyYW07CiAgICAgT3duUHRyPEhlYWRzVXBEaXNwbGF5UHJvZ3JhbT4gbV9oZWFkc1Vw
RGlzcGxheVByb2dyYW07CiAKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1faW1wbFRleHR1
cmVNYW5hZ2VyOwogICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVy
ZUNvcGllcjsKICAgICBPd25QdHI8VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsK
ICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFs
bG9jYXRvcjsKICAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2ltcGxUZXh0
dXJlQWxsb2NhdG9yOwogCi0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4g
PiBtX3JlbmRlclBhc3NUZXh0dXJlczsKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsKIAogICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFs
bG9jYXRvci5jcHAKaW5kZXggOGU1ODZlMjVhMDVhZjc4YWQxM2I3ZGFmNzIzYmEzY2JhMDMzY2E4
Ny4uYzU4OWEzYzZlZDNkMDBhZmYxZmJhMGQ3ZDQzNTk0ZjNhYWM5MWU4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwCkBAIC0zMyw4ICszMyw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK1Ry
YWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6
ZSkKICAgICAsIG1fY3VycmVudE1lbW9yeVVzZUJ5dGVzKDApCiAgICAgLCBtX3RleHR1cmVVc2Fn
ZUhpbnQoQW55KQogICAgICwgbV91c2VUZXh0dXJlU3RvcmFnZUV4dChmYWxzZSkKQEAgLTcxLDYg
KzcyLDkgQEAgc3RhdGljIGJvb2wgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShH
QzNEZW51bSBmb3JtYXQpCiAKIHVuc2lnbmVkIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3Jl
YXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCiB7CisgICAg
aWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4dHVyZVNpemUgfHwgc2l6ZS5oZWlnaHQoKSA+IG1f
bWF4VGV4dHVyZVNpemUpCisgICAgICAgIHJldHVybiAwOworCiAgICAgbV9jdXJyZW50TWVtb3J5
VXNlQnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7
CiAKICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1
cmVBbGxvY2F0b3IuaAppbmRleCBjMTBjMjU3MjE0ZTYyZWZlMzQwMmVmY2I2MTIxOGY2MjgwMTRk
MjUzLi43OGVmNDBkMWI0M2U3YjM0MjQ1NGE1MmExNDAwMjRjNTkxODE5ZmUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1
cmVBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaApAQCAtMzgsOSArMzgsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4
dHVyZUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3I+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gY3JlYXRl
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGludCBtYXhUZXh0dXJlU2l6
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yKGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3IoY29udGV4dCwgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAgICAgdmly
dHVhbCB+VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKCk7CiAKQEAgLTU2LDkgKzU2LDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFVzZVRleHR1cmVTdG9yYWdlRXh0KGJvb2wgdXNlU3RvcmFnZUV4
dCkgeyBtX3VzZVRleHR1cmVTdG9yYWdlRXh0ID0gdXNlU3RvcmFnZUV4dDsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgZXhwbGljaXQgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKyAgICBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRCosIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgaW50IG1fbWF4VGV4dHVyZVNp
emU7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lbW9yeVVzZUJ5dGVzOwogICAgIFRleHR1cmVVc2Fn
ZUhpbnQgbV90ZXh0dXJlVXNhZ2VIaW50OwogICAgIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggMjRkNDBiZmI0ZTVhM2I2
NGExOGNkZDNjZGRiZGJkMDYzY2RiMmIwNS4uNzMxZjc3MGMwOTY2MzE4NThhMGFjM2M0YmM4ZjNk
NzEzZjY3MTI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTc1LDcg
Kzc1LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwq
IGxheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9o
dWRUZXh0dXJlKQotICAgICAgICBtX2h1ZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRl
KGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpKTsKKyAgICAgICAgbV9odWRUZXh0
dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVB
bGxvY2F0b3IoKSk7CiAKICAgICBjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncyA9
IGxheWVyVHJlZUhvc3RJbXBsLT5zZXR0aW5ncygpOwogICAgIC8vIFVzZSBhIGZ1bGxzY3JlZW4g
dGV4dHVyZSBvbmx5IGlmIHdlIG5lZWQgdG8uLi4KQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDQ0hl
YWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBs
KQogICAgICAgICBodWRTaXplLnNldEhlaWdodCgxMjgpOwogICAgIH0KIAotICAgIGlmICghbV9o
dWRUZXh0dXJlLT5yZXNlcnZlKGh1ZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAg
ICBpZiAoIW1faHVkVGV4dHVyZS0+aWQoKSAmJiAhbV9odWRUZXh0dXJlLT5hbGxvY2F0ZShodWRT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFJlbmRlciBwaXhlbHMgaW50byB0aGUgdGV4dHVyZS4KQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lk
IENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9z
dEltcGwpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIo
JmNhbnZhcyk7CiAKLSAgICAgICAgbV9odWRUZXh0dXJlLT5iaW5kVGV4dHVyZShsYXllclRyZWVI
b3N0SW1wbC0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZUFsbG9jYXRvcigp
KTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2h1ZFRleHR1cmUtPmlkKCkpKTsKICAgICAgICAgYm9vbCB1
cGxvYWRlZFZpYU1hcCA9IGZhbHNlOwogICAgICAgICBpZiAobGF5ZXJSZW5kZXJlci0+Y2FwYWJp
bGl0aWVzKCkudXNpbmdNYXBTdWIpIHsKICAgICAgICAgICAgIHVpbnQ4X3QqIHBpeGVsRGVzdCA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb250ZXh0LT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGh1ZFNpemUud2lkdGgoKSwg
aHVkU2l6ZS5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOwpA
QCAtMTIyLDggKzEyMiw2IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdyhDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKICAgICB9CiAKICAgICBsYXllclJlbmRlcmVy
LT5kcmF3SGVhZHNVcERpc3BsYXkobV9odWRUZXh0dXJlLmdldCgpLCBodWRTaXplKTsKLQotICAg
IG1faHVkVGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6
ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ0NMYXllclRyZWVIb3N0
SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwsIGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRp
bmdzLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5o
CmluZGV4IGM1MDVhMjA4NjJmMjA5MGM0YmUwNTVlZDQxMzE5ODQyNGY4MmQzNzMuLjI2NmJmNTFl
MWY0ZWRjNmM2MGMyMTYzMjMwOGNlMjY4ZjFkM2FhNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGb250
QXRsYXMuaCIKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0zNiw2ICszNiw3IEBAIGNsYXNzIENDRGVidWdSZWN0SGlzdG9yeTsKIGNs
YXNzIENDRnJhbWVSYXRlQ291bnRlcjsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBUZXh1cmVBbGxvY2F0b3I7CiAKIHN0cnVjdCBDQ0xh
eWVyVHJlZVNldHRpbmdzOwogCkBAIC02Niw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBz
aG93UGxhdGZvcm1MYXllclRyZWUoY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYpIGNvbnN0Owog
ICAgIGJvb2wgc2hvd0RlYnVnUmVjdHMoY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYpIGNvbnN0
OwogCi0gICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX2h1ZFRleHR1cmU7CisgICAgT3duUHRy
PENDU2NvcGVkVGV4dHVyZT4gbV9odWRUZXh0dXJlOwogICAgIE93blB0cjxDQ0ZvbnRBdGxhcz4g
bV9mb250QXRsYXM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKaW5kZXggNDE4NTlmMzAyZWVhOWY5
MTkzYjMyNDVmOGJlM2Y5ODJmNzZlODIxOS4uZGVkMGVmZGMzOGVmOTMxYWZiMzAxN2UyNzAyZjVj
N2YyZDEwNGY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaApAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDU2NvcGVkVGV4dHVyZTsKIGNsYXNzIFRleHR1cmVB
bGxvY2F0b3I7CiBjbGFzcyBUZXh0dXJlQ29waWVyOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CkBA
IC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3Mo
Y29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1
cnJlbnRQYXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpID0g
MDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3SGVhZHNVcERpc3BsYXkoTWFuYWdlZFRleHR1cmUq
LCBjb25zdCBJbnRTaXplJiBodWRTaXplKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdIZWFk
c1VwRGlzcGxheShjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXpl
KSA9IDA7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2goKSA9IDA7CkBAIC04OSw3ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBpbXBsVGV4dHVyZU1hbmFn
ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlQ29waWVyKiB0ZXh0dXJlQ29waWVy
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVGV4dHVyZVVwbG9hZGVyKiB0ZXh0dXJlVXBsb2Fk
ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlQWxsb2NhdG9yKiBpbXBsVGV4dHVy
ZUFsbG9jYXRvcigpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggYjExYjAwNmY3NGY2
NzM1ZWYyMzJiYzc0N2M3NTE2MjFhODVkNjBjYS4uZmJlZGU2Y2VkMTg1Y2M1ZThjZDUxYWU1OWRi
YmEzNGYwMzZmZjM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTIzNjcsOCArMjM2Nyw2IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgbGF5ZXJzRnJlZVRleHR1cmVzKQogCiAgICAg
Ly8gS2lsbCB0aGUgbGF5ZXIgdHJlZS4KICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoQ0NM
YXllckltcGw6OmNyZWF0ZSgxMDApKTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB3
ZSBkb24ndCB1c2UgTWFuYWdlZFRleHR1cmVzIGluIGltcGwgbGF5ZXJzLgotICAgIG1faG9zdElt
cGwtPmxheWVyUmVuZGVyZXIoKS0+aW1wbFRleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRU
ZXh0dXJlcyhtX2hvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmltcGxUZXh0dXJlQWxsb2NhdG9y
KCkpOwogICAgIC8vIFRoZXJlIHNob3VsZCBiZSBubyB0ZXh0dXJlcyBsZWZ0IGluIHVzZSBhZnRl
ci4KICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0LT5udW1UZXh0
dXJlcygpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151522</attachid>
            <date>2012-07-10 14:06:05 -0700</date>
            <delta_ts>2012-07-10 15:48:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90841-20120710170604.patch</filename>
            <type>text/plain</type>
            <size>34829</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc0ODIxY2Q3NjZmNmVm
ZDQzYTJhZThhNDhkNzM3YjU0YmMzMDEyMy4uMjhmZTlkOWVkZGUzMGJmNThlODVkYWYxMDlhMThh
ZTJiNGU0YjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVw
bGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUgd2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwg
dGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNo
cm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDg0MQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBS
ZW1vdmUgdGhlIFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtLCB3aGlj
aCB3YXMgdGhlIGxhc3QKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGluIHRoZSBjb21w
b3NpdG9yLiBJbnN0ZWFkIG9mIHVzaW5nIE1hbmFnZWRUZXh0dXJlCisgICAgICAgIG9iamVjdHMg
Zm9yIFJlbmRlclBhc3MgdGV4dHVyZXMsIHVzZSBpbnN0YW5jZXMgb2YgQ0NTY29wZWRUZXh0dXJl
LCB3aGljaAorICAgICAgICBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHRoZSBhbGxvY2F0ZWQgdGV4
dHVyZSBpZHMuIFRleHR1cmVNYW5hZ2VyIHdpbGwgYmUKKyAgICAgICAgcmVtb3ZlZCBlbnRpcmVs
eSBvbmNlIGFsbCBjYWxsZXJzIG9mIG1lbW9yeVVzZUJ5dGVzKCkgaGF2ZSBiZWVuIHJlbW92ZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyUGFzc1RleHR1cmVG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVS
ZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQ
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVy
UGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3Bl
ZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5k
RnJhbWVidWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2Nh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3I6OmNyZWF0ZSk6CisgICAgICAgIChUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENDUmVuZGVyZXIpOgorCiAyMDEyLTA3LTEwICBYaWFuemh1IFdhbmcgIDx3
YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFVz
ZSBkZWZhdWx0IGZvbnQgcmVuZGVyaW5nIHN0eWxlcyBpbiBGb250UGxhdGZvcm1EYXRhOjpxdWVy
eVN5c3RlbUZvclJlbmRlclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjk4
ZTBkOGJhOTY4MzMzZTkxOGM5YjQ3ZDEyYjAyYjNjMzg3ZjI2NC4uMDg4MjA0ZGY5ZDdhMDcwYjI0
NjZiZTlkYTA3MzNjODczMWY3MmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMi0wNy0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIFJlcGxhY2UgdXNlIG9mIE1hbmFnZWRUZXh0dXJlIHdp
dGggQ0NTY29wZWRUZXh0dXJlIGZvciBpbXBsIHRocmVhZCBhbmQgcmVtb3ZlIGltcGxUZXh0dXJl
TWFuYWdlciBmcm9tIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4NDEKKworICAgICAgICBSZXZpZXdlZCBieSBB
ZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHA6CisKIDIwMTItMDctMTAgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gVXNlIGRlZmF1bHQgZm9udCByZW5k
ZXJpbmcgc3R5bGVzIGluIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5
bGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMmI1OTIzMWM4
YWRiYzNhYzhiMDk4ZWRkZWE1ZDdjNTBmMjcwNjY3MC4uNjU3MzY1YzUyNDBjYmE2OGQzYmEyOTZh
MTMzZjI4ODdhZDk1YTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR2Vv
bWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JUZXh0dXJlLmgiCi0jaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtNTcs
NiArNTYsNyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRmlsdGVy
cy5oIgorI2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgogI2luY2x1ZGUgImNjL0NDU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKQEAgLTE1Nyw3ICsxNTcsNyBAQCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGll
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJl
VXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKICAgICA6IENDUmVuZGVyZXIo
Y2xpZW50KQogICAgICwgbV9jdXJyZW50UmVuZGVyUGFzcygwKQotICAgICwgbV9jdXJyZW50TWFu
YWdlZFRleHR1cmUoMCkKKyAgICAsIG1fY3VycmVudFRleHR1cmUoMCkKICAgICAsIG1fb2Zmc2Ny
ZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0
KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAg
LTI3NCwxMCArMjc0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRl
clBhc3NUZXh0dXJlcygpCiB7Ci0gICAgaWYgKCFtX2ltcGxUZXh0dXJlTWFuYWdlcikKLSAgICAg
ICAgcmV0dXJuOwogICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLmNsZWFyKCk7Ci0gICAgbV9pbXBs
VGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2Nh
dG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hh
bmdlZCgpCkBAIC0zMTQsNiArMzExLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
bGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zCiAgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogfQogCisvLyBzdGF0aWMKK0ludFNpemUgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpyZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKiBwYXNzKQoreworICAg
IHJldHVybiBwYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7Cit9CisKKy8vIHN0
YXRpYworR0MzRGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKK30KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKQogewpAQCAtMzIyLDcgKzMzMCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRl
clBhCiAgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ld
LT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5nZXQoKSk7CiAKICAgICBWZWN0b3I8
aW50PiBwYXNzZXNUb0RlbGV0ZTsKLSAgICBIYXNoTWFwPGludCwgT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CisgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKICAg
ICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJ
dGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsK
ICAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHBhc3Nlc0lu
RnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOwogICAgICAgICBpZiAoIXJlbmRlclBhc3NJ
bkZyYW1lKSB7CkBAIC0zMzAsNDMgKzMzOCwzMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzSW5GcmFtZS0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0
KCkuc2l6ZSgpOwotICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOwotICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVy
YXRvci0+c2Vjb25kLmdldCgpOwotICAgICAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlz
VmFsaWQocmVxdWlyZWRTaXplLCByZXF1aXJlZEZvcm1hdCkpIHsKLSAgICAgICAgICAgIHBhc3Nl
c1RvRGVsZXRlLmFwcGVuZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisgICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJl
bmRlclBhc3NUZXh0dXJlU2l6ZShyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIEdDM0RlbnVt
IHJlcXVpcmVkRm9ybWF0ID0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzc0luRnJh
bWUpOworICAgICAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgQVNTRVJUKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0
dXJlLT5pZCgpICYmICh0ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRleHR1cmUt
PmZvcm1hdCgpICE9IHJlcXVpcmVkRm9ybWF0KSkKKyAgICAgICAgICAgIHRleHR1cmUtPmZyZWUo
KTsKICAgICB9CiAKICAgICAvLyBEZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBw
cmV2aW91cyBmcmFtZSB0aGF0IHdpbGwgbm90IGJlIHVzZWQgYWdhaW4uCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXNzZXNUb0RlbGV0ZS5zaXplKCk7ICsraSkKICAgICAgICAgbV9yZW5k
ZXJQYXNzVGV4dHVyZXMucmVtb3ZlKHBhc3Nlc1RvRGVsZXRlW2ldKTsKLSAgICBtX2ltcGxUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3Iu
Z2V0KCkpOwogCi0gICAgLy8gQWxsIFJlbmRlclBhc3MgdGV4dHVyZXMgc2hvdWxkIGJlIHJlc2Vy
dmVkIGZvciB0aGUgY3VycmVudCBmcmFtZS4gRXZlcnkgUmVuZGVyUGFzcyB0ZXh0dXJlCi0gICAg
Ly8gaXMga2VwdCByZXNlcnZlZCB1bnRpbCBpdCBpcyByZW1vdmVkIGFuZCBkZWxldGVkLgogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0
dXJlcy5nZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkpOwotICAgICAgICBpZiAo
IXRleHR1cmUpIHsKLSAgICAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gb3duVGV4dHVy
ZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgdGV4dHVyZSA9IG93blRleHR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBtX3Jl
bmRlclBhc3NUZXh0dXJlcy5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIG93
blRleHR1cmUucmVsZWFzZSgpKTsKKyAgICAgICAgaWYgKCFtX3JlbmRlclBhc3NUZXh0dXJlcy5j
b250YWlucyhyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSkpIHsKKyAgICAgICAgICAg
IE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVuZGVyUGFz
c1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgdGV4dHVyZS5y
ZWxlYXNlKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRT
aXplID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgp
LnNpemUoKTsKLSAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKLSAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDg0OAotICAgICAgICAvLyBib29sIHJlc2VydmVkID0gdGV4dHVyZS0+cmVz
ZXJ2ZShyZXF1aXJlZFNpemUsIHJlcXVpcmVkRm9ybWF0KTsKLSAgICAgICAgLy8gQVNTRVJUX1VO
VVNFRChyZXNlcnZlZCwgcmVzZXJ2ZWQpOwotICAgICAgICB0ZXh0dXJlLT5yZXNlcnZlKHJlcXVp
cmVkU2l6ZSwgcmVxdWlyZWRGb3JtYXQpOwogICAgIH0KIH0KIAogYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25z
dAogewotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMu
Z2V0KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKKyAg
ICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQp
OworICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1cmUtPmlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJv
b3RSZW5kZXJQYXNzKQpAQCAtNDY1LDggKzQ2MSw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlk
ZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVhZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2lt
cGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1
YWQpCkBAIC01MjIsNyArNTE2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdE
ZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBxdWEKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElO
RV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0
ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpX
ZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBNYW5hZ2VkVGV4dHVyZSogc291cmNlVGV4dHVy
ZSkKK3N0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzLCBDQ1Njb3BlZFRleHR1cmUqIHNvdXJjZVRleHR1cmUpCiB7CiAgICAgaWYgKGZpbHRl
cnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKQEAgLTUzMywxMCArNTI3
LDEwIEBAIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QKIAogICAgIGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKS0+Zmx1c2goKTsKIAotICAgIHJldHVybiBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBs
eShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6
ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmls
dGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4dHVyZS0+aWQoKSwgc291cmNlVGV4dHVyZS0+
c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKIH0KIAotUGFzc093blB0cjxNYW5hZ2VkVGV4
dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRl
bnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGRyYXdzIGEgYmFja2dy
b3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBmaWx0ZXIgdG8gYW55IHBpeGVscyBiZWhpbmQg
dGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMgYmFja2dyb3VuZC4KICAgICAvLyBUaGUgYWxn
b3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBAIC01NjEsNyArNTU1LDcgQEAgUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgQ0MKICAgICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMg
YmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIg
YXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50
TWFuYWdlZFRleHR1cmUpOworICAgIEFTU0VSVCghbV9jdXJyZW50VGV4dHVyZSk7CiAKICAgICAv
LyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJl
cGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJl
cyBhcmUgbm90IHJldXNlZCkuCiAgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9ybSwg
c2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOwpAQCAtNTczLDcgKzU2Nyw3IEBA
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKICAgICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1
cnJlbnRSZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSk7CiAKLSAgICBPd25QdHI8
TWFuYWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6
OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gZGV2aWNlQmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVy
VGV4dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC01ODQsMTIgKzU3OCwxMiBAQCBQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhjb25zdCBDQwogICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JU
ZXh0dXJlKj4oZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSk7CiAgICAgaW50
IGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVI
YW5kbGUoKTsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUg
PSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1faW1wbFRleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAg
ICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5yZXNlcnZlKHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4g
YmFja2dyb3VuZFRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJl
QWxsb2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIWJhY2tncm91bmRUZXh0dXJlLT5hbGxvY2F0ZShx
dWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVuZGVy
UGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgYm9vbCB1c2luZ0JhY2tncm91bmRUZXh0
dXJlID0gdXNlTWFuYWdlZFRleHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1
YWRSZWN0KCkpOworICAgIGJvb2wgdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSA9IHVzZVNjb3BlZFRl
eHR1cmUoYmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIHF1YWQtPnF1YWRSZWN0KCkpOwogCiAgICAg
aWYgKHVzaW5nQmFja2dyb3VuZFRleHR1cmUpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcmVhZGJh
Y2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgZm9yIHRoZSBz
dXJmYWNlLgpAQCAtNjEyLDggKzYwNiw4IEBAIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4
dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChxdWFkLT5yZW5kZXJQYXNzSWQoKSk7Ci0g
ICAgaWYgKCFjb250ZW50c1RleHR1cmUgfHwgIWNvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkp
CisgICAgQ0NTY29wZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0
dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIGlmICghY29udGVudHNUZXh0dXJl
IHx8ICFjb250ZW50c1RleHR1cmUtPmlkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlclRyYW5zZm9ybSA9IHF1YWQtPmxheWVyVHJhbnNmb3Jt
KCk7CkBAIC02MjUsMTIgKzYxOSwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogICAgIGlm
ICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gYmFja2dyb3VuZFRleHR1cmUgPSBkcmF3
QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRG
aWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBD
YWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0
aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUg
Y29udGVudHMgdGV4dHVyZS4KICAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRl
cnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBjb250ZW50c1RleHR1cmUpOwotICAgIGludCBjb250
ZW50c1RleHR1cmVJZCA9IGNvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCk7CisgICAgaW50IGNv
bnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0dXJlLT5pZCgpOwogICAgIGlmIChmaWx0ZXJC
aXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSk7CiAgICAg
ICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwpAQCAt
NjM5LDcgKzYzMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFz
c1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAgICAgLy8gRHJhdyB0aGUg
YmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9uZS4KICAgICBpZiAoYmFja2dyb3VuZFRl
eHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVh
ZC0+cXVhZFJlY3QoKS5zaXplKCkpOwotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIo
YmFja2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwg
cXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZl
cihiYWNrZ3JvdW5kVGV4dHVyZS0+aWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQt
PmxheWVyVHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwpA
QCAtMTA5Niw4ICsxMDkwLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9T
dXJmYWNlUXVhZChjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBxdWFkKQogICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RB
TkdMRV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdIZWFk
c1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVkVGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgaHVk
U2l6ZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoY29u
c3QgQ0NTY29wZWRUZXh0dXJlKiBodWRUZXh0dXJlLCBjb25zdCBJbnRTaXplJiBodWRTaXplKQog
eworICAgIEFTU0VSVChodWRUZXh0dXJlLT5pZCgpKTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBo
aWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKQEAg
LTExMDYsOSArMTEwMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNV
cERpc3BsYXkoTWFuYWdlZFRleHR1cmUqIGh1ZFRleHR1cmUsIGNvbnN0CiAgICAgY29uc3QgSGVh
ZHNVcERpc3BsYXlQcm9ncmFtKiBwcm9ncmFtID0gaGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAg
ICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMCkpOwotICAgIGlmICghaHVkVGV4dHVyZS0+dGV4dHVyZUlkKCkpCi0gICAgICAgIGh1ZFRl
eHR1cmUtPmFsbG9jYXRlKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwotICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGh1ZFRleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaHVkVGV4
dHVyZS0+aWQoKSkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dXNlUHJvZ3JhbShw
cm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAK
QEAgLTEzNTIsMTQgKzEzNDYsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZy
YW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmUKICAgICB9CiB9
CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpCitib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGV2aWNlUmVjdCkKIHsKLSAgICBpZiAoIXRleHR1
cmUtPnJlc2VydmUoZGV2aWNlUmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQor
ICAgIEFTU0VSVCghdGV4dHVyZS0+aWQoKSB8fCAodGV4dHVyZS0+c2l6ZSgpID09IGRldmljZVJl
Y3Quc2l6ZSgpICYmIHRleHR1cmUtPmZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ip
KTsKKworICAgIGlmICghdGV4dHVyZS0+aWQoKSAmJiAhdGV4dHVyZS0+YWxsb2NhdGUoZGV2aWNl
UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoIXRleHR1cmUtPnRleHR1cmVJZCgpKQotICAgICAgICB0ZXh0dXJlLT5h
bGxvY2F0ZShtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUtPmlkKCkpKTsK
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlLT5mb3JtYXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0
LnkoKSwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZpY2VSZWN0LmhlaWdodCgpLCAwKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMzY3LDEzICsxMzYxLDEzIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50UmVu
ZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZTsKKyAgICBy
ZXR1cm4gbV9jdXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFtX2N1cnJlbnRUZXh0
dXJlOwogfQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCiB7CiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9
IHJlbmRlclBhc3M7Ci0gICAgbV9jdXJyZW50TWFuYWdlZFRleHR1cmUgPSAwOworICAgIG1fY3Vy
cmVudFRleHR1cmUgPSAwOwogCiAgICAgaWYgKHJlbmRlclBhc3MgPT0gbV9kZWZhdWx0UmVuZGVy
UGFzcykgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKQEAgLTEzODEsMjcgKzEzNzUs
MzEgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5k
ZXJQYXNzLT5pZCgpKTsKKyAgICBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBh
c3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwog
CisgICAgaWYgKCF0ZXh0dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShyZW5kZXJQYXNz
VGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBh
c3MpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZl
clRvVGV4dHVyZSh0ZXh0dXJlLCByZW5kZXJQYXNzLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSk7
CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VNYW5hZ2VkVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQorYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0
dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCiB7CisgICAgQVNTRVJU
KHRleHR1cmUtPmlkKCkpOworCiAgICAgbV9jdXJyZW50UmVuZGVyUGFzcyA9IDA7Ci0gICAgbV9j
dXJyZW50TWFuYWdlZFRleHR1cmUgPSB0ZXh0dXJlOworICAgIG1fY3VycmVudFRleHR1cmUgPSB0
ZXh0dXJlOwogCiAgICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSh0ZXh0dXJlLCB2
aWV3cG9ydFJlY3QpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1l
YnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBm
cmFtZWJ1ZmZlclJlY3QpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVm
ZmVyVG9UZXh0dXJlKGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVj
dCYgZnJhbWVidWZmZXJSZWN0KQogewotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3JlZW5G
cmFtZWJ1ZmZlcklkKSk7CisgICAgQVNTRVJUKHRleHR1cmUtPmlkKCkpOwogCi0gICAgaWYgKCF0
ZXh0dXJlLT50ZXh0dXJlSWQoKSkKLSAgICAgICAgdGV4dHVyZS0+YWxsb2NhdGUobV9pbXBsVGV4
dHVyZUFsbG9jYXRvci5nZXQoKSk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIHRleHR1cmUtPnRleHR1cmVJZCgpLCAwKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29m
ZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdGV4dHVyZS0+aWQoKSwgMCkpOwogCiAjaWYgIWRlZmluZWQgKCBOREVCVUcgKQogICAg
IGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUp
IHsKQEAgLTE0NzMsMTQgKzE0NzEsMTMgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Zmx1c2goKSk7CiAKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAg
IG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y3JlYXRlKG1fY29u
dGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwogICAgIGlmIChtX3RleHR1cmVVcGxvYWRlclNl
dHRpbmcgPT0gVGhyb3R0bGVkVXBsb2FkZXIpCiAgICAgICAgIG1fdGV4dHVyZVVwbG9hZGVyID0g
VGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICBlbHNlCiAg
ICAgICAgIG1fdGV4dHVyZVVwbG9hZGVyID0gVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI6OmNy
ZWF0ZSgpOwotICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0KTsKLSAgICBtX2ltcGxUZXh0dXJlQWxsb2NhdG9y
ID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0KTsKKyAgICBtX2Nv
bnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRl
KG1fY29udGV4dCwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1faW1wbFRl
eHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRl
eHQsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBpZiAobV9jYXBhYmlsaXRp
ZXMudXNpbmdUZXh0dXJlVXNhZ2VIaW50KQogICAgICAgICBtX2ltcGxUZXh0dXJlQWxsb2NhdG9y
LT5zZXRUZXh0dXJlVXNhZ2VIaW50KFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6RnJhbWVidWZm
ZXJBdHRhY2htZW50KTsKICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlU3RvcmFn
ZUV4dGVuc2lvbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBmNDY0
ZWFlMWI1ODA0NjdlNGFlOTIyNTU3ODlkNzMyNmFiNzhlMTlkLi42YWZlNjY4MDZjZTk4MWY0YjNl
MDA4ZTc5ODY2NmE1MmEwOWRkOWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtNTEsMTMgKzUxLDEzIEBAIGNsYXNzIENDRGVidWdCb3JkZXJEcmF3UXVhZDsKIGNsYXNz
IENDRHJhd1F1YWQ7CiBjbGFzcyBDQ0lPU3VyZmFjZURyYXdRdWFkOwogY2xhc3MgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQ7CitjbGFzcyBDQ1Njb3BlZFRleHR1cmU7CiBjbGFzcyBDQ1NvbGlkQ29sb3JE
cmF3UXVhZDsKIGNsYXNzIENDU3RyZWFtVmlkZW9EcmF3UXVhZDsKIGNsYXNzIENDVGV4dHVyZURy
YXdRdWFkOwogY2xhc3MgQ0NUaWxlRHJhd1F1YWQ7CiBjbGFzcyBDQ1lVVlZpZGVvRHJhd1F1YWQ7
CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7Ci1jbGFzcyBNYW5hZ2VkVGV4dHVyZTsKIGNsYXNzIFNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVz
IGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgpAQCAtODYsNyAr
ODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgT1ZFUlJJREU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiwgY29u
c3QgSW50U2l6ZSYgaHVkU2l6ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdIZWFk
c1VwRGlzcGxheShjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRTaXplJiBodWRTaXpl
KSBPVkVSUklERTsKIAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAg
dmlydHVhbCB2b2lkIGZpbmlzaCgpIE9WRVJSSURFOwpAQCAtMTAwLDkgKzEwMCw4IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBHZW9tZXRyeUJpbmRpbmcqIHNoYXJlZEdlb21ldHJ5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZWRHZW9tZXRyeS5nZXQoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldEZy
YW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwot
ICAgIGJvb2wgZ2V0RnJhbWVidWZmZXJUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50
UmVjdCYgZGV2aWNlUmVjdCk7CisgICAgYm9vbCBnZXRGcmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29w
ZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgZGV2aWNlUmVjdCk7CiAKLSAgICB2aXJ0dWFsIFRl
eHR1cmVNYW5hZ2VyKiBpbXBsVGV4dHVyZU1hbmFnZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogICAgIHZpcnR1YWwgVGV4dHVyZUNvcGll
ciogdGV4dHVyZUNvcGllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdGV4dHVyZUNvcGll
ci5nZXQoKTsgfQogICAgIHZpcnR1YWwgVGV4dHVyZVVwbG9hZGVyKiB0ZXh0dXJlVXBsb2FkZXIo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RleHR1cmVVcGxvYWRlci5nZXQoKTsgfQogICAg
IHZpcnR1YWwgVGV4dHVyZUFsbG9jYXRvciogaW1wbFRleHR1cmVBbGxvY2F0b3IoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpOyB9CkBAIC0xMzMs
NyArMTMyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJh
d1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkKik7Ci0gICAgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gZHJhd0JhY2tncm91
bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICBQYXNzT3duUHRyPEND
U2NvcGVkVGV4dHVyZT4gZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtKTsKICAgICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NE
cmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xv
ckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKGNvbnN0IENDU3RyZWFt
VmlkZW9EcmF3UXVhZCopOwpAQCAtMTQ0LDEyICsxNDMsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAK
LSAgICAvLyBUaGUgY3VycmVudCBkcmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5kZXJQYXNz
IG9yIE1hbmFnZWRUZXh0dXJlLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIHN3aXRjaCB0byBhIG5l
dyBkcmF3aW5nIHRhcmdldC4KKyAgICAvLyBUaGUgY3VycmVudCBkcmF3aW5nIHRhcmdldCBpcyBl
aXRoZXIgYSBSZW5kZXJQYXNzIG9yIFNjb3BlZFRleHR1cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMg
dG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0LgogICAgIGJvb2wgdXNlUmVuZGVyUGFz
cyhjb25zdCBDQ1JlbmRlclBhc3MqKTsKLSAgICBib29sIHVzZU1hbmFnZWRUZXh0dXJlKE1hbmFn
ZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KTsKKyAgICBib29sIHVzZVNj
b3BlZFRleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3Bv
cnRSZWN0KTsKICAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
Kik7CiAKLSAgICBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSos
IGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7CisgICAgYm9vbCBiaW5kRnJhbWVidWZmZXJU
b1RleHR1cmUoY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KTsKIAogICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyosIGNv
bnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKIApAQCAtMTcwLDEwICsxNjks
MTMgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3ND
b250ZXh0TG9zdENhbGxiYWNrIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBvbkNv
bnRleHRMb3N0KCkgT1ZFUlJJREU7CiAKKyAgICBzdGF0aWMgSW50U2l6ZSByZW5kZXJQYXNzVGV4
dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAgc3RhdGljIEdDM0RlbnVtIHJlbmRl
clBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVyUGFzcyopOworCiAgICAgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFz
cyogbV9jdXJyZW50UmVuZGVyUGFzczsKLSAgICBNYW5hZ2VkVGV4dHVyZSogbV9jdXJyZW50TWFu
YWdlZFRleHR1cmU7CisgICAgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiBtX2N1cnJlbnRUZXh0dXJl
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKIAogICAgIE93blB0cjxH
ZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CkBAIC0yNTksMTMgKzI2MSwxMiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENvbG9yUHJvZ3Jh
bTsKICAgICBPd25QdHI8SGVhZHNVcERpc3BsYXlQcm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5UHJv
Z3JhbTsKIAotICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9pbXBsVGV4dHVyZU1hbmFnZXI7
CiAgICAgT3duUHRyPEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcj4gbV90ZXh0dXJlQ29waWVyOwog
ICAgIE93blB0cjxUZXh0dXJlVXBsb2FkZXI+IG1fdGV4dHVyZVVwbG9hZGVyOwogICAgIE93blB0
cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yOwog
ICAgIE93blB0cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IG1faW1wbFRleHR1cmVBbGxvY2F0
b3I7CiAKLSAgICBIYXNoTWFwPGludCwgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiA+IG1fcmVuZGVy
UGFzc1RleHR1cmVzOworICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiA+
IG1fcmVuZGVyUGFzc1RleHR1cmVzOwogCiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RCogbV9jb250ZXh0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNw
cAppbmRleCA4ZTU4NmUyNWEwNWFmNzhhZDEzYjdkYWY3MjNiYTNjYmEwMzNjYTg3Li5jNTg5YTNj
NmVkM2QwMGFmZjFmYmEwZDdkNDM1OTRmM2FhYzkxZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKQEAgLTMzLDggKzMzLDkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1UcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OlRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcihXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgaW50IG1heFRleHR1cmVTaXplKQogICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCisgICAgLCBtX21heFRleHR1cmVTaXplKG1heFRleHR1cmVTaXplKQogICAgICwg
bV9jdXJyZW50TWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fdGV4dHVyZVVzYWdlSGludChBbnkp
CiAgICAgLCBtX3VzZVRleHR1cmVTdG9yYWdlRXh0KGZhbHNlKQpAQCAtNzEsNiArNzIsOSBAQCBz
dGF0aWMgYm9vbCBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKEdDM0RlbnVtIGZv
cm1hdCkKIAogdW5zaWduZWQgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGVUZXh0dXJl
KGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKIHsKKyAgICBpZiAoc2l6ZS53
aWR0aCgpID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCBzaXplLmhlaWdodCgpID4gbV9tYXhUZXh0dXJl
U2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBtX2N1cnJlbnRNZW1vcnlVc2VCeXRlcyAr
PSBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoc2l6ZSwgZm9ybWF0KTsKIAogICAgIHVu
c2lnbmVkIHRleHR1cmVJZCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRv
ci5oCmluZGV4IGMxMGMyNTcyMTRlNjJlZmUzNDAyZWZjYjYxMjE4ZjYyODAxNGQyNTMuLjc4ZWY0
MGQxYjQzZTdiMzQyNDU0YTUyYTE0MDAyNGM1OTE4MTlmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvci5oCkBAIC0zOCw5ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2Nh
dG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUcmFja2luZ1RleHR1cmVBbGxvY2F0b3Ip
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cj4gY3JlYXRlKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBjcmVhdGUoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoY29u
dGV4dCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcihjb250ZXh0LCBtYXhUZXh0dXJlU2l6ZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5UcmFj
a2luZ1RleHR1cmVBbGxvY2F0b3IoKTsKIApAQCAtNTYsOSArNTYsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VXNlVGV4dHVyZVN0b3JhZ2VFeHQoYm9vbCB1c2VTdG9yYWdlRXh0KSB7IG1fdXNl
VGV4dHVyZVN0b3JhZ2VFeHQgPSB1c2VTdG9yYWdlRXh0OyB9CiAKIHByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRCopOworICAgIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcihXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEKiwgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBz
aXplX3QgbV9jdXJyZW50TWVtb3J5VXNlQnl0ZXM7CiAgICAgVGV4dHVyZVVzYWdlSGludCBtX3Rl
eHR1cmVVc2FnZUhpbnQ7CiAgICAgYm9vbCBtX3VzZVRleHR1cmVTdG9yYWdlRXh0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCAyNGQ0MGJmYjRlNWEzYjY0YTE4Y2RkM2Nk
ZGJkYmQwNjNjZGIyYjA1Li43MzFmNzcwYzA5NjYzMTg1OGEwYWMzYzRiYzhmM2Q3MTNmNjcxMjY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVl
SG9zdEltcGwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX2h1ZFRleHR1cmUp
Ci0gICAgICAgIG1faHVkVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5k
ZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICBtX2h1ZFRleHR1cmUgPSBDQ1Nj
b3BlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZUFsbG9jYXRvcigp
KTsKIAogICAgIGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzID0gbGF5ZXJUcmVl
SG9zdEltcGwtPnNldHRpbmdzKCk7CiAgICAgLy8gVXNlIGEgZnVsbHNjcmVlbiB0ZXh0dXJlIG9u
bHkgaWYgd2UgbmVlZCB0by4uLgpAQCAtODgsNyArODgsNyBAQCB2b2lkIENDSGVhZHNVcERpc3Bs
YXk6OmRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgICAg
IGh1ZFNpemUuc2V0SGVpZ2h0KDEyOCk7CiAgICAgfQogCi0gICAgaWYgKCFtX2h1ZFRleHR1cmUt
PnJlc2VydmUoaHVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgIGlmICghbV9o
dWRUZXh0dXJlLT5pZCgpICYmICFtX2h1ZFRleHR1cmUtPmFsbG9jYXRlKGh1ZFNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVuZGVyIHBp
eGVscyBpbnRvIHRoZSB0ZXh0dXJlLgpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgQ0NIZWFkc1Vw
RGlzcGxheTo6ZHJhdyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKICAg
ICB7CiAgICAgICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmY2FudmFzKTsK
IAotICAgICAgICBtX2h1ZFRleHR1cmUtPmJpbmRUZXh0dXJlKGxheWVyVHJlZUhvc3RJbXBsLT5j
b250ZXh0KCksIGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlQWxsb2NhdG9yKCkpOworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1faHVkVGV4dHVyZS0+aWQoKSkpOwogICAgICAgICBib29sIHVwbG9hZGVkVmlh
TWFwID0gZmFsc2U7CiAgICAgICAgIGlmIChsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51
c2luZ01hcFN1YikgewogICAgICAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGNvbnRleHQtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgaHVkU2l6ZS53aWR0aCgpLCBodWRTaXplLmhl
aWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CkBAIC0xMjIsOCAr
MTIyLDYgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwq
IGxheWVyVHJlZUhvc3RJbXBsKQogICAgIH0KIAogICAgIGxheWVyUmVuZGVyZXItPmRyYXdIZWFk
c1VwRGlzcGxheShtX2h1ZFRleHR1cmUuZ2V0KCksIGh1ZFNpemUpOwotCi0gICAgbV9odWRUZXh0
dXJlLT51bnJlc2VydmUoKTsKIH0KIAogdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXll
clRyZWVIb3N0SW1wbCwgY29uc3QgQ0NMYXllclRyZWVTZXR0aW5ncyYgc2V0dGluZ3MsIGNvbnN0
IEludFNpemUmIGh1ZFNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggYzUw
NWEyMDg2MmYyMDkwYzRiZTA1NWVkNDEzMTk4NDI0ZjgyZDM3My4uMjY2YmY1MWUxZjRlZGM2YzYw
YzIxNjMyMzA4Y2UyNjhmMWQzYWE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApA
QCAtMjcsOCArMjcsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0j
aW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJjYy9DQ0ZvbnRBdGxhcy5oIgor
I2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTM2LDYgKzM2LDcgQEAgY2xhc3MgQ0NEZWJ1Z1JlY3RIaXN0b3J5OwogY2xhc3MgQ0NGcmFt
ZVJhdGVDb3VudGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIFRleHVyZUFsbG9jYXRvcjsKIAogc3RydWN0IENDTGF5ZXJUcmVlU2V0
dGluZ3M7CiAKQEAgLTY2LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3dQbGF0Zm9y
bUxheWVyVHJlZShjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJikgY29uc3Q7CiAgICAgYm9vbCBz
aG93RGVidWdSZWN0cyhjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJikgY29uc3Q7CiAKLSAgICBP
d25QdHI8TWFuYWdlZFRleHR1cmU+IG1faHVkVGV4dHVyZTsKKyAgICBPd25QdHI8Q0NTY29wZWRU
ZXh0dXJlPiBtX2h1ZFRleHR1cmU7CiAgICAgT3duUHRyPENDRm9udEF0bGFzPiBtX2ZvbnRBdGxh
czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaAppbmRleCA0MTg1OWYzMDJlZWE5ZjkxOTNiMzI0NWY4
YmUzZjk4MmY3NmU4MjE5Li5kZWQwZWZkYzM4ZWY5MzFhZmIzMDE3ZTI3MDJmNWM3ZjJkMTA0Zjkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJlci5oCkBAIC0zNSw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NTY29wZWRUZXh0dXJlOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsK
IGNsYXNzIFRleHR1cmVDb3BpZXI7CiBjbGFzcyBUZXh0dXJlTWFuYWdlcjsKQEAgLTc4LDcgKzc5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1Jl
bmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdEluQ3VycmVudFBhc3Mp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IElu
dFNpemUmIGh1ZFNpemUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRzVXBEaXNwbGF5
KGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpID0gMDsKIAog
ICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpID0gMDsKQEAgLTg5LDcgKzkwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpID0gMDsK
IAotICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGltcGxUZXh0dXJlTWFuYWdlcigpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVDb3BpZXIqIHRleHR1cmVDb3BpZXIoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlVXBsb2FkZXIqIHRleHR1cmVVcGxvYWRlcigpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVBbGxvY2F0b3IqIGltcGxUZXh0dXJlQWxsb2NhdG9y
KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBiMTFiMDA2Zjc0ZjY3MzVlZjIzMmJj
NzQ3Yzc1MTYyMWE4NWQ2MGNhLi5mYmVkZTZjZWQxODVjYzVlOGNkNTFhZTU5ZGJiYTM0ZjAzNmZm
Mzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMjM2Nyw4ICsyMzY3LDYgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBsYXllcnNGcmVlVGV4dHVyZXMpCiAKICAgICAvLyBLaWxsIHRo
ZSBsYXllciB0cmVlLgogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihDQ0xheWVySW1wbDo6
Y3JlYXRlKDEwMCkpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGRvbid0IHVz
ZSBNYW5hZ2VkVGV4dHVyZXMgaW4gaW1wbCBsYXllcnMuCi0gICAgbV9ob3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlcigpLT5pbXBsVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1f
aG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aW1wbFRleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIHRleHR1cmVzIGxlZnQgaW4gdXNlIGFmdGVyLgogICAgIEVY
UEVDVF9FUSgwdSwgdHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQtPm51bVRleHR1cmVzKCkpOwog
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>