<?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>141463</bug_id>
          
          <creation_ts>2015-02-10 22:50:42 -0800</creation_ts>
          <short_desc>Streamline and simplify SVGSVGElement and related classes</short_desc>
          <delta_ts>2015-02-11 21:09:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068270</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-10 22:50:42 -0800</bug_when>
    <thetext>Streamline and simplify SVGSVGElement and related classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068271</commentid>
    <comment_count>1</comment_count>
      <attachid>246375</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-10 23:12:42 -0800</bug_when>
    <thetext>Created attachment 246375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068361</commentid>
    <comment_count>2</comment_count>
      <attachid>246392</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-11 08:19:32 -0800</bug_when>
    <thetext>Created attachment 246392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068385</commentid>
    <comment_count>3</comment_count>
      <attachid>246392</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-11 10:01:30 -0800</bug_when>
    <thetext>Comment on attachment 246392
Patch

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

&gt; Source/WebCore/svg/SVGSVGElement.cpp:67
&gt; -    , m_timeContainer(SMILTimeContainer::create(this))
&gt; +    , m_timeContainer(RefPtr&lt;SMILTimeContainer&gt;(SMILTimeContainer::create(this)).releaseNonNull())

Can&apos;t you just make SMILTimeContainer::create return a Ref? This is the only client.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:97
&gt; +    static NeverDestroyed&lt;AtomicString&gt; defaultScriptType(&quot;text/ecmascript&quot;);

Consistent use of {} initialization might be nice for things like NeverDestroyed.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:369
&gt; +    return SVGTransform { matrix };

This doesn&apos;t build without SVGTransform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068399</commentid>
    <comment_count>4</comment_count>
      <attachid>246392</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-02-11 10:45:00 -0800</bug_when>
    <thetext>Comment on attachment 246392
Patch

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

&gt; Source/WebCore/svg/SVGSVGElement.cpp:253
&gt; +    SVGGraphicsElement::parseAttribute(name, value);

Is this change making the code clearer? Can it affect the performance? Also all the parseAttribute functions above return bool expect SVGGraphicsElement::parseAttribute() which returns void. I think this looks inconsistent especially we do not use the returned bool value anymore.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:525
&gt;  }

Why is this function here? Why can&apos;t it be added to FloatSize.h? If it can&apos;t be added, can&apos;t we implement it using the FloatSize::operator*()?

&gt; Source/WebCore/svg/SVGSVGElement.cpp:537
&gt; +        return root.contentBoxRect().size() / root.style().effectiveZoom();

Can&apos;t we say?
return root.contentBoxRect().size() * (1 / root.style().effectiveZoom());

&gt; Source/WebCore/svg/SVGViewElement.cpp:62
&gt; +    SVGElement::parseAttribute(name, value);

Is this change to make code clearer? Can&apos;t it return bool in case one wants to know if the attribute was parsed by this function or not? Can this change affect the performance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068425</commentid>
    <comment_count>5</comment_count>
      <attachid>246392</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-11 11:52:43 -0800</bug_when>
    <thetext>Comment on attachment 246392
Patch

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

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:67
&gt;&gt; +    , m_timeContainer(RefPtr&lt;SMILTimeContainer&gt;(SMILTimeContainer::create(this)).releaseNonNull())
&gt; 
&gt; Can&apos;t you just make SMILTimeContainer::create return a Ref? This is the only client.

Yes, but I’m going to do even better in a follow-up patch and make it not even a reference counted object any more, so for now I’ll just leave it like this.

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:97
&gt;&gt; +    static NeverDestroyed&lt;AtomicString&gt; defaultScriptType(&quot;text/ecmascript&quot;);
&gt; 
&gt; Consistent use of {} initialization might be nice for things like NeverDestroyed.

Good point. I’ll use { } instead of () here.

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:253
&gt;&gt; +    SVGGraphicsElement::parseAttribute(name, value);
&gt; 
&gt; Is this change making the code clearer? Can it affect the performance? Also all the parseAttribute functions above return bool expect SVGGraphicsElement::parseAttribute() which returns void. I think this looks inconsistent especially we do not use the returned bool value anymore.

I plan to remove all those bool return values. I think the whole strategy of cascading booleans for attributes doesn’t provide any significant performance boost and is not worthwhile. I am planning on making this change across all of SVG. The current implementation is really wasteful, with HashSets just to preflight and decide whether to call through to base classes.

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:369
&gt;&gt; +    return SVGTransform { matrix };
&gt; 
&gt; This doesn&apos;t build without SVGTransform?

It doesn’t because the SVGTransform constructor is marked explicit. We could remove the explicit and remove this explicit type too.

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:525
&gt;&gt;  }
&gt; 
&gt; Why is this function here? Why can&apos;t it be added to FloatSize.h? If it can&apos;t be added, can&apos;t we implement it using the FloatSize::operator*()?

It can be added to FloatSize.h and it would be OK to do that. My change log comment talks about that. I wasn’t sure that adding just this one overload to FloatSize.h was a good idea. I do not think it’s right to implement division by computing the reciprocal and then using multiplication. I don’t think you are guaranteed to get exactly the same result that way as by doing division in the general case. However, it would be fine to convert the LayoutSize to a FloatSize before dividing rather than doing two separate toFloat calls.

&gt;&gt; Source/WebCore/svg/SVGSVGElement.cpp:537
&gt;&gt; +        return root.contentBoxRect().size() / root.style().effectiveZoom();
&gt; 
&gt; Can&apos;t we say?
&gt; return root.contentBoxRect().size() * (1 / root.style().effectiveZoom());

We could, but why would we?

&gt;&gt; Source/WebCore/svg/SVGViewElement.cpp:62
&gt;&gt; +    SVGElement::parseAttribute(name, value);
&gt; 
&gt; Is this change to make code clearer? Can&apos;t it return bool in case one wants to know if the attribute was parsed by this function or not? Can this change affect the performance?

I think I answered those questions above. We can talk in person about it if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068542</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-11 21:09:30 -0800</bug_when>
    <thetext>Committed r179982: &lt;http://trac.webkit.org/changeset/179982&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246375</attachid>
            <date>2015-02-10 23:12:42 -0800</date>
            <delta_ts>2015-02-11 08:19:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141463-20150210231245.patch</filename>
            <type>text/plain</type>
            <size>65712</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5ODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5MDA1ZTkyNTY2NmQy
OTNmM2UyYTFmYTZmODE2NmFiYzYxYTQ5Ny4uNzlhZDYxMjE0OTIzOWUyNTc5OThlMjhjMjJjY2Q4
ZDJmMjQyYTFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxNS0wMi0xMCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBhbmQgc2lt
cGxpZnkgU1ZHU1ZHRWxlbWVudCBhbmQgcmVsYXRlZCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IFJlbW92
ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBTVkdTVkdFbGVtZW50LmguCisgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHA6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcDogRGl0dG8uCisg
ICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybS5j
cHA6IERpdHRvLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcik6IFVwZGF0ZWQgdG8gY2FsbCB0aGUgU1ZH
U1ZHRWxlbWVudCBmdW5jdGlvbgorICAgICAgICBuYW1lZCBzY3JvbGxUb0FuY2hvciAod2FzIHNl
dHVwSW5pdGlhbFZpZXcpLiBBbHNvIHJlZmFjdG9yZWQgdG8gYXZvaWQgcmVwZWF0aW5nCisgICAg
ICAgIHRoZSBleHByZXNzaW9uIGZyYW1lKCkuZG9jdW1lbnQoKSBzbyBvZnRlbi4KKworICAgICAg
ICAqIHN2Zy9TVkdEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudDo6
cm9vdEVsZW1lbnQpOiBSZWFycmFuZ2VkIHRvIHVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdEb2N1bWVudDo6em9vbUFuZFBhbkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50OjpzdGFydFBhbik6IERpdHRvLiBBbHNvIHVzZWQgRmxvYXRQ
b2ludCBtYXRoIGluc3RlYWQKKyAgICAgICAgb2YgYnJlYWtpbmcgdGhpbmdzIGFwYXJ0IGludG8g
eCBhbmQgeS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50Ojp1cGRhdGVQYW4pOiBEaXR0
by4KKworICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudC5oOiBSZW1vdmVkIHNvbWUgdW5uZWVkZWQg
aW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNb3ZlZCBmdW5jdGlv
biBib2RpZXMgb3V0IG9mIHRoZSBjbGFzcyB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUuIFJlbmFt
ZWQKKyAgICAgICAgbV90cmFuc2xhdGUgdG8gbV9wYW5uaW5nT2Zmc2V0IGFuZCBtYWRlIGl0IGEg
RmxvYXRTaXplIGluc3RlYWQgb2YgRmxvYXRQb2ludC4KKworICAgICAgICAqIHN2Zy9TVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpzdGFydEFuaW1hdGlvbnMpOiBVc2UgYSBtb2Rlcm4gZm9yIGxvb3AKKyAgICAgICAgYW5k
IHVwZGF0ZSBzaW5jZSB0aW1lQ29udGFpbmVyKCkgbm93IHJldHVybnMgYSByZWZlcmVuY2UuCisK
KyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBp
bmNsdWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQp
OiBNb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBzY2FsYXJzIHRvCisgICAgICAgIHRoZSBjbGFzcyBk
ZWZpbml0aW9uLiBVcGRhdGVkIHNpbmNlIG1fdGltZXJDb250YWluZXIgaXMgYSBSZWYgKGxhdGVy
IHNob3VsZAorICAgICAgICBjaGFuZ2UgaXQgdG8gYmUgYSBzdGQ6OnVuaXF1ZV9wdHIgb3IganVz
dCBkaXJlY3RseSBjb250YWluZWQgaW4gU1ZHU1ZHRWxlbWVudCkuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCk6IFJlbW92ZWQgY29tbWVudCB0aGF0IGRv
ZXNuJ3Qgc2F5IG11Y2gsCisgICAgICAgIGJ1dCBpcyB3b3JkZWQgaW4gYSBjb25mdXNpbmcgd2F5
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUpOiBV
c2UgTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCBvZgorICAgICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpjb250ZW50U3R5
bGVUeXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp2aWV3cG9y
dCk6IFN0cmVhbWxpbmVkIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
cGl4ZWxVbml0VG9NaWxsaW1ldGVyWCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6cGl4ZWxVbml0VG9NaWxsaW1ldGVyWSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXcpOiBDaGFuZ2VkIHRvIHJldHVybiBhIHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmZyYW1lRm9yQ3VycmVudFNj
YWxlKTogQWRkZWQuIEhlbHBlciBmb3IgdGhlIHR3bworICAgICAgICBmdW5jdGlvbnMgYmVsb3cu
CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUpOiBVcGRhdGVk
IHRvIHVzZSBmcmFtZUZvckN1cnJlbnRTY2FsZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0Vs
ZW1lbnQ6OnNldEN1cnJlbnRTY2FsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZSk6IE9wdGltaXplZCB0aGUgY2FzZSB3aGVyZSB0
aGVyZQorICAgICAgICBpcyBubyBjaGFuZ2UgdG8gdGhlIHRyYW5zbGF0aW9uLiBBbHNvIGNoYW5n
ZWQgdGhlIGRhdGEgbWVtYmVyJ3MgbmFtZSB0bworICAgICAgICBtX2N1cnJlbnRUcmFuc2xhdGUg
dG8gbW9yZSBkaXJlY3RseSBtYXRjaCB0aGUgRE9NIEFQSSBuYW1pbmcuCisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFNpbXBsaWZpZWQgdGhlIHBhcnNp
bmcgYSBiaXQsIGFuZAorICAgICAgICBjaGFuZ2VkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gU1ZH
Wm9vbUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKTogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCByZW1vdmVk
CisgICAgICAgIGNvZGUgdGhhdCBjb252ZXJ0cyB0aGUgcmVuZGVyZXIgcG9pbnRlciB0byBhIFJl
bmRlck9iamVjdCogdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OnN1c3BlbmRSZWRyYXcpOiBSZW1vdmVkIEZJWE1FIGFib3V0IGltcGxlbWVudGluZyB0aGlz
LAorICAgICAgICBzaW5jZSB3ZSBkb24ndCByZWFsbHkgcGxhbiB0byBkbyB0aGF0LgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6dW5zdXNwZW5kUmVkcmF3KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXdBbGwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNs
b3N1cmVMaXN0KTogQ2hhbmdlZCByZXR1cm4KKyAgICAgICAgdHlwZSB0byBSZWYsIGFuZCBwYXNz
IGluIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnVtZXJhdGlvbiB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlvbkxpc3QpOiBVcGRhdGVkIGZv
ciBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldEVuY2xvc3VyZUxp
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJz
ZWN0aW9uKTogVXNlICYmIGluc3RlYWQgb2YgZWFybHkgcmV0dXJuCisgICAgICAgIGZvciB0aGUg
bnVsbCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9z
dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdM
ZW5ndGgpOiBVc2UgaW5pdGlhbGl6YXRpb24gbGlzdCBzeW50YXgKKyAgICAgICAgZm9yIGdyZWF0
ZXIgYnJldml0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0Fu
Z2xlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdQ
b2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
TWF0cml4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdUcmFuc2Zvcm0pOiBSZW1vdmVkIHVubmVlZGVkIGV4cGxpY2l0CisgICAgICAgIGNvbnN0cnVj
dG9yIGludm9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdUcmFuc2Zvcm1Gcm9tTWF0cml4KTogUmVtb3ZlZCB1bm5lZWRlZCBjYXN0LgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogVXBkYXRlZCBzaW5jZSB0aW1l
Q29udGFpbmVyKCkgbm93CisgICAgICAgIHJldHVybnMgYSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGltZSk6IFVzZSBpc2Zpbml0ZSBpbnN0
ZWFkIG9mIGlzbmFuLCBzbworICAgICAgICB3ZSB3b24ndCBzdG9yZSBpbmZpbml0eSBhcyB0aGUg
Y3VycmVudCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZp
ZXdCb3hSZWN0KTogUmVuYW1lZCBsb2NhbHMgYW5kIGNoYW5nZWQKKyAgICAgICAgdG8gdXNlIGlu
aXRpYWxpemVyIGxpc3RzIGZvciBicmV2aXR5LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Iv
KTogQWRkZWQgdGhpcyBvdmVybG9hZCB0byBkaXZpZGUgYSBMYXlvdXRTaXplIGJ5IGEgZmxvYXQu
CisgICAgICAgIFRoaXMgY291bGQgZ28gaW50byB0aGUgTGF5b3V0U2l6ZSBoZXJlLCBidXQgaGVy
ZSBpcyBPSyBmb3Igbm93LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVu
dFZpZXdwb3J0U2l6ZSk6IFN0cmVhbWxpbmVkIGNvZGUgYnkgdXNpbmcKKyAgICAgICAgaW5pdGlh
bGl6ZXIgbGlzdHMsIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyBvbmx5IGZvciB0aGluZ3MgdXNlZCBt
b3JlIHRoYW4gb25jZSwKKyAgICAgICAgYW5kIHVzaW5nIHRoZSAvIG9wZXJhdG9yIGRlZmluZWQg
YWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKTogVXNlIHRoZSBjb25jYXRlbmF0ZSBmdW5jdGlvbgorICAgICAgICBpbiBhIHdheSB0
aGF0IGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkLCByYXRoZXIgdGhhbiBkb2luZyBpdCB3aXRoIGEg
dGVtcG9yYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c2Nyb2xsVG9BbmNo
b3IpOiBSZW5hbWVkIHRoaXMgZnJvbQorICAgICAgICBzZXR1cEluaXRpYWxWaWV3LgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6aW5oZXJpdFZpZXdBdHRyaWJ1dGVzKTogQ2hhbmdl
ZCB0aGlzIHRvIHdvcmsgd2l0aAorICAgICAgICByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50
ZXJzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0RWxlbWVudEJ5SWQpOiBV
c2UgZ2V0QWxsRWxlbWVudHNCeUlkIGFzIHRoZQorICAgICAgICBGSVhNRSBjb21tZW50IHN1Z2dl
c3RlZCBmb3IgYmV0dGVyIGVmZmljaWVuY3kgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgZGVzY2Vu
ZGFudHMKKyAgICAgICAgb2YgdGhlIDxzdmc+IGVsZW1lbnQgYXQgdGhlIGNvc3Qgb2YgbWFraW5n
IGl0IGxlc3MgZWZmaWNpZW50IGlmIHRoZXJlIGFyZQorICAgICAgICBhIGxvdCBvZiBlbGVtZW50
cyBhbGwgd2l0aCB0aGUgZGVzaXJlZCBJRCwgYnV0IG5vdCBpbnNpZGUgdGhlIDxzdmc+IGVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojppc1ZhbGlkKTogTW92ZWQgaGVy
ZSBmcm9tIHRoZSBoZWFkZXIuCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5oOiBSZW1v
dmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLiBNb3ZlZCB0aGUKKyAgICAgICAgYW5p
bWF0ZWQgcHJvcGVydGllcyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLCB0aGVuIG90aGVyIERPTSwg
dGhlIG90aGVyCisgICAgICAgIHB1YmxpYyBtZW1iZXJzLiBDaGFuZ2VkIHJldHVybiB0eXBlcyB0
byByZWZlcmVuY2VzIGFuZCBSZWYuIE1vdmVkCisgICAgICAgIGZ1bmN0aW9uIGJvZGllcyBvdXQg
b2YgdGhlIGNsYXNzIGRlZmluaXRpb24uIE1hZGUgY3JlYXRlU1ZHTnVtYmVyIGlubGluZS4KKwor
ICAgICAgICAqIHN2Zy9TVkdWaWV3RWxlbWVudC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVk
ZXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKTogQ2hhbmdlZCB0byBub3QgcmVseSBvbgorICAgICAgICBpc1N1cHBvcnRlZEF0dHJp
YnV0ZS4gRXZlbnR1YWxseSBJIHdpbGwgZG8gdGhpcyBpbiBhbGwgdGhlIFNWRyBjbGFzc2VzLgor
CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRl
IG9mIFNWR1NWR0VsZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJz
ZVZpZXdTcGVjKTogVXBkYXRlZCBmb3IgY2hhbmdlIGluIHRoZSBuYW1lCisgICAgICAgIG9mIHRo
ZSBwYXJzZSBmdW5jdGlvbiBpbiB0aGUgU1ZHWm9vbUFuZFBhbiBjbGFzcy4KKworICAgICAgICAq
IHN2Zy9TVkdab29tQW5kUGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46
OmlzS25vd25BdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFu
ZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdab29tQW5kUGFuOjpwYXJzZSk6IFJlbmFtZWQgZnJvbSBwYXJzZVpvb21BbmRQYW4gc2lu
Y2UKKyAgICAgICAgdGhpcyBpcyBhIG1lbWJlciBvZiB0aGUgU1ZHWm9vbUFuZFBhbiBjbGFzcyBh
bmQgYWxzbyBoYXMgYW4gYXJndW1lbnQKKyAgICAgICAgb2YgU1ZHWm9vbUFuZFBhblR5cGUuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZVZhbHVlKTogQWRk
ZWQuIEhlbHBlciBzbyB0aGUKKyAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb24gaXMgbm90IHNvIGJp
Zy4gQWxzbyB3cml0ZSBpdCBpbiBhIHNpbXBsZXIgd2F5LgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6cmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQ
YW46OmRlcmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnNl
dFpvb21BbmRQYW4pOiBEZWxldGVkLgorCisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uaDog
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gUmVmb3JtYXR0ZWQgdGhlIGVudW0uCisgICAgICAg
IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlIGNsYXNzIGRlZmluaXRpb24uIFJlbW92
ZWQgbWFueSB1bm5lZWRlZAorICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOiBVcGRhdGVkIHNpbmNlIHRpbWVDb250YWluZXIKKyAgICAgICAg
bm93IHJldHVybnMgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorCiAyMDE1LTAy
LTEwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtp
T1NdIGRvbid0IGdldCBvdXQgb2Ygc3luYyB3aGVuIGludGVycnVwdC9yZXN1bWUgY2FsbHMgYXJl
IG5vdCBiYWxhbmNlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWVlZmFjM2ZmMzdjZWM1
MTYwZGZkODI0NjU3NDk5ODJjODdjMGZkYi4uMDc5YjE0MTIzMTE4MTQ1YTVhNDRmOTliNWZkOWI1
MjMwNWRlYWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMjUsOSArMTI1LDkgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTY2hlbWVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBk
MDA1ZmQ1ODdiNGQ0OTc3YTU1ZDBkZDFlZDg1MjZlODA3YWQ0ZTc3Li5kYTc2ZjYyOGE0YjQ3MTAx
ZmZhMDMxOTVjMDdhYzk5NjA3NTNkMDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTk5LDcgKzk5LDYgQEAKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNp
bmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVmlld0VsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdWaWV3U3BlYy5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNjlmZGE2YTk4ZTA0NDhiMGIzYTJiMWE4ZTgwNzIw
NGU3MTQ4ZWU5Zi4uN2JmZjE3NDY3Nzk1ZWEzMWVjM2RiODE1YTFlNzgxNmJhOTRkZjBkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTk4MSwyMiArMTk4MSwyMyBAQCBib29sIEZy
YW1lVmlldzo6c2Nyb2xsVG9GcmFnbWVudChjb25zdCBVUkwmIHVybCkKIGJvb2wgRnJhbWVWaWV3
OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKGZyYW1l
KCkuZG9jdW1lbnQoKSk7CisgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUoKS5kb2N1bWVudCgp
OwogCi0gICAgaWYgKCFmcmFtZSgpLmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
KSB7Ci0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+c2V0R290b0FuY2hvck5lZWRlZEFmdGVy
U3R5bGVzaGVldHNMb2FkKHRydWUpOworICAgIGlmICghZG9jdW1lbnQuaGF2ZVN0eWxlc2hlZXRz
TG9hZGVkKCkpIHsKKyAgICAgICAgZG9jdW1lbnQuc2V0R290b0FuY2hvck5lZWRlZEFmdGVyU3R5
bGVzaGVldHNMb2FkKHRydWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
ZnJhbWUoKS5kb2N1bWVudCgpLT5zZXRHb3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xv
YWQoZmFsc2UpOworICAgIGRvY3VtZW50LnNldEdvdG9BbmNob3JOZWVkZWRBZnRlclN0eWxlc2hl
ZXRzTG9hZChmYWxzZSk7CiAKLSAgICBFbGVtZW50KiBhbmNob3JFbGVtZW50ID0gZnJhbWUoKS5k
b2N1bWVudCgpLT5maW5kQW5jaG9yKG5hbWUpOworICAgIEVsZW1lbnQqIGFuY2hvckVsZW1lbnQg
PSBkb2N1bWVudC5maW5kQW5jaG9yKG5hbWUpOwogCiAgICAgLy8gU2V0dGluZyB0byBudWxsIHdp
bGwgY2xlYXIgdGhlIGN1cnJlbnQgdGFyZ2V0LgotICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+c2V0
Q1NTVGFyZ2V0KGFuY2hvckVsZW1lbnQpOworICAgIGRvY3VtZW50LnNldENTU1RhcmdldChhbmNo
b3JFbGVtZW50KTsKIAotICAgIGlmIChpczxTVkdEb2N1bWVudD4oKmZyYW1lKCkuZG9jdW1lbnQo
KSkpIHsKLSAgICAgICAgaWYgKFNWR1NWR0VsZW1lbnQqIHN2ZyA9IGRvd25jYXN0PFNWR0RvY3Vt
ZW50PigqZnJhbWUoKS5kb2N1bWVudCgpKS5yb290RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBz
dmctPnNldHVwSW5pdGlhbFZpZXcobmFtZSwgYW5jaG9yRWxlbWVudCk7CisgICAgaWYgKGlzPFNW
R0RvY3VtZW50Pihkb2N1bWVudCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJvb3RFbGVtZW50ID0g
ZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KS5yb290RWxlbWVudCgpKSB7CisgICAgICAg
ICAgICByb290RWxlbWVudC0+c2Nyb2xsVG9BbmNob3IobmFtZSwgYW5jaG9yRWxlbWVudCk7CiAg
ICAgICAgICAgICBpZiAoIWFuY2hvckVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTIwMTMsNyArMjAxNCw3IEBAIGJvb2wgRnJhbWVWaWV3OjpzY3Jv
bGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgCiAgICAgLy8gSWYgdGhlIGFuY2hv
ciBhY2NlcHRzIGtleWJvYXJkIGZvY3VzLCBtb3ZlIGZvY3VzIHRoZXJlIHRvIGFpZCB1c2VycyBy
ZWx5aW5nIG9uIGtleWJvYXJkIG5hdmlnYXRpb24uCiAgICAgaWYgKGFuY2hvckVsZW1lbnQgJiYg
YW5jaG9yRWxlbWVudC0+aXNGb2N1c2FibGUoKSkKLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgp
LT5zZXRGb2N1c2VkRWxlbWVudChhbmNob3JFbGVtZW50KTsKKyAgICAgICAgZG9jdW1lbnQuc2V0
Rm9jdXNlZEVsZW1lbnQoYW5jaG9yRWxlbWVudCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAppbmRleCA1Mjc1YTI3MTE3MTBhODkzYTQxM2IwNzYxZDE1ODEzN2ExNDA1ZGEwLi44ZWVmYzMy
NDAwMDFkYjFmYzhkNzVjN2RmNDVlMzQyMjBmYzgxMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTU2LDcgKzU2LDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiU1ZHSW1hZ2VGb3JDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCmluZGV4
IDhlNzA4MTU3YTc3OGY1ZTEwYzUyNTI5NjA2OGVmNTk2YTc0NGVlMTkuLjUwNTViMjU5MjFiYjkz
Yjk1ZGU3Njg5YjRjNThjOWZiODhkMjAyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0jaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5j
bHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAKaW5k
ZXggMzg3NzlhZTFlNjE2YzRmYTk1ZDI3NzI0MWZkNTc2NjczZmU5NjZmZS4uY2M0MmNhYzgxNmQ4
Zjk3ZWQzMDM1YjIxYzg1YTgwMmM0ZWE5YTQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMSwxNiArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVmlld1NwZWMuaCIKLSNpbmNsdWRl
ICJTVkdab29tQW5kUGFuLmgiCi0jaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDIsMzggKzM1LDMzIEBAIFNWR0RvY3VtZW50OjpTVkdEb2N1bWVu
dChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogU1ZHU1ZHRWxlbWVudCogU1ZHRG9jdW1l
bnQ6OnJvb3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1l
bnRFbGVtZW50KCk7Ci0gICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4oZWxlbWVudCk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAoIWlzPFNWR1NWR0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4oZWxlbWVu
dCk7CiB9CiAKIGJvb2wgU1ZHRG9jdW1lbnQ6Onpvb21BbmRQYW5FbmFibGVkKCkgY29uc3QKIHsK
LSAgICBpZiAocm9vdEVsZW1lbnQoKSkgewotICAgICAgICBpZiAocm9vdEVsZW1lbnQoKS0+dXNl
Q3VycmVudFZpZXcoKSkgewotICAgICAgICAgICAgaWYgKHJvb3RFbGVtZW50KCktPmN1cnJlbnRW
aWV3KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RFbGVtZW50KCktPmN1cnJlbnRWaWV3
KCktPnpvb21BbmRQYW4oKSA9PSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQoKS0+em9vbUFuZFBhbigpID09IFNWR1pv
b21BbmRQYW5NYWduaWZ5OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBl
bGVtZW50ID0gcm9vdEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gKGVsZW1lbnQtPnVzZUN1cnJlbnRWaWV3KCkgPyBlbGVtZW50
LT5jdXJyZW50VmlldygpLnpvb21BbmRQYW4oKSA6IGVsZW1lbnQtPnpvb21BbmRQYW4oKSkgPT0g
U1ZHWm9vbUFuZFBhbk1hZ25pZnk7CiB9CiAKIHZvaWQgU1ZHRG9jdW1lbnQ6OnN0YXJ0UGFuKGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0KQogewotICAgIGlmIChyb290RWxlbWVudCgpKQotICAgICAg
ICBtX3RyYW5zbGF0ZSA9IEZsb2F0UG9pbnQoc3RhcnQueCgpIC0gcm9vdEVsZW1lbnQoKS0+Y3Vy
cmVudFRyYW5zbGF0ZSgpLngoKSwgc3RhcnQueSgpIC0gcm9vdEVsZW1lbnQoKS0+Y3VycmVudFRy
YW5zbGF0ZSgpLnkoKSk7CisgICAgYXV0byogZWxlbWVudCA9IHJvb3RFbGVtZW50KCk7CisgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9wYW5uaW5nT2Zmc2V0ID0gc3Rh
cnQgLSBlbGVtZW50LT5jdXJyZW50VHJhbnNsYXRlKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnQ6
OnVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0Cit2b2lkIFNWR0RvY3VtZW50
Ojp1cGRhdGVQYW4oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYg
KHJvb3RFbGVtZW50KCkpIHsKLSAgICAgICAgcm9vdEVsZW1lbnQoKS0+c2V0Q3VycmVudFRyYW5z
bGF0ZShGbG9hdFBvaW50KHBvcy54KCkgLSBtX3RyYW5zbGF0ZS54KCksIHBvcy55KCkgLSBtX3Ry
YW5zbGF0ZS55KCkpKTsKLSAgICAgICAgaWYgKHJlbmRlclZpZXcoKSkKLSAgICAgICAgICAgIHJl
bmRlclZpZXcoKS0+cmVwYWludCgpOwotICAgIH0KKyAgICBhdXRvKiBlbGVtZW50ID0gcm9vdEVs
ZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBlbGVtZW50
LT5zZXRDdXJyZW50VHJhbnNsYXRlKHBvc2l0aW9uIC0gbV9wYW5uaW5nT2Zmc2V0KTsKIH0KIAog
UmVmPERvY3VtZW50PiBTVkdEb2N1bWVudDo6Y2xvbmVEb2N1bWVudFdpdGhvdXRDaGlsZHJlbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCmluZGV4IDJiYWM5OTU1MjIzMzllYjRkYjQ5
YjU2NzMxMDgzN2RlMjk2MjM1NzcuLmI0ZjFjMTVmYTM3YjlhYmZjYzBiNDcwNmI0NDI4YTFkODdm
NjgzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzYgKzIzLDM0IEBACiAj
ZGVmaW5lIFNWR0RvY3VtZW50X2gKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTUltcGxlbWVu
dGF0aW9uOwotY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CiAKIGNsYXNz
IFNWR0RvY3VtZW50IGZpbmFsIDogcHVibGljIERvY3VtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNWR0RvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0RvY3VtZW50KGZyYW1lLCB1
cmwpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxTVkdEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiwg
Y29uc3QgVVJMJik7CiAKICAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCgpIGNvbnN0Owog
CiAgICAgYm9vbCB6b29tQW5kUGFuRW5hYmxlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBzdGFydFBh
bihjb25zdCBGbG9hdFBvaW50JiBzdGFydCk7Ci0gICAgdm9pZCB1cGRhdGVQYW4oY29uc3QgRmxv
YXRQb2ludCYgcG9zKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHRG9jdW1lbnQoRnJhbWUqLCBj
b25zdCBVUkwmKTsKIAogICAgIHZpcnR1YWwgUmVmPERvY3VtZW50PiBjbG9uZURvY3VtZW50V2l0
aG91dENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBGbG9hdFBvaW50IG1fdHJhbnNs
YXRlOworICAgIEZsb2F0U2l6ZSBtX3Bhbm5pbmdPZmZzZXQ7CiB9OwogCitpbmxpbmUgUmVmPFNW
R0RvY3VtZW50PiBTVkdEb2N1bWVudDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1
cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRG9jdW1lbnQoZnJhbWUsIHVybCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6U1ZHRG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDM2ZGUzNzdiMjcwMzliYTljMDFkYjlhNTI3YTllMjI5
MGJhZTJkYzkuLjAzY2Q3YWQxZTY2OTUyNzJlODBmYzJhZGJjN2JiNWVkODdlMWE1M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBAIC05NSw5ICs5
NSw4IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFuaW1hdGlvbnMoKQogICAg
IC8vIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSB1c2UtZWxlbWVudCB0byBh
dm9pZCB0aGlzLiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvNTM3MDQKICAgICBWZWN0b3I8UmVm
UHRyPFNWR1NWR0VsZW1lbnQ+PiB0aW1lQ29udGFpbmVyczsKICAgICB0aW1lQ29udGFpbmVycy5h
cHBlbmRSYW5nZShtX3RpbWVDb250YWluZXJzLmJlZ2luKCksIG1fdGltZUNvbnRhaW5lcnMuZW5k
KCkpOwotICAgIGF1dG8gZW5kID0gdGltZUNvbnRhaW5lcnMuZW5kKCk7Ci0gICAgZm9yIChhdXRv
IGl0ID0gdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAo
Kml0KS0+dGltZUNvbnRhaW5lcigpLT5iZWdpbigpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IHRpbWVDb250YWluZXJzKQorICAgICAgICBlbGVtZW50LT50aW1lQ29udGFpbmVyKCkuYmVnaW4o
KTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnBhdXNlQW5pbWF0aW9ucygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCmluZGV4IDFjYTViMGVhMjVmMGUzMDNk
YmY3ZjFjYWYyOWNlYmM4MTZkZmRiYzguLjgxZTVhNTAzNmU5MjdhMjhlZjgxZDI1MDhiODM2Y2M5
NTZmMDY3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCkBAIC0yOSw3
ICsyOSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCmluZGV4IDQy
YzkyMGVlNjFkN2I3Y2RlMWNkMTgzZTI5MWU3ODBjNDI3Y2JjMmMuLjdlZmJkZWNhOGZhYWExNTVk
MjA5MzVlNTg2NWIwZGRjNTQxNjNiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdNYXJrZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxl
bWVudC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcAppbmRleCAzNTM0OTBmM2U3Zjk5ZWRlNjY1OTQxODEyOWQ2Y2NjMmFkZTE0ZGI3Li4x
ODUyN2JlNTgwNTQ2YWQ4YTRlNzViMGQwMWJlZDFjMzU5ZTAxMzU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJTVkdQYXRo
U2VnTW92ZXRvQWJzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ01vdmV0b1JlbC5oIgogI2luY2x1
ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCmluZGV4IDFjMmNjMjFjNGU3NTgwNTk2
Y2NiNTViYjliMGNmY2JmMDYyYzlmNGUuLmM2YjE2NzZhN2IzYzA1MWQwMGZjZWUwZGRhNjc1ZDA2
ODU3OWM3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcApAQCAt
MzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNW
R1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGM4ZDM4ZDllYjhhZWFlMWIwZTc2ODdjZTFlNGQ4
YzNiZjRkOGJiMTEuLmE0ODUxMzAxOWI1YjMzNGRmNTFmMjRiNGY0NTA1M2E4YmE0NzVmMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDEwIFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
NCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC0yMywzOSArMjMsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0j
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIK
LSNpbmNsdWRlICJTVkdBbmdsZS5oIgotI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgotI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgot
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIK
ICNpbmNsdWRlICJTVkdWaWV3RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1ZpZXdTcGVjLmgiCi0j
aW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODUsOSArNjMsNyBAQCBpbmxpbmUgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdQogICAgICwgbV95KExlbmd0aE1v
ZGVIZWlnaHQpCiAgICAgLCBtX3dpZHRoKExlbmd0aE1vZGVXaWR0aCwgQVNDSUlMaXRlcmFsKCIx
MDAlIikpCiAgICAgLCBtX2hlaWdodChMZW5ndGhNb2RlSGVpZ2h0LCBBU0NJSUxpdGVyYWwoIjEw
MCUiKSkKLSAgICAsIG1fdXNlQ3VycmVudFZpZXcoZmFsc2UpCi0gICAgLCBtX3pvb21BbmRQYW4o
U1ZHWm9vbUFuZFBhbk1hZ25pZnkpCi0gICAgLCBtX3RpbWVDb250YWluZXIoU01JTFRpbWVDb250
YWluZXI6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fdGltZUNvbnRhaW5lcihSZWZQdHI8U01JTFRp
bWVDb250YWluZXI+KFNNSUxUaW1lQ29udGFpbmVyOjpjcmVhdGUodGhpcykpLnJlbGVhc2VOb25O
dWxsKCkpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpOwogICAg
IHJlZ2lzdGVyQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yU1ZHU1ZHRWxlbWVudCgpOwpAQCAtMTA0LDgg
KzgwLDYgQEAgU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogICAgIGlmIChtX3ZpZXdT
cGVjKQogICAgICAgICBtX3ZpZXdTcGVjLT5yZXNldENvbnRleHRFbGVtZW50KCk7CiAgICAgZG9j
dW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsK
LSAgICAvLyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGlzIG5v
dCBjYWxsZWQuCi0gICAgLy8gc2VlIENvbnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuLCBj
YWxsZWQgYnkgaXRzIGRlc3RydWN0b3IuCiAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKIH0KIApAQCAtMTE5LDkgKzkzLDkgQEAg
dm9pZCBTVkdTVkdFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9j
dW1lbnQpCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlw
dFR5cGUoKSBjb25zdAogewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGRlZmF1bHRWYWx1ZSwgKCJ0ZXh0L2VjbWFzY3JpcHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
ID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6Y29udGVudFNjcmlwdFR5cGVBdHRyKTsKLSAg
ICByZXR1cm4gbi5pc051bGwoKSA/IGRlZmF1bHRWYWx1ZSA6IG47CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGVmYXVsdFNjcmlwdFR5cGUoInRleHQvZWNtYXNjcmlw
dCIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmNvbnRlbnRTY3JpcHRUeXBlQXR0cik7CisgICAgcmV0dXJuIHR5cGUuaXNOdWxsKCkg
PyBkZWZhdWx0U2NyaXB0VHlwZS5nZXQoKSA6IHR5cGU7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVu
dDo6c2V0Q29udGVudFNjcmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAtMTMx
LDkgKzEwNSw5IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFNjcmlwdFR5cGUoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNWR1NWR0VsZW1l
bnQ6OmNvbnRlbnRTdHlsZVR5cGUoKSBjb25zdAogewotICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRlZmF1bHRWYWx1ZSwgKCJ0ZXh0L2NzcyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG4gPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpjb250ZW50U3R5bGVUeXBlQXR0
cik7Ci0gICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBkZWZhdWx0VmFsdWUgOiBuOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGRlZmF1bHRTdHlsZVR5cGUoInRleHQvY3Nz
Iik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZmFzdEdldEF0dHJpYnV0ZShTVkdO
YW1lczo6Y29udGVudFN0eWxlVHlwZUF0dHIpOworICAgIHJldHVybiB0eXBlLmlzTnVsbCgpID8g
ZGVmYXVsdFN0eWxlVHlwZS5nZXQoKSA6IHR5cGU7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6
c2V0Q29udGVudFN0eWxlVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCkBAIC0xNDMsMjEg
KzExNywyMCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldENvbnRlbnRTdHlsZVR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKQogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQo
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBkb2Vzbid0IGZvbGxvdyB0aGUg
c3BlYyBhbmQgaXMgYmFzaWNhbGx5IHVudGVzdGVkLiBQYXJlbnQgZG9jdW1lbnRzIGFyZSBub3Qg
Y29uc2lkZXJlZCBoZXJlLgotICAgIC8vIEFzIHdlIGhhdmUgbm8gdGVzdCBjb3ZlcmFnZSBmb3Ig
dGhpcywgd2UncmUgZ29pbmcgdG8gZGlzYWJsZSBpdCBjb21wbGV0bHkgZm9yIG5vdy4KLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICBy
ZXR1cm4geyB9OwogfQogCiBmbG9hdCBTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRUb01pbGxpbWV0
ZXJYKCkgY29uc3QKIHsKLSAgICAvLyAyLjU0IC8gY3NzUGl4ZWxzUGVySW5jaCBnaXZlcyBDTS4K
LSAgICByZXR1cm4gKDIuNTRmIC8gY3NzUGl4ZWxzUGVySW5jaCkgKiAxMC4wZjsKKyAgICAvLyBU
aGVyZSBhcmUgMjUuNCBtaWxsaW1ldGVycyBpbiBhbiBpbmNoLgorICAgIHJldHVybiAyNS40ZiAv
IGNzc1BpeGVsc1BlckluY2g7CiB9CiAKIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRv
TWlsbGltZXRlclkoKSBjb25zdAogewotICAgIC8vIDIuNTQgLyBjc3NQaXhlbHNQZXJJbmNoIGdp
dmVzIENNLgotICAgIHJldHVybiAoMi41NGYgLyBjc3NQaXhlbHNQZXJJbmNoKSAqIDEwLjBmOwor
ICAgIC8vIFRoZXJlIGFyZSAyNS40IG1pbGxpbWV0ZXJzIGluIGFuIGluY2guCisgICAgcmV0dXJu
IDI1LjRmIC8gY3NzUGl4ZWxzUGVySW5jaDsKIH0KIAogZmxvYXQgU1ZHU1ZHRWxlbWVudDo6c2Ny
ZWVuUGl4ZWxUb01pbGxpbWV0ZXJYKCkgY29uc3QKQEAgLTE3MCw0OSArMTQzLDQyIEBAIGZsb2F0
IFNWR1NWR0VsZW1lbnQ6OnNjcmVlblBpeGVsVG9NaWxsaW1ldGVyWSgpIGNvbnN0CiAgICAgcmV0
dXJuIHBpeGVsVW5pdFRvTWlsbGltZXRlclkoKTsKIH0KIAotU1ZHVmlld1NwZWMqIFNWR1NWR0Vs
ZW1lbnQ6OmN1cnJlbnRWaWV3KCkKK1NWR1ZpZXdTcGVjJiBTVkdTVkdFbGVtZW50OjpjdXJyZW50
VmlldygpCiB7CiAgICAgaWYgKCFtX3ZpZXdTcGVjKQogICAgICAgICBtX3ZpZXdTcGVjID0gU1ZH
Vmlld1NwZWM6OmNyZWF0ZSh0aGlzKTsKLSAgICByZXR1cm4gbV92aWV3U3BlYy5nZXQoKTsKKyAg
ICByZXR1cm4gKm1fdmlld1NwZWM7CiB9CiAKLWZsb2F0IFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRT
Y2FsZSgpIGNvbnN0CitGcmFtZSogU1ZHU1ZHRWxlbWVudDo6ZnJhbWVGb3JDdXJyZW50U2NhbGUo
KSBjb25zdAogeworICAgIC8vIFRoZSBiZWhhdmlvciBvZiBjdXJyZW50U2NhbGUoKSBpcyB1bmRl
ZmluZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggbm9uLXN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50
cy4KKyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgZW1iZWRkZWQsIHRoZSBzY2FsaW5nIGlzIGhh
bmRsZWQgYnkgdGhlIGhvc3QgcmVuZGVyZXIuCiAgICAgaWYgKCFpbkRvY3VtZW50KCkgfHwgIWlz
T3V0ZXJtb3N0U1ZHU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMTsKLQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGZyYW1lICYmIGZy
YW1lLT5pc01haW5GcmFtZSgpID8gZnJhbWUgOiBudWxscHRyOworfQogCi0gICAgLy8gVGhlIGJl
aGF2aW91ciBvZiBjdXJyZW50U2NhbGUoKSBpcyB1bmRlZmluZWQsIHdoZW4gd2UncmUgZGVhbGlu
ZyB3aXRoIG5vbi1zdGFuZGFsb25lIFNWRyBkb2N1bWVudHMuCi0gICAgLy8gSWYgdGhlIHN2ZyBp
cyBlbWJlZGRlZCwgdGhlIHNjYWxpbmcgaXMgaGFuZGxlZCBieSB0aGUgaG9zdCByZW5kZXJlciwg
c28gd2hlbiBhc2tpbmcgZnJvbSBpbnNpZGUKLSAgICAvLyB0aGUgU1ZHIGRvY3VtZW50LCBhIHNj
YWxlIHZhbHVlIG9mIDEgc2VlbXMgcmVhc29uYWJsZSwgYXMgaXQgZG9lc24ndCBrbm93IGFueXRo
aW5nIGFib3V0IHRoZSBwYXJlbnQgc2NhbGUuCi0gICAgcmV0dXJuIGZyYW1lLT50cmVlKCkucGFy
ZW50KCkgPyAxIDogZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CitmbG9hdCBTVkdTVkdFbGVtZW50
OjpjdXJyZW50U2NhbGUoKSBjb25zdAoreworICAgIC8vIFdoZW4gYXNraW5nIGZyb20gaW5zaWRl
IGFuIGVtYmVkZGVkIFNWRyBkb2N1bWVudCwgYSBzY2FsZSB2YWx1ZSBvZiAxIHNlZW1zIHJlYXNv
bmFibGUsIGFzIGl0IGRvZXNuJ3QKKyAgICAvLyBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBwYXJl
bnQgc2NhbGUuCisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGb3JDdXJyZW50U2NhbGUoKTsKKyAg
ICByZXR1cm4gZnJhbWUgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDE7CiB9CiAKIHZvaWQg
U1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmICgh
aW5Eb2N1bWVudCgpIHx8ICFpc091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBiZWhhdmlvdXIgb2Ygc2V0Q3Vy
cmVudFNjYWxlKCkgaXMgdW5kZWZpbmVkLCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBub24tc3Rh
bmRhbG9uZSBTVkcgZG9jdW1lbnRzLgotICAgIC8vIFdlIGNob29zZSB0aGUgaWdub3JlIHRoaXMg
Y2FsbCwgaXQncyBwcmV0dHkgdXNlbGVzcyB0byBzdXBwb3J0IGNhbGxpbmcgc2V0Q3VycmVudFNj
YWxlKCkgZnJvbSB3aXRoaW4KLSAgICAvLyBhbiBlbWJlZGRlZCBTVkcgZG9jdW1lbnQsIGZvciB0
aGUgc2FtZSByZWFzb25zIGFzIGluIGN1cnJlbnRTY2FsZSgpIC0gbmVlZHMgcmVzb2x1dGlvbiBi
eSBTVkcgV0cuCi0gICAgaWYgKGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihzY2FsZSk7CisgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGZyYW1lRm9yQ3VycmVudFNjYWxlKCkpCisgICAgICAgIGZyYW1lLT5zZXRQYWdl
Wm9vbUZhY3RvcihzY2FsZSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRy
YW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiB0cmFuc2xhdGlvbikKIHsKLSAgICBtX3RyYW5zbGF0
aW9uID0gdHJhbnNsYXRpb247CisgICAgaWYgKG1fY3VycmVudFRyYW5zbGF0ZSA9PSB0cmFuc2xh
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fY3VycmVudFRyYW5zbGF0ZSA9IHRyYW5zbGF0
aW9uOwogICAgIHVwZGF0ZUN1cnJlbnRUcmFuc2xhdGUoKTsKIH0KIApAQCAtMjIwLDM0ICsxODYs
MzcgQEAgdm9pZCBTVkdTVkdFbGVtZW50Ojp1cGRhdGVDdXJyZW50VHJhbnNsYXRlKCkKIHsKICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3Qt
PnNldE5lZWRzTGF5b3V0KCk7Ci0KICAgICBpZiAocGFyZW50Tm9kZSgpID09ICZkb2N1bWVudCgp
ICYmIGRvY3VtZW50KCkucmVuZGVyVmlldygpKQogICAgICAgICBkb2N1bWVudCgpLnJlbmRlclZp
ZXcoKS0+cmVwYWludCgpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7
Ci0gICAgU1ZHUGFyc2luZ0Vycm9yIHBhcnNlRXJyb3IgPSBOb0Vycm9yOwotCiAgICAgaWYgKCFu
ZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkpIHsKLSAgICAgICAgYm9vbCBzZXRMaXN0ZW5lciA9IHRy
dWU7Ci0KLSAgICAgICAgLy8gT25seSBoYW5kbGUgZXZlbnRzIGlmIHdlJ3JlIHRoZSBvdXRlcm1v
c3QgPHN2Zz4gZWxlbWVudAotICAgICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om9udW5sb2Fk
QXR0cikKKyAgICAgICAgLy8gU2luY2Ugd2Ugb25seSBoYW5kbGUgZXZlbnRzIGlmIHdlJ3JlIHRo
ZSBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudCwgc2V0IGxpc3RlbmVycyBvbmx5CisgICAgICAgIC8v
IGlmIHdlIGFyZS4gU2V0IHRoZSBsaXN0ZW5lcnMgZGlyZWN0bHkgb24gdGhlIHdpbmRvdyBhdHRy
aWJ1dGUuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHdyb25nLiBJdCB3b24n
dCB3b3JrIGlmIHdlIGFuIGV4aXN0aW5nIDxzdmc+IGVsZW1lbnQgYmVjb21lcworICAgICAgICAv
LyB0aGUgb3V0ZXJtb3N0IG9yIGlmIGFuIGV4aXN0aW5nIDxzdmc+IGVsZW1lbnQgbGF0ZXIgYmVj
b21lcyBubyBsb25nZXIgb3V0bW9zdC4KKyAgICAgICAgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpv
bnVubG9hZEF0dHIpIHsKICAgICAgICAgICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIG5hbWUsIHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om9ucmVzaXplQXR0cikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om9u
cmVzaXplQXR0cikgewogICAgICAgICAgICAgZG9jdW1lbnQoKS5zZXRXaW5kb3dBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgbmFtZSwgdmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6b25zY3JvbGxBdHRyKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09IEhUTUxOYW1lczo6b25z
Y3JvbGxBdHRyKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLnNldFdpbmRvd0F0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBuYW1lLCB2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Om9uem9vbUF0dHIpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Om9uem9vbUF0
dHIpIHsKICAgICAgICAgICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuem9vbUV2ZW50LCBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNldExpc3RlbmVyID0gZmFsc2U7Ci0gCi0gICAgICAgIGlmIChzZXRMaXN0
ZW5lcikKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAorICAgIFNWR1Bh
cnNpbmdFcnJvciBwYXJzZUVycm9yID0gTm9FcnJvcjsKKwogICAgIGlmIChuYW1lID09IEhUTUxO
YW1lczo6b25hYm9ydEF0dHIpCiAgICAgICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgbmFtZSwgdmFsdWUpOwogICAg
IGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpvbmVycm9yQXR0cikKQEAgLTI3MiwzMSArMjQx
LDI5IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nCiAgICAgICAgICAgICBsZW5ndGggPSBTVkdM
ZW5ndGgoTGVuZ3RoTW9kZUhlaWdodCwgQVNDSUlMaXRlcmFsKCIxMDAlIikpOwogICAgICAgICB9
CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoU1ZH
TGFuZ1NwYWNlOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkKLSAgICAgICAgICAgICAgIHx8
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVl
KQotICAgICAgICAgICAgICAgfHwgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZSh0aGlz
LCBuYW1lLCB2YWx1ZSkKLSAgICAgICAgICAgICAgIHx8IFNWR1pvb21BbmRQYW46OnBhcnNlQXR0
cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKSkgewotICAgIH0gZWxzZQotICAgICAgICBTVkdHcmFw
aGljc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKKyAgICB9CiAKICAgICBy
ZXBvcnRBdHRyaWJ1dGVQYXJzaW5nRXJyb3IocGFyc2VFcnJvciwgbmFtZSwgdmFsdWUpOworCisg
ICAgU1ZHTGFuZ1NwYWNlOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisgICAgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOworICAg
IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpOworICAg
IFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKCp0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAg
U1ZHR3JhcGhpY3NFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgU1ZHU1ZHRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKICAgICBib29sIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc09yVmlld0JveCA9
IGZhbHNlOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpoZWlnaHRBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjp4QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGVTVkdQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0
aHNPclZpZXdCb3ggPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Ro
c09yVmlld0JveCA9IHRydWU7IAotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
ZW5kZXJlcigpKQotICAgICAgICAgICAgb2JqZWN0LT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgp
OworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAgICAgfQogCiAgICAg
SW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CkBAIC0zMTMsNjYgKzI4MCw1
MSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotdW5zaWduZWQgU1ZHU1ZHRWxlbWVudDo6c3VzcGVuZFJl
ZHJhdyh1bnNpZ25lZCAvKiBtYXhXYWl0TWlsbGlzZWNvbmRzICovKQordW5zaWduZWQgU1ZHU1ZH
RWxlbWVudDo6c3VzcGVuZFJlZHJhdyh1bnNpZ25lZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IG1lIChzZWUgYnVnIDExMjc1KQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNWR1NWR0Vs
ZW1lbnQ6OnVuc3VzcGVuZFJlZHJhdyh1bnNpZ25lZCAvKiBzdXNwZW5kSGFuZGxlSWQgKi8pCit2
b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVuZFJlZHJhdyh1bnNpZ25lZCkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc1KQogfQogCiB2b2lkIFNWR1NWR0VsZW1l
bnQ6OnVuc3VzcGVuZFJlZHJhd0FsbCgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAo
c2VlIGJ1ZyAxMTI3NSkKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50Ojpmb3JjZVJlZHJhdygpCiB7
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotUGFzc1Jl
ZlB0cjxOb2RlTGlzdD4gU1ZHU1ZHRWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9z
dXJlTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1l
bnQsIENvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZSBjb2xsZWN0KSBjb25zdAorUmVmPE5v
ZGVMaXN0PiBTVkdTVkdFbGVtZW50Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCwgYm9v
bCAoKmNoZWNrRnVuY3Rpb24pKGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKSkK
IHsKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBlbGVtZW50czsKLQotICAgIGZvciAoYXV0byYg
c3ZnRWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR0VsZW1lbnQ+KCoocmVmZXJlbmNlRWxl
bWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKSkpIHsKLSAgICAgICAgaWYgKGNvbGxlY3Qg
PT0gQ29sbGVjdEludGVyc2VjdGlvbkxpc3QpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oc3ZnRWxlbWVudC5yZW5kZXJlcigpLCByZWN0
KSkKLSAgICAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoY29uc3RfY2FzdDxTVkdFbGVtZW50
Jj4oc3ZnRWxlbWVudCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlbmRl
clNWR01vZGVsT2JqZWN0OjpjaGVja0VuY2xvc3VyZShzdmdFbGVtZW50LnJlbmRlcmVyKCksIHJl
Y3QpKQotICAgICAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChjb25zdF9jYXN0PFNWR0VsZW1l
bnQmPihzdmdFbGVtZW50KSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBk
ZXNjZW5kYW50c09mVHlwZTxTVkdFbGVtZW50PihyZWZlcmVuY2VFbGVtZW50ID8gKnJlZmVyZW5j
ZUVsZW1lbnQgOiAqdGhpcykpIHsKKyAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb24oJmVsZW1lbnQs
IHJlY3QpKQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwogICAgIH0KLQot
ICAgIHJldHVybiBTdGF0aWNFbGVtZW50TGlzdDo6YWRvcHQoZWxlbWVudHMpOworICAgIHJldHVy
biBSZWZQdHI8Tm9kZUxpc3Q+KFN0YXRpY0VsZW1lbnRMaXN0OjphZG9wdChlbGVtZW50cykpLnJl
bGVhc2VOb25OdWxsKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6
OmdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KiBy
ZWZlcmVuY2VFbGVtZW50KSBjb25zdAorUmVmPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50OjpnZXRJ
bnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCogcmVmZXJl
bmNlRWxlbWVudCkKIHsKLSAgICByZXR1cm4gY29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJl
TGlzdChyZWN0LCByZWZlcmVuY2VFbGVtZW50LCBDb2xsZWN0SW50ZXJzZWN0aW9uTGlzdCk7Cisg
ICAgcmV0dXJuIGNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QocmVjdCwgcmVmZXJl
bmNlRWxlbWVudCwgY2hlY2tJbnRlcnNlY3Rpb24pOwogfQogCi1QYXNzUmVmUHRyPE5vZGVMaXN0
PiBTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
U1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCkgY29uc3QKK1JlZjxOb2RlTGlzdD4gU1ZHU1ZH
RWxlbWVudDo6Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1l
bnQqIHJlZmVyZW5jZUVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGNvbGxlY3RJbnRlcnNlY3Rpb25P
ckVuY2xvc3VyZUxpc3QocmVjdCwgcmVmZXJlbmNlRWxlbWVudCwgQ29sbGVjdEVuY2xvc3VyZUxp
c3QpOworICAgIHJldHVybiBjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KHJlY3Qs
IHJlZmVyZW5jZUVsZW1lbnQsIGNoZWNrRW5jbG9zdXJlKTsKIH0KIAotYm9vbCBTVkdTVkdFbGVt
ZW50OjpjaGVja0ludGVyc2VjdGlvbihjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0Citib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJzZWN0
aW9uKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKGVsZW1lbnQtPnJlbmRlcmVyKCks
IHJlY3QpOworICAgIHJldHVybiBlbGVtZW50ICYmIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVj
a0ludGVyc2VjdGlvbihlbGVtZW50LT5yZW5kZXJlcigpLCByZWN0KTsKIH0KIAotYm9vbCBTVkdT
VkdFbGVtZW50OjpjaGVja0VuY2xvc3VyZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Citib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9z
dXJlKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrRW5jbG9zdXJlKGVsZW1lbnQtPnJlbmRlcmVyKCksIHJl
Y3QpOworICAgIHJldHVybiBlbGVtZW50ICYmIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0Vu
Y2xvc3VyZShlbGVtZW50LT5yZW5kZXJlcigpLCByZWN0KTsKIH0KIAogdm9pZCBTVkdTVkdFbGVt
ZW50OjpkZXNlbGVjdEFsbCgpCkBAIC0zODEsNDQgKzMzMywzOSBAQCB2b2lkIFNWR1NWR0VsZW1l
bnQ6OmRlc2VsZWN0QWxsKCkKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9
CiAKLWZsb2F0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR051bWJlcigpCi17Ci0gICAgcmV0dXJu
IDAuMGY7Ci19Ci0KIFNWR0xlbmd0aCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgoKQog
ewotICAgIHJldHVybiBTVkdMZW5ndGgoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBTVkdBbmds
ZSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdBbmdsZSgpCiB7Ci0gICAgcmV0dXJuIFNWR0FuZ2xl
KCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogU1ZHUG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
U1ZHUG9pbnQoKQogewotICAgIHJldHVybiBTVkdQb2ludCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIFNWR01hdHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQogewotICAgIHJl
dHVybiBTVkdNYXRyaXgoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBGbG9hdFJlY3QgU1ZHU1ZH
RWxlbWVudDo6Y3JlYXRlU1ZHUmVjdCgpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAg
IHJldHVybiB7IH07CiB9CiAKIFNWR1RyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdU
cmFuc2Zvcm0oKQogewotICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX01BVFJJWCk7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9NQVRSSVg7CiB9CiAKIFNWR1RyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFu
c2Zvcm1Gcm9tTWF0cml4KGNvbnN0IFNWR01hdHJpeCYgbWF0cml4KQogewotICAgIHJldHVybiBT
VkdUcmFuc2Zvcm0oc3RhdGljX2Nhc3Q8Y29uc3QgQWZmaW5lVHJhbnNmb3JtJj4obWF0cml4KSk7
CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSB7IG1hdHJpeCB9OwogfQogCiBBZmZpbmVUcmFuc2Zv
cm0gU1ZHU1ZHRWxlbWVudDo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRh
YmxlOjpDVE1TY29wZSBtb2RlKSBjb25zdApAQCAtNDM0LDcgKzM4MSw3IEBAIEFmZmluZVRyYW5z
Zm9ybSBTVkdTVkdFbGVtZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2Nh
dGFibGU6OkNUTVNjCiAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0aGlz
KTsKICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSh4KCkudmFsdWUobGVuZ3RoQ29udGV4dCks
IHkoKS52YWx1ZShsZW5ndGhDb250ZXh0KSk7CiAgICAgfSBlbHNlIGlmIChtb2RlID09IFNWR0xv
Y2F0YWJsZTo6U2NyZWVuU2NvcGUpIHsKLSAgICAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2F0aW9uOwogICAg
ICAgICAgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CiAKQEAgLTQ4NSw3ICs0MzIsNiBAQCBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlZjxSZW5kZXJTdHlsZT4mJgogewogICAgIGlmIChpc091dGVybW9zdFNWR1NWR0VsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jvb3Q+KCp0aGlzLCBX
VEY6Om1vdmUoc3R5bGUpKTsKLQogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcj4oKnRoaXMsIFdURjo6bW92ZShzdHlsZSkpOwogfQogCkBAIC00OTcs
OCArNDQzLDggQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVt
ZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm8KICAgICAgICAgLy8gQW5pbWF0aW9u
cyBhcmUgc3RhcnRlZCBhdCB0aGUgZW5kIG9mIGRvY3VtZW50IHBhcnNpbmcgYW5kIGFmdGVyIGZp
cmluZyB0aGUgbG9hZCBldmVudCwKICAgICAgICAgLy8gYnV0IGlmIHdlIG1pc3MgdGhhdCB0cmFp
biAoZGVmZXJyZWQgcHJvZ3JhbW1hdGljIGVsZW1lbnQgaW5zZXJ0aW9uIGZvciBleGFtcGxlKSB3
ZSBuZWVkCiAgICAgICAgIC8vIHRvIGluaXRpYWxpemUgdGhlIHRpbWUgY29udGFpbmVyIGhlcmUu
Ci0gICAgICAgIGlmICghZG9jdW1lbnQoKS5wYXJzaW5nKCkgJiYgIWRvY3VtZW50KCkucHJvY2Vz
c2luZ0xvYWRFdmVudCgpICYmIGRvY3VtZW50KCkubG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhdGlt
ZUNvbnRhaW5lcigpLT5pc1N0YXJ0ZWQoKSkKLSAgICAgICAgICAgIHRpbWVDb250YWluZXIoKS0+
YmVnaW4oKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCgpLnBhcnNpbmcoKSAmJiAhZG9jdW1lbnQo
KS5wcm9jZXNzaW5nTG9hZEV2ZW50KCkgJiYgZG9jdW1lbnQoKS5sb2FkRXZlbnRGaW5pc2hlZCgp
ICYmICFtX3RpbWVDb250YWluZXItPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgbV90aW1lQ29u
dGFpbmVyLT5iZWdpbigpOwogICAgIH0KICAgICByZXR1cm4gU1ZHR3JhcGhpY3NFbGVtZW50Ojpp
bnNlcnRlZEludG8ocm9vdFBhcmVudCk7CiB9CkBAIC01MzQsMTAgKzQ4MCw5IEBAIGZsb2F0IFNW
R1NWR0VsZW1lbnQ6OmdldEN1cnJlbnRUaW1lKCkgY29uc3QKIAogdm9pZCBTVkdTVkdFbGVtZW50
OjpzZXRDdXJyZW50VGltZShmbG9hdCBzZWNvbmRzKQogewotICAgIGlmIChzdGQ6OmlzbmFuKHNl
Y29uZHMpKQorICAgIGlmICghc3RkOjppc2Zpbml0ZShzZWNvbmRzKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNlY29uZHMgPSBzdGQ6Om1heChzZWNvbmRzLCAwLjBmKTsKLSAgICBtX3RpbWVDb250
YWluZXItPnNldEVsYXBzZWQoc2Vjb25kcyk7CisgICAgbV90aW1lQ29udGFpbmVyLT5zZXRFbGFw
c2VkKHN0ZDo6bWF4KHNlY29uZHMsIDAuMGYpKTsKIH0KIAogYm9vbCBTVkdTVkdFbGVtZW50Ojpz
ZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKQEAgLTU1NCw0MiArNDk5LDQ0IEBAIEZsb2F0
UmVjdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdAogICAgIGlmICht
X3VzZUN1cnJlbnRWaWV3KQogICAgICAgICByZXR1cm4gbV92aWV3U3BlYyA/IG1fdmlld1NwZWMt
PnZpZXdCb3goKSA6IEZsb2F0UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IHVzZVZpZXdCb3ggPSB2
aWV3Qm94KCk7Ci0gICAgaWYgKCF1c2VWaWV3Qm94LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHVzZVZpZXdCb3g7CisgICAgRmxvYXRSZWN0IHZpZXdCb3ggPSB0aGlzLT52aWV3Qm94KCk7Cisg
ICAgaWYgKCF2aWV3Qm94LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZpZXdCb3g7CisKICAg
ICBpZiAoIWlzPFJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJT
VkdSb290PigqcmVuZGVyZXIoKSkuaXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSgpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBMZW5ndGgg
aW50cmluc2ljV2lkdGggPSB0aGlzLT5pbnRyaW5zaWNXaWR0aCgpOwogICAgIExlbmd0aCBpbnRy
aW5zaWNIZWlnaHQgPSB0aGlzLT5pbnRyaW5zaWNIZWlnaHQoKTsKICAgICBpZiAoIWludHJpbnNp
Y1dpZHRoLmlzRml4ZWQoKSB8fCAhaW50cmluc2ljSGVpZ2h0LmlzRml4ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gSWYgbm8g
dmlld0JveCBpcyBzcGVjaWZpZWQgYnV0IG5vbi1yZWxhdGl2ZSB3aWR0aC9oZWlnaHQgdmFsdWVz
LCB0aGVuIHdlCiAgICAgLy8gc2hvdWxkIGFsd2F5cyBzeW50aGVzaXplIGEgdmlld0JveCBpZiB3
ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIGEgU1ZHSW1hZ2UuICAgIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBGbG9hdFNpemUoZmxvYXRWYWx1ZUZvckxlbmd0aChpbnRyaW5zaWNX
aWR0aCwgMCksIGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljSGVpZ2h0LCAwKSkpOworICAg
IHJldHVybiB7IDAsIDAsIGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljV2lkdGgsIDApLCBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY0hlaWdodCwgMCkgfTsKK30KKworc3RhdGljIEZs
b2F0U2l6ZSBvcGVyYXRvci8oY29uc3QgTGF5b3V0U2l6ZSYgYSwgZmxvYXQgYikKK3sKKyAgICBy
ZXR1cm4geyBhLndpZHRoKCkudG9GbG9hdCgpIC8gYiwgYS5oZWlnaHQoKS50b0Zsb2F0KCkgLyBi
IH07CiB9CiAKIEZsb2F0U2l6ZSBTVkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld3BvcnRTaXplKCkg
Y29uc3QKIHsKLSAgICBpZiAoaGFzSW50cmluc2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5zaWNIZWln
aHQoKSkgewotICAgICAgICBMZW5ndGggaW50cmluc2ljV2lkdGggPSB0aGlzLT5pbnRyaW5zaWNX
aWR0aCgpOwotICAgICAgICBMZW5ndGggaW50cmluc2ljSGVpZ2h0ID0gdGhpcy0+aW50cmluc2lj
SGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoZmxvYXRWYWx1ZUZvckxlbmd0aChp
bnRyaW5zaWNXaWR0aCwgMCksIGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljSGVpZ2h0LCAw
KSk7Ci0gICAgfQorICAgIGlmIChoYXNJbnRyaW5zaWNXaWR0aCgpICYmIGhhc0ludHJpbnNpY0hl
aWdodCgpKQorICAgICAgICByZXR1cm4geyBmbG9hdFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY1dp
ZHRoKCksIDApLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY0hlaWdodCgpLCAwKSB9Owog
CiAgICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKCkp
KSB7Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QgPSBkb3duY2FzdDxSZW5kZXJT
VkdSb290PigqcmVuZGVyZXIoKSkuY29udGVudEJveFJlY3QoKTsKLSAgICAgICAgcmV0dXJuIEZs
b2F0U2l6ZShjb250ZW50Qm94UmVjdC53aWR0aCgpIC8gcmVuZGVyZXIoKS0+c3R5bGUoKS5lZmZl
Y3RpdmVab29tKCksIGNvbnRlbnRCb3hSZWN0LmhlaWdodCgpIC8gcmVuZGVyZXIoKS0+c3R5bGUo
KS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8UmVuZGVy
U1ZHUm9vdD4oKnJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm4gcm9vdC5jb250ZW50Qm94UmVj
dCgpLnNpemUoKSAvIHJvb3Quc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgfQogCi0gICAg
RmxvYXRSZWN0IHZpZXdwb3J0UmVjdCA9IGRvd25jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyPigqcmVuZGVyZXIoKSkudmlld3BvcnQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHZpZXdw
b3J0UmVjdC53aWR0aCgpLCB2aWV3cG9ydFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKnJlbmRlcmVyKCkpLnZpZXdwb3J0KCku
c2l6ZSgpOwogfQogCiBib29sIFNWR1NWR0VsZW1lbnQ6Omhhc0ludHJpbnNpY1dpZHRoKCkgY29u
c3QKQEAgLTYyNSwxOSArNTcyLDEyIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50Ojp2
aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmllCiAgICAgaWYg
KCFtX3VzZUN1cnJlbnRWaWV3IHx8ICFtX3ZpZXdTcGVjKQogICAgICAgICByZXR1cm4gU1ZHRml0
VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGN1cnJlbnRWaWV3Qm94UmVjdCgpLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiAKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gY3RtID0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3Jt
KGN1cnJlbnRWaWV3Qm94UmVjdCgpLCBtX3ZpZXdTcGVjLT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCks
IHZpZXdXaWR0aCwgdmlld0hlaWdodCk7Ci0gICAgY29uc3QgU1ZHVHJhbnNmb3JtTGlzdCYgdHJh
bnNmb3JtTGlzdCA9IG1fdmlld1NwZWMtPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAgIGlmICh0
cmFuc2Zvcm1MaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGN0bTsKLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgaWYgKHRyYW5zZm9ybUxpc3QuY29uY2F0ZW5hdGUo
dHJhbnNmb3JtKSkKLSAgICAgICAgY3RtICo9IHRyYW5zZm9ybTsKLQotICAgIHJldHVybiBjdG07
CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IFNWR0ZpdFRvVmlld0JveDo6dmlld0Jv
eFRvVmlld1RyYW5zZm9ybShjdXJyZW50Vmlld0JveFJlY3QoKSwgbV92aWV3U3BlYy0+cHJlc2Vy
dmVBc3BlY3RSYXRpbygpLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOworICAgIG1fdmlld1NwZWMt
PnRyYW5zZm9ybUJhc2VWYWx1ZSgpLmNvbmNhdGVuYXRlKHRyYW5zZm9ybSk7CisgICAgcmV0dXJu
IHRyYW5zZm9ybTsKIH0KIAotdm9pZCBTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KGNv
bnN0IFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyLCBFbGVtZW50KiBhbmNob3JOb2RlKQordm9p
ZCBTVkdTVkdFbGVtZW50OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRl
bnRpZmllciwgRWxlbWVudCogYW5jaG9yTm9kZSkKIHsKICAgICBhdXRvIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBTVkdWaWV3U3BlYyogdmlldyA9IG1fdmlld1NwZWMuZ2V0KCk7
CkBAIC02NTYsMzAgKzU5NiwyNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldHVwSW5pdGlhbFZp
ZXcoY29uc3QgU3RyaW5nJiBmcmFnbWVudElkZW50aWZpZXIsIEVsZW1lbnQqCiAKICAgICBpZiAo
ZnJhZ21lbnRJZGVudGlmaWVyLnN0YXJ0c1dpdGgoInN2Z1ZpZXcoIikpIHsKICAgICAgICAgaWYg
KCF2aWV3KQotICAgICAgICAgICAgdmlldyA9IGN1cnJlbnRWaWV3KCk7IC8vIENyZWF0ZSB0aGUg
U1ZHVmlld1NwZWMuCi0KKyAgICAgICAgICAgIHZpZXcgPSAmY3VycmVudFZpZXcoKTsgLy8gQ3Jl
YXRlIHRoZSBTVkdWaWV3U3BlYy4KICAgICAgICAgaWYgKHZpZXctPnBhcnNlVmlld1NwZWMoZnJh
Z21lbnRJZGVudGlmaWVyKSkKICAgICAgICAgICAgIG1fdXNlQ3VycmVudFZpZXcgPSB0cnVlOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICB2aWV3LT5yZXNldCgpOwotCiAgICAgICAgIGlmIChy
ZW5kZXJlciAmJiAoaGFkVXNlQ3VycmVudFZpZXcgfHwgbV91c2VDdXJyZW50VmlldykpCiAgICAg
ICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNl
SW52YWxpZGF0aW9uKCpyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBTcGVjOiBJZiB0aGUgU1ZHIGZyYWdtZW50IGlkZW50aWZpZXIgYWRkcmVzc2VzIGEg4oCYdmll
d+KAmSBlbGVtZW50IHdpdGhpbiBhbiBTVkcgZG9jdW1lbnQgKGUuZy4sIE15RHJhd2luZy5zdmcj
TXlWaWV3Ci0gICAgLy8gb3IgTXlEcmF3aW5nLnN2ZyN4cG9pbnRlcihpZCgnTXlWaWV3JykpKSB0
aGVuIHRoZSBjbG9zZXN0IGFuY2VzdG9yIOKAmHN2Z+KAmSBlbGVtZW50IGlzIGRpc3BsYXllZCBp
biB0aGUgdmlld3BvcnQuCi0gICAgLy8gQW55IHZpZXcgc3BlY2lmaWNhdGlvbiBhdHRyaWJ1dGVz
IGluY2x1ZGVkIG9uIHRoZSBnaXZlbiDigJh2aWV34oCZIGVsZW1lbnQgb3ZlcnJpZGUgdGhlIGNv
cnJlc3BvbmRpbmcgdmlldyBzcGVjaWZpY2F0aW9uCi0gICAgLy8gYXR0cmlidXRlcyBvbiB0aGUg
Y2xvc2VzdCBhbmNlc3RvciDigJhzdmfigJkgZWxlbWVudC4KKyAgICAvLyBTcGVjOiBJZiB0aGUg
U1ZHIGZyYWdtZW50IGlkZW50aWZpZXIgYWRkcmVzc2VzIGEgInZpZXciIGVsZW1lbnQgd2l0aGlu
IGFuIFNWRyBkb2N1bWVudCAoZS5nLiwgTXlEcmF3aW5nLnN2ZyNNeVZpZXcKKyAgICAvLyBvciBN
eURyYXdpbmcuc3ZnI3hwb2ludGVyKGlkKCdNeVZpZXcnKSkpIHRoZW4gdGhlIGNsb3Nlc3QgYW5j
ZXN0b3IgInN2ZyIgZWxlbWVudCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdwb3J0LgorICAgIC8v
IEFueSB2aWV3IHNwZWNpZmljYXRpb24gYXR0cmlidXRlcyBpbmNsdWRlZCBvbiB0aGUgZ2l2ZW4g
InZpZXciIGVsZW1lbnQgb3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmlldyBzcGVjaWZpY2F0
aW9uCisgICAgLy8gYXR0cmlidXRlcyBvbiB0aGUgY2xvc2VzdCBhbmNlc3RvciAic3ZnIiBlbGVt
ZW50LgogICAgIGlmIChpczxTVkdWaWV3RWxlbWVudD4oYW5jaG9yTm9kZSkpIHsKLSAgICAgICAg
U1ZHVmlld0VsZW1lbnQmIHZpZXdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KCph
bmNob3JOb2RlKTsKLSAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6
bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgmdmlld0VsZW1lbnQpOwotICAgICAgICBpZiAoaXM8U1ZH
U1ZHRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBTVkdTVkdFbGVtZW50JiBzdmcg
PSBkb3duY2FzdDxTVkdTVkdFbGVtZW50PigqZWxlbWVudCk7Ci0gICAgICAgICAgICBzdmcuaW5o
ZXJpdFZpZXdBdHRyaWJ1dGVzKCZ2aWV3RWxlbWVudCk7Ci0KLSAgICAgICAgICAgIGlmIChSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciA9IHN2Zy5yZW5kZXJlcigpKQorICAgICAgICBhdXRvJiB2aWV3
RWxlbWVudCA9IGRvd25jYXN0PFNWR1ZpZXdFbGVtZW50PigqYW5jaG9yTm9kZSk7CisgICAgICAg
IGF1dG8qIHZpZXdwb3J0RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxl
bWVudCgmdmlld0VsZW1lbnQpOworICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4odmlld3Bv
cnRFbGVtZW50KSkgeworICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFNWR1NW
R0VsZW1lbnQ+KCp2aWV3cG9ydEVsZW1lbnQpOworICAgICAgICAgICAgZWxlbWVudC5pbmhlcml0
Vmlld0F0dHJpYnV0ZXModmlld0VsZW1lbnQpOworICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gZWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291
cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnJlbmRlcmVy
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC02ODksMjUgKzYyNiwyNSBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OnNldHVwSW5pdGlhbFZpZXcoY29uc3QgU3RyaW5nJiBmcmFnbWVudElk
ZW50aWZpZXIsIEVsZW1lbnQqCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYWN0dWFsbHkgImhp
Z2hsaWdodCIgdGhlIHZpZXdUYXJnZXQocykuCiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6aW5o
ZXJpdFZpZXdBdHRyaWJ1dGVzKFNWR1ZpZXdFbGVtZW50KiB2aWV3RWxlbWVudCkKK3ZvaWQgU1ZH
U1ZHRWxlbWVudDo6aW5oZXJpdFZpZXdBdHRyaWJ1dGVzKGNvbnN0IFNWR1ZpZXdFbGVtZW50JiB2
aWV3RWxlbWVudCkKIHsKLSAgICBTVkdWaWV3U3BlYyogdmlldyA9IGN1cnJlbnRWaWV3KCk7Cisg
ICAgU1ZHVmlld1NwZWMmIHZpZXcgPSBjdXJyZW50VmlldygpOwogICAgIG1fdXNlQ3VycmVudFZp
ZXcgPSB0cnVlOwogCi0gICAgaWYgKHZpZXdFbGVtZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnZpZXdCb3hBdHRyKSkKLSAgICAgICAgdmlldy0+c2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3RWxl
bWVudC0+dmlld0JveCgpKTsKKyAgICBpZiAodmlld0VsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp2aWV3Qm94QXR0cikpCisgICAgICAgIHZpZXcuc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3
RWxlbWVudC52aWV3Qm94KCkpOwogICAgIGVsc2UKLSAgICAgICAgdmlldy0+c2V0Vmlld0JveEJh
c2VWYWx1ZSh2aWV3Qm94KCkpOworICAgICAgICB2aWV3LnNldFZpZXdCb3hCYXNlVmFsdWUodmll
d0JveCgpKTsKIAotICAgIGlmICh2aWV3RWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpw
cmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikpCi0gICAgICAgIHZpZXctPnNldFByZXNlcnZlQXNwZWN0
UmF0aW9CYXNlVmFsdWUodmlld0VsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUo
KSk7CisgICAgaWYgKHZpZXdFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cHJlc2VydmVB
c3BlY3RSYXRpb0F0dHIpKQorICAgICAgICB2aWV3LnNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNl
VmFsdWUodmlld0VsZW1lbnQucHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpKTsKICAgICBl
bHNlCi0gICAgICAgIHZpZXctPnNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUocHJlc2Vy
dmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpKTsKKyAgICAgICAgdmlldy5zZXRQcmVzZXJ2ZUFzcGVj
dFJhdGlvQmFzZVZhbHVlKHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSk7CiAKLSAgICBp
ZiAodmlld0VsZW1lbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIpKQot
ICAgICAgICB2aWV3LT5zZXRab29tQW5kUGFuQmFzZVZhbHVlKHZpZXdFbGVtZW50LT56b29tQW5k
UGFuKCkpOworICAgIGlmICh2aWV3RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Onpvb21B
bmRQYW5BdHRyKSkKKyAgICAgICAgdmlldy5zZXRab29tQW5kUGFuQmFzZVZhbHVlKHZpZXdFbGVt
ZW50Lnpvb21BbmRQYW4oKSk7CiAgICAgZWxzZQotICAgICAgICB2aWV3LT5zZXRab29tQW5kUGFu
QmFzZVZhbHVlKHpvb21BbmRQYW4oKSk7CisgICAgICAgIHZpZXcuc2V0Wm9vbUFuZFBhbkJhc2VW
YWx1ZSh6b29tQW5kUGFuKCkpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRvY3VtZW50V2ls
bFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQpAQCAtNzI3LDE1ICs2NjQsMTggQEAgRWxlbWVudCogU1ZH
U1ZHRWxlbWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJiBpZCkKICAgICBFbGVtZW50
KiBlbGVtZW50ID0gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgIGlmIChlbGVt
ZW50ICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKHRoaXMpKQogICAgICAgICByZXR1cm4gZWxl
bWVudDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdHJlZVNjb3BlKCkuZ2V0QWxs
RWxlbWVudHNCeUlkLgotICAgIC8vIEZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91ciBzdWJ0cmVl
LiBEdXBsaWNhdGUgaWRzIGFyZSBhbGxvd2VkLCB0aGUgZmlyc3QgZm91bmQgd2lsbAotICAgIC8v
IGJlIHJldHVybmVkLgotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBl
PEVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAgICBpZiAoZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgp
ID09IGlkKQotICAgICAgICAgICAgcmV0dXJuICZlbGVtZW50OworICAgIGlmICh0cmVlU2NvcGUo
KS5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQoaWQpKSB7CisgICAgICAgIGZvciAoYXV0
byBlbGVtZW50IDogKnRyZWVTY29wZSgpLmdldEFsbEVsZW1lbnRzQnlJZChpZCkpIHsKKyAgICAg
ICAgICAgIGlmIChlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZih0aGlzKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBTVkdTVkdFbGVtZW50Ojppc1ZhbGlkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmgKaW5kZXggNjdjMmU0NWQ4YjI3OTM4NTI5MGI5N2ZhNDFkMzVlOWViODQ0
NzYzMi4uNGI1Y2RjYzcwNDU3ZTJjOWZkMzljZGExYzZkOTQ4MzRlYWIyYWMzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAxMCBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsMzEgKzMzLDI3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZHQW5nbGU7Ci1jbGFzcyBTVkdNYXRyaXg7
Ci1jbGFzcyBTVkdUcmFuc2Zvcm07CiBjbGFzcyBTVkdWaWV3U3BlYzsKLWNsYXNzIFNWR1ZpZXdF
bGVtZW50OwogY2xhc3MgU01JTFRpbWVDb250YWluZXI7CiAKLWNsYXNzIFNWR1NWR0VsZW1lbnQg
ZmluYWwgOiBwdWJsaWMgU1ZHR3JhcGhpY3NFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1pvb21BbmRQYW4gewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8U1ZHU1ZHRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwotCi0gICAgdXNpbmcgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZWY7Ci0gICAgdXNpbmcgU1ZHR3Jh
cGhpY3NFbGVtZW50OjpkZXJlZjsKK2NsYXNzIFNWR1NWR0VsZW1lbnQgZmluYWwgOiBwdWJsaWMg
U1ZHR3JhcGhpY3NFbGVtZW50LCBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwg
cHVibGljIFNWR0ZpdFRvVmlld0JveCwgcHVibGljIFNWR1pvb21BbmRQYW4gewogCi0gICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTVkdUZXN0czo6aXNW
YWxpZCgpOyB9CisgICAgQkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR1NWR0Vs
ZW1lbnQpCisgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCisgICAgICAgIERF
Q0xBUkVfQU5JTUFURURfTEVOR1RIKFksIHkpCisgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVO
R1RIKFdpZHRoLCB3aWR0aCkKKyAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoSGVpZ2h0
LCBoZWlnaHQpCisgICAgICAgIERFQ0xBUkVfQU5JTUFURURfQk9PTEVBTihFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKQorICAgICAgICBERUNMQVJF
X0FOSU1BVEVEX1JFQ1QoVmlld0JveCwgdmlld0JveCkKKyAgICAgICAgREVDTEFSRV9BTklNQVRF
RF9QUkVTRVJWRUFTUEVDVFJBVElPKFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0
UmF0aW8pCisgICAgRU5EX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUwogCi0gICAgLy8gJ1NW
R1NWR0VsZW1lbnQnIGZ1bmN0aW9ucworcHVibGljOiAvLyBET00KICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGNvbnRlbnRTY3JpcHRUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50U2Ny
aXB0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgc2V0Q29udGVudFNj
cmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNvbnRlbnRTdHlsZVR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRTdHlsZVR5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICB2b2lkIHNldENvbnRlbnRTdHlsZVR5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBGbG9hdFJlY3Qgdmlld3BvcnQoKSBjb25zdDsK
IApAQCAtNjUsNDIgKzYyLDMwIEBAIHB1YmxpYzoKICAgICBmbG9hdCBzY3JlZW5QaXhlbFRvTWls
bGltZXRlclgoKSBjb25zdDsKICAgICBmbG9hdCBzY3JlZW5QaXhlbFRvTWlsbGltZXRlclkoKSBj
b25zdDsKIAotICAgIGJvb2wgdXNlQ3VycmVudFZpZXcoKSBjb25zdCB7IHJldHVybiBtX3VzZUN1
cnJlbnRWaWV3OyB9Ci0gICAgU1ZHVmlld1NwZWMqIGN1cnJlbnRWaWV3KCk7Ci0KLSAgICAvLyBS
ZW5kZXJTVkdSb290IHdhbnRzIHRvIHF1ZXJ5IHRoZSBpbnRyaW5zaWMgc2l6ZSwgYnkgb25seSBl
eGFtaW5pbmcgdGhlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLgotICAgIExlbmd0aCBpbnRyaW5z
aWNXaWR0aCgpIGNvbnN0OwotICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQoKSBjb25zdDsKLSAg
ICBGbG9hdFNpemUgY3VycmVudFZpZXdwb3J0U2l6ZSgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBj
dXJyZW50Vmlld0JveFJlY3QoKSBjb25zdDsKKyAgICBib29sIHVzZUN1cnJlbnRWaWV3KCkgY29u
c3Q7CisgICAgU1ZHVmlld1NwZWMmIGN1cnJlbnRWaWV3KCk7CiAKICAgICBmbG9hdCBjdXJyZW50
U2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCBzY2FsZSk7Cisg
ICAgdm9pZCBzZXRDdXJyZW50U2NhbGUoZmxvYXQpOwogCi0gICAgU1ZHUG9pbnQmIGN1cnJlbnRU
cmFuc2xhdGUoKSB7IHJldHVybiBtX3RyYW5zbGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50
VHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBTVkdQb2ludCYgY3VycmVudFRyYW5z
bGF0ZSgpOwogCi0gICAgLy8gT25seSB1c2VkIGZyb20gdGhlIGJpbmRpbmdzLgotICAgIHZvaWQg
dXBkYXRlQ3VycmVudFRyYW5zbGF0ZSgpOworICAgIHVuc2lnbmVkIHN1c3BlbmRSZWRyYXcodW5z
aWduZWQgbWF4V2FpdE1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCB1bnN1c3BlbmRSZWRyYXcodW5z
aWduZWQgc3VzcGVuZEhhbmRsZUlkKTsKKyAgICB2b2lkIHVuc3VzcGVuZFJlZHJhd0FsbCgpOwor
ICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKIAotICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29u
dGFpbmVyKCkgeyByZXR1cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9Ci0gICAgCiAgICAgdm9p
ZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CiAgICAg
Ym9vbCBhbmltYXRpb25zUGF1c2VkKCkgY29uc3Q7CiAKICAgICBmbG9hdCBnZXRDdXJyZW50VGlt
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3VycmVudFRpbWUoZmxvYXQgc2Vjb25kcyk7CisgICAg
dm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCk7CiAKLSAgICB1bnNpZ25lZCBzdXNwZW5kUmVkcmF3
KHVuc2lnbmVkIG1heFdhaXRNaWxsaXNlY29uZHMpOwotICAgIHZvaWQgdW5zdXNwZW5kUmVkcmF3
KHVuc2lnbmVkIHN1c3BlbmRIYW5kbGVJZCk7Ci0gICAgdm9pZCB1bnN1c3BlbmRSZWRyYXdBbGwo
KTsKLSAgICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0KLSAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBn
ZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5j
ZUVsZW1lbnQpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVuY2xvc3VyZUxp
c3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCkgY29uc3Q7
Ci0gICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgRmxv
YXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjaGVja0VuY2xvc3VyZShjb25zdCBTVkdFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgUmVmPE5vZGVMaXN0PiBnZXRJbnRlcnNl
Y3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQp
OworICAgIFJlZjxOb2RlTGlzdD4gZ2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmLCBT
VkdFbGVtZW50KiByZWZlcmVuY2VFbGVtZW50KTsKKyAgICBzdGF0aWMgYm9vbCBjaGVja0ludGVy
c2VjdGlvbihjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGlj
IGJvb2wgY2hlY2tFbmNsb3N1cmUoY29uc3QgU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYp
OwogICAgIHZvaWQgZGVzZWxlY3RBbGwoKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjcmVhdGVTVkdO
dW1iZXIoKTsKQEAgLTExMiw2OSArOTcsOTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTVkdUcmFu
c2Zvcm0gY3JlYXRlU1ZHVHJhbnNmb3JtKCk7CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVh
dGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0IFNWR01hdHJpeCYpOwogCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2
aWV3SGVpZ2h0KSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBTdHJp
bmcmKTsKIAotICAgIHZvaWQgc2V0dXBJbml0aWFsVmlldyhjb25zdCBTdHJpbmcmIGZyYWdtZW50
SWRlbnRpZmllciwgRWxlbWVudCogYW5jaG9yTm9kZSk7CisgICAgU1ZHWm9vbUFuZFBhblR5cGUg
em9vbUFuZFBhbigpIGNvbnN0OworICAgIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9y
dCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNWR1NWR0VsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKKyAgICB2b2lkIHNjcm9sbFRvQW5jaG9yKGNv
bnN0IFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyLCBFbGVtZW50KiBhbmNob3IpOworCisgICAg
dXNpbmcgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZWY7CisgICAgdXNpbmcgU1ZHR3JhcGhpY3NFbGVt
ZW50OjpkZXJlZjsKKworICAgIFNNSUxUaW1lQ29udGFpbmVyJiB0aW1lQ29udGFpbmVyKCk7CisK
KyAgICB2b2lkIHNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOyAvLyBVc2Vk
IHRvIHBhbi4KKyAgICB2b2lkIHVwZGF0ZUN1cnJlbnRUcmFuc2xhdGUoKTsgLy8gVXNlZCBmcm9t
IERPTSBiaW5kaW5ncyB0byBjcmVhdGUgYW4gU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmIGZvciBj
dXJyZW50VHJhbnNsYXRlLgogCiAgICAgYm9vbCBoYXNJbnRyaW5zaWNXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgaGFzSW50cmluc2ljSGVpZ2h0KCkgY29uc3Q7CisgICAgTGVuZ3RoIGludHJpbnNp
Y1dpZHRoKCkgY29uc3Q7CisgICAgTGVuZ3RoIGludHJpbnNpY0hlaWdodCgpIGNvbnN0OwogCi0g
ICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTVkdab29t
QW5kUGFuVHlwZSB6b29tQW5kUGFuKCkgY29uc3QgeyByZXR1cm4gbV96b29tQW5kUGFuOyB9Ci0g
ICAgdm9pZCBzZXRab29tQW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pIHsgbV96b29t
QW5kUGFuID0gU1ZHWm9vbUFuZFBhbjo6cGFyc2VGcm9tTnVtYmVyKHpvb21BbmRQYW4pOyB9Cisg
ICAgRmxvYXRTaXplIGN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qg
Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc0VtcHR5Vmlld0JveCgp
IGNvbnN0IHsgcmV0dXJuIHZpZXdCb3hJc1ZhbGlkKCkgJiYgdmlld0JveCgpLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgaGFzRW1wdHlWaWV3Qm94KCkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdTVkdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgflNWR1NWR0VsZW1lbnQoKTsKIAorICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkgb3ZlcnJpZGU7Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwotCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlbmRlclB0
cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVmPFJlbmRlclN0eWxlPiYm
KSBvdmVycmlkZTsKLQogICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0KICAg
ICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBpbmhlcml0Vmlld0F0dHJpYnV0ZXMoU1ZHVmlld0VsZW1lbnQqKTsKLQotICAg
IGVudW0gQ29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlIHsKLSAgICAgICAgQ29sbGVjdElu
dGVyc2VjdGlvbkxpc3QsCi0gICAgICAgIENvbGxlY3RFbmNsb3N1cmVMaXN0Ci0gICAgfTsKLQot
ICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxp
c3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCosIENvbGxlY3RJbnRlcnNlY3Rpb25PckVu
Y2xvc3VyZSkgY29uc3Q7Ci0KLSAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMo
U1ZHU1ZHRWxlbWVudCkKLSAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKLSAg
ICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLSAgICAgICAgREVDTEFSRV9BTklN
QVRFRF9MRU5HVEgoV2lkdGgsIHdpZHRoKQotICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdU
SChIZWlnaHQsIGhlaWdodCkKLSAgICAgICAgREVDTEFSRV9BTklNQVRFRF9CT09MRUFOKEV4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCi0gICAgICAg
IERFQ0xBUkVfQU5JTUFURURfUkVDVChWaWV3Qm94LCB2aWV3Qm94KQotICAgICAgICBERUNMQVJF
X0FOSU1BVEVEX1BSRVNFUlZFQVNQRUNUUkFUSU8oUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2Vy
dmVBc3BlY3RSYXRpbykKLSAgICBFTkRfREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTCi0KICAg
ICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnRXaWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKSBvdmVy
cmlkZTsKLQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNl
VHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBtX3VzZUN1cnJlbnRWaWV3OwotICAgIFNWR1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBh
bjsKLSAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKLSAgICBT
VkdQb2ludCBtX3RyYW5zbGF0aW9uOworICAgIEZyYW1lKiBmcmFtZUZvckN1cnJlbnRTY2FsZSgp
IGNvbnN0OworICAgIHZvaWQgaW5oZXJpdFZpZXdBdHRyaWJ1dGVzKGNvbnN0IFNWR1ZpZXdFbGVt
ZW50Jik7CisgICAgUmVmPE5vZGVMaXN0PiBjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVM
aXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqLCBib29sICgqY2hlY2tGdW5jdGlvbiko
Y29uc3QgU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpKTsKKworICAgIGJvb2wgbV91c2VD
dXJyZW50VmlldyB7IGZhbHNlIH07CisgICAgU1ZHWm9vbUFuZFBhblR5cGUgbV96b29tQW5kUGFu
IHsgU1ZHWm9vbUFuZFBhbk1hZ25pZnkgfTsKKyAgICBSZWY8U01JTFRpbWVDb250YWluZXI+IG1f
dGltZUNvbnRhaW5lcjsKKyAgICBTVkdQb2ludCBtX2N1cnJlbnRUcmFuc2xhdGU7CiAgICAgUmVm
UHRyPFNWR1ZpZXdTcGVjPiBtX3ZpZXdTcGVjOwogfTsKIAoraW5saW5lIGJvb2wgU1ZHU1ZHRWxl
bWVudDo6dXNlQ3VycmVudFZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX3VzZUN1cnJlbnRW
aWV3OworfQorCitpbmxpbmUgU1ZHUG9pbnQmIFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xh
dGUoKQoreworICAgIHJldHVybiBtX2N1cnJlbnRUcmFuc2xhdGU7Cit9CisKK2lubGluZSBTVkda
b29tQW5kUGFuVHlwZSBTVkdTVkdFbGVtZW50Ojp6b29tQW5kUGFuKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV96b29tQW5kUGFuOworfQorCitpbmxpbmUgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRa
b29tQW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pCit7CisgICAgbV96b29tQW5kUGFu
ID0gcGFyc2VGcm9tTnVtYmVyKHpvb21BbmRQYW4pOworfQorCitpbmxpbmUgU01JTFRpbWVDb250
YWluZXImIFNWR1NWR0VsZW1lbnQ6OnRpbWVDb250YWluZXIoKQoreworICAgIHJldHVybiBtX3Rp
bWVDb250YWluZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIFNWR1NWR0VsZW1lbnQ6Omhhc0Vt
cHR5Vmlld0JveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZpZXdCb3hJc1ZhbGlkKCkgJiYgdmll
d0JveCgpLmlzRW1wdHkoKTsKK30KKworaW5saW5lIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0
ZVNWR051bWJlcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCmluZGV4IGY3NWI2N2Uy
ZWYwOTI1MDFjNmQyODc4Mzk2NDQ2NmYzZTllMTJiYjUuLmU4YTNmMTIzOWEyZjliODUwMTczNWIx
ZWI3ZjkxMThlNGNkOWFmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCkBAIC0y
NSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3RWxlbWVudC5jcHAKaW5kZXggZWJkNTUyNzM3YWM1MjQ2ZTYxYWIwZDRhNDFmMTU4Njk0
OTY0MmNhYy4uM2EyNWM5NGM0ZTBiOTFhNWNjZGQwY2U0NjcwNTUyMWEwOTEyYjM4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCkBAIC0yMSwxMiArMjEsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1ZpZXdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgotI2luY2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJTVkdab29tQW5k
UGFuLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTYsMzggKzUxLDE1IEBAIFJlZjxTVkdWaWV3RWxlbWVudD4gU1ZHVmlld0Vs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVuCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAotYm9vbCBTVkdWaWV3RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZT4+IHN1cHBvcnRlZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKHN1cHBvcnRl
ZEF0dHJpYnV0ZXMuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7
Ci0gICAgICAgIFNWR0ZpdFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0
ZWRBdHRyaWJ1dGVzKTsKLSAgICAgICAgU1ZHWm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmli
dXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsKLSAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5n
ZXQoKS5hZGQoU1ZHTmFtZXM6OnZpZXdUYXJnZXRBdHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuZ2V0KCkuY29udGFpbnM8U1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0
b3I+KGF0dHJOYW1lKTsKLX0KLQogdm9pZCBTVkdWaWV3RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBpZiAoIWlzU3VwcG9ydGVkQXR0cmlidXRlKG5hbWUpKSB7Ci0gICAgICAgIFNWR0VsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikgeworICAgIGlmIChu
YW1lID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikKICAgICAgICAgdmlld1RhcmdldCgpLnJl
c2V0KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZSh0aGlzLCBu
YW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFy
c2VBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
YXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisgICAgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0
dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAgU1ZHWm9vbUFuZFBhbjo6cGFyc2VBdHRy
aWJ1dGUoKnRoaXMsIG5hbWUsIHZhbHVlKTsKKyAgICBTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3U3BlYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCmluZGV4
IDNkOTJmYzdmNjhiYjAzNzJmMDNlNjFiZTI5NGRjZmE2NmRmYjU3NTYuLjUwOWQ5ODVhMmEzODgy
NWY3ZGE4NWY3ZDFiYTUzOThmMTExMDNkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNw
cApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjUyLDcgKzI1MSw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBh
cnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKICAgICAgICAgICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAg
aWYgKCFwYXJzZVpvb21BbmRQYW4oY3VyclZpZXdTcGVjLCBlbmQsIG1fem9vbUFuZFBhbikpCisg
ICAgICAgICAgICBpZiAoIXBhcnNlKGN1cnJWaWV3U3BlYywgZW5kLCBtX3pvb21BbmRQYW4pKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChjdXJyVmlld1Nw
ZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAppbmRleCBjODkzNzFhNGEz
MGVkNzk5YjEyMGY4NzAzZDg0Njk0OWZiN2RkYTU4Li5mMTVjODM3MGIwNmQ1YWZhY2FiMDliMmIy
ODgyOWU2MzMxNjg1ZWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCkBAIC0y
NSwyNSArMjUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQ
YW46OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0g
ICAgcmV0dXJuIGF0dHJOYW1lID09IFNWR05hbWVzOjp6b29tQW5kUGFuQXR0cjsKLX0KLQotdm9p
ZCBTVkdab29tQW5kUGFuOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCi17Ci0gICAgc3VwcG9ydGVkQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6Onpvb21BbmRQYW5BdHRyKTsKLX0KLQotc3RhdGljIGNvbnN0IFVDaGFyIGRp
c2FibGVbXSA9ICB7J2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnfTsKLXN0YXRpYyBj
b25zdCBVQ2hhciBtYWduaWZ5W10gPSAgeydtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5
J307Ci0KLWJvb2wgU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYg
c3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1pvb21BbmRQYW5UeXBlJiB6b29tQW5kUGFuKQor
Ym9vbCBTVkdab29tQW5kUGFuOjpwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hh
ciogZW5kLCBTVkdab29tQW5kUGFuVHlwZSYgem9vbUFuZFBhbikKIHsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScg
fTsKICAgICBpZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBkaXNhYmxlLCBXVEZfQVJSQVlfTEVO
R1RIKGRpc2FibGUpKSkgewogICAgICAgICB6b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2Fi
bGU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
bWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKICAgICBp
ZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25p
ZnkpKSkgewogICAgICAgICB6b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbk1hZ25pZnk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNTEsMTkgKzQwLDEzIEBAIGJvb2wgU1ZHWm9vbUFuZFBhbjo6
cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFNW
R1pvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lk
IFNWR1pvb21BbmRQYW46OnJlZigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LU5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgU1ZHWm9vbUFuZFBhbjo6ZGVyZWYoKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2
b2lkIFNWR1pvb21BbmRQYW46OnNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQpCitTVkdab29t
QW5kUGFuVHlwZSBTVkdab29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZVZhbHVlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKHZh
bHVlID09ICJkaXNhYmxlIikKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5EaXNhYmxlOwor
ICAgIGlmICh2YWx1ZSA9PSAibWFnbmlmeSIpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFu
TWFnbmlmeTsKKyAgICByZXR1cm4gU1ZHWm9vbUFuZFBhblVua25vd247CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCmluZGV4IDE2OTVhMjNhM2JlZjM2YWJjOWMwYzY0ZTIxMjI3
MzY2MmVjOTg0MjEuLmMwNWI3NjMyNjVkYWE2NGU4N2VkNGEwZTk3OWQ1OGNkN2FhYzY5ZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaApAQCAtMjMsMTYgKzIzLDEwIEBACiAKICNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1lbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsKLSAgICBTVkdab29tQW5k
UGFuVW5rbm93biA9IDAsCi0gICAgU1ZHWm9vbUFuZFBhbkRpc2FibGUsCi0gICAgU1ZHWm9vbUFu
ZFBhbk1hZ25pZnkKLX07CitlbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsgU1ZHWm9vbUFuZFBhblVu
a25vd24sIFNWR1pvb21BbmRQYW5EaXNhYmxlLCBTVkdab29tQW5kUGFuTWFnbmlmeSB9OwogCiBj
bGFzcyBTVkdab29tQW5kUGFuIHsKIHB1YmxpYzoKQEAgLTQ0LDQyICszOCwzMyBAQCBwdWJsaWM6
CiAgICAgfTsKIAogICAgIHN0YXRpYyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiYpOwogCi0gICAgc3RhdGljIFNWR1pvb21BbmRQYW5UeXBlIHBhcnNl
RnJvbU51bWJlcih1bnNpZ25lZCBzaG9ydCBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIW51
bWJlciB8fCBudW1iZXIgPiBTVkdab29tQW5kUGFuTWFnbmlmeSkKLSAgICAgICAgICAgIHJldHVy
biBTVkdab29tQW5kUGFuVW5rbm93bjsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1pv
b21BbmRQYW5UeXBlPihudW1iZXIpOwotICAgIH0KKyAgICBzdGF0aWMgU1ZHWm9vbUFuZFBhblR5
cGUgcGFyc2VGcm9tTnVtYmVyKHVuc2lnbmVkIHNob3J0KTsKIAotICAgIHN0YXRpYyBib29sIHBh
cnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTVkda
b29tQW5kUGFuVHlwZSYpOworICAgIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgc3Rh
cnQsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1pvb21BbmRQYW5UeXBlJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVyaXZlZENsYXNzPiBzdGF0aWMgdm9pZCBwYXJzZUF0dHJpYnV0ZShEZXJpdmVkQ2xh
c3MmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBTVkdFbGVtZW50VGFyZ2V0PgotICAgIHN0YXRpYyBib29sIHBh
cnNlQXR0cmlidXRlKFNWR0VsZW1lbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCh0YXJnZXQpOwotICAgICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIp
IHsKLSAgICAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2
YWx1ZS5zdHJpbmcoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25z
dCBVQ2hhciogc3RhcnQgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25z
dCBVQ2hhciogZW5kID0gc3RhcnQgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgICAgIFNWR1pv
b21BbmRQYW5UeXBlIHpvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuVW5rbm93bjsKLSAgICAgICAg
ICAgIHBhcnNlWm9vbUFuZFBhbihzdGFydCwgZW5kLCB6b29tQW5kUGFuKTsKLSAgICAgICAgICAg
IHRhcmdldC0+c2V0Wm9vbUFuZFBhbih6b29tQW5kUGFuKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyBTVkdab29tQW5kUGFuVHlwZSBw
YXJzZUF0dHJpYnV0ZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOworfTsKIAotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQoraW5saW5lIGJvb2wgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09
IFNWR05hbWVzOjp6b29tQW5kUGFuQXR0cjsKK30KIAotICAgIFNWR1pvb21BbmRQYW5UeXBlIHpv
b21BbmRQYW4oKSBjb25zdCB7IHJldHVybiBTVkdab29tQW5kUGFuVW5rbm93bjsgfQoraW5saW5l
IFNWR1pvb21BbmRQYW5UeXBlIFNWR1pvb21BbmRQYW46OnBhcnNlRnJvbU51bWJlcih1bnNpZ25l
ZCBzaG9ydCBudW1iZXIpCit7CisgICAgaWYgKG51bWJlciA+IFNWR1pvb21BbmRQYW5NYWduaWZ5
KQorICAgICAgICByZXR1cm4gU1ZHWm9vbUFuZFBhblVua25vd247CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNWR1pvb21BbmRQYW5UeXBlPihudW1iZXIpOworfQogCi0gICAgLy8gVGhlc2UgbWV0
aG9kcyBvbmx5IGV4aXN0IHRvIGFsbG93IHVzIHRvIGNvbXBpbGUgSlNTVkdab29tQW5kUGFuLiou
Ci0gICAgLy8gVGhlc2UgYXJlIG5ldmVyIGNhbGxlZCwgYW5kIHRodXMgQVNTRVJUX05PVF9SRUFD
SEVELgotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcmVmKCk7Ci0gICAgTk9fUkVU
VVJOX0RVRV9UT19BU1NFUlQgdm9pZCBkZXJlZigpOwotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNT
RVJUIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9ydCk7Ci19OwordGVtcGxhdGU8Y2xh
c3MgRGVyaXZlZENsYXNzPiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKERlcml2
ZWRDbGFzcyYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6em9vbUFuZFBhbkF0
dHIpCisgICAgICAgIGVsZW1lbnQuc2V0Wm9vbUFuZFBhbihwYXJzZUF0dHJpYnV0ZVZhbHVlKHZh
bHVlKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCBkNWEzODNjNmE5MDc0Mjg2
Yzk4NTBkNjI2Mzg5NDM3M2ZiNjczMWFjLi44NWUxNTBmNTVjMmNhN2E2ZGI3NTNjMTJjYWFkN2Zi
NTBiYWI3NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcApAQCAtMjQ4LDggKzI0OCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgU1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByCiAg
ICAgaWYgKCFvd25lcikKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAKLSAgICBtX3Rp
bWVDb250YWluZXIgPSBvd25lci0+dGltZUNvbnRhaW5lcigpOwotICAgIEFTU0VSVChtX3RpbWVD
b250YWluZXIpOworICAgIG1fdGltZUNvbnRhaW5lciA9ICZvd25lci0+dGltZUNvbnRhaW5lcigp
OwogICAgIG1fdGltZUNvbnRhaW5lci0+c2V0RG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSgpOwog
CiAgICAgLy8gIklmIG5vIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgZGVmYXVsdCBiZWdpbiB2
YWx1ZSAoYW4gb2Zmc2V0LXZhbHVlIG9mIDApIG11c3QgYmUgZXZhbHVhdGVkLiIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246392</attachid>
            <date>2015-02-11 08:19:32 -0800</date>
            <delta_ts>2015-02-11 10:01:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141463-20150211081934.patch</filename>
            <type>text/plain</type>
            <size>65697</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5OTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjhkYThlNjZmMTE3NTA3
NWFiYTQ4NmJmMDk1YTY4N2ZmMDU1ZWQ5Zi4uY2JhMGMxN2M3ODljODQxMjI2OGFhM2IxODgyMzVk
ZjE2ZDZjYWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxNS0wMi0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBhbmQgc2lt
cGxpZnkgU1ZHU1ZHRWxlbWVudCBhbmQgcmVsYXRlZCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IFJlbW92
ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBTVkdTVkdFbGVtZW50LmguCisgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHA6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcDogRGl0dG8uCisg
ICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybS5j
cHA6IERpdHRvLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcik6IFVwZGF0ZWQgdG8gY2FsbCB0aGUgU1ZH
U1ZHRWxlbWVudCBmdW5jdGlvbgorICAgICAgICBuYW1lZCBzY3JvbGxUb0FuY2hvciAod2FzIHNl
dHVwSW5pdGlhbFZpZXcpLiBBbHNvIHJlZmFjdG9yZWQgdG8gYXZvaWQgcmVwZWF0aW5nCisgICAg
ICAgIHRoZSBleHByZXNzaW9uIGZyYW1lKCkuZG9jdW1lbnQoKSBzbyBvZnRlbi4KKworICAgICAg
ICAqIHN2Zy9TVkdEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudDo6
cm9vdEVsZW1lbnQpOiBSZWFycmFuZ2VkIHRvIHVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdEb2N1bWVudDo6em9vbUFuZFBhbkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50OjpzdGFydFBhbik6IERpdHRvLiBBbHNvIHVzZWQgRmxvYXRQ
b2ludCBtYXRoIGluc3RlYWQKKyAgICAgICAgb2YgYnJlYWtpbmcgdGhpbmdzIGFwYXJ0IGludG8g
eCBhbmQgeS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50Ojp1cGRhdGVQYW4pOiBEaXR0
by4KKworICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudC5oOiBSZW1vdmVkIHNvbWUgdW5uZWVkZWQg
aW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNb3ZlZCBmdW5jdGlv
biBib2RpZXMgb3V0IG9mIHRoZSBjbGFzcyB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUuIFJlbmFt
ZWQKKyAgICAgICAgbV90cmFuc2xhdGUgdG8gbV9wYW5uaW5nT2Zmc2V0IGFuZCBtYWRlIGl0IGEg
RmxvYXRTaXplIGluc3RlYWQgb2YgRmxvYXRQb2ludC4KKworICAgICAgICAqIHN2Zy9TVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpzdGFydEFuaW1hdGlvbnMpOiBVc2UgYSBtb2Rlcm4gZm9yIGxvb3AKKyAgICAgICAgYW5k
IHVwZGF0ZSBzaW5jZSB0aW1lQ29udGFpbmVyKCkgbm93IHJldHVybnMgYSByZWZlcmVuY2UuCisK
KyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBp
bmNsdWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQp
OiBNb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBzY2FsYXJzIHRvCisgICAgICAgIHRoZSBjbGFzcyBk
ZWZpbml0aW9uLiBVcGRhdGVkIHNpbmNlIG1fdGltZXJDb250YWluZXIgaXMgYSBSZWYgKGxhdGVy
IHNob3VsZAorICAgICAgICBjaGFuZ2UgaXQgdG8gYmUgYSBzdGQ6OnVuaXF1ZV9wdHIgb3IganVz
dCBkaXJlY3RseSBjb250YWluZWQgaW4gU1ZHU1ZHRWxlbWVudCkuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCk6IFJlbW92ZWQgY29tbWVudCB0aGF0IGRv
ZXNuJ3Qgc2F5IG11Y2gsCisgICAgICAgIGJ1dCBpcyB3b3JkZWQgaW4gYSBjb25mdXNpbmcgd2F5
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUpOiBV
c2UgTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCBvZgorICAgICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpjb250ZW50U3R5
bGVUeXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp2aWV3cG9y
dCk6IFN0cmVhbWxpbmVkIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
cGl4ZWxVbml0VG9NaWxsaW1ldGVyWCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6cGl4ZWxVbml0VG9NaWxsaW1ldGVyWSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXcpOiBDaGFuZ2VkIHRvIHJldHVybiBhIHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmZyYW1lRm9yQ3VycmVudFNj
YWxlKTogQWRkZWQuIEhlbHBlciBmb3IgdGhlIHR3bworICAgICAgICBmdW5jdGlvbnMgYmVsb3cu
CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUpOiBVcGRhdGVk
IHRvIHVzZSBmcmFtZUZvckN1cnJlbnRTY2FsZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0Vs
ZW1lbnQ6OnNldEN1cnJlbnRTY2FsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZSk6IE9wdGltaXplZCB0aGUgY2FzZSB3aGVyZSB0
aGVyZQorICAgICAgICBpcyBubyBjaGFuZ2UgdG8gdGhlIHRyYW5zbGF0aW9uLiBBbHNvIGNoYW5n
ZWQgdGhlIGRhdGEgbWVtYmVyJ3MgbmFtZSB0bworICAgICAgICBtX2N1cnJlbnRUcmFuc2xhdGUg
dG8gbW9yZSBkaXJlY3RseSBtYXRjaCB0aGUgRE9NIEFQSSBuYW1pbmcuCisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFNpbXBsaWZpZWQgdGhlIHBhcnNp
bmcgYSBiaXQsIGFuZAorICAgICAgICBjaGFuZ2VkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gU1ZH
Wm9vbUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKTogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCByZW1vdmVk
CisgICAgICAgIGNvZGUgdGhhdCBjb252ZXJ0cyB0aGUgcmVuZGVyZXIgcG9pbnRlciB0byBhIFJl
bmRlck9iamVjdCogdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OnN1c3BlbmRSZWRyYXcpOiBSZW1vdmVkIEZJWE1FIGFib3V0IGltcGxlbWVudGluZyB0aGlz
LAorICAgICAgICBzaW5jZSB3ZSBkb24ndCByZWFsbHkgcGxhbiB0byBkbyB0aGF0LgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6dW5zdXNwZW5kUmVkcmF3KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXdBbGwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNs
b3N1cmVMaXN0KTogQ2hhbmdlZCByZXR1cm4KKyAgICAgICAgdHlwZSB0byBSZWYsIGFuZCBwYXNz
IGluIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnVtZXJhdGlvbiB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlvbkxpc3QpOiBVcGRhdGVkIGZv
ciBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldEVuY2xvc3VyZUxp
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJz
ZWN0aW9uKTogVXNlICYmIGluc3RlYWQgb2YgZWFybHkgcmV0dXJuCisgICAgICAgIGZvciB0aGUg
bnVsbCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9z
dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdM
ZW5ndGgpOiBVc2UgaW5pdGlhbGl6YXRpb24gbGlzdCBzeW50YXgKKyAgICAgICAgZm9yIGdyZWF0
ZXIgYnJldml0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0Fu
Z2xlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdQ
b2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
TWF0cml4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdUcmFuc2Zvcm0pOiBSZW1vdmVkIHVubmVlZGVkIGV4cGxpY2l0CisgICAgICAgIGNvbnN0cnVj
dG9yIGludm9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdUcmFuc2Zvcm1Gcm9tTWF0cml4KTogUmVtb3ZlZCB1bm5lZWRlZCBjYXN0LgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogVXBkYXRlZCBzaW5jZSB0aW1l
Q29udGFpbmVyKCkgbm93CisgICAgICAgIHJldHVybnMgYSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGltZSk6IFVzZSBpc2Zpbml0ZSBpbnN0
ZWFkIG9mIGlzbmFuLCBzbworICAgICAgICB3ZSB3b24ndCBzdG9yZSBpbmZpbml0eSBhcyB0aGUg
Y3VycmVudCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZp
ZXdCb3hSZWN0KTogUmVuYW1lZCBsb2NhbHMgYW5kIGNoYW5nZWQKKyAgICAgICAgdG8gdXNlIGlu
aXRpYWxpemVyIGxpc3RzIGZvciBicmV2aXR5LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Iv
KTogQWRkZWQgdGhpcyBvdmVybG9hZCB0byBkaXZpZGUgYSBMYXlvdXRTaXplIGJ5IGEgZmxvYXQu
CisgICAgICAgIFRoaXMgY291bGQgZ28gaW50byB0aGUgTGF5b3V0U2l6ZSBoZXJlLCBidXQgaGVy
ZSBpcyBPSyBmb3Igbm93LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3VycmVu
dFZpZXdwb3J0U2l6ZSk6IFN0cmVhbWxpbmVkIGNvZGUgYnkgdXNpbmcKKyAgICAgICAgaW5pdGlh
bGl6ZXIgbGlzdHMsIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyBvbmx5IGZvciB0aGluZ3MgdXNlZCBt
b3JlIHRoYW4gb25jZSwKKyAgICAgICAgYW5kIHVzaW5nIHRoZSAvIG9wZXJhdG9yIGRlZmluZWQg
YWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKTogVXNlIHRoZSBjb25jYXRlbmF0ZSBmdW5jdGlvbgorICAgICAgICBpbiBhIHdheSB0
aGF0IGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkLCByYXRoZXIgdGhhbiBkb2luZyBpdCB3aXRoIGEg
dGVtcG9yYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6c2Nyb2xsVG9BbmNo
b3IpOiBSZW5hbWVkIHRoaXMgZnJvbQorICAgICAgICBzZXR1cEluaXRpYWxWaWV3LgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6aW5oZXJpdFZpZXdBdHRyaWJ1dGVzKTogQ2hhbmdl
ZCB0aGlzIHRvIHdvcmsgd2l0aAorICAgICAgICByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50
ZXJzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0RWxlbWVudEJ5SWQpOiBV
c2UgZ2V0QWxsRWxlbWVudHNCeUlkIGFzIHRoZQorICAgICAgICBGSVhNRSBjb21tZW50IHN1Z2dl
c3RlZCBmb3IgYmV0dGVyIGVmZmljaWVuY3kgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgZGVzY2Vu
ZGFudHMKKyAgICAgICAgb2YgdGhlIDxzdmc+IGVsZW1lbnQgYXQgdGhlIGNvc3Qgb2YgbWFraW5n
IGl0IGxlc3MgZWZmaWNpZW50IGlmIHRoZXJlIGFyZQorICAgICAgICBhIGxvdCBvZiBlbGVtZW50
cyBhbGwgd2l0aCB0aGUgZGVzaXJlZCBJRCwgYnV0IG5vdCBpbnNpZGUgdGhlIDxzdmc+IGVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojppc1ZhbGlkKTogTW92ZWQgaGVy
ZSBmcm9tIHRoZSBoZWFkZXIuCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5oOiBSZW1v
dmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLiBNb3ZlZCB0aGUKKyAgICAgICAgYW5p
bWF0ZWQgcHJvcGVydGllcyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLCB0aGVuIG90aGVyIERPTSwg
dGhlIG90aGVyCisgICAgICAgIHB1YmxpYyBtZW1iZXJzLiBDaGFuZ2VkIHJldHVybiB0eXBlcyB0
byByZWZlcmVuY2VzIGFuZCBSZWYuIE1vdmVkCisgICAgICAgIGZ1bmN0aW9uIGJvZGllcyBvdXQg
b2YgdGhlIGNsYXNzIGRlZmluaXRpb24uIE1hZGUgY3JlYXRlU1ZHTnVtYmVyIGlubGluZS4KKwor
ICAgICAgICAqIHN2Zy9TVkdWaWV3RWxlbWVudC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVk
ZXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKTogQ2hhbmdlZCB0byBub3QgcmVseSBvbgorICAgICAgICBpc1N1cHBvcnRlZEF0dHJp
YnV0ZS4gRXZlbnR1YWxseSBJIHdpbGwgZG8gdGhpcyBpbiBhbGwgdGhlIFNWRyBjbGFzc2VzLgor
CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRl
IG9mIFNWR1NWR0VsZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwYXJz
ZVZpZXdTcGVjKTogVXBkYXRlZCBmb3IgY2hhbmdlIGluIHRoZSBuYW1lCisgICAgICAgIG9mIHRo
ZSBwYXJzZSBmdW5jdGlvbiBpbiB0aGUgU1ZHWm9vbUFuZFBhbiBjbGFzcy4KKworICAgICAgICAq
IHN2Zy9TVkdab29tQW5kUGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46
OmlzS25vd25BdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFu
ZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdab29tQW5kUGFuOjpwYXJzZSk6IFJlbmFtZWQgZnJvbSBwYXJzZVpvb21BbmRQYW4gc2lu
Y2UKKyAgICAgICAgdGhpcyBpcyBhIG1lbWJlciBvZiB0aGUgU1ZHWm9vbUFuZFBhbiBjbGFzcyBh
bmQgYWxzbyBoYXMgYW4gYXJndW1lbnQKKyAgICAgICAgb2YgU1ZHWm9vbUFuZFBhblR5cGUuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdab29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZVZhbHVlKTogQWRk
ZWQuIEhlbHBlciBzbyB0aGUKKyAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb24gaXMgbm90IHNvIGJp
Zy4gQWxzbyB3cml0ZSBpdCBpbiBhIHNpbXBsZXIgd2F5LgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUFuZFBhbjo6cmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQ
YW46OmRlcmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1pvb21BbmRQYW46OnNl
dFpvb21BbmRQYW4pOiBEZWxldGVkLgorCisgICAgICAgICogc3ZnL1NWR1pvb21BbmRQYW4uaDog
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gUmVmb3JtYXR0ZWQgdGhlIGVudW0uCisgICAgICAg
IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlIGNsYXNzIGRlZmluaXRpb24uIFJlbW92
ZWQgbWFueSB1bm5lZWRlZAorICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBzdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOiBVcGRhdGVkIHNpbmNlIHRpbWVDb250YWluZXIKKyAgICAgICAg
bm93IHJldHVybnMgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorCiAyMDE1LTAy
LTExICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTc5OTIxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggNWVlZmFjM2ZmMzdjZWM1MTYwZGZkODI0NjU3NDk5ODJjODdjMGZkYi4uMDc5YjE0MTIzMTE4
MTQ1YTVhNDRmOTliNWZkOWI1MjMwNWRlYWVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMjUsOSArMTI1LDkgQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lv
bnMuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEZhY3Rv
cnkuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUu
aCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAppbmRleCBkMDA1ZmQ1ODdiNGQ0OTc3YTU1ZDBkZDFlZDg1MjZlODA3YWQ0ZTc3
Li5kYTc2ZjYyOGE0YjQ3MTAxZmZhMDMxOTVjMDdhYzk5NjA3NTNkMDczIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTk5LDcgKzk5LDYgQEAKICNpbmNsdWRlICJTVkdM
b2NhdGFibGUuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
Vmlld0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdWaWV3U3BlYy5oIgogI2luY2x1ZGUgIlNjaGVt
ZVJlZ2lzdHJ5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNjlmZGE2YTk4ZTA0
NDhiMGIzYTJiMWE4ZTgwNzIwNGU3MTQ4ZWU5Zi4uN2JmZjE3NDY3Nzk1ZWEzMWVjM2RiODE1YTFl
NzgxNmJhOTRkZjBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTk4MSwyMiAr
MTk4MSwyMyBAQCBib29sIEZyYW1lVmlldzo6c2Nyb2xsVG9GcmFnbWVudChjb25zdCBVUkwmIHVy
bCkKIGJvb2wgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgQVNTRVJUKGZyYW1lKCkuZG9jdW1lbnQoKSk7CisgICAgYXV0byYgZG9jdW1lbnQgPSAq
ZnJhbWUoKS5kb2N1bWVudCgpOwogCi0gICAgaWYgKCFmcmFtZSgpLmRvY3VtZW50KCktPmhhdmVT
dHlsZXNoZWV0c0xvYWRlZCgpKSB7Ci0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+c2V0R290
b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVzaGVldHNMb2FkKHRydWUpOworICAgIGlmICghZG9jdW1l
bnQuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsKKyAgICAgICAgZG9jdW1lbnQuc2V0R290b0Fu
Y2hvck5lZWRlZEFmdGVyU3R5bGVzaGVldHNMb2FkKHRydWUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgZnJhbWUoKS5kb2N1bWVudCgpLT5zZXRHb3RvQW5jaG9yTmVlZGVk
QWZ0ZXJTdHlsZXNoZWV0c0xvYWQoZmFsc2UpOworICAgIGRvY3VtZW50LnNldEdvdG9BbmNob3JO
ZWVkZWRBZnRlclN0eWxlc2hlZXRzTG9hZChmYWxzZSk7CiAKLSAgICBFbGVtZW50KiBhbmNob3JF
bGVtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgpLT5maW5kQW5jaG9yKG5hbWUpOworICAgIEVsZW1l
bnQqIGFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5maW5kQW5jaG9yKG5hbWUpOwogCiAgICAgLy8g
U2V0dGluZyB0byBudWxsIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgdGFyZ2V0LgotICAgIGZyYW1l
KCkuZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KGFuY2hvckVsZW1lbnQpOworICAgIGRvY3VtZW50
LnNldENTU1RhcmdldChhbmNob3JFbGVtZW50KTsKIAotICAgIGlmIChpczxTVkdEb2N1bWVudD4o
KmZyYW1lKCkuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgaWYgKFNWR1NWR0VsZW1lbnQqIHN2ZyA9
IGRvd25jYXN0PFNWR0RvY3VtZW50PigqZnJhbWUoKS5kb2N1bWVudCgpKS5yb290RWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBzdmctPnNldHVwSW5pdGlhbFZpZXcobmFtZSwgYW5jaG9yRWxlbWVu
dCk7CisgICAgaWYgKGlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHJvb3RFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRG9jdW1lbnQ+KGRvY3VtZW50KS5yb290RWxl
bWVudCgpKSB7CisgICAgICAgICAgICByb290RWxlbWVudC0+c2Nyb2xsVG9BbmNob3IobmFtZSwg
YW5jaG9yRWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoIWFuY2hvckVsZW1lbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTIwMTMsNyArMjAxNCw3IEBAIGJv
b2wgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgCiAg
ICAgLy8gSWYgdGhlIGFuY2hvciBhY2NlcHRzIGtleWJvYXJkIGZvY3VzLCBtb3ZlIGZvY3VzIHRo
ZXJlIHRvIGFpZCB1c2VycyByZWx5aW5nIG9uIGtleWJvYXJkIG5hdmlnYXRpb24uCiAgICAgaWYg
KGFuY2hvckVsZW1lbnQgJiYgYW5jaG9yRWxlbWVudC0+aXNGb2N1c2FibGUoKSkKLSAgICAgICAg
ZnJhbWUoKS5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChhbmNob3JFbGVtZW50KTsKKyAg
ICAgICAgZG9jdW1lbnQuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yRWxlbWVudCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA1Mjc1YTI3MTE3MTBhODkzYTQxM2IwNzYxZDE1ODEz
N2ExNDA1ZGEwLi44ZWVmYzMyNDAwMDFkYjFmYzhkNzVjN2RmNDVlMzQyMjBmYzgxMjZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
QEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VGb3JDb250YWluZXIuaCIKLSNp
bmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVp
Z25PYmplY3QuY3BwCmluZGV4IDhlNzA4MTU3YTc3OGY1ZTEwYzUyNTI5NjA2OGVmNTk2YTc0NGVl
MTkuLjUwNTViMjU5MjFiYjkzYjk1ZGU3Njg5YjRjNThjOWZiODhkMjAyNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0
LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jlc291
cmNlc0NhY2hlLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudC5jcHAKaW5kZXggMzg3NzlhZTFlNjE2YzRmYTk1ZDI3NzI0MWZkNTc2NjczZmU5
NjZmZS4uY2M0MmNhYzgxNmQ4Zjk3ZWQzMDM1YjIxYzg1YTgwMmM0ZWE5YTQxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxNiArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVmll
d1NwZWMuaCIKLSNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCi0jaW5jbHVkZSAiU1ZHWm9vbUV2
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMzggKzM1LDMzIEBAIFNWR0Rv
Y3VtZW50OjpTVkdEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogU1ZHU1ZH
RWxlbWVudCogU1ZHRG9jdW1lbnQ6OnJvb3RFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKGlzPFNWR1NWR0VsZW1lbnQ+
KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4oZWxlbWVu
dCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzPFNWR1NWR0VsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
U1ZHRWxlbWVudD4oZWxlbWVudCk7CiB9CiAKIGJvb2wgU1ZHRG9jdW1lbnQ6Onpvb21BbmRQYW5F
bmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAocm9vdEVsZW1lbnQoKSkgewotICAgICAgICBpZiAo
cm9vdEVsZW1lbnQoKS0+dXNlQ3VycmVudFZpZXcoKSkgewotICAgICAgICAgICAgaWYgKHJvb3RF
bGVtZW50KCktPmN1cnJlbnRWaWV3KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RFbGVt
ZW50KCktPmN1cnJlbnRWaWV3KCktPnpvb21BbmRQYW4oKSA9PSBTVkdab29tQW5kUGFuTWFnbmlm
eTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQoKS0+em9v
bUFuZFBhbigpID09IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvKiBlbGVtZW50ID0gcm9vdEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKGVsZW1lbnQtPnVzZUN1cnJl
bnRWaWV3KCkgPyBlbGVtZW50LT5jdXJyZW50VmlldygpLnpvb21BbmRQYW4oKSA6IGVsZW1lbnQt
Pnpvb21BbmRQYW4oKSkgPT0gU1ZHWm9vbUFuZFBhbk1hZ25pZnk7CiB9CiAKIHZvaWQgU1ZHRG9j
dW1lbnQ6OnN0YXJ0UGFuKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0KQogewotICAgIGlmIChyb290
RWxlbWVudCgpKQotICAgICAgICBtX3RyYW5zbGF0ZSA9IEZsb2F0UG9pbnQoc3RhcnQueCgpIC0g
cm9vdEVsZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLngoKSwgc3RhcnQueSgpIC0gcm9vdEVs
ZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLnkoKSk7CisgICAgYXV0byogZWxlbWVudCA9IHJv
b3RFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9w
YW5uaW5nT2Zmc2V0ID0gc3RhcnQgLSBlbGVtZW50LT5jdXJyZW50VHJhbnNsYXRlKCk7CiB9CiAK
LXZvaWQgU1ZHRG9jdW1lbnQ6OnVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0
Cit2b2lkIFNWR0RvY3VtZW50Ojp1cGRhdGVQYW4oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24p
IGNvbnN0CiB7Ci0gICAgaWYgKHJvb3RFbGVtZW50KCkpIHsKLSAgICAgICAgcm9vdEVsZW1lbnQo
KS0+c2V0Q3VycmVudFRyYW5zbGF0ZShGbG9hdFBvaW50KHBvcy54KCkgLSBtX3RyYW5zbGF0ZS54
KCksIHBvcy55KCkgLSBtX3RyYW5zbGF0ZS55KCkpKTsKLSAgICAgICAgaWYgKHJlbmRlclZpZXco
KSkKLSAgICAgICAgICAgIHJlbmRlclZpZXcoKS0+cmVwYWludCgpOwotICAgIH0KKyAgICBhdXRv
KiBlbGVtZW50ID0gcm9vdEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJl
dHVybjsKKyAgICBlbGVtZW50LT5zZXRDdXJyZW50VHJhbnNsYXRlKHBvc2l0aW9uIC0gbV9wYW5u
aW5nT2Zmc2V0KTsKIH0KIAogUmVmPERvY3VtZW50PiBTVkdEb2N1bWVudDo6Y2xvbmVEb2N1bWVu
dFdpdGhvdXRDaGlsZHJlbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCmluZGV4IDJi
YWM5OTU1MjIzMzllYjRkYjQ5YjU2NzMxMDgzN2RlMjk2MjM1NzcuLmI0ZjFjMTVmYTM3YjlhYmZj
YzBiNDcwNmI0NDI4YTFkODdmNjgzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsMzYgKzIzLDM0IEBACiAjZGVmaW5lIFNWR0RvY3VtZW50X2gKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIERPTUltcGxlbWVudGF0aW9uOwotY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1NW
R0VsZW1lbnQ7CiAKIGNsYXNzIFNWR0RvY3VtZW50IGZpbmFsIDogcHVibGljIERvY3VtZW50IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0RvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNW
R0RvY3VtZW50KGZyYW1lLCB1cmwpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxTVkdEb2N1bWVu
dD4gY3JlYXRlKEZyYW1lKiwgY29uc3QgVVJMJik7CiAKICAgICBTVkdTVkdFbGVtZW50KiByb290
RWxlbWVudCgpIGNvbnN0OwogCiAgICAgYm9vbCB6b29tQW5kUGFuRW5hYmxlZCgpIGNvbnN0Owot
CiAgICAgdm9pZCBzdGFydFBhbihjb25zdCBGbG9hdFBvaW50JiBzdGFydCk7Ci0gICAgdm9pZCB1
cGRhdGVQYW4oY29uc3QgRmxvYXRQb2ludCYgcG9zKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVBh
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZH
RG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmKTsKIAogICAgIHZpcnR1YWwgUmVmPERvY3VtZW50
PiBjbG9uZURvY3VtZW50V2l0aG91dENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBG
bG9hdFBvaW50IG1fdHJhbnNsYXRlOworICAgIEZsb2F0U2l6ZSBtX3Bhbm5pbmdPZmZzZXQ7CiB9
OwogCitpbmxpbmUgUmVmPFNWR0RvY3VtZW50PiBTVkdEb2N1bWVudDo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRG9j
dW1lbnQoZnJhbWUsIHVybCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRG9jdW1lbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDM2ZGUzNzdiMjcwMzli
YTljMDFkYjlhNTI3YTllMjI5MGJhZTJkYzkuLjAzY2Q3YWQxZTY2OTUyNzJlODBmYzJhZGJjN2Ji
NWVkODdlMWE1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwCkBAIC05NSw5ICs5NSw4IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFy
dEFuaW1hdGlvbnMoKQogICAgIC8vIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIHJlZmFjdG9yIHRo
ZSB1c2UtZWxlbWVudCB0byBhdm9pZCB0aGlzLiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvNTM3
MDQKICAgICBWZWN0b3I8UmVmUHRyPFNWR1NWR0VsZW1lbnQ+PiB0aW1lQ29udGFpbmVyczsKICAg
ICB0aW1lQ29udGFpbmVycy5hcHBlbmRSYW5nZShtX3RpbWVDb250YWluZXJzLmJlZ2luKCksIG1f
dGltZUNvbnRhaW5lcnMuZW5kKCkpOwotICAgIGF1dG8gZW5kID0gdGltZUNvbnRhaW5lcnMuZW5k
KCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+dGltZUNvbnRhaW5lcigpLT5iZWdpbigpOworICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHRpbWVDb250YWluZXJzKQorICAgICAgICBlbGVtZW50LT50aW1l
Q29udGFpbmVyKCkuYmVnaW4oKTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnBh
dXNlQW5pbWF0aW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCmluZGV4
IDFjYTViMGVhMjVmMGUzMDNkYmY3ZjFjYWYyOWNlYmM4MTZkZmRiYzguLjgxZTVhNTAzNmU5Mjdh
MjhlZjgxZDI1MDhiODM2Y2M5NTZmMDY3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVs
ZW1lbnQuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0j
aW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVs
ZW1lbnQuY3BwCmluZGV4IDQyYzkyMGVlNjFkN2I3Y2RlMWNkMTgzZTI5MWU3ODBjNDI3Y2JjMmMu
LjdlZmJkZWNhOGZhYWExNTVkMjA5MzVlNTg2NWIwZGRjNTQxNjNiYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCAzNTM0OTBmM2U3Zjk5ZWRlNjY1OTQxODEy
OWQ2Y2NjMmFkZTE0ZGI3Li4xODUyN2JlNTgwNTQ2YWQ4YTRlNzViMGQwMWJlZDFjMzU5ZTAxMzU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTQ5LDcgKzQ5LDYgQEAK
ICNpbmNsdWRlICJTVkdQYXRoU2VnTW92ZXRvQWJzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ01v
dmV0b1JlbC5oIgogI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCmluZGV4
IDFjMmNjMjFjNGU3NTgwNTk2Y2NiNTViYjliMGNmY2JmMDYyYzlmNGUuLmM2YjE2NzZhN2IzYzA1
MWQwMGZjZWUwZGRhNjc1ZDA2ODU3OWM3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdHRl
cm5FbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9y
dC5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGM4ZDM4ZDllYjhh
ZWFlMWIwZTc2ODdjZTFlNGQ4YzNiZjRkOGJiMTEuLmU2N2IzZTNiNmU3NDI1YzlkYzg1MTRiZWVj
MGJhMWJiZDRhYzNjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTEs
NyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMywzOSArMjMsMTggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJDU1NIZWxwZXIu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiUmVuZGVy
V2lkZ2V0LmgiCiAjaW5jbHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdB
bmdsZS5oIgotI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgotI2luY2x1ZGUgIlNWR05hbWVz
LmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybS5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdW
aWV3RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1ZpZXdTcGVjLmgiCi0jaW5jbHVkZSAiU1ZHWm9v
bUV2ZW50LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODUsOSArNjQsNyBAQCBp
bmxpbmUgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYgZG9jdQogICAgICwgbV95KExlbmd0aE1vZGVIZWlnaHQpCiAgICAg
LCBtX3dpZHRoKExlbmd0aE1vZGVXaWR0aCwgQVNDSUlMaXRlcmFsKCIxMDAlIikpCiAgICAgLCBt
X2hlaWdodChMZW5ndGhNb2RlSGVpZ2h0LCBBU0NJSUxpdGVyYWwoIjEwMCUiKSkKLSAgICAsIG1f
dXNlQ3VycmVudFZpZXcoZmFsc2UpCi0gICAgLCBtX3pvb21BbmRQYW4oU1ZHWm9vbUFuZFBhbk1h
Z25pZnkpCi0gICAgLCBtX3RpbWVDb250YWluZXIoU01JTFRpbWVDb250YWluZXI6OmNyZWF0ZSh0
aGlzKSkKKyAgICAsIG1fdGltZUNvbnRhaW5lcihSZWZQdHI8U01JTFRpbWVDb250YWluZXI+KFNN
SUxUaW1lQ29udGFpbmVyOjpjcmVhdGUodGhpcykpLnJlbGVhc2VOb25OdWxsKCkpCiB7CiAgICAg
QVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpOwogICAgIHJlZ2lzdGVyQW5pbWF0
ZWRQcm9wZXJ0aWVzRm9yU1ZHU1ZHRWxlbWVudCgpOwpAQCAtMTA0LDggKzgxLDYgQEAgU1ZHU1ZH
RWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogICAgIGlmIChtX3ZpZXdTcGVjKQogICAgICAgICBt
X3ZpZXdTcGVjLT5yZXNldENvbnRleHRFbGVtZW50KCk7CiAgICAgZG9jdW1lbnQoKS51bnJlZ2lz
dGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAvLyBUaGVyZSBh
cmUgY2FzZXMgd2hlcmUgcmVtb3ZlZEZyb21Eb2N1bWVudCgpIGlzIG5vdCBjYWxsZWQuCi0gICAg
Ly8gc2VlIENvbnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuLCBjYWxsZWQgYnkgaXRzIGRl
c3RydWN0b3IuCiAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGlt
ZUNvbnRhaW5lcih0aGlzKTsKIH0KIApAQCAtMTE5LDkgKzk0LDkgQEAgdm9pZCBTVkdTVkdFbGVt
ZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUoKSBjb25zdAog
ewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGRlZmF1bHRWYWx1ZSwgKCJ0ZXh0L2VjbWFzY3JpcHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuID0gZmFzdEdldEF0dHJp
YnV0ZShTVkdOYW1lczo6Y29udGVudFNjcmlwdFR5cGVBdHRyKTsKLSAgICByZXR1cm4gbi5pc051
bGwoKSA/IGRlZmF1bHRWYWx1ZSA6IG47CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZGVmYXVsdFNjcmlwdFR5cGUoInRleHQvZWNtYXNjcmlwdCIpOworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNvbnRlbnRT
Y3JpcHRUeXBlQXR0cik7CisgICAgcmV0dXJuIHR5cGUuaXNOdWxsKCkgPyBkZWZhdWx0U2NyaXB0
VHlwZS5nZXQoKSA6IHR5cGU7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFNj
cmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAtMTMxLDkgKzEwNiw5IEBAIHZv
aWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFNjcmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNWR1NWR0VsZW1lbnQ6OmNvbnRlbnRTdHls
ZVR5cGUoKSBjb25zdAogewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGRlZmF1bHRWYWx1ZSwgKCJ0ZXh0L2NzcyIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBmYXN0
R2V0QXR0cmlidXRlKFNWR05hbWVzOjpjb250ZW50U3R5bGVUeXBlQXR0cik7Ci0gICAgcmV0dXJu
IG4uaXNOdWxsKCkgPyBkZWZhdWx0VmFsdWUgOiBuOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGRlZmF1bHRTdHlsZVR5cGUoInRleHQvY3NzIik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6Y29udGVudFN0
eWxlVHlwZUF0dHIpOworICAgIHJldHVybiB0eXBlLmlzTnVsbCgpID8gZGVmYXVsdFN0eWxlVHlw
ZS5nZXQoKSA6IHR5cGU7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFN0eWxl
VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCkBAIC0xNDMsMjEgKzExOCwyMCBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OnNldENvbnRlbnRTdHlsZVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlKQogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBkb2Vzbid0IGZvbGxvdyB0aGUgc3BlYyBhbmQgaXMgYmFz
aWNhbGx5IHVudGVzdGVkLiBQYXJlbnQgZG9jdW1lbnRzIGFyZSBub3QgY29uc2lkZXJlZCBoZXJl
LgotICAgIC8vIEFzIHdlIGhhdmUgbm8gdGVzdCBjb3ZlcmFnZSBmb3IgdGhpcywgd2UncmUgZ29p
bmcgdG8gZGlzYWJsZSBpdCBjb21wbGV0bHkgZm9yIG5vdy4KLSAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4geyB9OwogfQog
CiBmbG9hdCBTVkdTVkdFbGVtZW50OjpwaXhlbFVuaXRUb01pbGxpbWV0ZXJYKCkgY29uc3QKIHsK
LSAgICAvLyAyLjU0IC8gY3NzUGl4ZWxzUGVySW5jaCBnaXZlcyBDTS4KLSAgICByZXR1cm4gKDIu
NTRmIC8gY3NzUGl4ZWxzUGVySW5jaCkgKiAxMC4wZjsKKyAgICAvLyBUaGVyZSBhcmUgMjUuNCBt
aWxsaW1ldGVycyBpbiBhbiBpbmNoLgorICAgIHJldHVybiAyNS40ZiAvIGNzc1BpeGVsc1Blcklu
Y2g7CiB9CiAKIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OnBpeGVsVW5pdFRvTWlsbGltZXRlclkoKSBj
b25zdAogewotICAgIC8vIDIuNTQgLyBjc3NQaXhlbHNQZXJJbmNoIGdpdmVzIENNLgotICAgIHJl
dHVybiAoMi41NGYgLyBjc3NQaXhlbHNQZXJJbmNoKSAqIDEwLjBmOworICAgIC8vIFRoZXJlIGFy
ZSAyNS40IG1pbGxpbWV0ZXJzIGluIGFuIGluY2guCisgICAgcmV0dXJuIDI1LjRmIC8gY3NzUGl4
ZWxzUGVySW5jaDsKIH0KIAogZmxvYXQgU1ZHU1ZHRWxlbWVudDo6c2NyZWVuUGl4ZWxUb01pbGxp
bWV0ZXJYKCkgY29uc3QKQEAgLTE3MCw0OSArMTQ0LDQyIEBAIGZsb2F0IFNWR1NWR0VsZW1lbnQ6
OnNjcmVlblBpeGVsVG9NaWxsaW1ldGVyWSgpIGNvbnN0CiAgICAgcmV0dXJuIHBpeGVsVW5pdFRv
TWlsbGltZXRlclkoKTsKIH0KIAotU1ZHVmlld1NwZWMqIFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRW
aWV3KCkKK1NWR1ZpZXdTcGVjJiBTVkdTVkdFbGVtZW50OjpjdXJyZW50VmlldygpCiB7CiAgICAg
aWYgKCFtX3ZpZXdTcGVjKQogICAgICAgICBtX3ZpZXdTcGVjID0gU1ZHVmlld1NwZWM6OmNyZWF0
ZSh0aGlzKTsKLSAgICByZXR1cm4gbV92aWV3U3BlYy5nZXQoKTsKKyAgICByZXR1cm4gKm1fdmll
d1NwZWM7CiB9CiAKLWZsb2F0IFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRTY2FsZSgpIGNvbnN0CitG
cmFtZSogU1ZHU1ZHRWxlbWVudDo6ZnJhbWVGb3JDdXJyZW50U2NhbGUoKSBjb25zdAogeworICAg
IC8vIFRoZSBiZWhhdmlvciBvZiBjdXJyZW50U2NhbGUoKSBpcyB1bmRlZmluZWQgd2hlbiB3ZSdy
ZSBkZWFsaW5nIHdpdGggbm9uLXN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KKyAgICAvLyBJZiB0
aGUgZG9jdW1lbnQgaXMgZW1iZWRkZWQsIHRoZSBzY2FsaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGhv
c3QgcmVuZGVyZXIuCiAgICAgaWYgKCFpbkRvY3VtZW50KCkgfHwgIWlzT3V0ZXJtb3N0U1ZHU1ZH
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMTsKLQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5pc01haW5GcmFt
ZSgpID8gZnJhbWUgOiBudWxscHRyOworfQogCi0gICAgLy8gVGhlIGJlaGF2aW91ciBvZiBjdXJy
ZW50U2NhbGUoKSBpcyB1bmRlZmluZWQsIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIG5vbi1zdGFu
ZGFsb25lIFNWRyBkb2N1bWVudHMuCi0gICAgLy8gSWYgdGhlIHN2ZyBpcyBlbWJlZGRlZCwgdGhl
IHNjYWxpbmcgaXMgaGFuZGxlZCBieSB0aGUgaG9zdCByZW5kZXJlciwgc28gd2hlbiBhc2tpbmcg
ZnJvbSBpbnNpZGUKLSAgICAvLyB0aGUgU1ZHIGRvY3VtZW50LCBhIHNjYWxlIHZhbHVlIG9mIDEg
c2VlbXMgcmVhc29uYWJsZSwgYXMgaXQgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBw
YXJlbnQgc2NhbGUuCi0gICAgcmV0dXJuIGZyYW1lLT50cmVlKCkucGFyZW50KCkgPyAxIDogZnJh
bWUtPnBhZ2Vab29tRmFjdG9yKCk7CitmbG9hdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50U2NhbGUo
KSBjb25zdAoreworICAgIC8vIFdoZW4gYXNraW5nIGZyb20gaW5zaWRlIGFuIGVtYmVkZGVkIFNW
RyBkb2N1bWVudCwgYSBzY2FsZSB2YWx1ZSBvZiAxIHNlZW1zIHJlYXNvbmFibGUsIGFzIGl0IGRv
ZXNuJ3QKKyAgICAvLyBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBwYXJlbnQgc2NhbGUuCisgICAg
RnJhbWUqIGZyYW1lID0gZnJhbWVGb3JDdXJyZW50U2NhbGUoKTsKKyAgICByZXR1cm4gZnJhbWUg
PyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDE7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6
c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmICghaW5Eb2N1bWVudCgpIHx8
ICFpc091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoZSBiZWhhdmlvdXIgb2Ygc2V0Q3VycmVudFNjYWxlKCkgaXMg
dW5kZWZpbmVkLCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBub24tc3RhbmRhbG9uZSBTVkcgZG9j
dW1lbnRzLgotICAgIC8vIFdlIGNob29zZSB0aGUgaWdub3JlIHRoaXMgY2FsbCwgaXQncyBwcmV0
dHkgdXNlbGVzcyB0byBzdXBwb3J0IGNhbGxpbmcgc2V0Q3VycmVudFNjYWxlKCkgZnJvbSB3aXRo
aW4KLSAgICAvLyBhbiBlbWJlZGRlZCBTVkcgZG9jdW1lbnQsIGZvciB0aGUgc2FtZSByZWFzb25z
IGFzIGluIGN1cnJlbnRTY2FsZSgpIC0gbmVlZHMgcmVzb2x1dGlvbiBieSBTVkcgV0cuCi0gICAg
aWYgKGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1l
LT5zZXRQYWdlWm9vbUZhY3RvcihzY2FsZSk7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGZyYW1l
Rm9yQ3VycmVudFNjYWxlKCkpCisgICAgICAgIGZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihzY2Fs
ZSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBG
bG9hdFBvaW50JiB0cmFuc2xhdGlvbikKIHsKLSAgICBtX3RyYW5zbGF0aW9uID0gdHJhbnNsYXRp
b247CisgICAgaWYgKG1fY3VycmVudFRyYW5zbGF0ZSA9PSB0cmFuc2xhdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY3VycmVudFRyYW5zbGF0ZSA9IHRyYW5zbGF0aW9uOwogICAgIHVwZGF0
ZUN1cnJlbnRUcmFuc2xhdGUoKTsKIH0KIApAQCAtMjIwLDM0ICsxODcsMzcgQEAgdm9pZCBTVkdT
VkdFbGVtZW50Ojp1cGRhdGVDdXJyZW50VHJhbnNsYXRlKCkKIHsKICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0
KCk7Ci0KICAgICBpZiAocGFyZW50Tm9kZSgpID09ICZkb2N1bWVudCgpICYmIGRvY3VtZW50KCku
cmVuZGVyVmlldygpKQogICAgICAgICBkb2N1bWVudCgpLnJlbmRlclZpZXcoKS0+cmVwYWludCgp
OwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgU1ZHUGFyc2lu
Z0Vycm9yIHBhcnNlRXJyb3IgPSBOb0Vycm9yOwotCiAgICAgaWYgKCFuZWFyZXN0Vmlld3BvcnRF
bGVtZW50KCkpIHsKLSAgICAgICAgYm9vbCBzZXRMaXN0ZW5lciA9IHRydWU7Ci0KLSAgICAgICAg
Ly8gT25seSBoYW5kbGUgZXZlbnRzIGlmIHdlJ3JlIHRoZSBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVu
dAotICAgICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om9udW5sb2FkQXR0cikKKyAgICAgICAg
Ly8gU2luY2Ugd2Ugb25seSBoYW5kbGUgZXZlbnRzIGlmIHdlJ3JlIHRoZSBvdXRlcm1vc3QgPHN2
Zz4gZWxlbWVudCwgc2V0IGxpc3RlbmVycyBvbmx5CisgICAgICAgIC8vIGlmIHdlIGFyZS4gU2V0
IHRoZSBsaXN0ZW5lcnMgZGlyZWN0bHkgb24gdGhlIHdpbmRvdyBhdHRyaWJ1dGUuCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHdyb25nLiBJdCB3b24ndCB3b3JrIGlmIHdlIGFu
IGV4aXN0aW5nIDxzdmc+IGVsZW1lbnQgYmVjb21lcworICAgICAgICAvLyB0aGUgb3V0ZXJtb3N0
IG9yIGlmIGFuIGV4aXN0aW5nIDxzdmc+IGVsZW1lbnQgbGF0ZXIgYmVjb21lcyBubyBsb25nZXIg
b3V0bW9zdC4KKyAgICAgICAgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpvbnVubG9hZEF0dHIpIHsK
ICAgICAgICAgICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIG5hbWUsIHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSBIVE1MTmFtZXM6Om9ucmVzaXplQXR0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om9ucmVzaXplQXR0cikgewog
ICAgICAgICAgICAgZG9jdW1lbnQoKS5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgbmFtZSwgdmFsdWUpOwotICAgICAgICBlbHNlIGlmIChu
YW1lID09IEhUTUxOYW1lczo6b25zY3JvbGxBdHRyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChuYW1lID09IEhUTUxOYW1lczo6b25zY3JvbGxBdHRyKSB7CiAg
ICAgICAgICAgICBkb2N1bWVudCgpLnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnNjcm9sbEV2ZW50LCBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6Om9uem9vbUF0dHIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Om9uem9vbUF0dHIpIHsKICAgICAgICAg
ICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuem9vbUV2ZW50LCBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNl
dExpc3RlbmVyID0gZmFsc2U7Ci0gCi0gICAgICAgIGlmIChzZXRMaXN0ZW5lcikKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAorICAgIFNWR1BhcnNpbmdFcnJvciBwYXJz
ZUVycm9yID0gTm9FcnJvcjsKKwogICAgIGlmIChuYW1lID09IEhUTUxOYW1lczo6b25hYm9ydEF0
dHIpCiAgICAgICAgIGRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuYWJvcnRFdmVudCwgbmFtZSwgdmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUg
PT0gSFRNTE5hbWVzOjpvbmVycm9yQXR0cikKQEAgLTI3MiwzMSArMjQyLDI5IEBAIHZvaWQgU1ZH
U1ZHRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nCiAgICAgICAgICAgICBsZW5ndGggPSBTVkdMZW5ndGgoTGVuZ3RoTW9k
ZUhlaWdodCwgQVNDSUlMaXRlcmFsKCIxMDAlIikpOwogICAgICAgICB9CiAgICAgICAgIHNldEhl
aWdodEJhc2VWYWx1ZShsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJz
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkKLSAgICAgICAgICAgICAgIHx8IFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKQotICAgICAgICAgICAg
ICAgfHwgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSkK
LSAgICAgICAgICAgICAgIHx8IFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKHRoaXMsIG5h
bWUsIHZhbHVlKSkgewotICAgIH0gZWxzZQotICAgICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKKyAgICB9CiAKICAgICByZXBvcnRBdHRyaWJ1dGVQ
YXJzaW5nRXJyb3IocGFyc2VFcnJvciwgbmFtZSwgdmFsdWUpOworCisgICAgU1ZHTGFuZ1NwYWNl
OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOworICAgIFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpOworICAgIFNWR1pvb21BbmRQYW46
OnBhcnNlQXR0cmlidXRlKCp0aGlzLCBuYW1lLCB2YWx1ZSk7CisgICAgU1ZHR3JhcGhpY3NFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
ICAgICBib29sIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc09yVmlld0JveCA9IGZhbHNlOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09
IFNWR05hbWVzOjpoZWlnaHRBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp4
QXR0cgotICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpIHsKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aGVpZ2h0QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnlBdHRyKSB7CiAgICAgICAgIGludmFsaWRhdGVTVkdQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpOwogICAgICAgICB1cGRhdGVSZWxhdGl2ZUxlbmd0aHNPclZpZXdCb3ggPSB0
cnVlOwogICAgIH0KIAogICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OmlzS25vd25BdHRyaWJ1dGUo
YXR0ck5hbWUpKSB7CiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc09yVmlld0JveCA9IHRy
dWU7IAotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlcigpKQotICAg
ICAgICAgICAgb2JqZWN0LT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpOworICAgICAgICBpZiAo
YXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXIt
PnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAgICAgfQogCiAgICAgSW5zdGFuY2VJbnZhbGlk
YXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CkBAIC0zMTMsNjYgKzI4MSw1MSBAQCB2b2lkIFNWR1NW
R0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotdW5zaWduZWQgU1ZHU1ZHRWxlbWVudDo6c3VzcGVuZFJlZHJhdyh1bnNpZ25lZCAv
KiBtYXhXYWl0TWlsbGlzZWNvbmRzICovKQordW5zaWduZWQgU1ZHU1ZHRWxlbWVudDo6c3VzcGVu
ZFJlZHJhdyh1bnNpZ25lZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVn
IDExMjc1KQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVu
ZFJlZHJhdyh1bnNpZ25lZCAvKiBzdXNwZW5kSGFuZGxlSWQgKi8pCit2b2lkIFNWR1NWR0VsZW1l
bnQ6OnVuc3VzcGVuZFJlZHJhdyh1bnNpZ25lZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IG1lIChzZWUgYnVnIDExMjc1KQogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVuZFJl
ZHJhd0FsbCgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkK
IH0KIAogdm9pZCBTVkdTVkdFbGVtZW50Ojpmb3JjZVJlZHJhdygpCiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotUGFzc1JlZlB0cjxOb2RlTGlzdD4g
U1ZHU1ZHRWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQsIENvbGxlY3RJbnRl
cnNlY3Rpb25PckVuY2xvc3VyZSBjb2xsZWN0KSBjb25zdAorUmVmPE5vZGVMaXN0PiBTVkdTVkdF
bGVtZW50Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCwgYm9vbCAoKmNoZWNrRnVuY3Rp
b24pKGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKSkKIHsKICAgICBWZWN0b3I8
UmVmPEVsZW1lbnQ+PiBlbGVtZW50czsKLQotICAgIGZvciAoYXV0byYgc3ZnRWxlbWVudCA6IGRl
c2NlbmRhbnRzT2ZUeXBlPFNWR0VsZW1lbnQ+KCoocmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5j
ZUVsZW1lbnQgOiB0aGlzKSkpIHsKLSAgICAgICAgaWYgKGNvbGxlY3QgPT0gQ29sbGVjdEludGVy
c2VjdGlvbkxpc3QpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hl
Y2tJbnRlcnNlY3Rpb24oc3ZnRWxlbWVudC5yZW5kZXJlcigpLCByZWN0KSkKLSAgICAgICAgICAg
ICAgICBlbGVtZW50cy5hcHBlbmQoY29uc3RfY2FzdDxTVkdFbGVtZW50Jj4oc3ZnRWxlbWVudCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlbmRlclNWR01vZGVsT2JqZWN0
OjpjaGVja0VuY2xvc3VyZShzdmdFbGVtZW50LnJlbmRlcmVyKCksIHJlY3QpKQotICAgICAgICAg
ICAgICAgIGVsZW1lbnRzLmFwcGVuZChjb25zdF9jYXN0PFNWR0VsZW1lbnQmPihzdmdFbGVtZW50
KSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlw
ZTxTVkdFbGVtZW50PihyZWZlcmVuY2VFbGVtZW50ID8gKnJlZmVyZW5jZUVsZW1lbnQgOiAqdGhp
cykpIHsKKyAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb24oJmVsZW1lbnQsIHJlY3QpKQorICAgICAg
ICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwogICAgIH0KLQotICAgIHJldHVybiBTdGF0
aWNFbGVtZW50TGlzdDo6YWRvcHQoZWxlbWVudHMpOworICAgIHJldHVybiBSZWZQdHI8Tm9kZUxp
c3Q+KFN0YXRpY0VsZW1lbnRMaXN0OjphZG9wdChlbGVtZW50cykpLnJlbGVhc2VOb25OdWxsKCk7
CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlv
bkxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KiByZWZlcmVuY2VFbGVtZW50
KSBjb25zdAorUmVmPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50OjpnZXRJbnRlcnNlY3Rpb25MaXN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCkKIHsK
LSAgICByZXR1cm4gY29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdChyZWN0LCByZWZl
cmVuY2VFbGVtZW50LCBDb2xsZWN0SW50ZXJzZWN0aW9uTGlzdCk7CisgICAgcmV0dXJuIGNvbGxl
Y3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QocmVjdCwgcmVmZXJlbmNlRWxlbWVudCwgY2hl
Y2tJbnRlcnNlY3Rpb24pOwogfQogCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50
OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCogcmVm
ZXJlbmNlRWxlbWVudCkgY29uc3QKK1JlZjxOb2RlTGlzdD4gU1ZHU1ZHRWxlbWVudDo6Z2V0RW5j
bG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVs
ZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3Qo
cmVjdCwgcmVmZXJlbmNlRWxlbWVudCwgQ29sbGVjdEVuY2xvc3VyZUxpc3QpOworICAgIHJldHVy
biBjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KHJlY3QsIHJlZmVyZW5jZUVsZW1l
bnQsIGNoZWNrRW5jbG9zdXJlKTsKIH0KIAotYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0ludGVy
c2VjdGlvbihjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
IGNvbnN0Citib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJzZWN0aW9uKGNvbnN0IFNWR0Vs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIWVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmNoZWNrSW50ZXJzZWN0aW9uKGVsZW1lbnQtPnJlbmRlcmVyKCksIHJlY3QpOworICAgIHJl
dHVybiBlbGVtZW50ICYmIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbihl
bGVtZW50LT5yZW5kZXJlcigpLCByZWN0KTsKIH0KIAotYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVj
a0VuY2xvc3VyZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0Citib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9zdXJlKGNvbnN0IFNWR0Vs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIWVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmNoZWNrRW5jbG9zdXJlKGVsZW1lbnQtPnJlbmRlcmVyKCksIHJlY3QpOworICAgIHJldHVy
biBlbGVtZW50ICYmIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0VuY2xvc3VyZShlbGVtZW50
LT5yZW5kZXJlcigpLCByZWN0KTsKIH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjpkZXNlbGVjdEFs
bCgpCkBAIC0zODEsNDQgKzMzNCwzOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRlc2VsZWN0QWxs
KCkKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKLWZsb2F0IFNWR1NW
R0VsZW1lbnQ6OmNyZWF0ZVNWR051bWJlcigpCi17Ci0gICAgcmV0dXJuIDAuMGY7Ci19Ci0KIFNW
R0xlbmd0aCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdMZW5ndGgoKQogewotICAgIHJldHVybiBT
VkdMZW5ndGgoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBTVkdBbmdsZSBTVkdTVkdFbGVtZW50
OjpjcmVhdGVTVkdBbmdsZSgpCiB7Ci0gICAgcmV0dXJuIFNWR0FuZ2xlKCk7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogU1ZHUG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUG9pbnQoKQogewot
ICAgIHJldHVybiBTVkdQb2ludCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIFNWR01hdHJpeCBT
VkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQogewotICAgIHJldHVybiBTVkdNYXRyaXgo
KTsKKyAgICByZXR1cm4geyB9OwogfQogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
U1ZHUmVjdCgpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIFNWR1RyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQogewot
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJ
WCk7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiB9CiAK
IFNWR1RyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4
KGNvbnN0IFNWR01hdHJpeCYgbWF0cml4KQogewotICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oc3Rh
dGljX2Nhc3Q8Y29uc3QgQWZmaW5lVHJhbnNmb3JtJj4obWF0cml4KSk7CisgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybSB7IG1hdHJpeCB9OwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVu
dDo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBt
b2RlKSBjb25zdApAQCAtNDM0LDcgKzM4Miw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjCiAg
ICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCh0aGlzKTsKICAgICAgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSh4KCkudmFsdWUobGVuZ3RoQ29udGV4dCksIHkoKS52YWx1ZShsZW5n
dGhDb250ZXh0KSk7CiAgICAgfSBlbHNlIGlmIChtb2RlID09IFNWR0xvY2F0YWJsZTo6U2NyZWVu
U2NvcGUpIHsKLSAgICAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2F0aW9uOwogICAgICAgICAgICAgZmxvYXQg
em9vbUZhY3RvciA9IDE7CiAKQEAgLTQ4NSw3ICs0MzMsNiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlZjxSZW5kZXJTdHls
ZT4mJgogewogICAgIGlmIChpc091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jvb3Q+KCp0aGlzLCBXVEY6Om1vdmUoc3R5bGUp
KTsKLQogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cj4oKnRoaXMsIFdURjo6bW92ZShzdHlsZSkpOwogfQogCkBAIC00OTcsOCArNDQ0LDggQEAgTm9k
ZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSYgcm8KICAgICAgICAgLy8gQW5pbWF0aW9ucyBhcmUgc3RhcnRlZCBh
dCB0aGUgZW5kIG9mIGRvY3VtZW50IHBhcnNpbmcgYW5kIGFmdGVyIGZpcmluZyB0aGUgbG9hZCBl
dmVudCwKICAgICAgICAgLy8gYnV0IGlmIHdlIG1pc3MgdGhhdCB0cmFpbiAoZGVmZXJyZWQgcHJv
Z3JhbW1hdGljIGVsZW1lbnQgaW5zZXJ0aW9uIGZvciBleGFtcGxlKSB3ZSBuZWVkCiAgICAgICAg
IC8vIHRvIGluaXRpYWxpemUgdGhlIHRpbWUgY29udGFpbmVyIGhlcmUuCi0gICAgICAgIGlmICgh
ZG9jdW1lbnQoKS5wYXJzaW5nKCkgJiYgIWRvY3VtZW50KCkucHJvY2Vzc2luZ0xvYWRFdmVudCgp
ICYmIGRvY3VtZW50KCkubG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhdGltZUNvbnRhaW5lcigpLT5p
c1N0YXJ0ZWQoKSkKLSAgICAgICAgICAgIHRpbWVDb250YWluZXIoKS0+YmVnaW4oKTsKKyAgICAg
ICAgaWYgKCFkb2N1bWVudCgpLnBhcnNpbmcoKSAmJiAhZG9jdW1lbnQoKS5wcm9jZXNzaW5nTG9h
ZEV2ZW50KCkgJiYgZG9jdW1lbnQoKS5sb2FkRXZlbnRGaW5pc2hlZCgpICYmICFtX3RpbWVDb250
YWluZXItPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5iZWdpbigp
OwogICAgIH0KICAgICByZXR1cm4gU1ZHR3JhcGhpY3NFbGVtZW50OjppbnNlcnRlZEludG8ocm9v
dFBhcmVudCk7CiB9CkBAIC01MzQsMTAgKzQ4MSw5IEBAIGZsb2F0IFNWR1NWR0VsZW1lbnQ6Omdl
dEN1cnJlbnRUaW1lKCkgY29uc3QKIAogdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGlt
ZShmbG9hdCBzZWNvbmRzKQogewotICAgIGlmIChzdGQ6OmlzbmFuKHNlY29uZHMpKQorICAgIGlm
ICghc3RkOjppc2Zpbml0ZShzZWNvbmRzKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNlY29uZHMg
PSBzdGQ6Om1heChzZWNvbmRzLCAwLjBmKTsKLSAgICBtX3RpbWVDb250YWluZXItPnNldEVsYXBz
ZWQoc2Vjb25kcyk7CisgICAgbV90aW1lQ29udGFpbmVyLT5zZXRFbGFwc2VkKHN0ZDo6bWF4KHNl
Y29uZHMsIDAuMGYpKTsKIH0KIAogYm9vbCBTVkdTVkdFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKCkgY29uc3QKQEAgLTU1NCw0MiArNTAwLDQ0IEBAIEZsb2F0UmVjdCBTVkdTVkdFbGVt
ZW50OjpjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdAogICAgIGlmIChtX3VzZUN1cnJlbnRWaWV3
KQogICAgICAgICByZXR1cm4gbV92aWV3U3BlYyA/IG1fdmlld1NwZWMtPnZpZXdCb3goKSA6IEZs
b2F0UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IHVzZVZpZXdCb3ggPSB2aWV3Qm94KCk7Ci0gICAg
aWYgKCF1c2VWaWV3Qm94LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHVzZVZpZXdCb3g7Cisg
ICAgRmxvYXRSZWN0IHZpZXdCb3ggPSB0aGlzLT52aWV3Qm94KCk7CisgICAgaWYgKCF2aWV3Qm94
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZpZXdCb3g7CisKICAgICBpZiAoIWlzPFJlbmRl
clNWR1Jvb3Q+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJTVkdSb290PigqcmVuZGVy
ZXIoKSkuaXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBMZW5ndGggaW50cmluc2ljV2lkdGgg
PSB0aGlzLT5pbnRyaW5zaWNXaWR0aCgpOwogICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQgPSB0
aGlzLT5pbnRyaW5zaWNIZWlnaHQoKTsKICAgICBpZiAoIWludHJpbnNpY1dpZHRoLmlzRml4ZWQo
KSB8fCAhaW50cmluc2ljSGVpZ2h0LmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gSWYgbm8gdmlld0JveCBpcyBzcGVj
aWZpZWQgYnV0IG5vbi1yZWxhdGl2ZSB3aWR0aC9oZWlnaHQgdmFsdWVzLCB0aGVuIHdlCiAgICAg
Ly8gc2hvdWxkIGFsd2F5cyBzeW50aGVzaXplIGEgdmlld0JveCBpZiB3ZSdyZSBlbWJlZGRlZCB0
aHJvdWdoIGEgU1ZHSW1hZ2UuICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBGbG9hdFNpemUoZmxvYXRWYWx1ZUZvckxlbmd0aChpbnRyaW5zaWNXaWR0aCwgMCksIGZsb2F0
VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljSGVpZ2h0LCAwKSkpOworICAgIHJldHVybiB7IDAsIDAs
IGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljV2lkdGgsIDApLCBmbG9hdFZhbHVlRm9yTGVu
Z3RoKGludHJpbnNpY0hlaWdodCwgMCkgfTsKK30KKworc3RhdGljIEZsb2F0U2l6ZSBvcGVyYXRv
ci8oY29uc3QgTGF5b3V0U2l6ZSYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4geyBhLndpZHRo
KCkudG9GbG9hdCgpIC8gYiwgYS5oZWlnaHQoKS50b0Zsb2F0KCkgLyBiIH07CiB9CiAKIEZsb2F0
U2l6ZSBTVkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3QKIHsKLSAgICBp
ZiAoaGFzSW50cmluc2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5zaWNIZWlnaHQoKSkgewotICAgICAg
ICBMZW5ndGggaW50cmluc2ljV2lkdGggPSB0aGlzLT5pbnRyaW5zaWNXaWR0aCgpOwotICAgICAg
ICBMZW5ndGggaW50cmluc2ljSGVpZ2h0ID0gdGhpcy0+aW50cmluc2ljSGVpZ2h0KCk7Ci0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoZmxvYXRWYWx1ZUZvckxlbmd0aChpbnRyaW5zaWNXaWR0aCwg
MCksIGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljSGVpZ2h0LCAwKSk7Ci0gICAgfQorICAg
IGlmIChoYXNJbnRyaW5zaWNXaWR0aCgpICYmIGhhc0ludHJpbnNpY0hlaWdodCgpKQorICAgICAg
ICByZXR1cm4geyBmbG9hdFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY1dpZHRoKCksIDApLCBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY0hlaWdodCgpLCAwKSB9OwogCiAgICAgaWYgKCFyZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIExh
eW91dFJlY3QgY29udGVudEJveFJlY3QgPSBkb3duY2FzdDxSZW5kZXJTVkdSb290PigqcmVuZGVy
ZXIoKSkuY29udGVudEJveFJlY3QoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShjb250ZW50
Qm94UmVjdC53aWR0aCgpIC8gcmVuZGVyZXIoKS0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCksIGNv
bnRlbnRCb3hSZWN0LmhlaWdodCgpIC8gcmVuZGVyZXIoKS0+c3R5bGUoKS5lZmZlY3RpdmVab29t
KCkpOworICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oKnJlbmRl
cmVyKCkpOworICAgICAgICByZXR1cm4gcm9vdC5jb250ZW50Qm94UmVjdCgpLnNpemUoKSAvIHJv
b3Quc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHZpZXdw
b3J0UmVjdCA9IGRvd25jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPigqcmVuZGVyZXIo
KSkudmlld3BvcnQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHZpZXdwb3J0UmVjdC53aWR0aCgp
LCB2aWV3cG9ydFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcj4oKnJlbmRlcmVyKCkpLnZpZXdwb3J0KCkuc2l6ZSgpOwogfQogCiBi
b29sIFNWR1NWR0VsZW1lbnQ6Omhhc0ludHJpbnNpY1dpZHRoKCkgY29uc3QKQEAgLTYyNSwxOSAr
NTczLDEyIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50Ojp2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmllCiAgICAgaWYgKCFtX3VzZUN1cnJlbnRW
aWV3IHx8ICFtX3ZpZXdTcGVjKQogICAgICAgICByZXR1cm4gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKGN1cnJlbnRWaWV3Qm94UmVjdCgpLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKCksIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3Rt
ID0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGN1cnJlbnRWaWV3Qm94
UmVjdCgpLCBtX3ZpZXdTcGVjLT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHZpZXdXaWR0aCwgdmll
d0hlaWdodCk7Ci0gICAgY29uc3QgU1ZHVHJhbnNmb3JtTGlzdCYgdHJhbnNmb3JtTGlzdCA9IG1f
dmlld1NwZWMtPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAgIGlmICh0cmFuc2Zvcm1MaXN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGN0bTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07Ci0gICAgaWYgKHRyYW5zZm9ybUxpc3QuY29uY2F0ZW5hdGUodHJhbnNmb3JtKSkKLSAg
ICAgICAgY3RtICo9IHRyYW5zZm9ybTsKLQotICAgIHJldHVybiBjdG07CisgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IFNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9y
bShjdXJyZW50Vmlld0JveFJlY3QoKSwgbV92aWV3U3BlYy0+cHJlc2VydmVBc3BlY3RSYXRpbygp
LCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOworICAgIG1fdmlld1NwZWMtPnRyYW5zZm9ybUJhc2VW
YWx1ZSgpLmNvbmNhdGVuYXRlKHRyYW5zZm9ybSk7CisgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0K
IAotdm9pZCBTVkdTVkdFbGVtZW50OjpzZXR1cEluaXRpYWxWaWV3KGNvbnN0IFN0cmluZyYgZnJh
Z21lbnRJZGVudGlmaWVyLCBFbGVtZW50KiBhbmNob3JOb2RlKQordm9pZCBTVkdTVkdFbGVtZW50
OjpzY3JvbGxUb0FuY2hvcihjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllciwgRWxlbWVu
dCogYW5jaG9yTm9kZSkKIHsKICAgICBhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICBTVkdWaWV3U3BlYyogdmlldyA9IG1fdmlld1NwZWMuZ2V0KCk7CkBAIC02NTYsMzAgKzU5
NywyNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldHVwSW5pdGlhbFZpZXcoY29uc3QgU3RyaW5n
JiBmcmFnbWVudElkZW50aWZpZXIsIEVsZW1lbnQqCiAKICAgICBpZiAoZnJhZ21lbnRJZGVudGlm
aWVyLnN0YXJ0c1dpdGgoInN2Z1ZpZXcoIikpIHsKICAgICAgICAgaWYgKCF2aWV3KQotICAgICAg
ICAgICAgdmlldyA9IGN1cnJlbnRWaWV3KCk7IC8vIENyZWF0ZSB0aGUgU1ZHVmlld1NwZWMuCi0K
KyAgICAgICAgICAgIHZpZXcgPSAmY3VycmVudFZpZXcoKTsgLy8gQ3JlYXRlIHRoZSBTVkdWaWV3
U3BlYy4KICAgICAgICAgaWYgKHZpZXctPnBhcnNlVmlld1NwZWMoZnJhZ21lbnRJZGVudGlmaWVy
KSkKICAgICAgICAgICAgIG1fdXNlQ3VycmVudFZpZXcgPSB0cnVlOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB2aWV3LT5yZXNldCgpOwotCiAgICAgICAgIGlmIChyZW5kZXJlciAmJiAoaGFk
VXNlQ3VycmVudFZpZXcgfHwgbV91c2VDdXJyZW50VmlldykpCiAgICAgICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpy
ZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBTcGVjOiBJZiB0aGUg
U1ZHIGZyYWdtZW50IGlkZW50aWZpZXIgYWRkcmVzc2VzIGEg4oCYdmlld+KAmSBlbGVtZW50IHdp
dGhpbiBhbiBTVkcgZG9jdW1lbnQgKGUuZy4sIE15RHJhd2luZy5zdmcjTXlWaWV3Ci0gICAgLy8g
b3IgTXlEcmF3aW5nLnN2ZyN4cG9pbnRlcihpZCgnTXlWaWV3JykpKSB0aGVuIHRoZSBjbG9zZXN0
IGFuY2VzdG9yIOKAmHN2Z+KAmSBlbGVtZW50IGlzIGRpc3BsYXllZCBpbiB0aGUgdmlld3BvcnQu
Ci0gICAgLy8gQW55IHZpZXcgc3BlY2lmaWNhdGlvbiBhdHRyaWJ1dGVzIGluY2x1ZGVkIG9uIHRo
ZSBnaXZlbiDigJh2aWV34oCZIGVsZW1lbnQgb3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmll
dyBzcGVjaWZpY2F0aW9uCi0gICAgLy8gYXR0cmlidXRlcyBvbiB0aGUgY2xvc2VzdCBhbmNlc3Rv
ciDigJhzdmfigJkgZWxlbWVudC4KKyAgICAvLyBTcGVjOiBJZiB0aGUgU1ZHIGZyYWdtZW50IGlk
ZW50aWZpZXIgYWRkcmVzc2VzIGEgInZpZXciIGVsZW1lbnQgd2l0aGluIGFuIFNWRyBkb2N1bWVu
dCAoZS5nLiwgTXlEcmF3aW5nLnN2ZyNNeVZpZXcKKyAgICAvLyBvciBNeURyYXdpbmcuc3ZnI3hw
b2ludGVyKGlkKCdNeVZpZXcnKSkpIHRoZW4gdGhlIGNsb3Nlc3QgYW5jZXN0b3IgInN2ZyIgZWxl
bWVudCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdwb3J0LgorICAgIC8vIEFueSB2aWV3IHNwZWNp
ZmljYXRpb24gYXR0cmlidXRlcyBpbmNsdWRlZCBvbiB0aGUgZ2l2ZW4gInZpZXciIGVsZW1lbnQg
b3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmlldyBzcGVjaWZpY2F0aW9uCisgICAgLy8gYXR0
cmlidXRlcyBvbiB0aGUgY2xvc2VzdCBhbmNlc3RvciAic3ZnIiBlbGVtZW50LgogICAgIGlmIChp
czxTVkdWaWV3RWxlbWVudD4oYW5jaG9yTm9kZSkpIHsKLSAgICAgICAgU1ZHVmlld0VsZW1lbnQm
IHZpZXdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHVmlld0VsZW1lbnQ+KCphbmNob3JOb2RlKTsKLSAg
ICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0
RWxlbWVudCgmdmlld0VsZW1lbnQpOwotICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4oKmVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICBTVkdTVkdFbGVtZW50JiBzdmcgPSBkb3duY2FzdDxTVkdT
VkdFbGVtZW50PigqZWxlbWVudCk7Ci0gICAgICAgICAgICBzdmcuaW5oZXJpdFZpZXdBdHRyaWJ1
dGVzKCZ2aWV3RWxlbWVudCk7Ci0KLSAgICAgICAgICAgIGlmIChSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciA9IHN2Zy5yZW5kZXJlcigpKQorICAgICAgICBhdXRvJiB2aWV3RWxlbWVudCA9IGRvd25j
YXN0PFNWR1ZpZXdFbGVtZW50PigqYW5jaG9yTm9kZSk7CisgICAgICAgIGF1dG8qIHZpZXdwb3J0
RWxlbWVudCA9IFNWR0xvY2F0YWJsZTo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgmdmlld0VsZW1l
bnQpOworICAgICAgICBpZiAoaXM8U1ZHU1ZHRWxlbWVudD4odmlld3BvcnRFbGVtZW50KSkgewor
ICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KCp2aWV3
cG9ydEVsZW1lbnQpOworICAgICAgICAgICAgZWxlbWVudC5pbmhlcml0Vmlld0F0dHJpYnV0ZXMo
dmlld0VsZW1lbnQpOworICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnJlbmRlcmVyKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CkBAIC02ODksMjUgKzYyNywyNSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6
OnNldHVwSW5pdGlhbFZpZXcoY29uc3QgU3RyaW5nJiBmcmFnbWVudElkZW50aWZpZXIsIEVsZW1l
bnQqCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYWN0dWFsbHkgImhpZ2hsaWdodCIgdGhlIHZp
ZXdUYXJnZXQocykuCiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6aW5oZXJpdFZpZXdBdHRyaWJ1
dGVzKFNWR1ZpZXdFbGVtZW50KiB2aWV3RWxlbWVudCkKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6aW5o
ZXJpdFZpZXdBdHRyaWJ1dGVzKGNvbnN0IFNWR1ZpZXdFbGVtZW50JiB2aWV3RWxlbWVudCkKIHsK
LSAgICBTVkdWaWV3U3BlYyogdmlldyA9IGN1cnJlbnRWaWV3KCk7CisgICAgU1ZHVmlld1NwZWMm
IHZpZXcgPSBjdXJyZW50VmlldygpOwogICAgIG1fdXNlQ3VycmVudFZpZXcgPSB0cnVlOwogCi0g
ICAgaWYgKHZpZXdFbGVtZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkK
LSAgICAgICAgdmlldy0+c2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3RWxlbWVudC0+dmlld0JveCgp
KTsKKyAgICBpZiAodmlld0VsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2aWV3Qm94QXR0
cikpCisgICAgICAgIHZpZXcuc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3RWxlbWVudC52aWV3Qm94
KCkpOwogICAgIGVsc2UKLSAgICAgICAgdmlldy0+c2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3Qm94
KCkpOworICAgICAgICB2aWV3LnNldFZpZXdCb3hCYXNlVmFsdWUodmlld0JveCgpKTsKIAotICAg
IGlmICh2aWV3RWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJh
dGlvQXR0cikpCi0gICAgICAgIHZpZXctPnNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUo
dmlld0VsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSk7CisgICAgaWYgKHZp
ZXdFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
KQorICAgICAgICB2aWV3LnNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUodmlld0VsZW1l
bnQucHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIHZp
ZXctPnNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUocHJlc2VydmVBc3BlY3RSYXRpb0Jh
c2VWYWx1ZSgpKTsKKyAgICAgICAgdmlldy5zZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVl
KHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSk7CiAKLSAgICBpZiAodmlld0VsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIpKQotICAgICAgICB2aWV3LT5z
ZXRab29tQW5kUGFuQmFzZVZhbHVlKHZpZXdFbGVtZW50LT56b29tQW5kUGFuKCkpOworICAgIGlm
ICh2aWV3RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Onpvb21BbmRQYW5BdHRyKSkKKyAg
ICAgICAgdmlldy5zZXRab29tQW5kUGFuQmFzZVZhbHVlKHZpZXdFbGVtZW50Lnpvb21BbmRQYW4o
KSk7CiAgICAgZWxzZQotICAgICAgICB2aWV3LT5zZXRab29tQW5kUGFuQmFzZVZhbHVlKHpvb21B
bmRQYW4oKSk7CisgICAgICAgIHZpZXcuc2V0Wm9vbUFuZFBhbkJhc2VWYWx1ZSh6b29tQW5kUGFu
KCkpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRvY3VtZW50V2lsbFN1c3BlbmRGb3JQYWdl
Q2FjaGUoKQpAQCAtNzI3LDE1ICs2NjUsMTggQEAgRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6Z2V0
RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJiBpZCkKICAgICBFbGVtZW50KiBlbGVtZW50ID0gdHJl
ZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQt
PmlzRGVzY2VuZGFudE9mKHRoaXMpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdHJlZVNjb3BlKCkuZ2V0QWxsRWxlbWVudHNCeUlkLgot
ICAgIC8vIEZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91ciBzdWJ0cmVlLiBEdXBsaWNhdGUgaWRz
IGFyZSBhbGxvd2VkLCB0aGUgZmlyc3QgZm91bmQgd2lsbAotICAgIC8vIGJlIHJldHVybmVkLgot
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KCp0aGlz
KSkgewotICAgICAgICBpZiAoZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpID09IGlkKQotICAgICAg
ICAgICAgcmV0dXJuICZlbGVtZW50OworICAgIGlmICh0cmVlU2NvcGUoKS5jb250YWluc011bHRp
cGxlRWxlbWVudHNXaXRoSWQoaWQpKSB7CisgICAgICAgIGZvciAoYXV0byBlbGVtZW50IDogKnRy
ZWVTY29wZSgpLmdldEFsbEVsZW1lbnRzQnlJZChpZCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5pc0Rlc2NlbmRhbnRPZih0aGlzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dDsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworYm9vbCBTVkdTVkdFbGVtZW50Ojppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U1ZHVGVzdHM6OmlzVmFsaWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgK
aW5kZXggNjdjMmU0NWQ4YjI3OTM4NTI5MGI5N2ZhNDFkMzVlOWViODQ0NzYzMi4uNGI1Y2RjYzcw
NDU3ZTJjOWZkMzljZGExYzZkOTQ4MzRlYWIyYWMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAxMCBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsMzEgKzMzLDI3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU1ZHQW5nbGU7Ci1jbGFzcyBTVkdNYXRyaXg7Ci1jbGFzcyBTVkdUcmFu
c2Zvcm07CiBjbGFzcyBTVkdWaWV3U3BlYzsKLWNsYXNzIFNWR1ZpZXdFbGVtZW50OwogY2xhc3Mg
U01JTFRpbWVDb250YWluZXI7CiAKLWNsYXNzIFNWR1NWR0VsZW1lbnQgZmluYWwgOiBwdWJsaWMg
U1ZHR3JhcGhpY3NFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdGaXRUb1ZpZXdCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR1pvb21BbmRQYW4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHU1ZHRWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwotCi0gICAgdXNpbmcg
U1ZHR3JhcGhpY3NFbGVtZW50OjpyZWY7Ci0gICAgdXNpbmcgU1ZHR3JhcGhpY3NFbGVtZW50Ojpk
ZXJlZjsKK2NsYXNzIFNWR1NWR0VsZW1lbnQgZmluYWwgOiBwdWJsaWMgU1ZHR3JhcGhpY3NFbGVt
ZW50LCBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgcHVibGljIFNWR0ZpdFRv
Vmlld0JveCwgcHVibGljIFNWR1pvb21BbmRQYW4gewogCi0gICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CisgICAg
QkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR1NWR0VsZW1lbnQpCisgICAgICAg
IERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCisgICAgICAgIERFQ0xBUkVfQU5JTUFURURf
TEVOR1RIKFksIHkpCisgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFdpZHRoLCB3aWR0
aCkKKyAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoSGVpZ2h0LCBoZWlnaHQpCisgICAg
ICAgIERFQ0xBUkVfQU5JTUFURURfQk9PTEVBTihFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBl
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKQorICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1JFQ1Qo
Vmlld0JveCwgdmlld0JveCkKKyAgICAgICAgREVDTEFSRV9BTklNQVRFRF9QUkVTRVJWRUFTUEVD
VFJBVElPKFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgRU5E
X0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUwogCi0gICAgLy8gJ1NWR1NWR0VsZW1lbnQnIGZ1
bmN0aW9ucworcHVibGljOiAvLyBET00KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRlbnRT
Y3JpcHRUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50U2NyaXB0VHlwZShjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgc2V0Q29udGVudFNjcmlwdFR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJik7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRlbnRTdHlsZVR5
cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRTdHlsZVR5cGUoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKTsKKyAgICB2b2lkIHNldENvbnRlbnRTdHlsZVR5cGUoY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKICAgICBGbG9hdFJlY3Qgdmlld3BvcnQoKSBjb25zdDsKIApAQCAtNjUsNDIgKzYy
LDMwIEBAIHB1YmxpYzoKICAgICBmbG9hdCBzY3JlZW5QaXhlbFRvTWlsbGltZXRlclgoKSBjb25z
dDsKICAgICBmbG9hdCBzY3JlZW5QaXhlbFRvTWlsbGltZXRlclkoKSBjb25zdDsKIAotICAgIGJv
b2wgdXNlQ3VycmVudFZpZXcoKSBjb25zdCB7IHJldHVybiBtX3VzZUN1cnJlbnRWaWV3OyB9Ci0g
ICAgU1ZHVmlld1NwZWMqIGN1cnJlbnRWaWV3KCk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IHdh
bnRzIHRvIHF1ZXJ5IHRoZSBpbnRyaW5zaWMgc2l6ZSwgYnkgb25seSBleGFtaW5pbmcgdGhlIHdp
ZHRoL2hlaWdodCBhdHRyaWJ1dGVzLgotICAgIExlbmd0aCBpbnRyaW5zaWNXaWR0aCgpIGNvbnN0
OwotICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgY3Vy
cmVudFZpZXdwb3J0U2l6ZSgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBjdXJyZW50Vmlld0JveFJl
Y3QoKSBjb25zdDsKKyAgICBib29sIHVzZUN1cnJlbnRWaWV3KCkgY29uc3Q7CisgICAgU1ZHVmll
d1NwZWMmIGN1cnJlbnRWaWV3KCk7CiAKICAgICBmbG9hdCBjdXJyZW50U2NhbGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCBzY2FsZSk7CisgICAgdm9pZCBzZXRDdXJy
ZW50U2NhbGUoZmxvYXQpOwogCi0gICAgU1ZHUG9pbnQmIGN1cnJlbnRUcmFuc2xhdGUoKSB7IHJl
dHVybiBtX3RyYW5zbGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VHJhbnNsYXRlKGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICBTVkdQb2ludCYgY3VycmVudFRyYW5zbGF0ZSgpOwogCi0gICAg
Ly8gT25seSB1c2VkIGZyb20gdGhlIGJpbmRpbmdzLgotICAgIHZvaWQgdXBkYXRlQ3VycmVudFRy
YW5zbGF0ZSgpOworICAgIHVuc2lnbmVkIHN1c3BlbmRSZWRyYXcodW5zaWduZWQgbWF4V2FpdE1p
bGxpc2Vjb25kcyk7CisgICAgdm9pZCB1bnN1c3BlbmRSZWRyYXcodW5zaWduZWQgc3VzcGVuZEhh
bmRsZUlkKTsKKyAgICB2b2lkIHVuc3VzcGVuZFJlZHJhd0FsbCgpOworICAgIHZvaWQgZm9yY2VS
ZWRyYXcoKTsKIAotICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgeyByZXR1
cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9Ci0gICAgCiAgICAgdm9pZCBwYXVzZUFuaW1hdGlv
bnMoKTsKICAgICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CiAgICAgYm9vbCBhbmltYXRpb25z
UGF1c2VkKCkgY29uc3Q7CiAKICAgICBmbG9hdCBnZXRDdXJyZW50VGltZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0Q3VycmVudFRpbWUoZmxvYXQgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRDdXJyZW50
VGltZShmbG9hdCk7CiAKLSAgICB1bnNpZ25lZCBzdXNwZW5kUmVkcmF3KHVuc2lnbmVkIG1heFdh
aXRNaWxsaXNlY29uZHMpOwotICAgIHZvaWQgdW5zdXNwZW5kUmVkcmF3KHVuc2lnbmVkIHN1c3Bl
bmRIYW5kbGVJZCk7Ci0gICAgdm9pZCB1bnN1c3BlbmRSZWRyYXdBbGwoKTsKLSAgICB2b2lkIGZv
cmNlUmVkcmF3KCk7Ci0KLSAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRJbnRlcnNlY3Rpb25M
aXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpIGNvbnN0
OwotICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRS
ZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCkgY29uc3Q7Ci0gICAgYm9vbCBjaGVj
a0ludGVyc2VjdGlvbihjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7
Ci0gICAgYm9vbCBjaGVja0VuY2xvc3VyZShjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CisgICAgUmVmPE5vZGVMaXN0PiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0
IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAgIFJlZjxOb2Rl
TGlzdD4gZ2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KiByZWZl
cmVuY2VFbGVtZW50KTsKKyAgICBzdGF0aWMgYm9vbCBjaGVja0ludGVyc2VjdGlvbihjb25zdCBT
VkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgY2hlY2tFbmNs
b3N1cmUoY29uc3QgU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgZGVz
ZWxlY3RBbGwoKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjcmVhdGVTVkdOdW1iZXIoKTsKQEAgLTEx
Miw2OSArOTcsOTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gY3JlYXRlU1ZH
VHJhbnNmb3JtKCk7CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm1G
cm9tTWF0cml4KGNvbnN0IFNWR01hdHJpeCYpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdC
b3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25z
dDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZv
aWQgc2V0dXBJbml0aWFsVmlldyhjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllciwgRWxl
bWVudCogYW5jaG9yTm9kZSk7CisgICAgU1ZHWm9vbUFuZFBhblR5cGUgem9vbUFuZFBhbigpIGNv
bnN0OworICAgIHZvaWQgc2V0Wm9vbUFuZFBhbih1bnNpZ25lZCBzaG9ydCk7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFNWR1NWR0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQmKTsKKyAgICB2b2lkIHNjcm9sbFRvQW5jaG9yKGNvbnN0IFN0cmluZyYgZnJh
Z21lbnRJZGVudGlmaWVyLCBFbGVtZW50KiBhbmNob3IpOworCisgICAgdXNpbmcgU1ZHR3JhcGhp
Y3NFbGVtZW50OjpyZWY7CisgICAgdXNpbmcgU1ZHR3JhcGhpY3NFbGVtZW50OjpkZXJlZjsKKwor
ICAgIFNNSUxUaW1lQ29udGFpbmVyJiB0aW1lQ29udGFpbmVyKCk7CisKKyAgICB2b2lkIHNldEN1
cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOyAvLyBVc2VkIHRvIHBhbi4KKyAgICB2
b2lkIHVwZGF0ZUN1cnJlbnRUcmFuc2xhdGUoKTsgLy8gVXNlZCBmcm9tIERPTSBiaW5kaW5ncyB0
byBjcmVhdGUgYW4gU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmIGZvciBjdXJyZW50VHJhbnNsYXRl
LgogCiAgICAgYm9vbCBoYXNJbnRyaW5zaWNXaWR0aCgpIGNvbnN0OwogICAgIGJvb2wgaGFzSW50
cmluc2ljSGVpZ2h0KCkgY29uc3Q7CisgICAgTGVuZ3RoIGludHJpbnNpY1dpZHRoKCkgY29uc3Q7
CisgICAgTGVuZ3RoIGludHJpbnNpY0hlaWdodCgpIGNvbnN0OwogCi0gICAgRWxlbWVudCogZ2V0
RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTVkdab29tQW5kUGFuVHlwZSB6b29t
QW5kUGFuKCkgY29uc3QgeyByZXR1cm4gbV96b29tQW5kUGFuOyB9Ci0gICAgdm9pZCBzZXRab29t
QW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pIHsgbV96b29tQW5kUGFuID0gU1ZHWm9v
bUFuZFBhbjo6cGFyc2VGcm9tTnVtYmVyKHpvb21BbmRQYW4pOyB9CisgICAgRmxvYXRTaXplIGN1
cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY3VycmVudFZpZXdCb3hS
ZWN0KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc0VtcHR5Vmlld0JveCgpIGNvbnN0IHsgcmV0dXJu
IHZpZXdCb3hJc1ZhbGlkKCkgJiYgdmlld0JveCgpLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFz
RW1wdHlWaWV3Qm94KCkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdU
cmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBTVkdTVkdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwogICAgIHZpcnR1YWwgflNWR1NWR0VsZW1lbnQoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkgb3ZlcnJpZGU7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYp
IG92ZXJyaWRlOwotCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVu
ZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVmPFJlbmRlclN0eWxlPiYmKSBvdmVycmlkZTsKLQog
ICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29u
dGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250
YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0KICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0KICAgICB2aXJ0dWFsIGJvb2wg
c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbmhl
cml0Vmlld0F0dHJpYnV0ZXMoU1ZHVmlld0VsZW1lbnQqKTsKLQotICAgIGVudW0gQ29sbGVjdElu
dGVyc2VjdGlvbk9yRW5jbG9zdXJlIHsKLSAgICAgICAgQ29sbGVjdEludGVyc2VjdGlvbkxpc3Qs
Ci0gICAgICAgIENvbGxlY3RFbmNsb3N1cmVMaXN0Ci0gICAgfTsKLQotICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IGNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRS
ZWN0JiwgU1ZHRWxlbWVudCosIENvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZSkgY29uc3Q7
Ci0KLSAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHU1ZHRWxlbWVudCkK
LSAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKLSAgICAgICAgREVDTEFSRV9B
TklNQVRFRF9MRU5HVEgoWSwgeSkKLSAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoV2lk
dGgsIHdpZHRoKQotICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChIZWlnaHQsIGhlaWdo
dCkKLSAgICAgICAgREVDTEFSRV9BTklNQVRFRF9CT09MRUFOKEV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCi0gICAgICAgIERFQ0xBUkVfQU5JTUFU
RURfUkVDVChWaWV3Qm94LCB2aWV3Qm94KQotICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1BSRVNF
UlZFQVNQRUNUUkFUSU8oUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbykK
LSAgICBFTkRfREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTCi0KICAgICB2aXJ0dWFsIHZvaWQg
ZG9jdW1lbnRXaWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKSBvdmVycmlkZTsKLQogICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xv
Y2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBtX3VzZUN1cnJl
bnRWaWV3OwotICAgIFNWR1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBhbjsKLSAgICBSZWZQdHI8
U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKLSAgICBTVkdQb2ludCBtX3RyYW5z
bGF0aW9uOworICAgIEZyYW1lKiBmcmFtZUZvckN1cnJlbnRTY2FsZSgpIGNvbnN0OworICAgIHZv
aWQgaW5oZXJpdFZpZXdBdHRyaWJ1dGVzKGNvbnN0IFNWR1ZpZXdFbGVtZW50Jik7CisgICAgUmVm
PE5vZGVMaXN0PiBjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0
UmVjdCYsIFNWR0VsZW1lbnQqLCBib29sICgqY2hlY2tGdW5jdGlvbikoY29uc3QgU1ZHRWxlbWVu
dCosIGNvbnN0IEZsb2F0UmVjdCYpKTsKKworICAgIGJvb2wgbV91c2VDdXJyZW50VmlldyB7IGZh
bHNlIH07CisgICAgU1ZHWm9vbUFuZFBhblR5cGUgbV96b29tQW5kUGFuIHsgU1ZHWm9vbUFuZFBh
bk1hZ25pZnkgfTsKKyAgICBSZWY8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsK
KyAgICBTVkdQb2ludCBtX2N1cnJlbnRUcmFuc2xhdGU7CiAgICAgUmVmUHRyPFNWR1ZpZXdTcGVj
PiBtX3ZpZXdTcGVjOwogfTsKIAoraW5saW5lIGJvb2wgU1ZHU1ZHRWxlbWVudDo6dXNlQ3VycmVu
dFZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX3VzZUN1cnJlbnRWaWV3OworfQorCitpbmxp
bmUgU1ZHUG9pbnQmIFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xhdGUoKQoreworICAgIHJl
dHVybiBtX2N1cnJlbnRUcmFuc2xhdGU7Cit9CisKK2lubGluZSBTVkdab29tQW5kUGFuVHlwZSBT
VkdTVkdFbGVtZW50Ojp6b29tQW5kUGFuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV96b29tQW5k
UGFuOworfQorCitpbmxpbmUgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRab29tQW5kUGFuKHVuc2ln
bmVkIHNob3J0IHpvb21BbmRQYW4pCit7CisgICAgbV96b29tQW5kUGFuID0gcGFyc2VGcm9tTnVt
YmVyKHpvb21BbmRQYW4pOworfQorCitpbmxpbmUgU01JTFRpbWVDb250YWluZXImIFNWR1NWR0Vs
ZW1lbnQ6OnRpbWVDb250YWluZXIoKQoreworICAgIHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0
KCk7Cit9CisKK2lubGluZSBib29sIFNWR1NWR0VsZW1lbnQ6Omhhc0VtcHR5Vmlld0JveCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHZpZXdCb3hJc1ZhbGlkKCkgJiYgdmlld0JveCgpLmlzRW1wdHko
KTsKK30KKworaW5saW5lIGZsb2F0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR051bWJlcigpCit7
CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCmluZGV4IGY3NWI2N2UyZWYwOTI1MDFjNmQyODc4
Mzk2NDQ2NmYzZTllMTJiYjUuLmU4YTNmMTIzOWEyZjliODUwMTczNWIxZWI3ZjkxMThlNGNkOWFm
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUg
IlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ZpZXdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3RWxlbWVudC5j
cHAKaW5kZXggZWJkNTUyNzM3YWM1MjQ2ZTYxYWIwZDRhNDFmMTU4Njk0OTY0MmNhYy4uM2EyNWM5
NGM0ZTBiOTFhNWNjZGQwY2U0NjcwNTUyMWEwOTEyYjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Vmlld0VsZW1lbnQuY3BwCkBAIC0yMSwxMiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR1ZpZXdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNp
bmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1
ZGUgIlNWR1N0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJTVkdab29tQW5kUGFuLmgiCi0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYs
MzggKzUxLDE1IEBAIFJlZjxTVkdWaWV3RWxlbWVudD4gU1ZHVmlld0VsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVuCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHVmlld0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdW
aWV3RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4+IHN1cHBvcnRlZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKHN1cHBvcnRlZEF0dHJpYnV0ZXMuZ2V0
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc3VwcG9ydGVkQXR0cmlidXRlcyk7Ci0gICAgICAgIFNWR0Zp
dFRvVmlld0JveDo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRBdHRyaWJ1dGVzKTsK
LSAgICAgICAgU1ZHWm9vbUFuZFBhbjo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzdXBwb3J0ZWRB
dHRyaWJ1dGVzKTsKLSAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5nZXQoKS5hZGQoU1ZHTmFt
ZXM6OnZpZXdUYXJnZXRBdHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0
ZXMuZ2V0KCkuY29udGFpbnM8U1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I+KGF0dHJOYW1lKTsK
LX0KLQogdm9pZCBTVkdWaWV3RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWlzU3Vw
cG9ydGVkQXR0cmlidXRlKG5hbWUpKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChuYW1l
ID09IFNWR05hbWVzOjp2aWV3VGFyZ2V0QXR0cikgeworICAgIGlmIChuYW1lID09IFNWR05hbWVz
Ojp2aWV3VGFyZ2V0QXR0cikKICAgICAgICAgdmlld1RhcmdldCgpLnJlc2V0KHZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUodGhp
cywgbmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZUF0dHJpYnV0ZShu
YW1lLCB2YWx1ZSk7CisgICAgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZSh0aGlzLCBu
YW1lLCB2YWx1ZSk7CisgICAgU1ZHWm9vbUFuZFBhbjo6cGFyc2VBdHRyaWJ1dGUoKnRoaXMsIG5h
bWUsIHZhbHVlKTsKKyAgICBTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCmluZGV4IDNkOTJmYzdmNjhiYjAz
NzJmMDNlNjFiZTI5NGRjZmE2NmRmYjU3NTYuLjUwOWQ5ODVhMmEzODgyNWY3ZGE4NWY3ZDFiYTUz
OThmMTExMDNkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcApAQCAtMjUsNyArMjUs
NiBAQAogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMjUyLDcgKzI1MSw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29u
c3QgU3RyaW5nJiB2aWV3U3BlYykKICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5k
IHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgaWYgKCFwYXJzZVpvb21B
bmRQYW4oY3VyclZpZXdTcGVjLCBlbmQsIG1fem9vbUFuZFBhbikpCisgICAgICAgICAgICBpZiAo
IXBhcnNlKGN1cnJWaWV3U3BlYywgZW5kLCBtX3pvb21BbmRQYW4pKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpj
dXJyVmlld1NwZWMgIT0gJyknKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAppbmRleCBjODkzNzFhNGEzMGVkNzk5YjEyMGY4NzAz
ZDg0Njk0OWZiN2RkYTU4Li5mMTVjODM3MGIwNmQ1YWZhY2FiMDliMmIyODgyOWU2MzMxNjg1ZWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCkBAIC0yNSwyNSArMjUsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQYW46OmlzS25vd25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgcmV0dXJuIGF0dHJO
YW1lID09IFNWR05hbWVzOjp6b29tQW5kUGFuQXR0cjsKLX0KLQotdm9pZCBTVkdab29tQW5kUGFu
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRl
ZEF0dHJpYnV0ZXMpCi17Ci0gICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Onpv
b21BbmRQYW5BdHRyKTsKLX0KLQotc3RhdGljIGNvbnN0IFVDaGFyIGRpc2FibGVbXSA9ICB7J2Qn
LCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBtYWdu
aWZ5W10gPSAgeydtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5J307Ci0KLWJvb2wgU1ZH
Wm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVD
aGFyKiBlbmQsIFNWR1pvb21BbmRQYW5UeXBlJiB6b29tQW5kUGFuKQorYm9vbCBTVkdab29tQW5k
UGFuOjpwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTVkdab29t
QW5kUGFuVHlwZSYgem9vbUFuZFBhbikKIHsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlzYWJs
ZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKICAgICBpZiAoc2tp
cFN0cmluZyhzdGFydCwgZW5kLCBkaXNhYmxlLCBXVEZfQVJSQVlfTEVOR1RIKGRpc2FibGUpKSkg
ewogICAgICAgICB6b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0geyAn
bScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKICAgICBpZiAoc2tpcFN0cmluZyhz
dGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkgewogICAgICAg
ICB6b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbk1hZ25pZnk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNTEsMTkgKzQwLDEzIEBAIGJvb2wgU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFu
KGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1pvCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFNWR1pvb21BbmRQYW46
OnJlZigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLU5PX1JFVFVSTl9EVUVf
VE9fQVNTRVJUIHZvaWQgU1ZHWm9vbUFuZFBhbjo6ZGVyZWYoKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi1OT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFNWR1pvb21BbmRQ
YW46OnNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQpCitTVkdab29tQW5kUGFuVHlwZSBTVkda
b29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKHZhbHVlID09ICJkaXNhYmxl
IikKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5EaXNhYmxlOworICAgIGlmICh2YWx1ZSA9
PSAibWFnbmlmeSIpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFnbmlmeTsKKyAgICBy
ZXR1cm4gU1ZHWm9vbUFuZFBhblVua25vd247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5oCmluZGV4IDE2OTVhMjNhM2JlZjM2YWJjOWMwYzY0ZTIxMjI3MzY2MmVjOTg0MjEuLmMw
NWI3NjMyNjVkYWE2NGU4N2VkNGEwZTk3OWQ1OGNkN2FhYzY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1pvb21BbmRQYW4uaApAQCAtMjMsMTYgKzIzLDEwIEBACiAKICNpbmNsdWRlICJRdWFsaWZpZWRO
YW1lLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsKLSAgICBTVkdab29tQW5kUGFuVW5rbm93biA9IDAs
Ci0gICAgU1ZHWm9vbUFuZFBhbkRpc2FibGUsCi0gICAgU1ZHWm9vbUFuZFBhbk1hZ25pZnkKLX07
CitlbnVtIFNWR1pvb21BbmRQYW5UeXBlIHsgU1ZHWm9vbUFuZFBhblVua25vd24sIFNWR1pvb21B
bmRQYW5EaXNhYmxlLCBTVkdab29tQW5kUGFuTWFnbmlmeSB9OwogCiBjbGFzcyBTVkdab29tQW5k
UGFuIHsKIHB1YmxpYzoKQEAgLTQ0LDQyICszOCwzMyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAg
IHN0YXRpYyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAg
IHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1l
PiYpOwogCi0gICAgc3RhdGljIFNWR1pvb21BbmRQYW5UeXBlIHBhcnNlRnJvbU51bWJlcih1bnNp
Z25lZCBzaG9ydCBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIW51bWJlciB8fCBudW1iZXIg
PiBTVkdab29tQW5kUGFuTWFnbmlmeSkKLSAgICAgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFu
VW5rbm93bjsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1pvb21BbmRQYW5UeXBlPihu
dW1iZXIpOwotICAgIH0KKyAgICBzdGF0aWMgU1ZHWm9vbUFuZFBhblR5cGUgcGFyc2VGcm9tTnVt
YmVyKHVuc2lnbmVkIHNob3J0KTsKIAotICAgIHN0YXRpYyBib29sIHBhcnNlWm9vbUFuZFBhbihj
b25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTVkdab29tQW5kUGFuVHlwZSYp
OworICAgIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQsIFNWR1pvb21BbmRQYW5UeXBlJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVyaXZlZENs
YXNzPiBzdGF0aWMgdm9pZCBwYXJzZUF0dHJpYnV0ZShEZXJpdmVkQ2xhc3MmLCBjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBTVkdFbGVtZW50VGFyZ2V0PgotICAgIHN0YXRpYyBib29sIHBhcnNlQXR0cmlidXRlKFNW
R0VsZW1lbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXQpOwotICAg
ICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIpIHsKLSAgICAgICAgICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZS5zdHJpbmcoKSku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogZW5kID0g
c3RhcnQgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgICAgIFNWR1pvb21BbmRQYW5UeXBlIHpv
b21BbmRQYW4gPSBTVkdab29tQW5kUGFuVW5rbm93bjsKLSAgICAgICAgICAgIHBhcnNlWm9vbUFu
ZFBhbihzdGFydCwgZW5kLCB6b29tQW5kUGFuKTsKLSAgICAgICAgICAgIHRhcmdldC0+c2V0Wm9v
bUFuZFBhbih6b29tQW5kUGFuKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Citwcml2YXRlOgorICAgIHN0YXRpYyBTVkdab29tQW5kUGFuVHlwZSBwYXJzZUF0dHJpYnV0ZVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOworfTsKIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQoraW5saW5lIGJvb2wgU1ZHWm9vbUFuZFBhbjo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09IFNWR05hbWVzOjp6b29t
QW5kUGFuQXR0cjsKK30KIAotICAgIFNWR1pvb21BbmRQYW5UeXBlIHpvb21BbmRQYW4oKSBjb25z
dCB7IHJldHVybiBTVkdab29tQW5kUGFuVW5rbm93bjsgfQoraW5saW5lIFNWR1pvb21BbmRQYW5U
eXBlIFNWR1pvb21BbmRQYW46OnBhcnNlRnJvbU51bWJlcih1bnNpZ25lZCBzaG9ydCBudW1iZXIp
Cit7CisgICAgaWYgKG51bWJlciA+IFNWR1pvb21BbmRQYW5NYWduaWZ5KQorICAgICAgICByZXR1
cm4gU1ZHWm9vbUFuZFBhblVua25vd247CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1pvb21B
bmRQYW5UeXBlPihudW1iZXIpOworfQogCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBvbmx5IGV4aXN0
IHRvIGFsbG93IHVzIHRvIGNvbXBpbGUgSlNTVkdab29tQW5kUGFuLiouCi0gICAgLy8gVGhlc2Ug
YXJlIG5ldmVyIGNhbGxlZCwgYW5kIHRodXMgQVNTRVJUX05PVF9SRUFDSEVELgotICAgIE5PX1JF
VFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcmVmKCk7Ci0gICAgTk9fUkVUVVJOX0RVRV9UT19BU1NF
UlQgdm9pZCBkZXJlZigpOwotICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgc2V0Wm9v
bUFuZFBhbih1bnNpZ25lZCBzaG9ydCk7Ci19OwordGVtcGxhdGU8Y2xhc3MgRGVyaXZlZENsYXNz
PiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKERlcml2ZWRDbGFzcyYgZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6em9vbUFuZFBhbkF0dHIpCisgICAgICAgIGVs
ZW1lbnQuc2V0Wm9vbUFuZFBhbihwYXJzZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKSk7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCBkNWEzODNjNmE5MDc0Mjg2Yzk4NTBkNjI2Mzg5NDM3
M2ZiNjczMWFjLi44NWUxNTBmNTVjMmNhN2E2ZGI3NTNjMTJjYWFkN2ZiNTBiYWI3NWMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAt
MjQ4LDggKzI0OCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU01J
TEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByCiAgICAgaWYgKCFvd25lcikK
ICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAKLSAgICBtX3RpbWVDb250YWluZXIgPSBv
d25lci0+dGltZUNvbnRhaW5lcigpOwotICAgIEFTU0VSVChtX3RpbWVDb250YWluZXIpOworICAg
IG1fdGltZUNvbnRhaW5lciA9ICZvd25lci0+dGltZUNvbnRhaW5lcigpOwogICAgIG1fdGltZUNv
bnRhaW5lci0+c2V0RG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSgpOwogCiAgICAgLy8gIklmIG5v
IGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgZGVmYXVsdCBiZWdpbiB2YWx1ZSAoYW4gb2Zmc2V0
LXZhbHVlIG9mIDApIG11c3QgYmUgZXZhbHVhdGVkLiIK
</data>
<flag name="review"
          id="271332"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>