<?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>64658</bug_id>
          
          <creation_ts>2011-07-16 15:30:24 -0700</creation_ts>
          <short_desc>Add code to attempt to align compositing layers to pixel boundaries when page scale changes</short_desc>
          <delta_ts>2011-07-16 19:34:40 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>438188</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 15:30:24 -0700</bug_when>
    <thetext>Add code to attempt to align compositing layers to pixel boundaries when page scale changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438191</commentid>
    <comment_count>1</comment_count>
      <attachid>101102</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 15:48:04 -0700</bug_when>
    <thetext>Created attachment 101102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438218</commentid>
    <comment_count>2</comment_count>
      <attachid>101102</attachid>
    <who name="">mitz</who>
    <bug_when>2011-07-16 17:57:58 -0700</bug_when>
    <thetext>Comment on attachment 101102
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:354
&gt; +    virtual bool keepPixelAligned() const { return m_keepPixelAligned; }

This name makes it sounds as if calling this function keeps the GraphicsLayer pixel-aligned. Note how the name differs from “appliesPageScale” in this regard. I suggest “maintainsPixelAlignment” or “snapsToDevicePixels” and renaming the setter and member variable to match.

&gt; Source/WebCore/platform/graphics/GraphicsLayerClient.h:67
&gt;      // Multiplier for backing store size, related to high DPI.

LOL “related to high DPI”.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:802
&gt; +            if (currLayer-&gt;client())
&gt; +                pageScale = currLayer-&gt;client()-&gt;pageScaleFactor();

Would it make sense to add GraphicsLayer::pageScaleFactor() that does this?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:819
&gt; +    float pageScaleFactor = 1;

No need to initialize this.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:830
&gt; +        pageScaleFactor = m_client ? m_client-&gt;pageScaleFactor() : 1;

Would it make sense to add GraphicsLayer::pageScaleFactor() that does this?

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:2439
&gt; +    FloatRect alignedBounds = enclosingIntRect(scaledBounds);

Why always expand? I am afraid that this will turn abutting layers into overlapping layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438220</commentid>
    <comment_count>3</comment_count>
      <attachid>101107</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 17:59:24 -0700</bug_when>
    <thetext>Created attachment 101107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438222</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 18:01:13 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 101102 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=101102&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:2439
&gt; &gt; +    FloatRect alignedBounds = enclosingIntRect(scaledBounds);
&gt; 
&gt; Why always expand? I am afraid that this will turn abutting layers into overlapping layers.

The added parts of the layers will always be transparent, so new overlap should not matter.

New patch ensures that we only set the &apos;applies scale&apos; bit for the RenderView in main frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438227</commentid>
    <comment_count>5</comment_count>
      <attachid>101109</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 18:18:16 -0700</bug_when>
    <thetext>Created attachment 101109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438234</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-16 19:34:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/91161</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101102</attachid>
            <date>2011-07-16 15:48:04 -0700</date>
            <delta_ts>2011-07-16 17:59:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64658-20110716154803.patch</filename>
            <type>text/plain</type>
            <size>38401</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTExNDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZWE4NGEwNTY5ZTE5MDQ5
MTk3MzkzNWFhMDJlNmYwZjZlOTVmNDk3Li44ODliYWRiYWRjM2RhZjgyMzdlZmU4YTMwMjdhYjQ3
OWQzMTVkZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMDctMTYgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8g
YXR0ZW1wdCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3
aGVuIHBhZ2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudGVkIGEgbmV3IGJlaGF2aW9yIG9uIEdyYXBo
aWNzTGF5ZXJDQSB3aGljaCBhdHRlbXB0cyB0byBrZWVwIGxheWVycyBwaXhlbAorICAgICAgICBh
bGlnbmVkIGFzIHBhZ2Ugc2NhbGUgY2hhbmdlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVx
dWlyZXMgZGVub3Rpbmcgd2hpY2ggbGF5ZXIgaGFzIHRoZSBwYWdlIHNjYWxlIG9uIGl0IChpdCBp
cyBhc3N1bWVkIHRvIGJlCisgICAgICAgIGFscmVhZHkgYWxpZ25lZCksIHZpYSBzZXRBcHBsaWVz
UGFnZVNjYWxlKCkuIFdlIGFsc28gbm93IHBhc3MgYSBzY2FsZSBhbmQgb2Zmc2V0CisgICAgICAg
IGRvd24gdGhyb3VnaCB0aGUgR3JhcGhpY3NMYXllciBjb21taXRzLCB3aGljaCBhcmUgdXNlZCB0
byBtYXAgbGF5ZXIgYm91bmRzIHRvIGRpc3BsYXkKKyAgICAgICAgY29vcmRpbmF0ZXMgZm9yIHJv
dW5kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOiBO
ZXcgZmxhZ3MgYW5kIGdldHRlcnMvc2V0dGVycyBmb3IgcGl4ZWwgYWxpZ25tZW50LAorICAgICAg
ICBhbmQgdGhlIGxheWVyIHRoYXQgaXMgdGhlIGFwcGxpZXIgb2YgdGhlIHNjYWxlLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0S2VlcFBpeGVsQWxpZ25lZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjprZWVwUGl4ZWxBbGlnbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldEFwcGxpZXNQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6YXBwbGllc1BhZ2VTY2FsZSk6CisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllcik6IEluaXRpYWxpemUgdGhlIG5ldyBmbGFn
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQ6OmJhY2tpbmdTY2FsZUZhY3Rv
cik6IFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQ6OnBhZ2VTY2FsZUZhY3Rvcik6IERpdHRvLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6IFBhc3Mgc2NhbGUgYW5kIGJh
c2UtcmVsYXRpdmUgb2Zmc2V0IGFyb3VuZAorICAgICAgICB0byBtZXRob2RzIHRoYXQgbmVlZCB0
byB1cGRhdGUgZ2VvbWV0cnkgZHVyaW5nIGNvbW1pdC4KKyAgICAgICAgU29tZSBuZXcgbWV0aG9k
cyByZWxhdGVkIHRvIHBpeGVsIGFsaWdubWVudC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOiBGb3Igc2luZ2xl
LWxheWVyIGNvbW1pdHMsCisgICAgICAgIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgYmFzZS1yZWxh
dGl2ZSBvZmZzZXQsIGFuZCB3aGV0aGVyIHdlJ3JlIHVuZGVyIHRoZSBsYXllcgorICAgICAgICBh
cHBseWluZyB0aGUgc2NhbGUgYnkgd2Fsa2luZyB1cCB0aGUgdHJlZS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSk6IENhbGwKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Uo
KSB0byBnZXQgc2NhbGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgdGFyZ2V0IGxheWVyLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyk6IFBhc3MgZmxhZ3MgcmVsYXRlZCB0byBzY2FsaW5nLgorICAgICAgICBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlIGlzIGFuIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYW5jZXN0b3IgbGF5ZXIg
a25vd24gdG8gYmUgcGl4ZWwKKyAgICAgICAgYWxpZ25lZC4gYWZmZWN0ZWRCeVBhZ2VTY2FsZSBp
cyB0cnVlIGZvciBsYXllcnMgd2hpY2ggYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSBsYXllcgorICAg
ICAgICB3aGljaCBhcHBsaWVzIHRoZSBzY2FsZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6IFBh
c3Mgc2NhbGUgYW5kIG9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlR2VvbWV0cnkpOiBDYWxsIGNvbXB1dGVQaXhlbEFsaWdubWVudCgpIHRvIGdldAorICAg
ICAgICBwaXhlbC1hbGlnbmVkIGdlb21ldHJ5LiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgYXBwbGll
ZCB0byBsYXllcnMgd2hpY2ggcmVuZGVyIGNvbnRlbnQsCisgICAgICAgIHNvIHJlLW9yZ2FuaXpl
IHRoZSBjb2RlIHRvIHVzZSB0aGUgdW5jaGFuZ2VkIGxheWVyIGdlb21ldHJ5IGZvciB0aGUgc3Ry
dWN0dXJhbCBsYXllciwKKyAgICAgICAgYnV0IHRvIGFwcGx5IHRoZSBhZGp1c3RlZCBnZW9tZXRy
eSB0byB0aGUgbV9sYXllci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcik6IFBhc3Mgc2NhbGUgYW5kIG9mZnNldC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJh
d3NDb250ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0S2VlcFBpeGVsQWxpZ25lZCk6IFdoZW4gc2V0LCBk
aXJ0aWVzIGZsYWdzCisgICAgICAgIGZvciBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSByZWNv
bXB1dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpub3RlQ2hhbmdlc0Zv
clNjYWxlU2Vuc2l0aXZlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVncmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxpZ25t
ZW50KTogTWFwIG91ciBib3VuZHMgdG8gc2NyZWVuCisgICAgICAgIHNjYWxlLCByb3VuZCBvdXQg
dG8gYW4gaW50ZWdyYWwgcmVjdCwgdGhlbiBtYXAgaXQgYmFjaywgYWRkaW5nIGEgZnVkZ2UgZmFj
dG9yCisgICAgICAgIHNvIHRoYXQgQ0EgYmFja2luZyBzdG9yZXMgZG9uJ3QgZW5kIHVwIGJlaW5n
IHNtYWxsZXIgdGhhbiB3ZSBleHBlY3QgYmVjYXVzZQorICAgICAgICBvZiBpbnRlZ2VyIHRydW5j
YXRpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMYXllcik6
IFR1cm4gb24gcGl4ZWwgYWxpZ25tZW50IGlmCisgICAgICAgIHRoZSBjb21wb3NpdG9yIHNheXMg
c28uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlH
cmFwaGljc0xheWVyKTogU2V0IHRoZSBSZW5kZXJWaWV3J3MKKyAgICAgICAgbGF5ZXIgYXMgdGhl
IG9uZSBhcHBseWluZyB0aGUgc2NhbGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmg6IE5ldyBtZXRob2QuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmtlZXBMYXllcnNQaXhlbEFsaWduZWQpOiBNYXN0ZXIgc3dpdGNoIGZvcgorICAgICAgICBw
aXhlbCBhbGlnbm1lbnQuIERlZmF1bHQgdG8gb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcik6IEdpdmUgdGhlIHR3byByb290LWlzaCBs
YXllcnMKKyAgICAgICAgYSBjbGllbnQgc28gdGhleSBjYW4gYXNrIGZvciBwYWdlIHNjYWxlIGlm
IG5lY2Vzc2FyeS4KKwogMjAxMS0wNy0xNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCA4ZGZiOGM3NGQ1Mzli
MmMyOGY1YTA1ZmJjM2YzMzg4MDJiZDM4YTdiLi5lZDA3OWI4YWJlN2YzZDBiNzRiZWVmNzA4MWU0
YTI3ZTVlMWUwZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcApAQCAtNzQsNiArNzQsOCBAQCBHcmFwaGljc0xheWVyOjpHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1fbWFza3NUb0Jv
dW5kcyhmYWxzZSkKICAgICAsIG1fZHJhd3NDb250ZW50KGZhbHNlKQogICAgICwgbV9hY2NlbGVy
YXRlc0RyYXdpbmcoZmFsc2UpCisgICAgLCBtX2tlZXBQaXhlbEFsaWduZWQoZmFsc2UpCisgICAg
LCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nUGhhc2UoR3JhcGhp
Y3NMYXllclBhaW50QWxsKQogICAgICwgbV9jb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNUb3BEb3duKQogICAgICwgbV9wYXJlbnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCBmNmEzNzg1MjNiMDc4
MmFhM2E5ZTdmN2M5ZjdhNGY0Nzc5NjI2NjlmLi5kNWU1ZGM2OGE2YWIzMDc5YzY0N2RhMDc4NGM1
MzEwZDljNTJmY2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oCkBAIC0zNTAsNiArMzUwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxvYXQpOwogICAgIHZpcnR1YWwgZmxvYXQgYWNjdW11
bGF0ZWRPcGFjaXR5KCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0S2VlcFBpeGVsQWxp
Z25lZChib29sIGtlZXBBbGlnbmVkKSB7IG1fa2VlcFBpeGVsQWxpZ25lZCA9IGtlZXBBbGlnbmVk
OyB9CisgICAgdmlydHVhbCBib29sIGtlZXBQaXhlbEFsaWduZWQoKSBjb25zdCB7IHJldHVybiBt
X2tlZXBQaXhlbEFsaWduZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldEFwcGxpZXNQYWdlU2NhbGUo
Ym9vbCBhcHBsaWVzU2NhbGUgPSB0cnVlKSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9IGFwcGxpZXNT
Y2FsZTsgfQorICAgIGJvb2wgYXBwbGllc1BhZ2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bGllc1BhZ2VTY2FsZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKSB7IH0KICAgICB2b2lkIG5vdGVQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVz
Y2VuZGFudHMoKTsKIApAQCAtNDE2LDYgKzQyMiw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1f
bWFza3NUb0JvdW5kcyA6IDE7CiAgICAgYm9vbCBtX2RyYXdzQ29udGVudCA6IDE7CiAgICAgYm9v
bCBtX2FjY2VsZXJhdGVzRHJhd2luZyA6IDE7CisgICAgYm9vbCBtX2tlZXBQaXhlbEFsaWduZWQg
OiAxOworICAgIGJvb2wgbV9hcHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUgbGF5
ZXIgd2hpY2ggaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCiAKICAgICBHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50aW5nUGhhc2U7CiAgICAgQ29tcG9zaXRpbmdDb29y
ZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVudHNPcmllbnRhdGlvbjsgLy8gYWZmZWN0cyBvcmll
bnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCmluZGV4IGNiMjU0ZDcwMWQ0YzBm
NGUyZGQxNWMyNTM2NGFjMmMzODgwM2EzNDkuLmY2NmIzNjI0MGQ2YzBjNjFjNmVhNGI2MTliYTJk
YmYwNWE1MTE2ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKQEAgLTY1LDEwICs2NSwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xh
eWVyKikgY29uc3QgeyB9CiAKICAgICAvLyBNdWx0aXBsaWVyIGZvciBiYWNraW5nIHN0b3JlIHNp
emUsIHJlbGF0ZWQgdG8gaGlnaCBEUEkuCi0gICAgdmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVG
YWN0b3IoKSBjb25zdCA9IDA7Ci0gICAgLy8gU2NhbGluZyBmYWN0b3Igb2YgdGhlIHBhZ2UuCi0g
ICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7Ci0gICAgCisgICAg
dmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9Cisg
ICAgLy8gUGFnZSBzY2FsZSBmYWN0b3IuCisgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkg
Y29uc3QgPSAwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDg4YzMxMjE3MTljZDk0YmJkNGRiMDUw
ZjJjYTE2NTVlZmExOWRiNWIuLjJlMTE4MGM5MTc5MTkzNGRlZjA4NzRmZDJiMTRiOGY1Yjc5Nzgz
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcApAQCAtNzkxLDYgKzc5MSwyNCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6bGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0KIH0KIAor
RmxvYXRQb2ludCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNl
KGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0Cit7CisgICAgcGFnZVNjYWxlID0gMTsKKworICAgIEZs
b2F0UG9pbnQgb2Zmc2V0OworICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVy
ID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKSB7Cisg
ICAgICAgIGlmIChjdXJyTGF5ZXItPmFwcGxpZXNQYWdlU2NhbGUoKSkgeworICAgICAgICAgICAg
aWYgKGN1cnJMYXllci0+Y2xpZW50KCkpCisgICAgICAgICAgICAgICAgcGFnZVNjYWxlID0gY3Vy
ckxheWVyLT5jbGllbnQoKS0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgICAgICAgICByZXR1cm4g
b2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IGN1cnJMYXllci0+cG9zaXRp
b24oKTsKKyAgICB9CisKKyAgICByZXR1cm4gRmxvYXRQb2ludCgpOworfQorCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQogewogICAgIHJlY3Vyc2l2ZUNvbW1p
dENoYW5nZXMoKTsKQEAgLTc5OCwyOCArODE2LDQwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSgpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogewotICAgIGNvbW1pdExheWVyQ2hhbmdlc0Jl
Zm9yZVN1YmxheWVycygpOworICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IDE7CisgICAgRmxv
YXRQb2ludCBvZmZzZXQgPSBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZShwYWdlU2NhbGVG
YWN0b3IpOworICAgIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhwYWdlU2NhbGVG
YWN0b3IsIG9mZnNldCk7CiAgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoZmxvYXQgcGFnZVNjYWxl
RmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBib29sIGFm
ZmVjdGVkQnlQYWdlU2NhbGUpCiB7CiAgICAgYm9vbCBoYWRDaGFuZ2VzID0gbV91bmNvbW1pdHRl
ZENoYW5nZXM7CiAgICAgCi0gICAgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7
CisgICAgaWYgKGFwcGxpZXNQYWdlU2NhbGUoKSkgeworICAgICAgICBwYWdlU2NhbGVGYWN0b3Ig
PSBtX2NsaWVudCA/IG1fY2xpZW50LT5wYWdlU2NhbGVGYWN0b3IoKSA6IDE7CisgICAgICAgIGFm
ZmVjdGVkQnlQYWdlU2NhbGUgPSB0cnVlOworICAgIH0KKworICAgIC8vIEFjY3VtdWxhdGUgYW4g
b2Zmc2V0IGZyb20gdGhlIGFuY2VzdHJhbCBwaXhlbC1hbGlnbmVkIGxheWVyLgorICAgIEZsb2F0
UG9pbnQgYmFzZVJlbGF0aXZlUG9zaXRpb24gPSBwb3NpdGlvblJlbGF0aXZlVG9CYXNlOworICAg
IGlmIChhZmZlY3RlZEJ5UGFnZVNjYWxlKQorICAgICAgICBiYXNlUmVsYXRpdmVQb3NpdGlvbiAr
PSBtX3Bvc2l0aW9uOworICAgIAorICAgIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVy
cyhwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uKTsKIAogICAgIGlmIChtX21h
c2tMYXllcikKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9tYXNrTGF5
ZXIpLT5jb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKTsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9tYXNrTGF5ZXIpLT5jb21taXRMYXllckNoYW5nZXNC
ZWZvcmVTdWJsYXllcnMocGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbik7CiAK
ICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVu
KCk7CiAgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGlj
c0xheWVyQ0EqIGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4oY2hpbGRM
YXllcnNbaV0pOwotICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcygpOwor
ICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVGYWN0b3Is
IGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKICAgICB9CiAKICAg
ICBpZiAobV9yZXBsaWNhTGF5ZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJD
QSo+KG1fcmVwbGljYUxheWVyKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcygpOworICAgICAgICBz
dGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX3JlcGxpY2FMYXllciktPnJlY3Vyc2l2ZUNv
bW1pdENoYW5nZXMocGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwgYWZmZWN0
ZWRCeVBhZ2VTY2FsZSk7CiAKICAgICBpZiAobV9tYXNrTGF5ZXIpCiAgICAgICAgIHN0YXRpY19j
YXN0PEdyYXBoaWNzTGF5ZXJDQSo+KG1fbWFza0xheWVyKS0+Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0
ZXJTdWJsYXllcnMoKTsKQEAgLTgzMCwxNCArODYwLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKCkKICAgICAgICAgY2xpZW50KCktPmRpZENvbW1pdENo
YW5nZXNGb3JMYXllcih0aGlzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExh
eWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycygpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0
TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKICAgICBpZiAoIW1fdW5jb21t
aXR0ZWRDaGFuZ2VzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBOZWVkIHRvIGhhbmRsZSBQ
cmVzZXJ2ZXMzRENoYW5nZWQgZmlyc3QsIGJlY2F1c2UgaXQgYWZmZWN0cyB3aGljaCBsYXllcnMg
c3Vic2VxdWVudCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIHRvCiAgICAgaWYgKG1fdW5jb21taXR0
ZWRDaGFuZ2VzICYgKFByZXNlcnZlczNEQ2hhbmdlZCB8IFJlcGxpY2F0ZWRMYXllckNoYW5nZWQp
KQotICAgICAgICB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKTsKKyAgICAgICAgdXBkYXRlU3RydWN0
dXJhbExheWVyKHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAKICAg
ICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBOYW1lQ2hhbmdlZCkKICAgICAgICAgdXBkYXRl
TGF5ZXJOYW1lcygpOwpAQCAtODU4LDcgKzg4OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpj
b21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgICAgICB1cGRhdGVTdWJsYXll
ckxpc3QoKTsKIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEdlb21ldHJ5Q2hhbmdl
ZCkKLSAgICAgICAgdXBkYXRlR2VvbWV0cnkoKTsKKyAgICAgICAgdXBkYXRlR2VvbWV0cnkocGFn
ZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAogICAgIGlmIChtX3VuY29t
bWl0dGVkQ2hhbmdlcyAmIFRyYW5zZm9ybUNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZVRyYW5zZm9y
bSgpOwpAQCAtODcwLDcgKzkwMCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21taXRMYXll
ckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgICAgICB1cGRhdGVNYXNrc1RvQm91bmRzKCk7
CiAgICAgCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRHJhd3NDb250ZW50Q2hhbmdl
ZCkKLSAgICAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKKyAgICAgICAgdXBkYXRlTGF5
ZXJEcmF3c0NvbnRlbnQocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsK
IAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzT3BhcXVlQ2hhbmdlZCkK
ICAgICAgICAgdXBkYXRlQ29udGVudHNPcGFxdWUoKTsKQEAgLTkwMCw3ICs5MzAsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCkKICAg
ICAgICAgdXBkYXRlQWNjZWxlcmF0ZXNEcmF3aW5nKCk7CiAgICAgCiAgICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgQ29udGVudHNTY2FsZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZUNvbnRl
bnRzU2NhbGUoKTsKKyAgICAgICAgdXBkYXRlQ29udGVudHNTY2FsZShwYWdlU2NhbGVGYWN0b3Is
IHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29t
bWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKQpAQCAtOTcyLDcwICsxMDAyLDc1IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVTdWJsYXllckxpc3QoKQogICAgICAgICBtX2xheWVy
LT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUdlb21ldHJ5KCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShm
bG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpCiB7Ci0gICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRMYXllciht
X3NpemUpOworICAgIEZsb2F0UG9pbnQgc2NhbGVkUG9zaXRpb247CisgICAgRmxvYXRQb2ludDNE
IHNjYWxlZEFuY2hvclBvaW50OworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplOworICAgIEZsb2F0
U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNldDsKKyAgICBjb21wdXRlUGl4ZWxBbGlnbm1lbnQocGFn
ZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBzY2FsZWRQb3NpdGlvbiwgc2Nh
bGVkU2l6ZSwgc2NhbGVkQW5jaG9yUG9pbnQsIHBpeGVsQWxpZ25tZW50T2Zmc2V0KTsKKworICAg
IGJvb2wgbmVlZFRpbGVkTGF5ZXIgPSByZXF1aXJlc1RpbGVkTGF5ZXIocGFnZVNjYWxlRmFjdG9y
LCBzY2FsZWRTaXplKTsKICAgICBpZiAobmVlZFRpbGVkTGF5ZXIgIT0gbV91c2luZ1RpbGVkTGF5
ZXIpCi0gICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVkTGF5ZXIpOworICAg
ICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyLCBwYWdlU2NhbGVGYWN0
b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0gICAgRmxvYXRTaXplIHVzZWRTaXplID0g
bV91c2luZ1RpbGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNpemUoKSA6IG1fc2l6ZTsKLSAgICBGbG9h
dFJlY3QgYm91bmRzUmVjdChtX2JvdW5kc09yaWdpbiwgdXNlZFNpemUpOworICAgIEZsb2F0U2l6
ZSB1c2VkU2l6ZSA9IG1fdXNpbmdUaWxlZExheWVyID8gY29uc3RyYWluZWRTaXplKCkgOiBzY2Fs
ZWRTaXplOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZEJvdW5kcyhtX2JvdW5kc09yaWdpbiAtIHBp
eGVsQWxpZ25tZW50T2Zmc2V0LCB1c2VkU2l6ZSk7CiAKICAgICAvLyBVcGRhdGUgcG9zaXRpb24u
CiAgICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBieSB0aGUgbGF5ZXIgYW5j
aG9yIHBvaW50LgotICAgIEZsb2F0UG9pbnQgcG9zUG9pbnQobV9wb3NpdGlvbi54KCkgKyBtX2Fu
Y2hvclBvaW50LngoKSAqIHVzZWRTaXplLndpZHRoKCksIG1fcG9zaXRpb24ueSgpICsgbV9hbmNo
b3JQb2ludC55KCkgKiB1c2VkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNl
dFBvc2l0aW9uKHBvc1BvaW50KTsKLQotICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1hcCA9
IHByaW1hcnlMYXllckNsb25lcygpKSB7Ci0gICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1BvaW50OwotICAg
ICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+
Zmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBw
b3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAotICAgICAgICAgICAgICAg
IC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCi0gICAgICAgICAg
ICAgICAgY2xvbmVQb3NpdGlvbiA9IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9uKGNsb25lUG9zaXRp
b24pOwotICAgICAgICB9Ci0gICAgfQorICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbihz
Y2FsZWRQb3NpdGlvbi54KCkgKyBzY2FsZWRBbmNob3JQb2ludC54KCkgKiB1c2VkU2l6ZS53aWR0
aCgpLCBzY2FsZWRQb3NpdGlvbi55KCkgKyBzY2FsZWRBbmNob3JQb2ludC55KCkgKiB1c2VkU2l6
ZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBVcGRhdGUgYm91bmRzLgotICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCByZXNpemUgbV9jb250ZW50c0xheWVyLiBJdCdzIHVwIHRoZSBjYWxsZXIgdG8gZG8g
dGhhdC4KICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmFs
TGF5ZXItPnNldEJvdW5kcyhib3VuZHNSZWN0KTsKKyAgICAgICAgRmxvYXRQb2ludCBsYXllclBv
c2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgo
KSwgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyhtX2JvdW5kc09yaWdpbiwgbV9zaXplKTsK
ICAgICAgICAgCisgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRQb3NpdGlvbihsYXllclBv
c2l0aW9uKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kcyhsYXllckJvdW5k
cyk7CisgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBv
aW50KTsKKwogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVy
YWxMYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Qm91bmRzKGJvdW5kc1JlY3Qp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0aGUgY29udGVudHMgbGF5
ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24gaXMgY2VudGVyLXJlbGF0
aXZlLgotICAgICAgICBDR1BvaW50IGNlbnRlclBvaW50ID0gQ0dQb2ludE1ha2UobV9zaXplLndp
ZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsKLSAgICAgICAgbV9sYXllci0+
c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOworICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBsYXllclBv
c2l0aW9uOworCisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGlj
YXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1haW50
YWluIHRoZSBzcGVjaWFsLWNhc2UgcG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3Vi
dHJlZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0
ZWRMYXllclJvb3QoKS4KKyAgICAgICAgICAgICAgICAgICAgY2xvbmVQb3NpdGlvbiA9IHBvc2l0
aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewotICAgICAg
ICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgp
OwotICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNs
b25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOworICAgICAgICAgICAgICAgIGNsb25lLT5z
ZXRQb3NpdGlvbihjbG9uZVBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBjbG9uZS0+c2V0Qm91
bmRzKGxheWVyQm91bmRzKTsKKyAgICAgICAgICAgICAgICBjbG9uZS0+c2V0QW5jaG9yUG9pbnQo
bV9hbmNob3JQb2ludCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgc3RydWN0dXJhbCBsYXllciwgd2UganVzdCB1c2UgMC41LCAwLjUgZm9yIHRo
ZSBhbmNob3IgcG9pbnQgb2YgdGhlIG1haW4gbGF5ZXIuCisgICAgICAgIHNjYWxlZEFuY2hvclBv
aW50ID0gRmxvYXRQb2ludCgwLjVmLCAwLjVmKTsKKyAgICAgICAgYWRqdXN0ZWRQb3NpdGlvbiA9
IEZsb2F0UG9pbnQoc2NhbGVkQW5jaG9yUG9pbnQueCgpICogdXNlZFNpemUud2lkdGgoKSAtIHBp
eGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCksIHNjYWxlZEFuY2hvclBvaW50LnkoKSAqIHVzZWRT
aXplLmhlaWdodCgpIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQuaGVpZ2h0KCkpOwogICAgIH0KICAg
ICAKLSAgICBtX2xheWVyLT5zZXRCb3VuZHMoYm91bmRzUmVjdCk7CisgICAgbV9sYXllci0+c2V0
UG9zaXRpb24oYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgbV9sYXllci0+c2V0Qm91bmRzKGFkanVz
dGVkQm91bmRzKTsKKyAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2lu
dCk7CisKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdl
dCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25l
TWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRCb3VuZHMoYm91bmRzUmVjdCk7Ci0gICAgfQotICAgIAotICAgIC8vIFVwZGF0
ZSBhbmNob3IgcG9pbnQuCi0gICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50KG1fYW5j
aG9yUG9pbnQpOworICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxh
eWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgUGxh
dGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBGbG9h
dFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwogCi0gICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKLSAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeyAgIAotICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBj
dXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgY3VyckxheWVyLT5zZXRB
bmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKKyAgICAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFs
TGF5ZXIgJiYgbV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJz
dCkpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0
aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCisgICAgICAgICAgICAgICAgLy8g
d2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KKyAgICAgICAgICAgICAg
ICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjbG9uZS0+c2V0UG9zaXRpb24oY2xvbmVQb3NpdGlvbik7Cisg
ICAgICAgICAgICBjbG9uZS0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsKKyAgICAgICAgICAg
IGNsb25lLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2ludCk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTExMTcsMTIgKzExNTIsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0
ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlU3RydWN0dXJhbExheWVyKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVTdHJ1
Y3R1cmFsTGF5ZXIoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvblJlbGF0aXZlVG9CYXNlKQogewotICAgIGVuc3VyZVN0cnVjdHVyYWxMYXllcihzdHJ1Y3R1
cmFsTGF5ZXJQdXJwb3NlKCkpOworICAgIGVuc3VyZVN0cnVjdHVyYWxMYXllcihzdHJ1Y3R1cmFs
TGF5ZXJQdXJwb3NlKCksIHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0
dXJhbExheWVyUHVycG9zZSBwdXJwb3NlKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0
cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2F0IHBhZ2VT
Y2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsK
ICAgICBpZiAocHVycG9zZSA9PSBOb1N0cnVjdHVyYWxMYXllcikgewogICAgICAgICBpZiAobV9z
dHJ1Y3R1cmFsTGF5ZXIpIHsKQEAgLTExNDEsNyArMTE3Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3Nl
KQogICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSAwOwogCiAgICAgICAgICAgICAvLyBV
cGRhdGUgdGhlIHByb3BlcnRpZXMgb2YgbV9sYXllciBub3cgdGhhdCB3ZSBubyBsb25nZXIgaGF2
ZSBhIHN0cnVjdHVyYWwgbGF5ZXIuCi0gICAgICAgICAgICB1cGRhdGVHZW9tZXRyeSgpOworICAg
ICAgICAgICAgdXBkYXRlR2VvbWV0cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlKTsKICAgICAgICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgICAgICAgICAgdXBk
YXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKTsKIApAQCAtMTE3Nyw3ICsxMjEyLDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3Nl
IHB1cnBvc2UpCiAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBw
cm9wZXJ0aWVzIG9mIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgotICAgIHVwZGF0ZUdlb21ldHJ5KCk7
CisgICAgdXBkYXRlR2VvbWV0cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9C
YXNlKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICB1cGRhdGVDaGlsZHJlblRyYW5zZm9y
bSgpOwogICAgIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOwpAQCAtMTIyNSwxMSArMTI2MCwx
MSBAQCBHcmFwaGljc0xheWVyQ0E6OlN0cnVjdHVyYWxMYXllclB1cnBvc2UgR3JhcGhpY3NMYXll
ckNBOjpzdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKAogICAgIHJldHVybiBOb1N0cnVjdHVyYWxMYXll
cjsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KCkK
K3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCiB7
Ci0gICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRMYXllcihtX3NpemUpOwor
ICAgIGJvb2wgbmVlZFRpbGVkTGF5ZXIgPSByZXF1aXJlc1RpbGVkTGF5ZXIocGFnZVNjYWxlRmFj
dG9yLCBtX3NpemUpOwogICAgIGlmIChuZWVkVGlsZWRMYXllciAhPSBtX3VzaW5nVGlsZWRMYXll
cikKLSAgICAgICAgc3dhcEZyb21PclRvVGlsZWRMYXllcihuZWVkVGlsZWRMYXllcik7CisgICAg
ICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVkTGF5ZXIsIHBhZ2VTY2FsZUZhY3Rv
ciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAKICAgICBpZiAobV9kcmF3c0NvbnRlbnQpCiAg
ICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtMTk1MSwxNSArMTk4NiwxMyBA
QCBzdGF0aWMgZmxvYXQgY2xhbXBlZENvbnRlbnRzU2NhbGVGb3JTY2FsZShmbG9hdCBzY2FsZSkK
ICAgICByZXR1cm4gbWF4KG1pblNjYWxlLCBtaW4oc2NhbGUsIG1heFNjYWxlKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1NjYWxlKCkKK3ZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVDb250ZW50c1NjYWxlKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKLSAgICBib29sIG5lZWRUaWxl
ZExheWVyID0gcmVxdWlyZXNUaWxlZExheWVyKG1fc2l6ZSk7CisgICAgYm9vbCBuZWVkVGlsZWRM
YXllciA9IHJlcXVpcmVzVGlsZWRMYXllcihwYWdlU2NhbGVGYWN0b3IsIG1fc2l6ZSk7CiAgICAg
aWYgKG5lZWRUaWxlZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKQotICAgICAgICBzd2FwRnJv
bU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyKTsKKyAgICAgICAgc3dhcEZyb21PclRvVGls
ZWRMYXllcihuZWVkVGlsZWRMYXllciwgcGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlKTsKIAogICAgIGZsb2F0IGJhY2tpbmdTY2FsZUZhY3RvciA9IG1fY2xpZW50ID8gbV9j
bGllbnQtPmJhY2tpbmdTY2FsZUZhY3RvcigpIDogMTsKLSAgICBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IgPSBtX2NsaWVudCA/IG1fY2xpZW50LT5wYWdlU2NhbGVGYWN0b3IoKSA6IDE7Ci0KICAgICBm
bG9hdCBjb250ZW50c1NjYWxlID0gY2xhbXBlZENvbnRlbnRzU2NhbGVGb3JTY2FsZShwYWdlU2Nh
bGVGYWN0b3IgKiBiYWNraW5nU2NhbGVGYWN0b3IpOwogICAgIAogICAgIG1fbGF5ZXItPnNldENv
bnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSk7CkBAIC0yMDEwLDE4ICsyMDQzLDE5IEBAIEZsb2F0
U2l6ZSBHcmFwaGljc0xheWVyQ0E6OmNvbnN0cmFpbmVkU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IGNvbnN0cmFpbmVkU2l6ZTsKIH0KIAotYm9vbCBHcmFwaGljc0xheWVyQ0E6OnJlcXVpcmVzVGls
ZWRMYXllcihjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5ZXJD
QTo6cmVxdWlyZXNUaWxlZExheWVyKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRT
aXplJiBzaXplKSBjb25zdAogewogICAgIGlmICghbV9kcmF3c0NvbnRlbnQgfHwgIW1fYWxsb3dU
aWxlZExheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBjb250ZW50c1Nj
YWxlID0gbV9jbGllbnQgPyBtX2NsaWVudC0+YmFja2luZ1NjYWxlRmFjdG9yKCkgKiBtX2NsaWVu
dC0+cGFnZVNjYWxlRmFjdG9yKCkgOiAxOworICAgIGZsb2F0IGJhY2tpbmdTY2FsZUZhY3RvciA9
IG1fY2xpZW50ID8gbV9jbGllbnQtPmJhY2tpbmdTY2FsZUZhY3RvcigpIDogMTsKKyAgICBmbG9h
dCBjb250ZW50c1NjYWxlID0gYmFja2luZ1NjYWxlRmFjdG9yICogcGFnZVNjYWxlRmFjdG9yOwog
CiAgICAgLy8gRklYTUU6IGNhdGNoIHplcm8tc2l6ZSBoZWlnaHQgb3Igd2lkdGggaGVyZSAob3Ig
ZWFybGllcik/CiAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIGNvbnRlbnRzU2NhbGUgPiBjTWF4
UGl4ZWxEaW1lbnNpb24gfHwgc2l6ZS5oZWlnaHQoKSAqIGNvbnRlbnRzU2NhbGUgPiBjTWF4UGl4
ZWxEaW1lbnNpb247CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxl
ZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzd2FwRnJv
bU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewogICAgIEFTU0VS
VCh1c2VUaWxlZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKTsKICAgICBSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBvbGRMYXllciA9IG1fbGF5ZXI7CkBAIC0yMDUwLDE0ICsyMDg0LDE0IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRM
YXllcikKIAogICAgIHVwZGF0ZUNvbnRlbnRzVHJhbnNmb3JtKCk7CiAKLSAgICB1cGRhdGVHZW9t
ZXRyeSgpOworICAgIHVwZGF0ZUdlb21ldHJ5KHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxh
dGl2ZVRvQmFzZSk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgdXBkYXRlQ2hpbGRyZW5U
cmFuc2Zvcm0oKTsKICAgICB1cGRhdGVNYXNrc1RvQm91bmRzKCk7CiAgICAgdXBkYXRlQ29udGVu
dHNPcGFxdWUoKTsKICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICB1cGRhdGVM
YXllckJhY2tncm91bmRDb2xvcigpOwotICAgIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsKKyAgICB1
cGRhdGVDb250ZW50c1NjYWxlKHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZSk7CiAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKICAgICAKICNpZm5kZWYgTkRFQlVHCkBA
IC0yMzYyLDYgKzIzOTYsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlP
bkxheWVyKCkKICNlbmRpZgogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0S2VlcFBpeGVs
QWxpZ25lZChib29sIGtlZXBBbGlnbmVkKQoreworICAgIGlmIChrZWVwQWxpZ25lZCA9PSBtX2tl
ZXBQaXhlbEFsaWduZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEtlZXBQaXhlbEFsaWduZWQoa2VlcEFsaWduZWQpOworICAgIG5vdGVDaGFuZ2VzRm9yU2NhbGVT
ZW5zaXRpdmVQcm9wZXJ0aWVzKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCkKIHsKICAgICBub3RlQ2hhbmdlc0ZvclNjYWxlU2Vuc2l0aXZlUHJv
cGVydGllcygpOwpAQCAtMjM2OSw3ICsyNDEyLDU1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpw
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6Om5vdGVDaGFu
Z2VzRm9yU2NhbGVTZW5zaXRpdmVQcm9wZXJ0aWVzKCkKIHsKLSAgICBub3RlTGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoQ29udGVudHNTY2FsZUNoYW5nZWQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChHZW9tZXRyeUNoYW5nZWQgfCBDb250ZW50c1NjYWxlQ2hhbmdlZCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc0ludGVncmFsKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlKSA9PSB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ0E6
OmNvbXB1dGVQaXhlbEFsaWdubWVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsCisgICAgRmxvYXRQb2ludCYgcG9zaXRpb24s
IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRQb2ludDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBh
bGlnbm1lbnRPZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKCFtX2tlZXBQaXhlbEFsaWduZWQgfHwg
aXNJbnRlZ3JhbChwYWdlU2NhbGVGYWN0b3IpIHx8ICFtX2RyYXdzQ29udGVudCB8fCBtX21hc2tz
VG9Cb3VuZHMpIHsKKyAgICAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICBzaXpl
ID0gbV9zaXplOworICAgICAgICBhbmNob3JQb2ludCA9IG1fYW5jaG9yUG9pbnQ7CisgICAgICAg
IGFsaWdubWVudE9mZnNldCA9IEZsb2F0U2l6ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEZsb2F0UmVjdCBiYXNlUmVsYXRpdmVCb3VuZHMocG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSwgbV9zaXplKTsKKyAgICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRzID0gYmFzZVJlbGF0aXZl
Qm91bmRzOworICAgIC8vIFNjYWxlIGJ5IHRoZSBwYWdlIHNjYWxlIGZhY3RvciB0byBjb21wdXRl
IHRoZSBzY3JlZW4tcmVsYXRpdmUgYm91bmRzLgorICAgIHNjYWxlZEJvdW5kcy5zY2FsZShwYWdl
U2NhbGVGYWN0b3IpOworICAgIC8vIFJvdW5kIHRvIGludGVnZXIgYm91bmRhcmllcy4KKyAgICBG
bG9hdFJlY3QgYWxpZ25lZEJvdW5kcyA9IGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkQm91bmRzKTsK
KyAgICAKKyAgICAvLyBDb252ZXJ0IGJhY2sgdG8gbGF5ZXIgY29vcmRpbmF0ZXMuCisgICAgYWxp
Z25lZEJvdW5kcy5zY2FsZSgxIC8gcGFnZVNjYWxlRmFjdG9yKTsKKyAgICAKKyAgICAvLyBFcHNp
bG9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBiYWNraW5nIHN0b3JlIHNpemUgY29tcHV0
YXRpb24gaW4gQ0EsIHdoaWNoIGludm9sdmVzIGludGVnZXIgdHJ1bmNhdGlvbiwKKyAgICAvLyB3
aWxsIG1hdGNoIG91ciBhbGlnbmVkIGJvdW5kcy4KKyAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0g
MWUtNWY7CisgICAgYWxpZ25lZEJvdW5kcy5leHBhbmQoZXBzaWxvbiwgZXBzaWxvbik7CisgICAg
CisgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkgLSBh
bGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CisgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0gYWxp
Z25tZW50T2Zmc2V0OworICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsKKworICAgIC8v
IE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBuZXcgYW5jaG9yIHBvaW50IHdoaWNoIGNvbXBlbnNh
dGVzIGZvciByb3VuZGluZy4KKyAgICBmbG9hdCBhbmNob3JQb2ludFggPSBtX2FuY2hvclBvaW50
LngoKTsKKyAgICBmbG9hdCBhbmNob3JQb2ludFkgPSBtX2FuY2hvclBvaW50LnkoKTsKKyAgICAK
KyAgICBpZiAoYWxpZ25lZEJvdW5kcy53aWR0aCgpKQorICAgICAgICBhbmNob3JQb2ludFggPSAo
YmFzZVJlbGF0aXZlQm91bmRzLndpZHRoKCkgKiBhbmNob3JQb2ludFggKyBhbGlnbm1lbnRPZmZz
ZXQud2lkdGgoKSkgLyBhbGlnbmVkQm91bmRzLndpZHRoKCk7CisgICAgCisgICAgaWYgKGFsaWdu
ZWRCb3VuZHMuaGVpZ2h0KCkpCisgICAgICAgIGFuY2hvclBvaW50WSA9IChiYXNlUmVsYXRpdmVC
b3VuZHMuaGVpZ2h0KCkgKiBhbmNob3JQb2ludFkgKyBhbGlnbm1lbnRPZmZzZXQuaGVpZ2h0KCkp
IC8gYWxpZ25lZEJvdW5kcy5oZWlnaHQoKTsKKyAgICAgCisgICAgYW5jaG9yUG9pbnQgPSBGbG9h
dFBvaW50M0QoYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFksIG1fYW5jaG9yUG9pbnQueigpICog
cGFnZVNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6Om5vdGVTdWJsYXll
cnNDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggOTMyNzdlNWMwMmUwMzA1MTAxOWVjZDJkZDA2YzQ1
YzU3MTkyODYxYi4uZWM4OTA1NjI5OTI1OGM3ZjA5MzY1MTgzNTRkNGJkMGI1NTAzNDU4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmgKQEAgLTExNiw5ICsxMTYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
S2VlcFBpeGVsQWxpZ25lZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOwogCi0gICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKCk7CisgICAgdm9p
ZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UgPSBGbG9hdFBvaW50KCksIGJvb2wg
YWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKQEAgLTE4MCwxMyArMTgxLDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX3J1bm5pbmdBbmltYXRpb25zLmZpbmQoYW5pbWF0aW9uTmFtZSkgIT0gbV9ydW5u
aW5nQW5pbWF0aW9ucy5lbmQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdl
c0JlZm9yZVN1YmxheWVycygpOworICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3Vi
bGF5ZXJzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZSk7CiAgICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVy
cygpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZShmbG9h
dCYgcGFnZVNjYWxlKSBjb25zdDsKKwogICAgIEZsb2F0U2l6ZSBjb25zdHJhaW5lZFNpemUoKSBj
b25zdDsKIAotICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYpIGNv
bnN0OwotICAgIHZvaWQgc3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIp
OworICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29u
c3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgdm9pZCBzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJv
b2wgdXNlVGlsZWRMYXllciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBkZWZhdWx0Q29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0OwogICAgIHZvaWQg
dXBkYXRlQ29udGVudHNUcmFuc2Zvcm0oKTsKQEAgLTE5Niw2ICsxOTksOSBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
IAorICAgIHZvaWQgY29tcHV0ZVBpeGVsQWxpZ25tZW50KGZsb2F0IHBpeGVsQWxpZ25tZW50U2Nh
bGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsCisgICAgICAgIEZs
b2F0UG9pbnQmIHBvc2l0aW9uLCBGbG9hdFNpemUmLCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50
LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkgY29uc3Q7CisKICAgICAvLyBVc2VkIHRvIHRy
YWNrIHRoZSBwYXRoIGRvd24gdGhlIHRyZWUgZm9yIHJlcGxpY2EgbGF5ZXJzLgogICAgIHN0cnVj
dCBSZXBsaWNhU3RhdGUgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFJlcGxpY2FE
ZXB0aCA9IDE2OwpAQCAtMjYzLDE0ICsyNjksMTQgQEAgcHJpdmF0ZToKICAgICAvLyBBbGwgdGhl
c2UgInVwZGF0ZSIgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCBpbnNpZGUgYSBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMvRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUyBibG9jay4KICAgICB2b2lk
IHVwZGF0ZUxheWVyTmFtZXMoKTsKICAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotICAg
IHZvaWQgdXBkYXRlR2VvbWV0cnkoKTsKKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBp
eGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jh
c2UpOwogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgdm9pZCB1cGRhdGVDaGlsZHJl
blRyYW5zZm9ybSgpOwogICAgIHZvaWQgdXBkYXRlTWFza3NUb0JvdW5kcygpOwogICAgIHZvaWQg
dXBkYXRlQ29udGVudHNPcGFxdWUoKTsKICAgICB2b2lkIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0
eSgpOwotICAgIHZvaWQgdXBkYXRlU3RydWN0dXJhbExheWVyKCk7Ci0gICAgdm9pZCB1cGRhdGVM
YXllckRyYXdzQ29udGVudCgpOworICAgIHZvaWQgdXBkYXRlU3RydWN0dXJhbExheWVyKGZsb2F0
IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGl4ZWxBbGln
bm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAg
ICAgdm9pZCB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwogCiAgICAgdm9pZCB1cGRhdGVD
b250ZW50c0ltYWdlKCk7CkBAIC0yODMsMTQgKzI4OSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlTGF5ZXJBbmltYXRpb25zKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c05lZWRzRGlz
cGxheSgpOwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZXNEcmF3aW5nKCk7Ci0gICAgdm9pZCB1
cGRhdGVDb250ZW50c1NjYWxlKCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50c1NjYWxlKGZsb2F0
IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpOwogICAgIAogICAgIGVudW0gU3RydWN0dXJhbExheWVyUHVycG9zZSB7CiAgICAgICAg
IE5vU3RydWN0dXJhbExheWVyID0gMCwKICAgICAgICAgU3RydWN0dXJhbExheWVyRm9yUHJlc2Vy
dmVzM0QsCiAgICAgICAgIFN0cnVjdHVyYWxMYXllckZvclJlcGxpY2FGbGF0dGVuaW5nCiAgICAg
fTsKLSAgICB2b2lkIGVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3Nl
KTsKKyAgICB2b2lkIGVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3Nl
LCBmbG9hdCBwaXhlbEFsaWdubWVudFNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlKTsKICAgICBTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHN0cnVjdHVyYWxMYXll
clB1cnBvc2UoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9y
bUNBQW5pbWF0aW9uKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBiNDQ5ZjM3ODgxZDYzOWE2
NTMxYjE0NDUwODNjNjVhYzZmZWE5M2IxLi5hMmU4ZjM5MGY0NThjYjExYzI0OGY0N2M2OTc2Mjg4
YTdmZjk4Y2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcApAQCAtMTA1LDYgKzEwNSw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
UmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0xheWVyKGNvbnN0IFN0cmluZyYKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwogI2VuZGlmCisgICAgZ3JhcGhpY3NMYXllci0+
c2V0S2VlcFBpeGVsQWxpZ25lZChjb21wb3NpdG9yKCktPmtlZXBMYXllcnNQaXhlbEFsaWduZWQo
KSk7CiAgICAgcmV0dXJuIGdyYXBoaWNzTGF5ZXIucmVsZWFzZSgpOwogfQogCkBAIC0xMTUsNiAr
MTE2LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlHcmFwaGljc0xh
eWVyKCkKICAgICBsYXllck5hbWUgPSBuYW1lRm9yTGF5ZXIoKTsKICNlbmRpZgogICAgIG1fZ3Jh
cGhpY3NMYXllciA9IGNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5ZXJOYW1lKTsKKyAgICBpZiAocmVu
ZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QXBw
bGllc1BhZ2VTY2FsZSgpOwogICAgIAogICAgIHVwZGF0ZUxheWVyT3BhY2l0eShyZW5kZXJlcigp
LT5zdHlsZSgpKTsKICAgICB1cGRhdGVMYXllclRyYW5zZm9ybShyZW5kZXJlcigpLT5zdHlsZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKaW5kZXggZGFiZjM4NzcwMTcwZGYzNjYyNTY5OWFlZjgxN2I2M2ZlNjFhZjE4Zi4uNThm
MzlhYTkwNTM4Y2QzOTc4MzE4Yzg4OGQxMDhiYjIyOWVjM2MzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE1NjMsNiAr
MTU2MywxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQ29tbWl0Q2hhbmdlc0Zv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdAogICAgIC8vIE5vdGhpbmcgdG8gZG8g
aGVyZSB5ZXQuCiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjprZWVwTGF5ZXJzUGl4
ZWxBbGlnbmVkKCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHNjYWxpbmcsIGF0dGVtcHQgdG8gYWxp
Z24gY29tcG9zaXRpbmcgbGF5ZXJzIHRvIHBpeGVsIGJvdW5kYXJpZXMuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIHN0YXRpYyBib29sIHNob3VsZENvbXBvc2l0ZU92ZXJmbG93Q29udHJvbHMoU2Ny
b2xsVmlldyogdmlldykKIHsKICAgICBpZiAodmlldy0+cGxhdGZvcm1XaWRnZXQoKSkKQEAgLTE2
NDYsNyArMTY1Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5
ZXIoKQogICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3Jvb3RDb250ZW50TGF5ZXIpIHsK
LSAgICAgICAgbV9yb290Q29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOwor
ICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE5hbWUoImNv
bnRlbnQgcm9vdCIpOwogI2VuZGlmCkBAIC0xNjYzLDcgKzE2NjksNyBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKCkKICAgICAgICAgICAgIEFTU0VSVCghbV9j
bGlwTGF5ZXIpOwogCiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBsYXllciB0byBob3N0IHRoZSBj
bGlwcGluZyBsYXllciBhbmQgdGhlIG92ZXJmbG93IGNvbnRyb2xzIGxheWVycy4KLSAgICAgICAg
ICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgw
KTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllciA9IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZSh0aGlzKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBtX292ZXJmbG93
Q29udHJvbHNIb3N0TGF5ZXItPnNldE5hbWUoIm92ZXJmbG93IGNvbnRyb2xzIGhvc3QiKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCmluZGV4IGQ4Nzc5ZmE0MTE1ZjBlNjJiODE2ZjFjNzkzOGQ3NDMxN2RjYjk2OTEuLjFkYjM2
MGQ5Zjg2ZGFkOTQ4N2E4YjU0MzUwNzcxZWM0NDA1NTNlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTE5MSw2ICsxOTEsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSBjb25zdDsKICAgICAKKyAgICBib29sIGtlZXBMYXllcnNQaXhlbEFsaWduZWQoKSBjb25z
dDsKKwogICAgIHZvaWQgcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCiAgICAgR3JhcGhpY3NM
YXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggOTg0NDA4NjUxYzllYTM3NDM0NjhlZjIxOTc0NWVlNzcxMzUyOTA4Zi4uZmRmZWEyNDI1
NTkzNGNiYTI3NTk4ODVlMjY1YTQyMDNmODk1NzliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNy0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgY29kZSB0byBhdHRlbXB0IHRvIGFsaWduIGNv
bXBvc2l0aW5nIGxheWVycyB0byBwaXhlbCBib3VuZGFyaWVzIHdoZW4gcGFnZSBzY2FsZSBjaGFu
Z2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY1
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZWQgaW1wbGVtZW50YXRpb25zIG9mIGJhY2tpbmdTY2FsZUZhY3RvcigpIGFuZCBwYWdlU2NhbGVG
YWN0b3IoKSBub3cKKyAgICAgICAgdGhhdCBHcmFwaGljc0xheWVyQ2xpZW50IGhhcyBkZWZhdWx0
IGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheS5jcHA6CisKIDIw
MTEtMDctMTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgSGF2ZSBHcmFwaGljc0xheWVyIHB1bGwgdGhlaXIgY29udGVudHNTY2FsZSwgcmF0aGVyIHRo
YW4gcHVzaGluZyBpdCBvbnRvIHRoZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VP
dmVybGF5LmNwcAppbmRleCBkZmQzNzU2NDQxODlkMDRhMzc3NTRkZTA3NWYzYTAzZjFkNmU5NThm
Li5mNGEyN2ZiNTJjYTdjMGEyZjM5NmFhNjE1NWEzYjMzMGYzYzI2NmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCkBAIC03MCwxNyArNzAsNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBhaW50UGFnZU92ZXJsYXkoY29udGV4
dCk7CiAgICAgfQogCi0gICAgLy8gTXVsdGlwbGllciBmb3IgYmFja2luZyBzdG9yZSBzaXplLCBy
ZWxhdGVkIHRvIGhpZ2ggRFBJLgotICAgIHZpcnR1YWwgZmxvYXQgYmFja2luZ1NjYWxlRmFjdG9y
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHZpcnR1YWwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIH0KLQogICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPnNldHRpbmdzKCktPnNob3dE
ZWJ1Z0JvcmRlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBlYjA0OWY4OTBmOTdlYzk5NWNjMjg3
OWIzOTJmMDE3MDdiNmNiMDhlLi4wODdiN2NjOGVlOWQ2YWJhYThkYWU3OWM3MDA1MzlkYzFjYTFi
N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTYgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8g
YXR0ZW1wdCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3
aGVuIHBhZ2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmVkIGltcGxlbWVudGF0aW9ucyBvZiBiYWNraW5nU2NhbGVGYWN0
b3IoKSBhbmQgcGFnZVNjYWxlRmFjdG9yKCkgbm93CisgICAgICAgIHRoYXQgR3JhcGhpY3NMYXll
ckNsaWVudCBoYXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBXZWJWaWV3
Lmg6CisKIDIwMTEtMDctMTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IFdpbmRvd3MgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKaW5kZXggY2RiYjdl
OGZiYzYyNGIyMmZkZDgxODUwYzZmOWM0NDRiY2NlNmFmOS4uODc2NjI4YjVjYzQ2MzIxNTliMDdh
ZDM2MTkwNzEzNjhkNTc5ZjRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaApAQCAtOTkyLDggKzk5Miw2IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluQ2xpcCk7Ci0gICAgdmlydHVhbCBmbG9h
dCBiYWNraW5nU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFp
bnRDb3VudGVyKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkM2Y2OTcxMmYyMDkwMjk2MTdlZmFj
ZTIzMWQ2NjdkMTU2ODAzZTU2Li42OTEyMzQzMTU3MDI0NTVkNzQ4YTcyYTU0MDE3ZjE2Y2JmYzA3
Mzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDctMTYgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8gYXR0ZW1w
dCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3aGVuIHBh
Z2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIFJlbW92ZWQgaW1wbGVtZW50YXRpb24gb2YgcGFnZVNjYWxlRmFjdG9y
KCkgbm93IHRoYXQgR3JhcGhpY3NMYXllckNsaWVudCBoYXMKKyAgICAgICAgYSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJl
ZUhvc3RDQS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhv
c3RDQS5oOgorCiAyMDExLTA3LTE1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIE92ZXJsYXkgc2Nyb2xsYmFycyBpbiBvdmVyZmxvdyBhcmVhcyBubyBs
b25nZXIgcHVsc2Ugd2hlbiByZXZlYWxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcAppbmRleCAyYTBmMjY0NmY3
ODVlOThhZWUzODFlM2UyMTBjMWVlODY5OTExYzU4Li5kNTY0MTk2NjBjNDcyNWQ4ZTdlZTFkNjU0
OWEwZGVkNzVkNGI3Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcApAQCAtMjExLDExICsyMTEsNiBAQCBm
bG9hdCBMYXllclRyZWVIb3N0Q0E6OmJhY2tpbmdTY2FsZUZhY3RvcigpIGNvbnN0CiAgICAgcmV0
dXJuIG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKTsKIH0KIAotZmxvYXQgTGF5ZXJU
cmVlSG9zdENBOjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiAxOwotfQot
CiB2b2lkIExheWVyVHJlZUhvc3RDQTo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9M
YXllclRyZWVIb3N0Q0EuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9M
YXllclRyZWVIb3N0Q0EuaAppbmRleCBlNGQ2Y2U3OTBhOGMwZWQ0ZWUxOTk1YzRlMmVlODQ2ZDU4
MWNkYjlkLi5jOWI2NjUyYjJhZGQ0MTc3YTllODllNmYxOThhZjVlNDgyMmVjMDgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENB
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhv
c3RDQS5oCkBAIC03NSw3ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3dE
ZWJ1Z0JvcmRlcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVy
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVGYWN0b3IoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopIGNvbnN0IHsgfQogCiAgICAgLy8gTGF5ZXJUcmVlSG9zdENBCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101107</attachid>
            <date>2011-07-16 17:59:24 -0700</date>
            <delta_ts>2011-07-16 18:18:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64658-20110716175922.patch</filename>
            <type>text/plain</type>
            <size>38614</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTExNDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZWE4NGEwNTY5ZTE5MDQ5
MTk3MzkzNWFhMDJlNmYwZjZlOTVmNDk3Li45YTc4ZTQxNjFjY2Q5ZjEzN2E3Y2Q0M2RjMzRhNjFk
NjJmNjdkYTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTEtMDctMTYgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8g
YXR0ZW1wdCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3
aGVuIHBhZ2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudGVkIGEgbmV3IGJlaGF2aW9yIG9uIEdyYXBo
aWNzTGF5ZXJDQSB3aGljaCBhdHRlbXB0cyB0byBrZWVwIGxheWVycyBwaXhlbAorICAgICAgICBh
bGlnbmVkIGFzIHBhZ2Ugc2NhbGUgY2hhbmdlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVx
dWlyZXMgZGVub3Rpbmcgd2hpY2ggbGF5ZXIgaGFzIHRoZSBwYWdlIHNjYWxlIG9uIGl0IChpdCBp
cyBhc3N1bWVkIHRvIGJlCisgICAgICAgIGFscmVhZHkgYWxpZ25lZCksIHZpYSBzZXRBcHBsaWVz
UGFnZVNjYWxlKCkuIFdlIGFsc28gbm93IHBhc3MgYSBzY2FsZSBhbmQgb2Zmc2V0CisgICAgICAg
IGRvd24gdGhyb3VnaCB0aGUgR3JhcGhpY3NMYXllciBjb21taXRzLCB3aGljaCBhcmUgdXNlZCB0
byBtYXAgbGF5ZXIgYm91bmRzIHRvIGRpc3BsYXkKKyAgICAgICAgY29vcmRpbmF0ZXMgZm9yIHJv
dW5kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOiBO
ZXcgZmxhZ3MgYW5kIGdldHRlcnMvc2V0dGVycyBmb3IgcGl4ZWwgYWxpZ25tZW50LAorICAgICAg
ICBhbmQgdGhlIGxheWVyIHRoYXQgaXMgdGhlIGFwcGxpZXIgb2YgdGhlIHNjYWxlLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0S2VlcFBpeGVsQWxpZ25lZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjprZWVwUGl4ZWxBbGlnbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldEFwcGxpZXNQYWdlU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6YXBwbGllc1BhZ2VTY2FsZSk6CisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllcik6IEluaXRpYWxpemUgdGhlIG5ldyBmbGFn
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQ6OmJhY2tpbmdTY2FsZUZhY3Rv
cik6IFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQ6OnBhZ2VTY2FsZUZhY3Rvcik6IERpdHRvLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6IFBhc3Mgc2NhbGUgYW5kIGJh
c2UtcmVsYXRpdmUgb2Zmc2V0IGFyb3VuZAorICAgICAgICB0byBtZXRob2RzIHRoYXQgbmVlZCB0
byB1cGRhdGUgZ2VvbWV0cnkgZHVyaW5nIGNvbW1pdC4KKyAgICAgICAgU29tZSBuZXcgbWV0aG9k
cyByZWxhdGVkIHRvIHBpeGVsIGFsaWdubWVudC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOiBGb3Igc2luZ2xl
LWxheWVyIGNvbW1pdHMsCisgICAgICAgIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgYmFzZS1yZWxh
dGl2ZSBvZmZzZXQsIGFuZCB3aGV0aGVyIHdlJ3JlIHVuZGVyIHRoZSBsYXllcgorICAgICAgICBh
cHBseWluZyB0aGUgc2NhbGUgYnkgd2Fsa2luZyB1cCB0aGUgdHJlZS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSk6IENhbGwKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Uo
KSB0byBnZXQgc2NhbGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgdGFyZ2V0IGxheWVyLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyk6IFBhc3MgZmxhZ3MgcmVsYXRlZCB0byBzY2FsaW5nLgorICAgICAgICBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlIGlzIGFuIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYW5jZXN0b3IgbGF5ZXIg
a25vd24gdG8gYmUgcGl4ZWwKKyAgICAgICAgYWxpZ25lZC4gYWZmZWN0ZWRCeVBhZ2VTY2FsZSBp
cyB0cnVlIGZvciBsYXllcnMgd2hpY2ggYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSBsYXllcgorICAg
ICAgICB3aGljaCBhcHBsaWVzIHRoZSBzY2FsZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6IFBh
c3Mgc2NhbGUgYW5kIG9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
dXBkYXRlR2VvbWV0cnkpOiBDYWxsIGNvbXB1dGVQaXhlbEFsaWdubWVudCgpIHRvIGdldAorICAg
ICAgICBwaXhlbC1hbGlnbmVkIGdlb21ldHJ5LiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgYXBwbGll
ZCB0byBsYXllcnMgd2hpY2ggcmVuZGVyIGNvbnRlbnQsCisgICAgICAgIHNvIHJlLW9yZ2FuaXpl
IHRoZSBjb2RlIHRvIHVzZSB0aGUgdW5jaGFuZ2VkIGxheWVyIGdlb21ldHJ5IGZvciB0aGUgc3Ry
dWN0dXJhbCBsYXllciwKKyAgICAgICAgYnV0IHRvIGFwcGx5IHRoZSBhZGp1c3RlZCBnZW9tZXRy
eSB0byB0aGUgbV9sYXllci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcik6IFBhc3Mgc2NhbGUgYW5kIG9mZnNldC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJh
d3NDb250ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0S2VlcFBpeGVsQWxpZ25lZCk6IFdoZW4gc2V0LCBk
aXJ0aWVzIGZsYWdzCisgICAgICAgIGZvciBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSByZWNv
bXB1dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpub3RlQ2hhbmdlc0Zv
clNjYWxlU2Vuc2l0aXZlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVncmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxpZ25t
ZW50KTogTWFwIG91ciBib3VuZHMgdG8gc2NyZWVuCisgICAgICAgIHNjYWxlLCByb3VuZCBvdXQg
dG8gYW4gaW50ZWdyYWwgcmVjdCwgdGhlbiBtYXAgaXQgYmFjaywgYWRkaW5nIGEgZnVkZ2UgZmFj
dG9yCisgICAgICAgIHNvIHRoYXQgQ0EgYmFja2luZyBzdG9yZXMgZG9uJ3QgZW5kIHVwIGJlaW5n
IHNtYWxsZXIgdGhhbiB3ZSBleHBlY3QgYmVjYXVzZQorICAgICAgICBvZiBpbnRlZ2VyIHRydW5j
YXRpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMYXllcik6
IFR1cm4gb24gcGl4ZWwgYWxpZ25tZW50IGlmCisgICAgICAgIHRoZSBjb21wb3NpdG9yIHNheXMg
c28uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1hcnlH
cmFwaGljc0xheWVyKTogU2V0IHRoZSBSZW5kZXJWaWV3J3MKKyAgICAgICAgbGF5ZXIgYXMgdGhl
IG9uZSBhcHBseWluZyB0aGUgc2NhbGUsIGZvciB0aGUgbWFpbiBmcmFtZS4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDogTmV3IG1ldGhvZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6a2VlcExheWVyc1BpeGVsQWxpZ25lZCk6IE1hc3RlciBz
d2l0Y2ggZm9yCisgICAgICAgIHBpeGVsIGFsaWdubWVudC4gRGVmYXVsdCB0byBvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKTogR2l2
ZSB0aGUgdHdvIHJvb3QtaXNoIGxheWVycworICAgICAgICBhIGNsaWVudCBzbyB0aGV5IGNhbiBh
c2sgZm9yIHBhZ2Ugc2NhbGUgaWYgbmVjZXNzYXJ5LgorCiAyMDExLTA3LTE1ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
CmluZGV4IDhkZmI4Yzc0ZDUzOWIyYzI4ZjVhMDVmYmMzZjMzODgwMmJkMzhhN2IuLmVkMDc5Yjhh
YmU3ZjNkMGI3NGJlZWY3MDgxZTRhMjdlNWUxZTBlNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC03NCw2ICs3NCw4IEBA
IEdyYXBoaWNzTGF5ZXI6OkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9kcmF3c0NvbnRlbnQoZmFs
c2UpCiAgICAgLCBtX2FjY2VsZXJhdGVzRHJhd2luZyhmYWxzZSkKKyAgICAsIG1fa2VlcFBpeGVs
QWxpZ25lZChmYWxzZSkKKyAgICAsIG1fYXBwbGllc1BhZ2VTY2FsZShmYWxzZSkKICAgICAsIG1f
cGFpbnRpbmdQaGFzZShHcmFwaGljc0xheWVyUGFpbnRBbGwpCiAgICAgLCBtX2NvbnRlbnRzT3Jp
ZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pCiAgICAgLCBtX3BhcmVudCgw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5o
CmluZGV4IGY2YTM3ODUyM2IwNzgyYWEzYTllN2Y3YzlmN2E0ZjQ3Nzk2MjY2OWYuLmQ1ZTVkYzY4
YTZhYjMwNzljNjQ3ZGEwNzg0YzUzMTBkOWM1MmZjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTM1MCw2ICszNTAsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXN0cmlidXRlT3BhY2l0eShmbG9hdCk7CiAgICAg
dmlydHVhbCBmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkoKSBjb25zdDsKIAorICAgIHZpcnR1YWwg
dm9pZCBzZXRLZWVwUGl4ZWxBbGlnbmVkKGJvb2wga2VlcEFsaWduZWQpIHsgbV9rZWVwUGl4ZWxB
bGlnbmVkID0ga2VlcEFsaWduZWQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2VlcFBpeGVsQWxpZ25l
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VlcFBpeGVsQWxpZ25lZDsgfQorICAgIAorICAgIHZvaWQg
c2V0QXBwbGllc1BhZ2VTY2FsZShib29sIGFwcGxpZXNTY2FsZSA9IHRydWUpIHsgbV9hcHBsaWVz
UGFnZVNjYWxlID0gYXBwbGllc1NjYWxlOyB9CisgICAgYm9vbCBhcHBsaWVzUGFnZVNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQg
cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsgfQogICAgIHZvaWQgbm90ZVBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCkBAIC00MTYsNiArNDIyLDggQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzIDogMTsKICAgICBib29sIG1fZHJhd3ND
b250ZW50IDogMTsKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIDogMTsKKyAgICBib29s
IG1fa2VlcFBpeGVsQWxpZ25lZCA6IDE7CisgICAgYm9vbCBtX2FwcGxpZXNQYWdlU2NhbGUgOiAx
OyAvLyBTZXQgZm9yIHRoZSBsYXllciB3aGljaCBoYXMgdGhlIHBhZ2Ugc2NhbGUgYXBwbGllZCB0
byBpdC4KIAogICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIG1fcGFpbnRpbmdQaGFzZTsK
ICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gbV9jb250ZW50c09yaWVudGF0
aW9uOyAvLyBhZmZlY3RzIG9yaWVudGF0aW9uIG9mIGxheWVyIGNvbnRlbnRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgK
aW5kZXggY2IyNTRkNzAxZDRjMGY0ZTJkZDE1YzI1MzY0YWMyYzM4ODAzYTM0OS4uZjY2YjM2MjQw
ZDZjMGM2MWM2ZWE0YjYxOWJhMmRiZjA1YTUxMTZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtNjUsMTAg
KzY1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0Zvckxh
eWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IH0KIAogICAgIC8vIE11bHRpcGxpZXIg
Zm9yIGJhY2tpbmcgc3RvcmUgc2l6ZSwgcmVsYXRlZCB0byBoaWdoIERQSS4KLSAgICB2aXJ0dWFs
IGZsb2F0IGJhY2tpbmdTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKLSAgICAvLyBTY2FsaW5nIGZh
Y3RvciBvZiB0aGUgcGFnZS4KLSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNv
bnN0ID0gMDsKLSAgICAKKyAgICB2aXJ0dWFsIGZsb2F0IGJhY2tpbmdTY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKyAgICAvLyBQYWdlIHNjYWxlIGZhY3Rvci4KKyAgICB2aXJ0dWFs
IGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAgIHZpcnR1
YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBz
aG93UmVwYWludENvdW50ZXIoKSBjb25zdCA9IDA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggODhj
MzEyMTcxOWNkOTRiYmQ0ZGIwNTBmMmNhMTY1NWVmYTE5ZGI1Yi4uMmUxMTgwYzkxNzkxOTM0ZGVm
MDg3NGZkMmIxNGI4ZjViNzk3ODNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC03OTEsNiArNzkxLDI0
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpsYXllckRpZERpc3BsYXkoUGxhdGZvcm1MYXllciog
bGF5ZXIpCiAgICAgfQogfQogCitGbG9hdFBvaW50IEdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBv
c2l0aW9uUmVsYXRpdmVUb0Jhc2UoZmxvYXQmIHBhZ2VTY2FsZSkgY29uc3QKK3sKKyAgICBwYWdl
U2NhbGUgPSAxOworCisgICAgRmxvYXRQb2ludCBvZmZzZXQ7CisgICAgZm9yIChjb25zdCBHcmFw
aGljc0xheWVyKiBjdXJyTGF5ZXIgPSB0aGlzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJM
YXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGN1cnJMYXllci0+YXBwbGllc1BhZ2VTY2Fs
ZSgpKSB7CisgICAgICAgICAgICBpZiAoY3VyckxheWVyLT5jbGllbnQoKSkKKyAgICAgICAgICAg
ICAgICBwYWdlU2NhbGUgPSBjdXJyTGF5ZXItPmNsaWVudCgpLT5wYWdlU2NhbGVGYWN0b3IoKTsK
KyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQg
Kz0gY3VyckxheWVyLT5wb3NpdGlvbigpOworICAgIH0KKworICAgIHJldHVybiBGbG9hdFBvaW50
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCiB7
CiAgICAgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcygpOwpAQCAtNzk4LDI4ICs4MTYsNDAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKIAogdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAg
Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7CisgICAgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yID0gMTsKKyAgICBGbG9hdFBvaW50IG9mZnNldCA9IGNvbXB1dGVQb3NpdGlvblJlbGF0
aXZlVG9CYXNlKHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3Jl
U3VibGF5ZXJzKHBhZ2VTY2FsZUZhY3Rvciwgb2Zmc2V0KTsKICAgICBjb21taXRMYXllckNoYW5n
ZXNBZnRlclN1YmxheWVycygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZl
Q29tbWl0Q2hhbmdlcygpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyhmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKIHsKICAgICBib29sIGhhZENo
YW5nZXMgPSBtX3VuY29tbWl0dGVkQ2hhbmdlczsKICAgICAKLSAgICBjb21taXRMYXllckNoYW5n
ZXNCZWZvcmVTdWJsYXllcnMoKTsKKyAgICBpZiAoYXBwbGllc1BhZ2VTY2FsZSgpKSB7CisgICAg
ICAgIHBhZ2VTY2FsZUZhY3RvciA9IG1fY2xpZW50ID8gbV9jbGllbnQtPnBhZ2VTY2FsZUZhY3Rv
cigpIDogMTsKKyAgICAgICAgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IHRydWU7CisgICAgfQorCisg
ICAgLy8gQWNjdW11bGF0ZSBhbiBvZmZzZXQgZnJvbSB0aGUgYW5jZXN0cmFsIHBpeGVsLWFsaWdu
ZWQgbGF5ZXIuCisgICAgRmxvYXRQb2ludCBiYXNlUmVsYXRpdmVQb3NpdGlvbiA9IHBvc2l0aW9u
UmVsYXRpdmVUb0Jhc2U7CisgICAgaWYgKGFmZmVjdGVkQnlQYWdlU2NhbGUpCisgICAgICAgIGJh
c2VSZWxhdGl2ZVBvc2l0aW9uICs9IG1fcG9zaXRpb247CisgICAgCisgICAgY29tbWl0TGF5ZXJD
aGFuZ2VzQmVmb3JlU3VibGF5ZXJzKHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRp
b24pOwogCiAgICAgaWYgKG1fbWFza0xheWVyKQotICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGlj
c0xheWVyQ0EqPihtX21hc2tMYXllciktPmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVy
cygpOworICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX21hc2tMYXllcikt
PmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhwYWdlU2NhbGVGYWN0b3IsIGJhc2VS
ZWxhdGl2ZVBvc2l0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNo
aWxkTGF5ZXJzID0gY2hpbGRyZW4oKTsKICAgICBzaXplX3QgbnVtQ2hpbGRyZW4gPSBjaGlsZExh
eWVycy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytp
KSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJDQSogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFw
aGljc0xheWVyQ0EqPihjaGlsZExheWVyc1tpXSk7Ci0gICAgICAgIGN1ckNoaWxkLT5yZWN1cnNp
dmVDb21taXRDaGFuZ2VzKCk7CisgICAgICAgIGN1ckNoaWxkLT5yZWN1cnNpdmVDb21taXRDaGFu
Z2VzKHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdl
U2NhbGUpOwogICAgIH0KIAogICAgIGlmIChtX3JlcGxpY2FMYXllcikKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9yZXBsaWNhTGF5ZXIpLT5yZWN1cnNpdmVDb21taXRD
aGFuZ2VzKCk7CisgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQSo+KG1fcmVwbGlj
YUxheWVyKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxh
dGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKIAogICAgIGlmIChtX21hc2tMYXll
cikKICAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9tYXNrTGF5ZXIpLT5j
b21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOwpAQCAtODMwLDE0ICs4NjAsMTQgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKQogICAgICAgICBj
bGllbnQoKS0+ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKHRoaXMpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQog
ewogICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIE5lZWQgdG8gaGFuZGxlIFByZXNlcnZlczNEQ2hhbmdlZCBmaXJzdCwgYmVjYXVzZSBpdCBh
ZmZlY3RzIHdoaWNoIGxheWVycyBzdWJzZXF1ZW50IHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8K
ICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiAoUHJlc2VydmVzM0RDaGFuZ2VkIHwgUmVw
bGljYXRlZExheWVyQ2hhbmdlZCkpCi0gICAgICAgIHVwZGF0ZVN0cnVjdHVyYWxMYXllcigpOwor
ICAgICAgICB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlKTsKIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIE5hbWVDaGFu
Z2VkKQogICAgICAgICB1cGRhdGVMYXllck5hbWVzKCk7CkBAIC04NTgsNyArODg4LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycygpCiAg
ICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFu
Z2VzICYgR2VvbWV0cnlDaGFuZ2VkKQotICAgICAgICB1cGRhdGVHZW9tZXRyeSgpOworICAgICAg
ICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Up
OwogCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJhbnNmb3JtQ2hhbmdlZCkKICAg
ICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC04NzAsNyArOTAwLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycygpCiAgICAgICAgIHVw
ZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKICAgICAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMg
JiBEcmF3c0NvbnRlbnRDaGFuZ2VkKQotICAgICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudCgp
OworICAgICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0
aW9uUmVsYXRpdmVUb0Jhc2UpOwogCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ29u
dGVudHNPcGFxdWVDaGFuZ2VkKQogICAgICAgICB1cGRhdGVDb250ZW50c09wYXF1ZSgpOwpAQCAt
OTAwLDcgKzkzMCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21taXRMYXllckNoYW5nZXNC
ZWZvcmVTdWJsYXllcnMoKQogICAgICAgICB1cGRhdGVBY2NlbGVyYXRlc0RyYXdpbmcoKTsKICAg
ICAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDb250ZW50c1NjYWxlQ2hhbmdlZCkK
LSAgICAgICAgdXBkYXRlQ29udGVudHNTY2FsZSgpOworICAgICAgICB1cGRhdGVDb250ZW50c1Nj
YWxlKHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpCkBAIC05
NzIsNzAgKzEwMDIsNzUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVN1YmxheWVyTGlz
dCgpCiAgICAgICAgIG1fbGF5ZXItPnNldFN1YmxheWVycyhuZXdTdWJsYXllcnMpOwogfQogCi12
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoKQordm9pZCBHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKLSAgICBib29sIG5lZWRUaWxlZExheWVyID0g
cmVxdWlyZXNUaWxlZExheWVyKG1fc2l6ZSk7CisgICAgRmxvYXRQb2ludCBzY2FsZWRQb3NpdGlv
bjsKKyAgICBGbG9hdFBvaW50M0Qgc2NhbGVkQW5jaG9yUG9pbnQ7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemU7CisgICAgRmxvYXRTaXplIHBpeGVsQWxpZ25tZW50T2Zmc2V0OworICAgIGNvbXB1
dGVQaXhlbEFsaWdubWVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Us
IHNjYWxlZFBvc2l0aW9uLCBzY2FsZWRTaXplLCBzY2FsZWRBbmNob3JQb2ludCwgcGl4ZWxBbGln
bm1lbnRPZmZzZXQpOworCisgICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRM
YXllcihwYWdlU2NhbGVGYWN0b3IsIHNjYWxlZFNpemUpOwogICAgIGlmIChuZWVkVGlsZWRMYXll
ciAhPSBtX3VzaW5nVGlsZWRMYXllcikKLSAgICAgICAgc3dhcEZyb21PclRvVGlsZWRMYXllcihu
ZWVkVGlsZWRMYXllcik7CisgICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVk
TGF5ZXIsIHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAKLSAgICBG
bG9hdFNpemUgdXNlZFNpemUgPSBtX3VzaW5nVGlsZWRMYXllciA/IGNvbnN0cmFpbmVkU2l6ZSgp
IDogbV9zaXplOwotICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0KG1fYm91bmRzT3JpZ2luLCB1c2Vk
U2l6ZSk7CisgICAgRmxvYXRTaXplIHVzZWRTaXplID0gbV91c2luZ1RpbGVkTGF5ZXIgPyBjb25z
dHJhaW5lZFNpemUoKSA6IHNjYWxlZFNpemU7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkQm91bmRz
KG1fYm91bmRzT3JpZ2luIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQsIHVzZWRTaXplKTsKIAogICAg
IC8vIFVwZGF0ZSBwb3NpdGlvbi4KICAgICAvLyBQb3NpdGlvbiBpcyBvZmZzZXQgb24gdGhlIGxh
eWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBwb3NQb2ludCht
X3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogdXNlZFNpemUud2lkdGgoKSwgbV9w
b3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIHVzZWRTaXplLmhlaWdodCgpKTsKLSAg
ICBwcmltYXJ5TGF5ZXIoKS0+c2V0UG9zaXRpb24ocG9zUG9pbnQpOwotCi0gICAgaWYgKExheWVy
TWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKLSAgICAgICAgTGF5
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0
aW9uID0gcG9zUG9pbnQ7Ci0gICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBs
aWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWludGFp
biB0aGUgc3BlY2lhbC1jYXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRy
ZWUsCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXll
clJvb3QoKS4KLSAgICAgICAgICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9u
ZVJvb3RMYXllcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0
UG9zaXRpb24oY2xvbmVQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRmxvYXRQb2lu
dCBhZGp1c3RlZFBvc2l0aW9uKHNjYWxlZFBvc2l0aW9uLngoKSArIHNjYWxlZEFuY2hvclBvaW50
LngoKSAqIHVzZWRTaXplLndpZHRoKCksIHNjYWxlZFBvc2l0aW9uLnkoKSArIHNjYWxlZEFuY2hv
clBvaW50LnkoKSAqIHVzZWRTaXplLmhlaWdodCgpKTsKIAotICAgIC8vIFVwZGF0ZSBib3VuZHMu
Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0J3Mg
dXAgdGhlIGNhbGxlciB0byBkbyB0aGF0LgogICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewot
ICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c2V0Qm91bmRzKGJvdW5kc1JlY3QpOworICAgICAg
ICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50
LngoKSAqIG1fc2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgp
ICogbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzKG1fYm91
bmRzT3JpZ2luLCBtX3NpemUpOwogICAgICAgICAKKyAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIt
PnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOworICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+
c2V0Qm91bmRzKGxheWVyQm91bmRzKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEFu
Y2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOworCiAgICAgICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IG1fc3RydWN0dXJhbExheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgICAgICBM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5z
ZXRCb3VuZHMoYm91bmRzUmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgYW5jaG9y
IG9mIHRoZSBjb250ZW50cyBsYXllciBpcyBhbHdheXMgYXQgMC41LCAwLjUsIHNvIHRoZSBwb3Np
dGlvbiBpcyBjZW50ZXItcmVsYXRpdmUuCi0gICAgICAgIENHUG9pbnQgY2VudGVyUG9pbnQgPSBD
R1BvaW50TWFrZShtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYp
OwotICAgICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CisgICAgICAgICAg
ICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciog
Y2xvbmUgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xv
bmVQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247CisKKyAgICAgICAgICAgICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5maXJzdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3IgdGhl
IHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAorICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3
ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgorICAgICAgICAgICAgICAgICAgICBj
bG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOworICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xv
bmVzLmdldCgpKSB7Ci0gICAgICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRQb3NpdGlvbihjZW50ZXJQb2ludCk7CisgICAg
ICAgICAgICAgICAgY2xvbmUtPnNldFBvc2l0aW9uKGNsb25lUG9zaXRpb24pOworICAgICAgICAg
ICAgICAgIGNsb25lLT5zZXRCb3VuZHMobGF5ZXJCb3VuZHMpOworICAgICAgICAgICAgICAgIGNs
b25lLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBzdHJ1Y3R1cmFsIGxheWVyLCB3ZSBqdXN0
IHVzZSAwLjUsIDAuNSBmb3IgdGhlIGFuY2hvciBwb2ludCBvZiB0aGUgbWFpbiBsYXllci4KKyAg
ICAgICAgc2NhbGVkQW5jaG9yUG9pbnQgPSBGbG9hdFBvaW50KDAuNWYsIDAuNWYpOworICAgICAg
ICBhZGp1c3RlZFBvc2l0aW9uID0gRmxvYXRQb2ludChzY2FsZWRBbmNob3JQb2ludC54KCkgKiB1
c2VkU2l6ZS53aWR0aCgpIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQud2lkdGgoKSwgc2NhbGVkQW5j
aG9yUG9pbnQueSgpICogdXNlZFNpemUuaGVpZ2h0KCkgLSBwaXhlbEFsaWdubWVudE9mZnNldC5o
ZWlnaHQoKSk7CiAgICAgfQogICAgIAotICAgIG1fbGF5ZXItPnNldEJvdW5kcyhib3VuZHNSZWN0
KTsKKyAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihhZGp1c3RlZFBvc2l0aW9uKTsKKyAgICBtX2xh
eWVyLT5zZXRCb3VuZHMoYWRqdXN0ZWRCb3VuZHMpOworICAgIG1fbGF5ZXItPnNldEFuY2hvclBv
aW50KHNjYWxlZEFuY2hvclBvaW50KTsKKwogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1h
cCA9IG1fbGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKExheWVyTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldEJvdW5kcyhib3VuZHNSZWN0KTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gVXBkYXRlIGFuY2hvciBwb2ludC4KLSAgICBwcmltYXJ5TGF5ZXIoKS0+
c2V0QW5jaG9yUG9pbnQobV9hbmNob3JQb2ludCk7CisgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3NpdGlvbiA9IGFkanVzdGVkUG9zaXRp
b247CiAKLSAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5TGF5ZXJDbG9u
ZXMoKSkgewotICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9u
ZU1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7ICAgCi0gICAgICAgICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGN1cnJMYXllciA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAg
ICAgICBjdXJyTGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOworICAgICAgICAg
ICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllciAmJiBtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0
ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRo
ZSBzcGVjaWFsLWNhc2UgcG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwK
KyAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9v
dCgpLgorICAgICAgICAgICAgICAgIGNsb25lUG9zaXRpb24gPSBwb3NpdGlvbkZvckNsb25lUm9v
dExheWVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNsb25lLT5zZXRQb3NpdGlv
bihjbG9uZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGNsb25lLT5zZXRCb3VuZHMoYWRqdXN0ZWRC
b3VuZHMpOworICAgICAgICAgICAgY2xvbmUtPnNldEFuY2hvclBvaW50KHNjYWxlZEFuY2hvclBv
aW50KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTExNywxMiArMTE1MiwxMiBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKICAgICB9CiB9CiAKLXZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKQordm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcihmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCiB7Ci0gICAgZW5zdXJlU3Ry
dWN0dXJhbExheWVyKHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSk7CisgICAgZW5zdXJlU3RydWN0
dXJhbExheWVyKHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSwgcGFnZVNjYWxlRmFjdG9yLCBwb3Np
dGlvblJlbGF0aXZlVG9CYXNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0
cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2Ug
cHVycG9zZSwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
blJlbGF0aXZlVG9CYXNlKQogewogICAgIGlmIChwdXJwb3NlID09IE5vU3RydWN0dXJhbExheWVy
KSB7CiAgICAgICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewpAQCAtMTE0MSw3ICsxMTc2LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFs
TGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IDA7
CiAKICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcHJvcGVydGllcyBvZiBtX2xheWVyIG5vdyB0
aGF0IHdlIG5vIGxvbmdlciBoYXZlIGEgc3RydWN0dXJhbCBsYXllci4KLSAgICAgICAgICAgIHVw
ZGF0ZUdlb21ldHJ5KCk7CisgICAgICAgICAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0
b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3Jt
KCk7CiAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpOwogCkBAIC0xMTc3LDcg
KzEyMTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0
cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICB1cGRhdGVMYXllck5hbWVzKCk7CiAK
ICAgICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHN0cnVjdHVyYWwgbGF5ZXIuCi0g
ICAgdXBkYXRlR2VvbWV0cnkoKTsKKyAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3Is
IHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgIHVw
ZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7CiAgICAgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7
CkBAIC0xMjI1LDExICsxMjYwLDExIEBAIEdyYXBoaWNzTGF5ZXJDQTo6U3RydWN0dXJhbExheWVy
UHVycG9zZSBHcmFwaGljc0xheWVyQ0E6OnN0cnVjdHVyYWxMYXllclB1cnBvc2UoCiAgICAgcmV0
dXJuIE5vU3RydWN0dXJhbExheWVyOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
TGF5ZXJEcmF3c0NvbnRlbnQoKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJh
d3NDb250ZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSkKIHsKLSAgICBib29sIG5lZWRUaWxlZExheWVyID0gcmVxdWlyZXNU
aWxlZExheWVyKG1fc2l6ZSk7CisgICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGls
ZWRMYXllcihwYWdlU2NhbGVGYWN0b3IsIG1fc2l6ZSk7CiAgICAgaWYgKG5lZWRUaWxlZExheWVy
ICE9IG1fdXNpbmdUaWxlZExheWVyKQotICAgICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVyKG5l
ZWRUaWxlZExheWVyKTsKKyAgICAgICAgc3dhcEZyb21PclRvVGlsZWRMYXllcihuZWVkVGlsZWRM
YXllciwgcGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAogICAgIGlm
IChtX2RyYXdzQ29udGVudCkKICAgICAgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CkBA
IC0xOTUxLDE1ICsxOTg2LDEzIEBAIHN0YXRpYyBmbG9hdCBjbGFtcGVkQ29udGVudHNTY2FsZUZv
clNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVybiBtYXgobWluU2NhbGUsIG1pbihzY2FsZSwg
bWF4U2NhbGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzU2Nh
bGUoKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzU2NhbGUoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQog
ewotICAgIGJvb2wgbmVlZFRpbGVkTGF5ZXIgPSByZXF1aXJlc1RpbGVkTGF5ZXIobV9zaXplKTsK
KyAgICBib29sIG5lZWRUaWxlZExheWVyID0gcmVxdWlyZXNUaWxlZExheWVyKHBhZ2VTY2FsZUZh
Y3RvciwgbV9zaXplKTsKICAgICBpZiAobmVlZFRpbGVkTGF5ZXIgIT0gbV91c2luZ1RpbGVkTGF5
ZXIpCi0gICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVkTGF5ZXIpOworICAg
ICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyLCBwYWdlU2NhbGVGYWN0
b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCiAgICAgZmxvYXQgYmFja2luZ1NjYWxlRmFj
dG9yID0gbV9jbGllbnQgPyBtX2NsaWVudC0+YmFja2luZ1NjYWxlRmFjdG9yKCkgOiAxOwotICAg
IGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IG1fY2xpZW50ID8gbV9jbGllbnQtPnBhZ2VTY2FsZUZh
Y3RvcigpIDogMTsKLQogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUgPSBjbGFtcGVkQ29udGVudHNT
Y2FsZUZvclNjYWxlKHBhZ2VTY2FsZUZhY3RvciAqIGJhY2tpbmdTY2FsZUZhY3Rvcik7CiAgICAg
CiAgICAgbV9sYXllci0+c2V0Q29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKTsKQEAgLTIwMTAs
MTggKzIwNDMsMTkgQEAgRmxvYXRTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXpl
KCkgY29uc3QKICAgICByZXR1cm4gY29uc3RyYWluZWRTaXplOwogfQogCi1ib29sIEdyYXBoaWNz
TGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QK
K2Jvb2wgR3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5ZXIoZmxvYXQgcGFnZVNjYWxl
RmFjdG9yLCBjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RyYXdz
Q29udGVudCB8fCAhbV9hbGxvd1RpbGVkTGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUgPSBtX2NsaWVudCA/IG1fY2xpZW50LT5iYWNraW5nU2Nh
bGVGYWN0b3IoKSAqIG1fY2xpZW50LT5wYWdlU2NhbGVGYWN0b3IoKSA6IDE7CisgICAgZmxvYXQg
YmFja2luZ1NjYWxlRmFjdG9yID0gbV9jbGllbnQgPyBtX2NsaWVudC0+YmFja2luZ1NjYWxlRmFj
dG9yKCkgOiAxOworICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUgPSBiYWNraW5nU2NhbGVGYWN0b3Ig
KiBwYWdlU2NhbGVGYWN0b3I7CiAKICAgICAvLyBGSVhNRTogY2F0Y2ggemVyby1zaXplIGhlaWdo
dCBvciB3aWR0aCBoZXJlIChvciBlYXJsaWVyKT8KICAgICByZXR1cm4gc2l6ZS53aWR0aCgpICog
Y29udGVudHNTY2FsZSA+IGNNYXhQaXhlbERpbWVuc2lvbiB8fCBzaXplLmhlaWdodCgpICogY29u
dGVudHNTY2FsZSA+IGNNYXhQaXhlbERpbWVuc2lvbjsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKQordm9pZCBHcmFw
aGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyLCBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpCiB7CiAgICAgQVNTRVJUKHVzZVRpbGVkTGF5ZXIgIT0gbV91c2luZ1RpbGVkTGF5ZXIp
OwogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG9sZExheWVyID0gbV9sYXllcjsKQEAgLTIw
NTAsMTQgKzIwODQsMTQgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVk
TGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKQogCiAgICAgdXBkYXRlQ29udGVudHNUcmFuc2Zvcm0o
KTsKIAotICAgIHVwZGF0ZUdlb21ldHJ5KCk7CisgICAgdXBkYXRlR2VvbWV0cnkocGFnZVNjYWxl
RmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsK
ICAgICB1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIHVwZGF0ZU1hc2tzVG9Cb3VuZHMo
KTsKICAgICB1cGRhdGVDb250ZW50c09wYXF1ZSgpOwogICAgIHVwZGF0ZUJhY2tmYWNlVmlzaWJp
bGl0eSgpOwogICAgIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7Ci0gICAgdXBkYXRlQ29u
dGVudHNTY2FsZSgpOworICAgIHVwZGF0ZUNvbnRlbnRzU2NhbGUocGFnZVNjYWxlRmFjdG9yLCBw
b3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKICAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogICAg
IAogI2lmbmRlZiBOREVCVUcKQEAgLTIzNjIsNiArMjM5NiwxNSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NM
YXllckNBOjpzZXRLZWVwUGl4ZWxBbGlnbmVkKGJvb2wga2VlcEFsaWduZWQpCit7CisgICAgaWYg
KGtlZXBBbGlnbmVkID09IG1fa2VlcFBpeGVsQWxpZ25lZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0S2VlcFBpeGVsQWxpZ25lZChrZWVwQWxpZ25lZCk7CisgICAg
bm90ZUNoYW5nZXNGb3JTY2FsZVNlbnNpdGl2ZVByb3BlcnRpZXMoKTsKK30KKwogdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewogICAgIG5vdGVDaGFuZ2Vz
Rm9yU2NhbGVTZW5zaXRpdmVQcm9wZXJ0aWVzKCk7CkBAIC0yMzY5LDcgKzI0MTIsNTUgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6bm90ZUNoYW5nZXNGb3JTY2FsZVNlbnNpdGl2ZVByb3BlcnRpZXMoKQogewot
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChDb250ZW50c1NjYWxlQ2hhbmdlZCk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCB8IENvbnRlbnRzU2NhbGVD
aGFuZ2VkKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmFsdWUpID09IHZhbHVlOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxpZ25tZW50KGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwKKyAgICBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9hdFBvaW50M0QmIGFuY2hv
clBvaW50LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
a2VlcFBpeGVsQWxpZ25lZCB8fCBpc0ludGVncmFsKHBhZ2VTY2FsZUZhY3RvcikgfHwgIW1fZHJh
d3NDb250ZW50IHx8IG1fbWFza3NUb0JvdW5kcykgeworICAgICAgICBwb3NpdGlvbiA9IG1fcG9z
aXRpb247CisgICAgICAgIHNpemUgPSBtX3NpemU7CisgICAgICAgIGFuY2hvclBvaW50ID0gbV9h
bmNob3JQb2ludDsKKyAgICAgICAgYWxpZ25tZW50T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgRmxvYXRSZWN0IGJhc2VSZWxhdGl2ZUJvdW5k
cyhwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBtX3NpemUpOworICAgIEZsb2F0UmVjdCBzY2FsZWRC
b3VuZHMgPSBiYXNlUmVsYXRpdmVCb3VuZHM7CisgICAgLy8gU2NhbGUgYnkgdGhlIHBhZ2Ugc2Nh
bGUgZmFjdG9yIHRvIGNvbXB1dGUgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZHMuCisgICAgc2Nh
bGVkQm91bmRzLnNjYWxlKHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgLy8gUm91bmQgdG8gaW50ZWdl
ciBib3VuZGFyaWVzLgorICAgIEZsb2F0UmVjdCBhbGlnbmVkQm91bmRzID0gZW5jbG9zaW5nSW50
UmVjdChzY2FsZWRCb3VuZHMpOworICAgIAorICAgIC8vIENvbnZlcnQgYmFjayB0byBsYXllciBj
b29yZGluYXRlcy4KKyAgICBhbGlnbmVkQm91bmRzLnNjYWxlKDEgLyBwYWdlU2NhbGVGYWN0b3Ip
OworICAgIAorICAgIC8vIEVwc2lsb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhY2tp
bmcgc3RvcmUgc2l6ZSBjb21wdXRhdGlvbiBpbiBDQSwgd2hpY2ggaW52b2x2ZXMgaW50ZWdlciB0
cnVuY2F0aW9uLAorICAgIC8vIHdpbGwgbWF0Y2ggb3VyIGFsaWduZWQgYm91bmRzLgorICAgIGNv
bnN0IGZsb2F0IGVwc2lsb24gPSAxZS01ZjsKKyAgICBhbGlnbmVkQm91bmRzLmV4cGFuZChlcHNp
bG9uLCBlcHNpbG9uKTsKKyAgICAKKyAgICBhbGlnbm1lbnRPZmZzZXQgPSBiYXNlUmVsYXRpdmVC
b3VuZHMubG9jYXRpb24oKSAtIGFsaWduZWRCb3VuZHMubG9jYXRpb24oKTsKKyAgICBwb3NpdGlv
biA9IG1fcG9zaXRpb24gLSBhbGlnbm1lbnRPZmZzZXQ7CisgICAgc2l6ZSA9IGFsaWduZWRCb3Vu
ZHMuc2l6ZSgpOworCisgICAgLy8gTm93IHdlIGhhdmUgdG8gY29tcHV0ZSBhIG5ldyBhbmNob3Ig
cG9pbnQgd2hpY2ggY29tcGVuc2F0ZXMgZm9yIHJvdW5kaW5nLgorICAgIGZsb2F0IGFuY2hvclBv
aW50WCA9IG1fYW5jaG9yUG9pbnQueCgpOworICAgIGZsb2F0IGFuY2hvclBvaW50WSA9IG1fYW5j
aG9yUG9pbnQueSgpOworICAgIAorICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkpCisgICAg
ICAgIGFuY2hvclBvaW50WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFuY2hvclBv
aW50WCArIGFsaWdubWVudE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lkdGgoKTsK
KyAgICAKKyAgICBpZiAoYWxpZ25lZEJvdW5kcy5oZWlnaHQoKSkKKyAgICAgICAgYW5jaG9yUG9p
bnRZID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy5oZWlnaHQoKSAqIGFuY2hvclBvaW50WSArIGFsaWdu
bWVudE9mZnNldC5oZWlnaHQoKSkgLyBhbGlnbmVkQm91bmRzLmhlaWdodCgpOworICAgICAKKyAg
ICBhbmNob3JQb2ludCA9IEZsb2F0UG9pbnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwg
bV9hbmNob3JQb2ludC56KCkgKiBwYWdlU2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6bm90ZVN1YmxheWVyc0NoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAppbmRleCA5MzI3N2U1YzAy
ZTAzMDUxMDE5ZWNkMmRkMDZjNDVjNTcxOTI4NjFiLi5lYzg5MDU2Mjk5MjU4YzdmMDkzNjUxODM1
NGQ0YmQwYjU1MDM0NTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTE2LDkgKzExNiwxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRLZWVwUGl4ZWxBbGlnbmVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1p
dENoYW5nZXMoKTsKKyAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoZmxvYXQgcGFnZVNj
YWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9
IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlID0gZmFsc2UpOwogCiAgICAg
dmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwpAQCAtMTgwLDEzICsxODEsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcnVubmluZ0FuaW1hdGlvbnMuZmluZChhbmlt
YXRpb25OYW1lKSAhPSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpOwogICAgIH0KIAotICAgIHZv
aWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7CisgICAgdm9pZCBjb21taXRM
YXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKICAgICB2b2lkIGNvbW1pdExheWVy
Q2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7CiAKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlv
blJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0OworCiAgICAgRmxvYXRTaXpl
IGNvbnN0cmFpbmVkU2l6ZSgpIGNvbnN0OwogCi0gICAgYm9vbCByZXF1aXJlc1RpbGVkTGF5ZXIo
Y29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBzd2FwRnJvbU9yVG9UaWxlZExheWVy
KGJvb2wgdXNlVGlsZWRMYXllcik7CisgICAgYm9vbCByZXF1aXJlc1RpbGVkTGF5ZXIoZmxvYXQg
cGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHN3YXBG
cm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyLCBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCiAgICAgQ29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGRlZmF1bHRDb250ZW50c09yaWVudGF0aW9u
KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1RyYW5zZm9ybSgpOwpAQCAtMTk2LDYg
KzE5OSw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5
ZXIoR3JhcGhpY3NMYXllciopOwogCisgICAgdm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxv
YXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2
ZVRvQmFzZSwKKyAgICAgICAgRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYsIEZsb2F0
UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KSBjb25zdDsK
KwogICAgIC8vIFVzZWQgdG8gdHJhY2sgdGhlIHBhdGggZG93biB0aGUgdHJlZSBmb3IgcmVwbGlj
YSBsYXllcnMuCiAgICAgc3RydWN0IFJlcGxpY2FTdGF0ZSB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbWF4UmVwbGljYURlcHRoID0gMTY7CkBAIC0yNjMsMTQgKzI2OSwxNCBAQCBwcml2
YXRlOgogICAgIC8vIEFsbCB0aGVzZSAidXBkYXRlIiBtZXRob2RzIHdpbGwgYmUgY2FsbGVkIGlu
c2lkZSBhIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUy9FTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TIGJsb2NrLgogICAgIHZvaWQgdXBkYXRlTGF5ZXJOYW1lcygpOwogICAgIHZvaWQgdXBkYXRl
U3VibGF5ZXJMaXN0KCk7Ci0gICAgdm9pZCB1cGRhdGVHZW9tZXRyeSgpOworICAgIHZvaWQgdXBk
YXRlR2VvbWV0cnkoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAg
ICB2b2lkIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7CiAgICAgdm9pZCB1cGRhdGVNYXNrc1Rv
Qm91bmRzKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c09wYXF1ZSgpOwogICAgIHZvaWQgdXBk
YXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgdm9pZCB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIo
KTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyRHJhd3NDb250ZW50KCk7CisgICAgdm9pZCB1cGRhdGVT
dHJ1Y3R1cmFsTGF5ZXIoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CisgICAgdm9pZCB1cGRhdGVMYXllckRyYXdzQ29u
dGVudChmbG9hdCBwaXhlbEFsaWdubWVudFNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
blJlbGF0aXZlVG9CYXNlKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7
CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKQEAgLTI4MywxNCArMjg5LDE0IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXllckFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlc0Ry
YXdpbmcoKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsKKyAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRzU2NhbGUoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAgICAgCiAgICAgZW51bSBTdHJ1Y3R1cmFsTGF5
ZXJQdXJwb3NlIHsKICAgICAgICAgTm9TdHJ1Y3R1cmFsTGF5ZXIgPSAwLAogICAgICAgICBTdHJ1
Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCwKICAgICAgICAgU3RydWN0dXJhbExheWVyRm9yUmVw
bGljYUZsYXR0ZW5pbmcKICAgICB9OwotICAgIHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0
cnVjdHVyYWxMYXllclB1cnBvc2UpOworICAgIHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0
cnVjdHVyYWxMYXllclB1cnBvc2UsIGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogICAgIFN0cnVjdHVyYWxMYXllclB1
cnBvc2Ugc3RydWN0dXJhbExheWVyUHVycG9zZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRBbmlt
YXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmlu
ZGV4IGI0NDlmMzc4ODFkNjM5YTY1MzFiMTQ0NTA4M2M2NWFjNmZlYTkzYjEuLjMzZTczYWU4NDhj
NjBmOGE3YTIwNjk1MThlNWU2M2Q3MWYzMzUxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xMDUsNiArMTA1LDcgQEAgUGFzc093
blB0cjxHcmFwaGljc0xheWVyPiBSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZUdyYXBoaWNzTGF5
ZXIoY29uc3QgU3RyaW5nJgogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obmFtZSk7CiAjZW5kaWYK
KyAgICBncmFwaGljc0xheWVyLT5zZXRLZWVwUGl4ZWxBbGlnbmVkKGNvbXBvc2l0b3IoKS0+a2Vl
cExheWVyc1BpeGVsQWxpZ25lZCgpKTsKICAgICByZXR1cm4gZ3JhcGhpY3NMYXllci5yZWxlYXNl
KCk7CiB9CiAKQEAgLTExNSw2ICsxMTYsMTIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNy
ZWF0ZVByaW1hcnlHcmFwaGljc0xheWVyKCkKICAgICBsYXllck5hbWUgPSBuYW1lRm9yTGF5ZXIo
KTsKICNlbmRpZgogICAgIG1fZ3JhcGhpY3NMYXllciA9IGNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5
ZXJOYW1lKTsKKyAgICBpZiAocmVuZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCkpIHsKKyAgICAgICAg
RnJhbWUqIGZyYW1lID0gdG9SZW5kZXJWaWV3KHJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKS0+ZnJh
bWUoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Cisg
ICAgICAgIGlmIChwYWdlICYmIGZyYW1lICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IGZyYW1lKQor
ICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRBcHBsaWVzUGFnZVNjYWxlKCk7CisgICAg
fQogICAgIAogICAgIHVwZGF0ZUxheWVyT3BhY2l0eShyZW5kZXJlcigpLT5zdHlsZSgpKTsKICAg
ICB1cGRhdGVMYXllclRyYW5zZm9ybShyZW5kZXJlcigpLT5zdHlsZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZGFi
ZjM4NzcwMTcwZGYzNjYyNTY5OWFlZjgxN2I2M2ZlNjFhZjE4Zi4uNThmMzlhYTkwNTM4Y2QzOTc4
MzE4Yzg4OGQxMDhiYjIyOWVjM2MzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE1NjMsNiArMTU2MywxMiBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKSBjb25zdAogICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSB5ZXQuCiB9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjprZWVwTGF5ZXJzUGl4ZWxBbGlnbmVkKCkgY29u
c3QKK3sKKyAgICAvLyBXaGVuIHNjYWxpbmcsIGF0dGVtcHQgdG8gYWxpZ24gY29tcG9zaXRpbmcg
bGF5ZXJzIHRvIHBpeGVsIGJvdW5kYXJpZXMuCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRp
YyBib29sIHNob3VsZENvbXBvc2l0ZU92ZXJmbG93Q29udHJvbHMoU2Nyb2xsVmlldyogdmlldykK
IHsKICAgICBpZiAodmlldy0+cGxhdGZvcm1XaWRnZXQoKSkKQEAgLTE2NDYsNyArMTY1Miw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5ZXIoKQogICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFtX3Jvb3RDb250ZW50TGF5ZXIpIHsKLSAgICAgICAgbV9yb290
Q29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOworICAgICAgICBtX3Jvb3RD
b250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE5hbWUoImNvbnRlbnQgcm9vdCIpOwog
I2VuZGlmCkBAIC0xNjYzLDcgKzE2NjksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
ZW5zdXJlUm9vdExheWVyKCkKICAgICAgICAgICAgIEFTU0VSVCghbV9jbGlwTGF5ZXIpOwogCiAg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBsYXllciB0byBob3N0IHRoZSBjbGlwcGluZyBsYXllciBh
bmQgdGhlIG92ZXJmbG93IGNvbnRyb2xzIGxheWVycy4KLSAgICAgICAgICAgIG1fb3ZlcmZsb3dD
b250cm9sc0hvc3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKKyAgICAgICAgICAg
IG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlz
KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5
ZXItPnNldE5hbWUoIm92ZXJmbG93IGNvbnRyb2xzIGhvc3QiKTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGQ4Nzc5
ZmE0MTE1ZjBlNjJiODE2ZjFjNzkzOGQ3NDMxN2RjYjk2OTEuLjFkYjM2MGQ5Zjg2ZGFkOTQ4N2E4
YjU0MzUwNzcxZWM0NDA1NTNlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTE5MSw2ICsxOTEsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKICAg
ICAKKyAgICBib29sIGtlZXBMYXllcnNQaXhlbEFsaWduZWQoKSBjb25zdDsKKwogICAgIHZvaWQg
cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTg0NDA4NjUx
YzllYTM3NDM0NjhlZjIxOTc0NWVlNzcxMzUyOTA4Zi4uZmRmZWEyNDI1NTkzNGNiYTI3NTk4ODVl
MjY1YTQyMDNmODk1NzliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxMS0wNy0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgY29kZSB0byBhdHRlbXB0IHRvIGFsaWduIGNvbXBvc2l0aW5nIGxheWVy
cyB0byBwaXhlbCBib3VuZGFyaWVzIHdoZW4gcGFnZSBzY2FsZSBjaGFuZ2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY1OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgaW1wbGVtZW50YXRp
b25zIG9mIGJhY2tpbmdTY2FsZUZhY3RvcigpIGFuZCBwYWdlU2NhbGVGYWN0b3IoKSBub3cKKyAg
ICAgICAgdGhhdCBHcmFwaGljc0xheWVyQ2xpZW50IGhhcyBkZWZhdWx0IGltcGxlbWVudGF0aW9u
cy4KKworICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheS5jcHA6CisKIDIwMTEtMDctMTUgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBHcmFwaGlj
c0xheWVyIHB1bGwgdGhlaXIgY29udGVudHNTY2FsZSwgcmF0aGVyIHRoYW4gcHVzaGluZyBpdCBv
bnRvIHRoZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVy
bGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAppbmRl
eCBkZmQzNzU2NDQxODlkMDRhMzc3NTRkZTA3NWYzYTAzZjFkNmU5NThmLi5mNGEyN2ZiNTJjYTdj
MGEyZjM5NmFhNjE1NWEzYjMzMGYzYzI2NmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGFnZU92ZXJsYXkuY3BwCkBAIC03MCwxNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cGFnZU92ZXJsYXlDbGllbnQtPnBhaW50UGFnZU92ZXJsYXkoY29udGV4dCk7CiAgICAgfQogCi0g
ICAgLy8gTXVsdGlwbGllciBmb3IgYmFja2luZyBzdG9yZSBzaXplLCByZWxhdGVkIHRvIGhpZ2gg
RFBJLgotICAgIHZpcnR1YWwgZmxvYXQgYmFja2luZ1NjYWxlRmFjdG9yKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQogICAgIHZp
cnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwppbmRleCBlYjA0OWY4OTBmOTdlYzk5NWNjMjg3OWIzOTJmMDE3MDdiNmNi
MDhlLi4wODdiN2NjOGVlOWQ2YWJhYThkYWU3OWM3MDA1MzlkYzFjYTFiN2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8gYXR0ZW1wdCB0byBhbGln
biBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3aGVuIHBhZ2Ugc2NhbGUg
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmVkIGltcGxlbWVudGF0aW9ucyBvZiBiYWNraW5nU2NhbGVGYWN0b3IoKSBhbmQgcGFnZVNj
YWxlRmFjdG9yKCkgbm93CisgICAgICAgIHRoYXQgR3JhcGhpY3NMYXllckNsaWVudCBoYXMgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBXZWJWaWV3Lmg6CisKIDIwMTEtMDct
MTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IFdpbmRvd3MgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKaW5kZXggY2RiYjdlOGZiYzYyNGIyMmZkZDgx
ODUwYzZmOWM0NDRiY2NlNmFmOS4uODc2NjI4YjVjYzQ2MzIxNTliMDdhZDM2MTkwNzEzNjhkNTc5
ZjRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuaApAQCAtOTkyLDggKzk5Miw2IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGluQ2xpcCk7Ci0gICAgdmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0Jv
cmRlcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBkM2Y2OTcxMmYyMDkwMjk2MTdlZmFjZTIzMWQ2NjdkMTU2ODAz
ZTU2Li42OTEyMzQzMTU3MDI0NTVkNzQ4YTcyYTU0MDE3ZjE2Y2JmYzA3Mzk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDctMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8gYXR0ZW1wdCB0byBhbGlnbiBjb21w
b3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3aGVuIHBhZ2Ugc2NhbGUgY2hhbmdl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2NTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFJlbW92ZWQgaW1wbGVtZW50YXRpb24gb2YgcGFnZVNjYWxlRmFjdG9yKCkgbm93IHRoYXQgR3Jh
cGhpY3NMYXllckNsaWVudCBoYXMKKyAgICAgICAgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHA6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5oOgorCiAyMDEx
LTA3LTE1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IE92ZXJsYXkgc2Nyb2xsYmFycyBpbiBvdmVyZmxvdyBhcmVhcyBubyBsb25nZXIgcHVsc2Ugd2hl
biByZXZlYWxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2NhL0xheWVyVHJlZUhvc3RDQS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcAppbmRleCAyYTBmMjY0NmY3ODVlOThhZWUzODFlM2Uy
MTBjMWVlODY5OTExYzU4Li5kNTY0MTk2NjBjNDcyNWQ4ZTdlZTFkNjU0OWEwZGVkNzVkNGI3Mjg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJU
cmVlSG9zdENBLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Ev
TGF5ZXJUcmVlSG9zdENBLmNwcApAQCAtMjExLDExICsyMTEsNiBAQCBmbG9hdCBMYXllclRyZWVI
b3N0Q0E6OmJhY2tpbmdTY2FsZUZhY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fd2ViUGFnZS0+
dXNlclNwYWNlU2NhbGVGYWN0b3IoKTsKIH0KIAotZmxvYXQgTGF5ZXJUcmVlSG9zdENBOjpwYWdl
U2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiAxOwotfQotCiB2b2lkIExheWVyVHJl
ZUhvc3RDQTo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0Eu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0Eu
aAppbmRleCBlNGQ2Y2U3OTBhOGMwZWQ0ZWUxOTk1YzRlMmVlODQ2ZDU4MWNkYjlkLi5jOWI2NjUy
YjJhZGQ0MTc3YTllODllNmYxOThhZjVlNDgyMmVjMDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5oCkBAIC03NSw3
ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRD
aGFuZ2VzRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgfQog
CiAgICAgLy8gTGF5ZXJUcmVlSG9zdENBCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101109</attachid>
            <date>2011-07-16 18:18:16 -0700</date>
            <delta_ts>2011-07-16 18:54:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64658-20110716181815.patch</filename>
            <type>text/plain</type>
            <size>39107</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTExNDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZWE4NGEwNTY5ZTE5MDQ5
MTk3MzkzNWFhMDJlNmYwZjZlOTVmNDk3Li5mYmIzMmZhMTZlNTAxNGM3ZTcwY2IzZTRjNDg1Yzhi
Y2MxZjYzNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDctMTYgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUgdG8g
YXR0ZW1wdCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmllcyB3
aGVuIHBhZ2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudGVkIGEgbmV3IGJlaGF2aW9yIG9uIEdyYXBo
aWNzTGF5ZXJDQSB3aGljaCBhdHRlbXB0cyB0byBrZWVwIGxheWVycyBwaXhlbAorICAgICAgICBh
bGlnbmVkIGFzIHBhZ2Ugc2NhbGUgY2hhbmdlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVx
dWlyZXMgZGVub3Rpbmcgd2hpY2ggbGF5ZXIgaGFzIHRoZSBwYWdlIHNjYWxlIG9uIGl0IChpdCBp
cyBhc3N1bWVkIHRvIGJlCisgICAgICAgIGFscmVhZHkgYWxpZ25lZCksIHZpYSBzZXRBcHBsaWVz
UGFnZVNjYWxlKCkuIFdlIGFsc28gbm93IHBhc3MgYSBzY2FsZSBhbmQgb2Zmc2V0CisgICAgICAg
IGRvd24gdGhyb3VnaCB0aGUgR3JhcGhpY3NMYXllciBjb21taXRzLCB3aGljaCBhcmUgdXNlZCB0
byBtYXAgbGF5ZXIgYm91bmRzIHRvIGRpc3BsYXkKKyAgICAgICAgY29vcmRpbmF0ZXMgZm9yIHJv
dW5kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOiBO
ZXcgZmxhZ3MgYW5kIGdldHRlcnMvc2V0dGVycyBmb3IgcGl4ZWwgYWxpZ25tZW50LAorICAgICAg
ICBhbmQgdGhlIGxheWVyIHRoYXQgaXMgdGhlIGFwcGxpZXIgb2YgdGhlIHNjYWxlLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6bWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0QXBwbGllc1BhZ2VTY2FsZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjphcHBsaWVzUGFnZVNjYWxlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllcik6IEluaXRpYWxpemUgdGhlIG5l
dyBmbGFncy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmJhY2tpbmdTY2FsZUZh
Y3Rvcik6IFV0aWxpdHkgbWV0aG9kIHRoYXQgY2FsbHMgdGhlIGNsaWVudCBpZiB0aGVyZSBpcyBv
bmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpwYWdlU2NhbGVGYWN0b3IpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQ6OmJhY2tpbmdTY2FsZUZh
Y3Rvcik6IFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQ6OnBhZ2VTY2FsZUZhY3Rvcik6IERpdHRvLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6IFBhc3Mgc2NhbGUgYW5k
IGJhc2UtcmVsYXRpdmUgb2Zmc2V0IGFyb3VuZAorICAgICAgICB0byBtZXRob2RzIHRoYXQgbmVl
ZCB0byB1cGRhdGUgZ2VvbWV0cnkgZHVyaW5nIGNvbW1pdC4KKyAgICAgICAgU29tZSBuZXcgbWV0
aG9kcyByZWxhdGVkIHRvIHBpeGVsIGFsaWdubWVudC4KKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOiBGb3Igc2lu
Z2xlLWxheWVyIGNvbW1pdHMsCisgICAgICAgIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgYmFzZS1y
ZWxhdGl2ZSBvZmZzZXQsIGFuZCB3aGV0aGVyIHdlJ3JlIHVuZGVyIHRoZSBsYXllcgorICAgICAg
ICBhcHBseWluZyB0aGUgc2NhbGUgYnkgd2Fsa2luZyB1cCB0aGUgdHJlZS4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSk6IENhbGwKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jh
c2UoKSB0byBnZXQgc2NhbGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgdGFyZ2V0IGxheWVyLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0
Q2hhbmdlcyk6IFBhc3MgZmxhZ3MgcmVsYXRlZCB0byBzY2FsaW5nLgorICAgICAgICBwb3NpdGlv
blJlbGF0aXZlVG9CYXNlIGlzIGFuIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYW5jZXN0b3IgbGF5
ZXIga25vd24gdG8gYmUgcGl4ZWwKKyAgICAgICAgYWxpZ25lZC4gYWZmZWN0ZWRCeVBhZ2VTY2Fs
ZSBpcyB0cnVlIGZvciBsYXllcnMgd2hpY2ggYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSBsYXllcgor
ICAgICAgICB3aGljaCBhcHBsaWVzIHRoZSBzY2FsZS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6
IFBhc3Mgc2NhbGUgYW5kIG9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlR2VvbWV0cnkpOiBDYWxsIGNvbXB1dGVQaXhlbEFsaWdubWVudCgpIHRvIGdldAor
ICAgICAgICBwaXhlbC1hbGlnbmVkIGdlb21ldHJ5LiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgYXBw
bGllZCB0byBsYXllcnMgd2hpY2ggcmVuZGVyIGNvbnRlbnQsCisgICAgICAgIHNvIHJlLW9yZ2Fu
aXplIHRoZSBjb2RlIHRvIHVzZSB0aGUgdW5jaGFuZ2VkIGxheWVyIGdlb21ldHJ5IGZvciB0aGUg
c3RydWN0dXJhbCBsYXllciwKKyAgICAgICAgYnV0IHRvIGFwcGx5IHRoZSBhZGp1c3RlZCBnZW9t
ZXRyeSB0byB0aGUgbV9sYXllci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcik6IFBhc3Mgc2NhbGUgYW5kIG9mZnNldC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVy
RHJhd3NDb250ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0S2VlcFBpeGVsQWxpZ25lZCk6IFdoZW4gc2V0
LCBkaXJ0aWVzIGZsYWdzCisgICAgICAgIGZvciBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBy
ZWNvbXB1dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpub3RlQ2hhbmdl
c0ZvclNjYWxlU2Vuc2l0aXZlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVn
cmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxp
Z25tZW50KTogTWFwIG91ciBib3VuZHMgdG8gc2NyZWVuCisgICAgICAgIHNjYWxlLCByb3VuZCBv
dXQgdG8gYW4gaW50ZWdyYWwgcmVjdCwgdGhlbiBtYXAgaXQgYmFjaywgYWRkaW5nIGEgZnVkZ2Ug
ZmFjdG9yCisgICAgICAgIHNvIHRoYXQgQ0EgYmFja2luZyBzdG9yZXMgZG9uJ3QgZW5kIHVwIGJl
aW5nIHNtYWxsZXIgdGhhbiB3ZSBleHBlY3QgYmVjYXVzZQorICAgICAgICBvZiBpbnRlZ2VyIHRy
dW5jYXRpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlR3JhcGhpY3NMYXll
cik6IFR1cm4gb24gcGl4ZWwgYWxpZ25tZW50IGlmCisgICAgICAgIHRoZSBjb21wb3NpdG9yIHNh
eXMgc28uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNyZWF0ZVByaW1h
cnlHcmFwaGljc0xheWVyKTogU2V0IHRoZSBSZW5kZXJWaWV3J3MKKyAgICAgICAgbGF5ZXIgYXMg
dGhlIG9uZSBhcHBseWluZyB0aGUgc2NhbGUsIGZvciB0aGUgbWFpbiBmcmFtZS4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDogTmV3IG1ldGhvZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6a2VlcExheWVyc1BpeGVsQWxpZ25lZCk6IE1hc3Rl
ciBzd2l0Y2ggZm9yCisgICAgICAgIHBpeGVsIGFsaWdubWVudC4gRGVmYXVsdCB0byBvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKTog
R2l2ZSB0aGUgdHdvIHJvb3QtaXNoIGxheWVycworICAgICAgICBhIGNsaWVudCBzbyB0aGV5IGNh
biBhc2sgZm9yIHBhZ2Ugc2NhbGUgaWYgbmVjZXNzYXJ5LgorCiAyMDExLTA3LTE1ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwCmluZGV4IDhkZmI4Yzc0ZDUzOWIyYzI4ZjVhMDVmYmMzZjMzODgwMmJkMzhhN2IuLjZhYzJh
NWIyMDU2NzAyOTYwN2M1Y2FkMTAwN2Q3NmYxYTFiYTdjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC03NCw2ICs3NCw4
IEBAIEdyYXBoaWNzTGF5ZXI6OkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xp
ZW50KQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9kcmF3c0NvbnRlbnQo
ZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVzRHJhd2luZyhmYWxzZSkKKyAgICAsIG1fbWFpbnRh
aW5zUGl4ZWxBbGlnbm1lbnQoZmFsc2UpCisgICAgLCBtX2FwcGxpZXNQYWdlU2NhbGUoZmFsc2Up
CiAgICAgLCBtX3BhaW50aW5nUGhhc2UoR3JhcGhpY3NMYXllclBhaW50QWxsKQogICAgICwgbV9j
b250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQogICAgICwg
bV9wYXJlbnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAppbmRleCBmNmEzNzg1MjNiMDc4MmFhM2E5ZTdmN2M5ZjdhNGY0Nzc5NjI2Njlm
Li5hZTJlMjQ5N2ZjNDk1NmVmZTExMWU0NWVmMmFhN2Y5ZTdmZjA5ZWMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC0zNTAsNiAr
MzUwLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxv
YXQpOwogICAgIHZpcnR1YWwgZmxvYXQgYWNjdW11bGF0ZWRPcGFjaXR5KCkgY29uc3Q7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoYm9vbCBtYWludGFpbnNB
bGlnbm1lbnQpIHsgbV9tYWludGFpbnNQaXhlbEFsaWdubWVudCA9IG1haW50YWluc0FsaWdubWVu
dDsgfQorICAgIHZpcnR1YWwgYm9vbCBtYWludGFpbnNQaXhlbEFsaWdubWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQ7IH0KKyAgICAKKyAgICB2b2lkIHNldEFw
cGxpZXNQYWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVlKSB7IG1fYXBwbGllc1BhZ2VT
Y2FsZSA9IGFwcGxpZXNTY2FsZTsgfQorICAgIGJvb2wgYXBwbGllc1BhZ2VTY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbGllc1BhZ2VTY2FsZTsgfQorCisgICAgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+cGFnZVNjYWxlRmFjdG9y
KCkgOiAxOyB9CisgICAgZmxvYXQgYmFja2luZ1NjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+YmFja2luZ1NjYWxlRmFjdG9yKCkgOiAxOyB9CisKICAgICB2
aXJ0dWFsIHZvaWQgcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsgfQogICAgIHZvaWQgbm90ZVBh
Z2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCkBAIC00MTYsNiAr
NDI1LDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzIDogMTsKICAgICBi
b29sIG1fZHJhd3NDb250ZW50IDogMTsKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIDog
MTsKKyAgICBib29sIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQgOiAxOworICAgIGJvb2wgbV9h
cHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUgbGF5ZXIgd2hpY2ggaGFzIHRoZSBw
YWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCiAKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSBtX3BhaW50aW5nUGhhc2U7CiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IG1fY29udGVudHNPcmllbnRhdGlvbjsgLy8gYWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBj
b250ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllckNsaWVudC5oCmluZGV4IGNiMjU0ZDcwMWQ0YzBmNGUyZGQxNWMyNTM2NGFjMmMz
ODgwM2EzNDkuLmY2NmIzNjI0MGQ2YzBjNjFjNmVhNGI2MTliYTJkYmYwNWE1MTE2ZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKQEAgLTY1LDEwICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgeyB9CiAK
ICAgICAvLyBNdWx0aXBsaWVyIGZvciBiYWNraW5nIHN0b3JlIHNpemUsIHJlbGF0ZWQgdG8gaGln
aCBEUEkuCi0gICAgdmlydHVhbCBmbG9hdCBiYWNraW5nU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7
Ci0gICAgLy8gU2NhbGluZyBmYWN0b3Igb2YgdGhlIHBhZ2UuCi0gICAgdmlydHVhbCBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7Ci0gICAgCisgICAgdmlydHVhbCBmbG9hdCBiYWNr
aW5nU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgLy8gUGFnZSBzY2FsZSBm
YWN0b3IuCisgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVy
biAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QgPSAwOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCmluZGV4IDg4YzMxMjE3MTljZDk0YmJkNGRiMDUwZjJjYTE2NTVlZmExOWRiNWIu
LjNjN2FiZjZmNTdjMDA2ZTVmMDUyNDRiZThhNWQzNmQwYTZkMzlkMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cApAQCAtNzkxLDYgKzc5MSwyNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bGF5ZXJEaWREaXNw
bGF5KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0KIH0KIAorRmxvYXRQb2ludCBHcmFwaGlj
c0xheWVyQ0E6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUp
IGNvbnN0Cit7CisgICAgcGFnZVNjYWxlID0gMTsKKworICAgIEZsb2F0UG9pbnQgb2Zmc2V0Owor
ICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVyID0gdGhpczsgY3VyckxheWVy
OyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjdXJyTGF5
ZXItPmFwcGxpZXNQYWdlU2NhbGUoKSkgeworICAgICAgICAgICAgaWYgKGN1cnJMYXllci0+Y2xp
ZW50KCkpCisgICAgICAgICAgICAgICAgcGFnZVNjYWxlID0gY3VyckxheWVyLT5wYWdlU2NhbGVG
YWN0b3IoKTsKKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgIH0KKworICAgICAg
ICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOworICAgIH0KKworICAgIHJldHVybiBG
bG9hdFBvaW50KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpCiB7CiAgICAgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcygpOwpAQCAtNzk4LDI4ICs4MTYs
NDAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKIAogdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
CiB7Ci0gICAgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7CisgICAgZmxvYXQg
cGFnZVNjYWxlRmFjdG9yOworICAgIEZsb2F0UG9pbnQgb2Zmc2V0ID0gY29tcHV0ZVBvc2l0aW9u
UmVsYXRpdmVUb0Jhc2UocGFnZVNjYWxlRmFjdG9yKTsKKyAgICBjb21taXRMYXllckNoYW5nZXNC
ZWZvcmVTdWJsYXllcnMocGFnZVNjYWxlRmFjdG9yLCBvZmZzZXQpOwogICAgIGNvbW1pdExheWVy
Q2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1
cnNpdmVDb21taXRDaGFuZ2VzKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21t
aXRDaGFuZ2VzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlKQogewogICAgIGJvb2wg
aGFkQ2hhbmdlcyA9IG1fdW5jb21taXR0ZWRDaGFuZ2VzOwogICAgIAotICAgIGNvbW1pdExheWVy
Q2hhbmdlc0JlZm9yZVN1YmxheWVycygpOworICAgIGlmIChhcHBsaWVzUGFnZVNjYWxlKCkpIHsK
KyAgICAgICAgcGFnZVNjYWxlRmFjdG9yID0gdGhpcy0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAg
ICAgIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSB0cnVlOworICAgIH0KKworICAgIC8vIEFjY3VtdWxh
dGUgYW4gb2Zmc2V0IGZyb20gdGhlIGFuY2VzdHJhbCBwaXhlbC1hbGlnbmVkIGxheWVyLgorICAg
IEZsb2F0UG9pbnQgYmFzZVJlbGF0aXZlUG9zaXRpb24gPSBwb3NpdGlvblJlbGF0aXZlVG9CYXNl
OworICAgIGlmIChhZmZlY3RlZEJ5UGFnZVNjYWxlKQorICAgICAgICBiYXNlUmVsYXRpdmVQb3Np
dGlvbiArPSBtX3Bvc2l0aW9uOworICAgIAorICAgIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1
YmxheWVycyhwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uKTsKIAogICAgIGlm
IChtX21hc2tMYXllcikKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9t
YXNrTGF5ZXIpLT5jb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9tYXNrTGF5ZXIpLT5jb21taXRMYXllckNo
YW5nZXNCZWZvcmVTdWJsYXllcnMocGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlv
bik7CiAKICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNo
aWxkcmVuKCk7CiAgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAgICBH
cmFwaGljc0xheWVyQ0EqIGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4o
Y2hpbGRMYXllcnNbaV0pOwotICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cygpOworICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVG
YWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKICAgICB9
CiAKICAgICBpZiAobV9yZXBsaWNhTGF5ZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNz
TGF5ZXJDQSo+KG1fcmVwbGljYUxheWVyKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcygpOworICAg
ICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX3JlcGxpY2FMYXllciktPnJlY3Vy
c2l2ZUNvbW1pdENoYW5nZXMocGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwg
YWZmZWN0ZWRCeVBhZ2VTY2FsZSk7CiAKICAgICBpZiAobV9tYXNrTGF5ZXIpCiAgICAgICAgIHN0
YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQSo+KG1fbWFza0xheWVyKS0+Y29tbWl0TGF5ZXJDaGFu
Z2VzQWZ0ZXJTdWJsYXllcnMoKTsKQEAgLTgzMCwxNCArODYwLDE0IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKCkKICAgICAgICAgY2xpZW50KCktPmRpZENv
bW1pdENoYW5nZXNGb3JMYXllcih0aGlzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OmNv
bW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycygpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKGZsb2F0IHBhZ2VTY2FsZUZhY3Rvciwg
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKICAgICBpZiAoIW1f
dW5jb21taXR0ZWRDaGFuZ2VzKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBOZWVkIHRvIGhh
bmRsZSBQcmVzZXJ2ZXMzRENoYW5nZWQgZmlyc3QsIGJlY2F1c2UgaXQgYWZmZWN0cyB3aGljaCBs
YXllcnMgc3Vic2VxdWVudCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIHRvCiAgICAgaWYgKG1fdW5j
b21taXR0ZWRDaGFuZ2VzICYgKFByZXNlcnZlczNEQ2hhbmdlZCB8IFJlcGxpY2F0ZWRMYXllckNo
YW5nZWQpKQotICAgICAgICB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKTsKKyAgICAgICAgdXBkYXRl
U3RydWN0dXJhbExheWVyKHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7
CiAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBOYW1lQ2hhbmdlZCkKICAgICAgICAg
dXBkYXRlTGF5ZXJOYW1lcygpOwpAQCAtODU4LDcgKzg4OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgICAgICB1cGRhdGVT
dWJsYXllckxpc3QoKTsKIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEdlb21ldHJ5
Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlR2VvbWV0cnkoKTsKKyAgICAgICAgdXBkYXRlR2VvbWV0
cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAogICAgIGlmICht
X3VuY29tbWl0dGVkQ2hhbmdlcyAmIFRyYW5zZm9ybUNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZVRy
YW5zZm9ybSgpOwpAQCAtODcwLDcgKzkwMCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21t
aXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgICAgICB1cGRhdGVNYXNrc1RvQm91
bmRzKCk7CiAgICAgCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRHJhd3NDb250ZW50
Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKKyAgICAgICAgdXBk
YXRlTGF5ZXJEcmF3c0NvbnRlbnQocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9C
YXNlKTsKIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzT3BhcXVlQ2hh
bmdlZCkKICAgICAgICAgdXBkYXRlQ29udGVudHNPcGFxdWUoKTsKQEAgLTkwMCw3ICs5MzAsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJz
KCkKICAgICAgICAgdXBkYXRlQWNjZWxlcmF0ZXNEcmF3aW5nKCk7CiAgICAgCiAgICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgQ29udGVudHNTY2FsZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0
ZUNvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgdXBkYXRlQ29udGVudHNTY2FsZShwYWdlU2NhbGVG
YWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKQpAQCAtOTcyLDcwICsxMDAyLDc1
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVTdWJsYXllckxpc3QoKQogICAgICAgICBt
X2xheWVyLT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9t
ZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UpCiB7Ci0gICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRM
YXllcihtX3NpemUpOworICAgIEZsb2F0UG9pbnQgc2NhbGVkUG9zaXRpb247CisgICAgRmxvYXRQ
b2ludDNEIHNjYWxlZEFuY2hvclBvaW50OworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplOworICAg
IEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNldDsKKyAgICBjb21wdXRlUGl4ZWxBbGlnbm1l
bnQocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBzY2FsZWRQb3NpdGlv
biwgc2NhbGVkU2l6ZSwgc2NhbGVkQW5jaG9yUG9pbnQsIHBpeGVsQWxpZ25tZW50T2Zmc2V0KTsK
KworICAgIGJvb2wgbmVlZFRpbGVkTGF5ZXIgPSByZXF1aXJlc1RpbGVkTGF5ZXIocGFnZVNjYWxl
RmFjdG9yLCBzY2FsZWRTaXplKTsKICAgICBpZiAobmVlZFRpbGVkTGF5ZXIgIT0gbV91c2luZ1Rp
bGVkTGF5ZXIpCi0gICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVkTGF5ZXIp
OworICAgICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyLCBwYWdlU2Nh
bGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0gICAgRmxvYXRTaXplIHVzZWRT
aXplID0gbV91c2luZ1RpbGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNpemUoKSA6IG1fc2l6ZTsKLSAg
ICBGbG9hdFJlY3QgYm91bmRzUmVjdChtX2JvdW5kc09yaWdpbiwgdXNlZFNpemUpOworICAgIEZs
b2F0U2l6ZSB1c2VkU2l6ZSA9IG1fdXNpbmdUaWxlZExheWVyID8gY29uc3RyYWluZWRTaXplKCkg
OiBzY2FsZWRTaXplOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZEJvdW5kcyhtX2JvdW5kc09yaWdp
biAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LCB1c2VkU2l6ZSk7CiAKICAgICAvLyBVcGRhdGUgcG9z
aXRpb24uCiAgICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBieSB0aGUgbGF5
ZXIgYW5jaG9yIHBvaW50LgotICAgIEZsb2F0UG9pbnQgcG9zUG9pbnQobV9wb3NpdGlvbi54KCkg
KyBtX2FuY2hvclBvaW50LngoKSAqIHVzZWRTaXplLndpZHRoKCksIG1fcG9zaXRpb24ueSgpICsg
bV9hbmNob3JQb2ludC55KCkgKiB1c2VkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgcHJpbWFyeUxheWVy
KCktPnNldFBvc2l0aW9uKHBvc1BvaW50KTsKLQotICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9u
ZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7Ci0gICAgICAgIExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1BvaW50
OwotICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9u
ZShpdC0+Zmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwt
Y2FzZSBwb3NpdGlvbiBmb3IgdGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAotICAgICAgICAg
ICAgICAgIC8vIHdoaWNoIHdlIHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCi0gICAg
ICAgICAgICAgICAgY2xvbmVQb3NpdGlvbiA9IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldFBvc2l0aW9uKGNsb25l
UG9zaXRpb24pOwotICAgICAgICB9Ci0gICAgfQorICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3Np
dGlvbihzY2FsZWRQb3NpdGlvbi54KCkgKyBzY2FsZWRBbmNob3JQb2ludC54KCkgKiB1c2VkU2l6
ZS53aWR0aCgpLCBzY2FsZWRQb3NpdGlvbi55KCkgKyBzY2FsZWRBbmNob3JQb2ludC55KCkgKiB1
c2VkU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBVcGRhdGUgYm91bmRzLgotICAgIC8vIE5vdGUg
dGhhdCB3ZSBkb24ndCByZXNpemUgbV9jb250ZW50c0xheWVyLiBJdCdzIHVwIHRoZSBjYWxsZXIg
dG8gZG8gdGhhdC4KICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKLSAgICAgICAgbV9zdHJ1
Y3R1cmFsTGF5ZXItPnNldEJvdW5kcyhib3VuZHNSZWN0KTsKKyAgICAgICAgRmxvYXRQb2ludCBs
YXllclBvc2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUu
d2lkdGgoKSwgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyhtX2JvdW5kc09yaWdpbiwgbV9z
aXplKTsKICAgICAgICAgCisgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRQb3NpdGlvbihs
YXllclBvc2l0aW9uKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kcyhsYXll
ckJvdW5kcyk7CisgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRBbmNob3JQb2ludChtX2Fu
Y2hvclBvaW50KTsKKwogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0
cnVjdHVyYWxMYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChM
YXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Qm91bmRzKGJvdW5k
c1JlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0aGUgY29udGVu
dHMgbGF5ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24gaXMgY2VudGVy
LXJlbGF0aXZlLgotICAgICAgICBDR1BvaW50IGNlbnRlclBvaW50ID0gQ0dQb2ludE1ha2UobV9z
aXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsKLSAgICAgICAgbV9s
YXllci0+c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOworICAgICAgICAgICAgZm9yIChMYXllck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNsb25lID0gaXQtPnNl
Y29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBs
YXllclBvc2l0aW9uOworCisgICAgICAgICAgICAgICAgaWYgKG1fcmVwbGljYUxheWVyICYmIGlz
UmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2UgcG9zaXRpb24gZm9yIHRoZSByb290IG9mIGEgY2xv
bmUgc3VidHJlZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJl
cGxpY2F0ZWRMYXllclJvb3QoKS4KKyAgICAgICAgICAgICAgICAgICAgY2xvbmVQb3NpdGlvbiA9
IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewot
ICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAt
PmVuZCgpOwotICAgICAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
YXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC0+c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOworICAgICAgICAgICAgICAgIGNs
b25lLT5zZXRQb3NpdGlvbihjbG9uZVBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBjbG9uZS0+
c2V0Qm91bmRzKGxheWVyQm91bmRzKTsKKyAgICAgICAgICAgICAgICBjbG9uZS0+c2V0QW5jaG9y
UG9pbnQobV9hbmNob3JQb2ludCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgc3RydWN0dXJhbCBsYXllciwgd2UganVzdCB1c2UgMC41LCAwLjUg
Zm9yIHRoZSBhbmNob3IgcG9pbnQgb2YgdGhlIG1haW4gbGF5ZXIuCisgICAgICAgIHNjYWxlZEFu
Y2hvclBvaW50ID0gRmxvYXRQb2ludCgwLjVmLCAwLjVmKTsKKyAgICAgICAgYWRqdXN0ZWRQb3Np
dGlvbiA9IEZsb2F0UG9pbnQoc2NhbGVkQW5jaG9yUG9pbnQueCgpICogdXNlZFNpemUud2lkdGgo
KSAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCksIHNjYWxlZEFuY2hvclBvaW50LnkoKSAq
IHVzZWRTaXplLmhlaWdodCgpIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQuaGVpZ2h0KCkpOwogICAg
IH0KICAgICAKLSAgICBtX2xheWVyLT5zZXRCb3VuZHMoYm91bmRzUmVjdCk7CisgICAgbV9sYXll
ci0+c2V0UG9zaXRpb24oYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgbV9sYXllci0+c2V0Qm91bmRz
KGFkanVzdGVkQm91bmRzKTsKKyAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNo
b3JQb2ludCk7CisKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xv
bmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXll
ckNsb25lTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChMYXllck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBpdC0+c2Vjb25kLT5zZXRCb3VuZHMoYm91bmRzUmVjdCk7Ci0gICAgfQotICAgIAotICAgIC8v
IFVwZGF0ZSBhbmNob3IgcG9pbnQuCi0gICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50
KG1fYW5jaG9yUG9pbnQpOworICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgUGxhdGZvcm1DQUxheWVyKiBjbG9uZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwogCi0gICAgaWYg
KExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJpbWFyeUxheWVyQ2xvbmVzKCkpIHsKLSAgICAg
ICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwot
ICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeyAgIAotICAgICAgICAgICAgUGxhdGZvcm1DQUxh
eWVyKiBjdXJyTGF5ZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICAgICAgY3VyckxheWVy
LT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKKyAgICAgICAgICAgIGlmICghbV9zdHJ1
Y3R1cmFsTGF5ZXIgJiYgbV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0
LT5maXJzdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNl
IHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCisgICAgICAgICAgICAg
ICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KKyAgICAgICAg
ICAgICAgICBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjbG9uZS0+c2V0UG9zaXRpb24oY2xvbmVQb3NpdGlv
bik7CisgICAgICAgICAgICBjbG9uZS0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsKKyAgICAg
ICAgICAgIGNsb25lLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2ludCk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTExMTcsMTIgKzExNTIsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlU3RydWN0dXJhbExheWVyKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVTdHJ1Y3R1cmFsTGF5ZXIoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewotICAgIGVuc3VyZVN0cnVjdHVyYWxMYXllcihz
dHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKCkpOworICAgIGVuc3VyZVN0cnVjdHVyYWxMYXllcihzdHJ1
Y3R1cmFsTGF5ZXJQdXJwb3NlKCksIHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIo
U3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OmVu
c3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UsIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZSkKIHsKICAgICBpZiAocHVycG9zZSA9PSBOb1N0cnVjdHVyYWxMYXllcikgewogICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKQEAgLTExNDEsNyArMTE3Niw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBw
dXJwb3NlKQogICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSAwOwogCiAgICAgICAgICAg
ICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgb2YgbV9sYXllciBub3cgdGhhdCB3ZSBubyBsb25n
ZXIgaGF2ZSBhIHN0cnVjdHVyYWwgbGF5ZXIuCi0gICAgICAgICAgICB1cGRhdGVHZW9tZXRyeSgp
OworICAgICAgICAgICAgdXBkYXRlR2VvbWV0cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlKTsKICAgICAgICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgICAgICAg
ICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKTsKIApAQCAtMTE3Nyw3ICsxMjEyLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQ
dXJwb3NlIHB1cnBvc2UpCiAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOwogCiAgICAgLy8gVXBkYXRl
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgotICAgIHVwZGF0ZUdlb21l
dHJ5KCk7CisgICAgdXBkYXRlR2VvbWV0cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0
aXZlVG9CYXNlKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICB1cGRhdGVDaGlsZHJlblRy
YW5zZm9ybSgpOwogICAgIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOwpAQCAtMTIyNSwxMSAr
MTI2MCwxMSBAQCBHcmFwaGljc0xheWVyQ0E6OlN0cnVjdHVyYWxMYXllclB1cnBvc2UgR3JhcGhp
Y3NMYXllckNBOjpzdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKAogICAgIHJldHVybiBOb1N0cnVjdHVy
YWxMYXllcjsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUxheWVyRHJhd3NDb250
ZW50KCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jh
c2UpCiB7Ci0gICAgYm9vbCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRMYXllcihtX3Np
emUpOworICAgIGJvb2wgbmVlZFRpbGVkTGF5ZXIgPSByZXF1aXJlc1RpbGVkTGF5ZXIocGFnZVNj
YWxlRmFjdG9yLCBtX3NpemUpOwogICAgIGlmIChuZWVkVGlsZWRMYXllciAhPSBtX3VzaW5nVGls
ZWRMYXllcikKLSAgICAgICAgc3dhcEZyb21PclRvVGlsZWRMYXllcihuZWVkVGlsZWRMYXllcik7
CisgICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRpbGVkTGF5ZXIsIHBhZ2VTY2Fs
ZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAKICAgICBpZiAobV9kcmF3c0NvbnRl
bnQpCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtMTk1MSwxNiArMTk4
NiwxMyBAQCBzdGF0aWMgZmxvYXQgY2xhbXBlZENvbnRlbnRzU2NhbGVGb3JTY2FsZShmbG9hdCBz
Y2FsZSkKICAgICByZXR1cm4gbWF4KG1pblNjYWxlLCBtaW4oc2NhbGUsIG1heFNjYWxlKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1NjYWxlKCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1NjYWxlKGZsb2F0IHBhZ2VTY2FsZUZhY3Rvciwg
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKLSAgICBib29sIG5l
ZWRUaWxlZExheWVyID0gcmVxdWlyZXNUaWxlZExheWVyKG1fc2l6ZSk7CisgICAgYm9vbCBuZWVk
VGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRMYXllcihwYWdlU2NhbGVGYWN0b3IsIG1fc2l6ZSk7
CiAgICAgaWYgKG5lZWRUaWxlZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKQotICAgICAgICBz
d2FwRnJvbU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyKTsKKyAgICAgICAgc3dhcEZyb21P
clRvVGlsZWRMYXllcihuZWVkVGlsZWRMYXllciwgcGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlKTsKIAotICAgIGZsb2F0IGJhY2tpbmdTY2FsZUZhY3RvciA9IG1fY2xpZW50
ID8gbV9jbGllbnQtPmJhY2tpbmdTY2FsZUZhY3RvcigpIDogMTsKLSAgICBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IgPSBtX2NsaWVudCA/IG1fY2xpZW50LT5wYWdlU2NhbGVGYWN0b3IoKSA6IDE7Ci0K
LSAgICBmbG9hdCBjb250ZW50c1NjYWxlID0gY2xhbXBlZENvbnRlbnRzU2NhbGVGb3JTY2FsZShw
YWdlU2NhbGVGYWN0b3IgKiBiYWNraW5nU2NhbGVGYWN0b3IpOworICAgIGZsb2F0IGNvbnRlbnRz
U2NhbGUgPSBjbGFtcGVkQ29udGVudHNTY2FsZUZvclNjYWxlKHBhZ2VTY2FsZUZhY3RvciAqIGJh
Y2tpbmdTY2FsZUZhY3RvcigpKTsKICAgICAKICAgICBtX2xheWVyLT5zZXRDb250ZW50c1NjYWxl
KGNvbnRlbnRzU2NhbGUpOwogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKQEAgLTIwMTAsMTggKzIw
NDIsMTggQEAgRmxvYXRTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXplKCkgY29u
c3QKICAgICByZXR1cm4gY29uc3RyYWluZWRTaXplOwogfQogCi1ib29sIEdyYXBoaWNzTGF5ZXJD
QTo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK2Jvb2wg
R3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5ZXIoZmxvYXQgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RyYXdzQ29udGVu
dCB8fCAhbV9hbGxvd1RpbGVkTGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZs
b2F0IGNvbnRlbnRzU2NhbGUgPSBtX2NsaWVudCA/IG1fY2xpZW50LT5iYWNraW5nU2NhbGVGYWN0
b3IoKSAqIG1fY2xpZW50LT5wYWdlU2NhbGVGYWN0b3IoKSA6IDE7CisgICAgZmxvYXQgY29udGVu
dHNTY2FsZSA9IHBhZ2VTY2FsZUZhY3RvciAqIGJhY2tpbmdTY2FsZUZhY3RvcigpOwogCiAgICAg
Ly8gRklYTUU6IGNhdGNoIHplcm8tc2l6ZSBoZWlnaHQgb3Igd2lkdGggaGVyZSAob3IgZWFybGll
cik/CiAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIGNvbnRlbnRzU2NhbGUgPiBjTWF4UGl4ZWxE
aW1lbnNpb24gfHwgc2l6ZS5oZWlnaHQoKSAqIGNvbnRlbnRzU2NhbGUgPiBjTWF4UGl4ZWxEaW1l
bnNpb247CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVy
KGJvb2wgdXNlVGlsZWRMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9U
aWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewogICAgIEFTU0VSVCh1c2VU
aWxlZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKTsKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxh
eWVyPiBvbGRMYXllciA9IG1fbGF5ZXI7CkBAIC0yMDUwLDE0ICsyMDgyLDE0IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcikK
IAogICAgIHVwZGF0ZUNvbnRlbnRzVHJhbnNmb3JtKCk7CiAKLSAgICB1cGRhdGVHZW9tZXRyeSgp
OworICAgIHVwZGF0ZUdlb21ldHJ5KHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAgICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zv
cm0oKTsKICAgICB1cGRhdGVNYXNrc1RvQm91bmRzKCk7CiAgICAgdXBkYXRlQ29udGVudHNPcGFx
dWUoKTsKICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICB1cGRhdGVMYXllckJh
Y2tncm91bmRDb2xvcigpOwotICAgIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsKKyAgICB1cGRhdGVD
b250ZW50c1NjYWxlKHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAg
ICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKICAgICAKICNpZm5kZWYgTkRFQlVHCkBAIC0yMzYy
LDYgKzIzOTQsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZU9wYWNpdHlPbkxheWVy
KCkKICNlbmRpZgogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0TWFpbnRhaW5zUGl4ZWxB
bGlnbm1lbnQoYm9vbCBtYWludGFpbnNBbGlnbm1lbnQpCit7CisgICAgaWYgKG1haW50YWluc0Fs
aWdubWVudCA9PSBtX21haW50YWluc1BpeGVsQWxpZ25tZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudChtYWludGFpbnNB
bGlnbm1lbnQpOworICAgIG5vdGVDaGFuZ2VzRm9yU2NhbGVTZW5zaXRpdmVQcm9wZXJ0aWVzKCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsK
ICAgICBub3RlQ2hhbmdlc0ZvclNjYWxlU2Vuc2l0aXZlUHJvcGVydGllcygpOwpAQCAtMjM2OSw3
ICsyNDEwLDU1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCkKIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6Om5vdGVDaGFuZ2VzRm9yU2NhbGVTZW5zaXRpdmVQ
cm9wZXJ0aWVzKCkKIHsKLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQ29udGVudHNTY2Fs
ZUNoYW5nZWQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQg
fCBDb250ZW50c1NjYWxlQ2hhbmdlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ludGVn
cmFsKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSA9
PSB2YWx1ZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVQaXhlbEFsaWdubWVu
dChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2UsCisgICAgRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYgc2l6ZSwgRmxv
YXRQb2ludDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21haW50YWluc1BpeGVsQWxpZ25tZW50IHx8IGlzSW50ZWdyYWwocGFn
ZVNjYWxlRmFjdG9yKSB8fCAhbV9kcmF3c0NvbnRlbnQgfHwgbV9tYXNrc1RvQm91bmRzKSB7Cisg
ICAgICAgIHBvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKKyAg
ICAgICAgYW5jaG9yUG9pbnQgPSBtX2FuY2hvclBvaW50OworICAgICAgICBhbGlnbm1lbnRPZmZz
ZXQgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBGbG9h
dFJlY3QgYmFzZVJlbGF0aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1fc2l6ZSk7
CisgICAgRmxvYXRSZWN0IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsKKyAgICAv
LyBTY2FsZSBieSB0aGUgcGFnZSBzY2FsZSBmYWN0b3IgdG8gY29tcHV0ZSB0aGUgc2NyZWVuLXJl
bGF0aXZlIGJvdW5kcy4KKyAgICBzY2FsZWRCb3VuZHMuc2NhbGUocGFnZVNjYWxlRmFjdG9yKTsK
KyAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJpZXMuCisgICAgRmxvYXRSZWN0IGFsaWdu
ZWRCb3VuZHMgPSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZEJvdW5kcyk7CisgICAgCisgICAgLy8g
Q29udmVydCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgorICAgIGFsaWduZWRCb3VuZHMuc2Nh
bGUoMSAvIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgCisgICAgLy8gRXBzaWxvbiBpcyBuZWNlc3Nh
cnkgdG8gZW5zdXJlIHRoYXQgYmFja2luZyBzdG9yZSBzaXplIGNvbXB1dGF0aW9uIGluIENBLCB3
aGljaCBpbnZvbHZlcyBpbnRlZ2VyIHRydW5jYXRpb24sCisgICAgLy8gd2lsbCBtYXRjaCBvdXIg
YWxpZ25lZCBib3VuZHMuCisgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IDFlLTVmOworICAgIGFs
aWduZWRCb3VuZHMuZXhwYW5kKGVwc2lsb24sIGVwc2lsb24pOworICAgIAorICAgIGFsaWdubWVu
dE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJvdW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJvdW5kcy5s
b2NhdGlvbigpOworICAgIHBvc2l0aW9uID0gbV9wb3NpdGlvbiAtIGFsaWdubWVudE9mZnNldDsK
KyAgICBzaXplID0gYWxpZ25lZEJvdW5kcy5zaXplKCk7CisKKyAgICAvLyBOb3cgd2UgaGF2ZSB0
byBjb21wdXRlIGEgbmV3IGFuY2hvciBwb2ludCB3aGljaCBjb21wZW5zYXRlcyBmb3Igcm91bmRp
bmcuCisgICAgZmxvYXQgYW5jaG9yUG9pbnRYID0gbV9hbmNob3JQb2ludC54KCk7CisgICAgZmxv
YXQgYW5jaG9yUG9pbnRZID0gbV9hbmNob3JQb2ludC55KCk7CisgICAgCisgICAgaWYgKGFsaWdu
ZWRCb3VuZHMud2lkdGgoKSkKKyAgICAgICAgYW5jaG9yUG9pbnRYID0gKGJhc2VSZWxhdGl2ZUJv
dW5kcy53aWR0aCgpICogYW5jaG9yUG9pbnRYICsgYWxpZ25tZW50T2Zmc2V0LndpZHRoKCkpIC8g
YWxpZ25lZEJvdW5kcy53aWR0aCgpOworICAgIAorICAgIGlmIChhbGlnbmVkQm91bmRzLmhlaWdo
dCgpKQorICAgICAgICBhbmNob3JQb2ludFkgPSAoYmFzZVJlbGF0aXZlQm91bmRzLmhlaWdodCgp
ICogYW5jaG9yUG9pbnRZICsgYWxpZ25tZW50T2Zmc2V0LmhlaWdodCgpKSAvIGFsaWduZWRCb3Vu
ZHMuaGVpZ2h0KCk7CisgICAgIAorICAgIGFuY2hvclBvaW50ID0gRmxvYXRQb2ludDNEKGFuY2hv
clBvaW50WCwgYW5jaG9yUG9pbnRZLCBtX2FuY2hvclBvaW50LnooKSAqIHBhZ2VTY2FsZUZhY3Rv
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpub3RlU3VibGF5ZXJzQ2hhbmdlZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5oCmluZGV4IDkzMjc3ZTVjMDJlMDMwNTEwMTllY2QyZGQwNmM0NWM1NzE5Mjg2MWIuLmVm
Y2I0MjVjOTY2NmRiNjU3Y2FiYWIyZjJkYmQxZDhiYTk5NzAyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0x
MTYsOSArMTE2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBsYXllckRpZERpc3Bs
YXkoUGxhdGZvcm1MYXllciopOwogCisgICAgdmlydHVhbCB2b2lkIHNldE1haW50YWluc1BpeGVs
QWxpZ25tZW50KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCk7CiAKLSAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKTsKKyAgICB2b2lkIHJlY3Vy
c2l2ZUNvbW1pdENoYW5nZXMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3Rl
ZEJ5UGFnZVNjYWxlID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwpAQCAtMTgwLDEzICsxODEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG1fcnVubmluZ0FuaW1hdGlvbnMuZmluZChhbmltYXRpb25OYW1lKSAhPSBtX3J1bm5pbmdBbmlt
YXRpb25zLmVuZCgpOwogICAgIH0KIAotICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3Jl
U3VibGF5ZXJzKCk7CisgICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMo
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlKTsKICAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7CiAK
KyAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdl
U2NhbGUpIGNvbnN0OworCiAgICAgRmxvYXRTaXplIGNvbnN0cmFpbmVkU2l6ZSgpIGNvbnN0Owog
Ci0gICAgYm9vbCByZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0g
ICAgdm9pZCBzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcik7CisgICAg
Ym9vbCByZXF1aXJlc1RpbGVkTGF5ZXIoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VU
aWxlZExheWVyLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uUmVsYXRpdmVUb0Jhc2UpOwogCiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0
aW9uIGRlZmF1bHRDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVD
b250ZW50c1RyYW5zZm9ybSgpOwpAQCAtMTk2LDYgKzE5OSw5IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwogCisgICAg
dm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwKKyAgICAgICAgRmxvYXRQb2lu
dCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0
U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KSBjb25zdDsKKwogICAgIC8vIFVzZWQgdG8gdHJhY2sgdGhl
IHBhdGggZG93biB0aGUgdHJlZSBmb3IgcmVwbGljYSBsYXllcnMuCiAgICAgc3RydWN0IFJlcGxp
Y2FTdGF0ZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4UmVwbGljYURlcHRoID0g
MTY7CkBAIC0yNjMsMTQgKzI2OSwxNCBAQCBwcml2YXRlOgogICAgIC8vIEFsbCB0aGVzZSAidXBk
YXRlIiBtZXRob2RzIHdpbGwgYmUgY2FsbGVkIGluc2lkZSBhIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUy9FTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TIGJsb2NrLgogICAgIHZvaWQgdXBkYXRl
TGF5ZXJOYW1lcygpOwogICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci0gICAgdm9pZCB1
cGRhdGVHZW9tZXRyeSgpOworICAgIHZvaWQgdXBkYXRlR2VvbWV0cnkoZmxvYXQgcGl4ZWxBbGln
bm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CiAg
ICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuVHJhbnNm
b3JtKCk7CiAgICAgdm9pZCB1cGRhdGVNYXNrc1RvQm91bmRzKCk7CiAgICAgdm9pZCB1cGRhdGVD
b250ZW50c09wYXF1ZSgpOwogICAgIHZvaWQgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0g
ICAgdm9pZCB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyRHJh
d3NDb250ZW50KCk7CisgICAgdm9pZCB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoZmxvYXQgcGl4ZWxB
bGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7
CisgICAgdm9pZCB1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwaXhlbEFsaWdubWVudFNj
YWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKICAgICB2b2lk
IHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
SW1hZ2UoKTsKQEAgLTI4MywxNCArMjg5LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVM
YXllckFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5KCk7
CiAgICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlc0RyYXdpbmcoKTsKLSAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRzU2NhbGUoKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2NhbGUoZmxvYXQgcGl4ZWxB
bGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7
CiAgICAgCiAgICAgZW51bSBTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9TdHJ1
Y3R1cmFsTGF5ZXIgPSAwLAogICAgICAgICBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCwK
ICAgICAgICAgU3RydWN0dXJhbExheWVyRm9yUmVwbGljYUZsYXR0ZW5pbmcKICAgICB9OwotICAg
IHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UpOworICAg
IHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UsIGZsb2F0
IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpOwogICAgIFN0cnVjdHVyYWxMYXllclB1cnBvc2Ugc3RydWN0dXJhbExheWVyUHVycG9z
ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FBbmlt
YXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
aW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGI0NDlmMzc4ODFkNjM5YTY1MzFiMTQ0
NTA4M2M2NWFjNmZlYTkzYjEuLmFhYmZiMTMwZDU5NTRhZTQ5ZDYwOWRmZjUwNzgwZDIyZTQzMjYy
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC0xMDUsNiArMTA1LDcgQEAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBSZW5kZXJM
YXllckJhY2tpbmc6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY29uc3QgU3RyaW5nJgogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0obmFtZSk7CiAjZW5kaWYKKyAgICBncmFwaGljc0xheWVyLT5zZXRNYWlu
dGFpbnNQaXhlbEFsaWdubWVudChjb21wb3NpdG9yKCktPmtlZXBMYXllcnNQaXhlbEFsaWduZWQo
KSk7CiAgICAgcmV0dXJuIGdyYXBoaWNzTGF5ZXIucmVsZWFzZSgpOwogfQogCkBAIC0xMTUsNiAr
MTE2LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NM
YXllcigpCiAgICAgbGF5ZXJOYW1lID0gbmFtZUZvckxheWVyKCk7CiAjZW5kaWYKICAgICBtX2dy
YXBoaWNzTGF5ZXIgPSBjcmVhdGVHcmFwaGljc0xheWVyKGxheWVyTmFtZSk7CisgICAgaWYgKHJl
bmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHRvUmVu
ZGVyVmlldyhyZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOworICAgICAgICBpZiAocGFnZSAmJiBm
cmFtZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAgICAgICAgIG1fZ3JhcGhp
Y3NMYXllci0+c2V0QXBwbGllc1BhZ2VTY2FsZSgpOworICAgIH0KICAgICAKICAgICB1cGRhdGVM
YXllck9wYWNpdHkocmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zv
cm0ocmVuZGVyZXIoKS0+c3R5bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGRhYmYzODc3MDE3MGRmMzY2MjU2OTlh
ZWY4MTdiNjNmZTYxYWYxOGYuLjU4ZjM5YWE5MDUzOGNkMzk3ODMxOGM4ODhkMTA4YmIyMjllYzNj
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCkBAIC0xNTYzLDYgKzE1NjMsMTIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QK
ICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUgeWV0LgogfQogCitib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6a2VlcExheWVyc1BpeGVsQWxpZ25lZCgpIGNvbnN0Cit7CisgICAgLy8gV2hlbiBz
Y2FsaW5nLCBhdHRlbXB0IHRvIGFsaWduIGNvbXBvc2l0aW5nIGxheWVycyB0byBwaXhlbCBib3Vu
ZGFyaWVzLgorICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBzaG91bGRDb21wb3Np
dGVPdmVyZmxvd0NvbnRyb2xzKFNjcm9sbFZpZXcqIHZpZXcpCiB7CiAgICAgaWYgKHZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpCkBAIC0xNjQ2LDcgKzE2NTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKCkKICAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
bV9yb290Q29udGVudExheWVyKSB7Ci0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSgwKTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9yb290Q29u
dGVudExheWVyLT5zZXROYW1lKCJjb250ZW50IHJvb3QiKTsKICNlbmRpZgpAQCAtMTY2Myw3ICsx
NjY5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAg
ICAgICAgICAgICBBU1NFUlQoIW1fY2xpcExheWVyKTsKIAogICAgICAgICAgICAgLy8gQ3JlYXRl
IGEgbGF5ZXIgdG8gaG9zdCB0aGUgY2xpcHBpbmcgbGF5ZXIgYW5kIHRoZSBvdmVyZmxvdyBjb250
cm9scyBsYXllcnMuCi0gICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CisgICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNI
b3N0TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgICAgICAgICAgbV9vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyLT5zZXROYW1lKCJvdmVyZmxv
dyBjb250cm9scyBob3N0Iik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBkODc3OWZhNDExNWYwZTYyYjgxNmYxYzc5
MzhkNzQzMTdkY2I5NjkxLi4xZGIzNjBkOWY4NmRhZDk0ODdhOGI1NDM1MDc3MWVjNDQwNTUzZTdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCkBAIC0xOTEsNiArMTkxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JM
YXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3Q7CiAgICAgCisgICAgYm9vbCBrZWVwTGF5
ZXJzUGl4ZWxBbGlnbmVkKCkgY29uc3Q7CisKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKTsKIAogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDk4NDQwODY1MWM5ZWEzNzQzNDY4ZWYyMTk3NDVl
ZTc3MTM1MjkwOGYuLmZkZmVhMjQyNTU5MzRjYmEyNzU5ODg1ZTI2NWE0MjAzZjg5NTc5YmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTYgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvZGUg
dG8gYXR0ZW1wdCB0byBhbGlnbiBjb21wb3NpdGluZyBsYXllcnMgdG8gcGl4ZWwgYm91bmRhcmll
cyB3aGVuIHBhZ2Ugc2NhbGUgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVkIGltcGxlbWVudGF0aW9ucyBvZiBiYWNraW5nU2NhbGVG
YWN0b3IoKSBhbmQgcGFnZVNjYWxlRmFjdG9yKCkgbm93CisgICAgICAgIHRoYXQgR3JhcGhpY3NM
YXllckNsaWVudCBoYXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBzcmMv
UGFnZU92ZXJsYXkuY3BwOgorCiAyMDExLTA3LTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEhhdmUgR3JhcGhpY3NMYXllciBwdWxsIHRoZWlyIGNv
bnRlbnRzU2NhbGUsIHJhdGhlciB0aGFuIHB1c2hpbmcgaXQgb250byB0aGVtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAKaW5kZXggZGZkMzc1NjQ0MTg5ZDA0YTM3
NzU0ZGUwNzVmM2EwM2YxZDZlOTU4Zi4uZjRhMjdmYjUyY2E3YzBhMmYzOTZhYTYxNTVhM2IzMzBm
M2MyNjZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJs
YXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcApA
QCAtNzAsMTcgKzcwLDYgQEAgcHVibGljOgogICAgICAgICBtX3BhZ2VPdmVybGF5Q2xpZW50LT5w
YWludFBhZ2VPdmVybGF5KGNvbnRleHQpOwogICAgIH0KIAotICAgIC8vIE11bHRpcGxpZXIgZm9y
IGJhY2tpbmcgc3RvcmUgc2l6ZSwgcmVsYXRlZCB0byBoaWdoIERQSS4KLSAgICB2aXJ0dWFsIGZs
b2F0IGJhY2tpbmdTY2FsZUZhY3RvcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gMTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVn
Qm9yZGVycygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV93ZWJWaWV3SW1wbC0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXgg
ZWIwNDlmODkwZjk3ZWM5OTVjYzI4NzliMzkyZjAxNzA3YjZjYjA4ZS4uMDg3YjdjYzhlZTlkNmFi
YWE4ZGFlNzljNzAwNTM5ZGMxY2ExYjdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDExLTA3LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBjb2RlIHRvIGF0dGVtcHQgdG8gYWxpZ24gY29tcG9zaXRpbmcgbGF5ZXJz
IHRvIHBpeGVsIGJvdW5kYXJpZXMgd2hlbiBwYWdlIHNjYWxlIGNoYW5nZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjU4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBpbXBsZW1lbnRhdGlv
bnMgb2YgYmFja2luZ1NjYWxlRmFjdG9yKCkgYW5kIHBhZ2VTY2FsZUZhY3RvcigpIG5vdworICAg
ICAgICB0aGF0IEdyYXBoaWNzTGF5ZXJDbGllbnQgaGFzIGRlZmF1bHQgaW1wbGVtZW50YXRpb25z
LgorCisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDExLTA3LTE1ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBXaW5kb3dzIGJ1aWxkLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5oCmluZGV4IGNkYmI3ZThmYmM2MjRiMjJmZGQ4MTg1MGM2ZjljNDQ0YmNjZTZhZjku
Ljg3NjYyOGI1Y2M0NjMyMTU5YjA3YWQzNjE5MDcxMzY4ZDU3OWY0Y2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmgKQEAgLTk5Miw4ICs5OTIsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGlt
ZSk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbkNs
aXApOwotICAgIHZpcnR1YWwgZmxvYXQgYmFja2luZ1NjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gMTsgfQotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gMTsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZDNmNjk3MTJmMjA5MDI5NjE3ZWZhY2UyMzFkNjY3ZDE1NjgwM2U1Ni4uNjkxMjM0MzE1NzAyNDU1
ZDc0OGE3MmE1NDAxN2YxNmNiZmMwNzM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDExLTA3LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBjb2RlIHRvIGF0dGVtcHQgdG8gYWxpZ24gY29tcG9zaXRpbmcgbGF5ZXJzIHRvIHBp
eGVsIGJvdW5kYXJpZXMgd2hlbiBwYWdlIHNjYWxlIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBSZW1vdmVkIGltcGxlbWVudGF0
aW9uIG9mIHBhZ2VTY2FsZUZhY3RvcigpIG5vdyB0aGF0IEdyYXBoaWNzTGF5ZXJDbGllbnQgaGFz
CisgICAgICAgIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0EuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0EuaDoKKwogMjAxMS0wNy0xNSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBPdmVybGF5IHNjcm9sbGJhcnMg
aW4gb3ZlcmZsb3cgYXJlYXMgbm8gbG9uZ2VyIHB1bHNlIHdoZW4gcmV2ZWFsZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0Eu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RD
QS5jcHAKaW5kZXggMmEwZjI2NDZmNzg1ZTk4YWVlMzgxZTNlMjEwYzFlZTg2OTkxMWM1OC4uZDU2
NDE5NjYwYzQ3MjVkOGU3ZWUxZDY1NDlhMGRlZDc1ZDRiNzI4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAK
QEAgLTIxMSwxMSArMjExLDYgQEAgZmxvYXQgTGF5ZXJUcmVlSG9zdENBOjpiYWNraW5nU2NhbGVG
YWN0b3IoKSBjb25zdAogICAgIHJldHVybiBtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9y
KCk7CiB9CiAKLWZsb2F0IExheWVyVHJlZUhvc3RDQTo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMTsKLX0KLQogdm9pZCBMYXllclRyZWVIb3N0Q0E6OnBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCkKIHsKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmgKaW5kZXggZTRkNmNlNzkwYThj
MGVkNGVlMTk5NWM0ZTJlZTg0NmQ1ODFjZGI5ZC4uYzliNjY1MmIyYWRkNDE3N2E5ZTg5ZTZmMTk4
YWY1ZTQ4MjJlYzA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2NhL0xheWVyVHJlZUhvc3RDQS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9jYS9MYXllclRyZWVIb3N0Q0EuaApAQCAtNzUsNyArNzUsNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgYmFja2lu
Z1NjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IH0KIAogICAgIC8vIExheWVyVHJlZUhv
c3RDQQo=
</data>
<flag name="review"
          id="95932"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>