<?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>37568</bug_id>
          
          <creation_ts>2010-04-14 02:03:25 -0700</creation_ts>
          <short_desc>SVGRenderStyle/SVGRenderStyleDefs needs a cleanup</short_desc>
          <delta_ts>2010-04-14 03:44:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>krit</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>212300</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-14 02:03:25 -0700</bug_when>
    <thetext>SVGRenderStyle(Defs) is old legacy code and needs to be cleaned up.
While I&apos;m at it, we could save memory be joining StyleMaskData/StyleClipData in a single StyleResourceData. For consistency StyleMarkerData will be named StyleInheritedResourceData.
All naming schemes should be unified for clipper / masker / marker / filter, see the upcoming patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212301</commentid>
    <comment_count>1</comment_count>
      <attachid>53323</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-14 02:12:50 -0700</bug_when>
    <thetext>Created attachment 53323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212304</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-14 02:54:48 -0700</bug_when>
    <thetext>Attachment 53323 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1602462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212308</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-14 03:13:25 -0700</bug_when>
    <thetext>Attachment 53323 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1671314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212309</commentid>
    <comment_count>4</comment_count>
      <attachid>53325</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-14 03:14:21 -0700</bug_when>
    <thetext>Created attachment 53325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212310</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-14 03:15:50 -0700</bug_when>
    <thetext>Updated patch against trunk, was missing RenderSVGResourceClipper changes after Dirks commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212313</commentid>
    <comment_count>6</comment_count>
      <attachid>53325</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-04-14 03:40:14 -0700</bug_when>
    <thetext>Comment on attachment 53325
Patch

LGTM r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212315</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-14 03:44:52 -0700</bug_when>
    <thetext>Committed r57575: &lt;http://trac.webkit.org/changeset/57575&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53323</attachid>
            <date>2010-04-14 02:12:50 -0700</date>
            <delta_ts>2010-04-14 03:14:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37568-20100414111237.patch</filename>
            <type>text/plain</type>
            <size>48107</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDQtMTQgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHUmVuZGVyU3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzIG5lZWRzIGEgY2xlYW51cAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc1NjgKKwor
ICAgICAgICBDbGVhbnVwIFNWR1JlbmRlclN0eWxlIC8gU1ZHUmVuZGVyU3R5bGVEZWZzOgorICAg
ICAgICAtIHVzZSBjb3B5IGNvbnN0cnVjdG9ycyBpbiBpbml0aWFsaXphdGlvbiBsaXN0IHRvIGlu
aXRpYWxpemUgbWVtYmVycywgaW5zdGVhZCBvZiBhc3NpZ25tZW50IG9wZXJhdG9ycyBpbiB0aGUg
Ym9keQorICAgICAgICAtIGZpeCBzdHlsZSBpc3N1ZXMgKG1pc3BsYWNlZCByZWZlcmVuY2VzLCBh
YmJyZXZhdGlvbnMpCisgICAgICAgIC0gbWVyZ2UgU3R5bGVDbGlwRGF0YS9TdHlsZU1hc2tEYXRh
IHRvIHNhdmUgbWVtb3J5LCByZW5hbWUgaXQgU3R5bGVSZXNvdXJjZURhdGEKKyAgICAgICAgLSBt
b3ZlIGZpbHRlciBwcm9wZXJ0eSBpbiBTdHlsZVJlc291cmNlRGF0YQorICAgICAgICAtIHJlbmFt
ZSBTdHlsZU1hcmtlckRhdGEgdG8gU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEgdG8gaGlnaGxp
Z2h0IHRoZSBkaWZmZXJlbmNlIHRvIFN0eWxlUmVzb3VyY2VEYXRhCisgICAgICAgIC0gdW5pZnkg
bmFtaW5nIHNjaGVtZXMgZm9yIGFsbCByZXNvdXJjZXMgKGZpbHRlci9jbGlwcGVyL21hc2tlci9t
YXJrZXJzKQorICAgICAgICAgIC0gY2xpcFBhdGgoKSAtPiBjbGlwcGVyUmVzb3VyY2UoKQorICAg
ICAgICAgIC0gbWFza0VsZW1lbnQoKSAtPiBtYXNrZXJSZXNvdXJjZSgpCisgICAgICAgICAgLSBz
dGFydE1hcmtlcigpIC0+IG1hcmtlclN0YXJ0UmVzb3VyY2UoKQorICAgICAgICAgIC0gbWlkTWFy
a2VyKCkgLT4gbWFya2VyTWlkUmVzb3VyY2UoKQorICAgICAgICAgIC0gZW5kTWFya2VyKCkgLT4g
bWFya2VyRW5kUmVzb3VyY2UoKQorICAgICAgICAgIC0gZmlsdGVyKCkgLT4gZmlsdGVyUmVzb3Vy
Y2UoKQorCisgICAgICAgIEFkYXB0IGFsbCBjYWxsc2l0ZXMgdG8gdGhlIHJlbmFtZXMgYWJvdmUu
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhpcyBkb2Vzbid0IGFmZmVjdCBhbnl0aGluZyBl
eGNlcHQgbWVtb3J5IG92ZXJoZWFkLgorCisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OmdldFNWR1Byb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6c2VsZldpbGxQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBv
cnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyQmFzZTo6cHJlcGFyZVRvUmVuZGVy
U1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJCYXNlOjpmaWx0ZXJCb3Vu
ZGluZ0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlckJhc2U6OmNs
aXBwZXJCb3VuZGluZ0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRl
ckJhc2U6Om1hc2tlckJvdW5kaW5nQm94Rm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVyZWdpc3RlckZyb21SZXNvdXJjZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZXNvdXJjZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TVkdS
ZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6U1ZHUmVu
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN0eWxlOjppbmhlcml0RnJvbSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUZp
bGxEYXRhOjpTdHlsZUZpbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRmlsbERhdGE6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTdHJva2VEYXRhOjpTdHlsZVN0
cm9rZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTdHJva2VEYXRhOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU3RvcERhdGE6OlN0eWxlU3RvcERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTdG9wRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVRleHREYXRhOjpTdHlsZVRleHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlTWlzY0RhdGE6OlN0eWxlTWlzY0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVNaXNj
RGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0RhdGE6
OlN0eWxlU2hhZG93U1ZHRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0Rh
dGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvdXJjZURhdGE6OlN0
eWxlUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb3VyY2VEYXRhOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRh
OjpTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUlu
aGVyaXRlZFJlc291cmNlRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVGaWxsRGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVN0b3BEYXRhOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlTWlzY0RhdGE6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZU1pc2NEYXRhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
TWlzY0RhdGE6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGFkb3dTVkdE
YXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGFkb3dTVkdEYXRhOjpjb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hhZG93U1ZHRGF0YTo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb3VyY2VEYXRhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb3VyY2VEYXRhOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJp
dGVkUmVzb3VyY2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbmhlcml0
ZWRSZXNvdXJjZURhdGE6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbmhlcml0ZWRS
ZXNvdXJjZURhdGE6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92
ZVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6CisgICAg
ICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkRWxlbWVudDo6aW52YWxpZGF0ZVJlc291cmNlcyk6CisKIDIwMTAtMDQtMTMgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAkocmV2aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTYgKzEwMiwxNiBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXcml0aW5nTW9kZToKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHN2Z1N0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNsaXBQYXRoOgotICAgICAgICAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3Zn
U3R5bGUtPmNsaXBQYXRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAg
ICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+Y2xpcHBl
clJlc291cmNlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKICAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKLSAgICAgICAgICAgIGlmICghc3ZnU3R5bGUt
Pm1hc2tFbGVtZW50KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJj
ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2UoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0g
ICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmZpbHRlcigp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICBpZiAoIXN2Z1N0eWxl
LT5maWx0ZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlGbG9vZENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVDb2xvcihzdmdTdHlsZS0+Zmxvb2RDb2xvcigpLnJnYigpKTsKQEAgLTEyNCwxNiArMTI0
LDE2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUtlcm5pbmc6CiAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5bGUtPmtl
cm5pbmcoKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKLSAgICAgICAgICAg
IGlmICghc3ZnU3R5bGUtPmVuZE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZW5kTWFya2VyKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1h
cmtlckVuZFJlc291cmNlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmtlck1pZDoKLSAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1pZE1hcmtlcigp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdmdTdHlsZS0+bWlkTWFya2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsK
KyAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0
eWxlLT5tYXJrZXJNaWRSZXNvdXJjZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAg
ICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NT
VmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlclN0YXJ0OgotICAgICAg
ICAgICAgaWYgKCFzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPnN0YXJ0TWFy
a2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIGlmICghc3Zn
U3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPm1hcmtlclN0YXJ0UmVz
b3VyY2UoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5bGUt
PnN0cm9rZVBhaW50KCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2
aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBc
CiBlbHNlIGlmIChpc0luaXRpYWwpIFwKICAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKFNWR1JlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOwogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGZsb2F0IHJvdW5kVG9OZWFyZXN0R2x5cGhPcmllbnRhdGlvbkFuZ2xlKGZsb2F0IGFuZ2xl
KQpAQCAtMzIxLDcgKzMyMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9w
ZXJ0eSgKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyU3RhcnQ6CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0YXJ0TWFy
a2VyLCBTdGFydE1hcmtlcikKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KG1hcmtlclN0YXJ0UmVzb3VyY2UsIE1hcmtlclN0YXJ0UmVzb3VyY2UpCiAgICAgICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzMyLDEy
ICszMzEsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldFN0YXJ0TWFya2VyKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKyAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5j
ZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJNaWQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKG1pZE1hcmtlciwgTWlkTWFya2VyKQorICAgICAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFya2VyTWlkUmVzb3VyY2UsIE1hcmtlck1pZFJl
c291cmNlKQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKQEAgLTM0OCwxMiArMzQ3LDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlTVkdQcm9wZXJ0eSgKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNaWRNYXJrZXIoU1ZHVVJJUmVmZXJlbmNl
OjpnZXRUYXJnZXQocykpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291
cmNlKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJFbmQ6CiAgICAgICAgIHsK
LSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGVuZE1hcmtlciwgRW5kTWFy
a2VyKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFya2VyRW5kUmVz
b3VyY2UsIE1hcmtlckVuZFJlc291cmNlKQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTM2NCw3ICszNjMsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RW5kTWFya2Vy
KFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChzKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tl
TGluZWNhcDoKQEAgLTM5Miw3ICszOTEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
U1ZHUHJvcGVydHkoCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoK
ICAgICAgICAgewotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVy
LCBGaWx0ZXIpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXJS
ZXNvdXJjZSwgRmlsdGVyUmVzb3VyY2UpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDAyLDEyICs0MDEsMTMgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHMgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyKFNWR1VS
SVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZp
bHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXNrRWxlbWVudCwg
TWFza0VsZW1lbnQpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXNr
ZXJSZXNvdXJjZSwgTWFza2VyUmVzb3VyY2UpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDE3LDEzICs0MTcsMTMgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrRWxl
bWVudChTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChzKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmdldFRh
cmdldChzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q2xpcFBhdGg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKGNsaXBQYXRoLCBDbGlwUGF0aCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGNsaXBwZXJSZXNvdXJjZSwgQ2xpcHBlclJlc291cmNlKQogICAgICAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTQzNCw3ICs0MzQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHko
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0Q2xpcFBhdGgoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQocykpOwor
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dEFuY2hvcjoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3Bw
CShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsOSArMzAxLDkgQEAgdm9pZCBSZW5kZXJQYXRoOjpjYWxjdWxh
dGVNYXJrZXJCb3VuZHNJZgogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEF0b21pY1N0cmluZyBz
dGFydE1hcmtlcklkKHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpKTsKLSAgICBBdG9taWNTdHJpbmcg
bWlkTWFya2VySWQoc3ZnU3R5bGUtPm1pZE1hcmtlcigpKTsKLSAgICBBdG9taWNTdHJpbmcgZW5k
TWFya2VySWQoc3ZnU3R5bGUtPmVuZE1hcmtlcigpKTsKKyAgICBBdG9taWNTdHJpbmcgc3RhcnRN
YXJrZXJJZChzdmdTdHlsZS0+bWFya2VyU3RhcnRSZXNvdXJjZSgpKTsKKyAgICBBdG9taWNTdHJp
bmcgbWlkTWFya2VySWQoc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpOworICAgIEF0b21p
Y1N0cmluZyBlbmRNYXJrZXJJZChzdmdTdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7CiAKICAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIgPSBnZXRSZW5kZXJTVkdSZXNv
dXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KGRvYywgc3RhcnRNYXJrZXJJZCk7CiAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291
cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4oZG9jLCBtaWRNYXJrZXJJZCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDU3NTcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQ
YWludCgpCiB7CiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBTVkdSZXNvdXJjZUZpbHRlciog
ZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCksIHRo
aXMpOworICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpLCB0aGlzKTsKICAgICBpZiAoZmlsdGVy
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHAJKHJldmlzaW9uIDU3NTcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIFJlbmRl
clNWR1Jvb3Q6OnNlbGZXaWxsUGFpbnQoKSBjb25zCiB7CiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
LSAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgp
LCBzdmdTdHlsZS0+ZmlsdGVyKCksIHRoaXMpOworICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0
ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgp
LCB0aGlzKTsKICAgICBpZiAoZmlsdGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDU3NTcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiwxMSArMTEyLDExIEBAIGJvb2wgU1ZHUmVuZGVyQmFzZTo6cHJlcGFyZVRvUmVu
ZGVyU1ZHQ28KICAgICB9CiAKICNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBBdG9taWNTdHJpbmcg
ZmlsdGVySWQoc3ZnU3R5bGUtPmZpbHRlcigpKTsKKyAgICBBdG9taWNTdHJpbmcgZmlsdGVySWQo
c3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpOwogI2VuZGlmCiAKLSAgICBBdG9taWNTdHJpbmcg
Y2xpcHBlcklkKHN2Z1N0eWxlLT5jbGlwUGF0aCgpKTsKLSAgICBBdG9taWNTdHJpbmcgbWFza2Vy
SWQoc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkpOworICAgIEF0b21pY1N0cmluZyBjbGlwcGVySWQo
c3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKKyAgICBBdG9taWNTdHJpbmcgbWFza2VySWQo
c3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
b2JqZWN0LT5kb2N1bWVudCgpOwogCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBTVkdSZW5kZXJC
YXNlOjppc092ZXJmbG93SGlkZGVuKGNvbgogRmxvYXRSZWN0IFNWR1JlbmRlckJhc2U6OmZpbHRl
ckJvdW5kaW5nQm94Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0
CiB7CiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9
IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0
eWxlKCktPmZpbHRlcigpLCBvYmplY3QpOworICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIg
PSBnZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpLT5maWx0ZXJSZXNvdXJjZSgpLCBvYmplY3QpOwogICAgIGlmIChmaWx0ZXIpCiAgICAg
ICAgIHJldHVybiBmaWx0ZXItPmZpbHRlckJvdW5kaW5nQm94KG9iamVjdC0+b2JqZWN0Qm91bmRp
bmdCb3goKSk7CiAjZWxzZQpAQCAtMjk0LDcgKzI5NCw3IEBAIEZsb2F0UmVjdCBTVkdSZW5kZXJC
YXNlOjpmaWx0ZXJCb3VuZGluZ0IKIAogRmxvYXRSZWN0IFNWR1JlbmRlckJhc2U6OmNsaXBwZXJC
b3VuZGluZ0JveEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAog
ewotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJT
VkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QtPmRvY3VtZW50
KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFBhdGgoKSkpCisgICAgaWYgKFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJ
ZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5z
dHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwcGVyUmVzb3VyY2UoKSkpCiAgICAgICAgIHJldHVybiBj
bGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7
CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgRmxvYXRSZWN0
IFNWR1JlbmRlckJhc2U6OmNsaXBwZXJCb3VuZGluZwogCiBGbG9hdFJlY3QgU1ZHUmVuZGVyQmFz
ZTo6bWFza2VyQm91bmRpbmdCb3hGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkgY29uc3QKIHsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LT5k
b2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPm1hc2tFbGVtZW50KCkpKQor
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9i
amVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza2VyUmVzb3VyY2UoKSkpCiAgICAgICAgIHJl
dHVybiBtYXNrZXItPnJlc291cmNlQm91bmRpbmdCb3gob2JqZWN0LT5vYmplY3RCb3VuZGluZ0Jv
eCgpKTsKIAogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKQEAgLTMxMSwxNSArMzExLDE1IEBAIEZs
b2F0UmVjdCBTVkdSZW5kZXJCYXNlOjptYXNrZXJCb3VuZGluZ0IKIHZvaWQgZGVyZWdpc3RlckZy
b21SZXNvdXJjZXMoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gV2Ugb25seSBoYXZl
IHRoZSByZW5kZXJlciBmb3IgbWFza2VyIGFuZCBjbGlwcGVyIGF0IHRoZSBtb21lbnQuCi0gICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJj
ZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0
LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5tYXNrRWxlbWVudCgpKSkKKyAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2
Z1N0eWxlKCktPm1hc2tlclJlc291cmNlKCkpKQogICAgICAgICBtYXNrZXItPmludmFsaWRhdGVD
bGllbnQob2JqZWN0KTsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVy
ID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4ob2Jq
ZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBQYXRoKCkp
KQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJT
VkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QtPmRvY3VtZW50
KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcHBlclJlc291cmNlKCkpKQogICAg
ICAgICBjbGlwcGVyLT5pbnZhbGlkYXRlQ2xpZW50KG9iamVjdCk7Ci0gICAgaWYgKFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxl
KCktPnN2Z1N0eWxlKCktPnN0YXJ0TWFya2VyKCkpKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogc3RhcnRNYXJrZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI+KG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpLT5tYXJrZXJTdGFydFJlc291cmNlKCkpKQogICAgICAgICBzdGFydE1hcmtlci0+aW52
YWxpZGF0ZUNsaWVudChvYmplY3QpOwotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWlkTWFya2VyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWlk
TWFya2VyKCkpKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyID0g
Z2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihvYmplY3Qt
PmRvY3VtZW50KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFya2VyTWlkUmVzb3Vy
Y2UoKSkpCiAgICAgICAgIG1pZE1hcmtlci0+aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOwotICAg
IGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyID0gZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9i
amVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZW5kTWFya2VyKCkpKQorICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJl
bmRlclNWR1Jlc291cmNlTWFya2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5bGUo
KS0+c3ZnU3R5bGUoKS0+bWFya2VyRW5kUmVzb3VyY2UoKSkpCiAgICAgICAgIGVuZE1hcmtlci0+
aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDEwICsz
NTIsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogICAgICAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLT5jbGlwUnVsZSgp
LCBSVUxFX05PTlpFUk8pOwogICAgIH0KIAotICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgInN0YXJ0
IG1hcmtlciIsIHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpKTsKLSAgICB3cml0ZUlmTm90RW1wdHko
dHMsICJtaWRkbGUgbWFya2VyIiwgc3ZnU3R5bGUtPm1pZE1hcmtlcigpKTsKLSAgICB3cml0ZUlm
Tm90RW1wdHkodHMsICJlbmQgbWFya2VyIiwgc3ZnU3R5bGUtPmVuZE1hcmtlcigpKTsKLSAgICB3
cml0ZUlmTm90RW1wdHkodHMsICJmaWx0ZXIiLCBzdmdTdHlsZS0+ZmlsdGVyKCkpOworICAgIHdy
aXRlSWZOb3RFbXB0eSh0cywgInN0YXJ0IG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJrZXJTdGFydFJl
c291cmNlKCkpOworICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgIm1pZGRsZSBtYXJrZXIiLCBzdmdT
dHlsZS0+bWFya2VyTWlkUmVzb3VyY2UoKSk7CisgICAgd3JpdGVJZk5vdEVtcHR5KHRzLCAiZW5k
IG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpKTsKKyAgICB3cml0ZUlmTm90
RW1wdHkodHMsICJmaWx0ZXIiLCBzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSk7CiB9CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAtNjA0LDIxICs2MDQsMjEgQEAgdm9pZCB3cml0
ZVJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgY29ucwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSA9IG9iamVjdC5zdHlsZSgpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwogCi0gICAgaWYgKCFzdmdTdHlsZS0+bWFza0VsZW1lbnQo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNr
ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KG9i
amVjdC5kb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKSkpIHsKKyAgICBpZiAoIXN2
Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrZXJS
ZXNvdXJjZSgpKSkgewogICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAg
ICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0
cywgIm1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHdyaXRl
TmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAibWFza2VyIiwgc3ZnU3R5bGUtPm1hc2tlclJlc291cmNl
KCkpOwogICAgICAgICAgICAgdHMgPDwgIiAiOwogICAgICAgICAgICAgd3JpdGVTdGFuZGFyZFBy
ZWZpeCh0cywgKm1hc2tlciwgMCk7CiAgICAgICAgICAgICB0cyA8PCAiICIgPDwgbWFza2VyLT5y
ZXNvdXJjZUJvdW5kaW5nQm94KG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKSA8PCAiXG4iOwog
ICAgICAgICB9CiAgICAgfQotICAgIGlmICghc3ZnU3R5bGUtPmNsaXBQYXRoKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRS
ZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QuZG9j
dW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkpKSB7CisgICAgaWYgKCFzdmdTdHlsZS0+Y2xp
cHBlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyPihvYmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJj
ZSgpKSkgewogICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgICAgICAg
ICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgImNs
aXBQYXRoIiwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkpOworICAgICAgICAgICAgd3JpdGVOYW1lQW5k
UXVvdGVkVmFsdWUodHMsICJjbGlwUGF0aCIsIHN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKSk7
CiAgICAgICAgICAgICB0cyA8PCAiICI7CiAgICAgICAgICAgICB3cml0ZVN0YW5kYXJkUHJlZml4
KHRzLCAqY2xpcHBlciwgMCk7CiAgICAgICAgICAgICB0cyA8PCAiICIgPDwgY2xpcHBlci0+cmVz
b3VyY2VCb3VuZGluZ0JveChvYmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKSkgPDwgIlxuIjsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9u
IDU3NTcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogCiAgICAgQmFzZWQgb24ga2h0bWwgY29kZSBieToKICAgICBDb3B5cmlnaHQgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCkBAIC0yNSwxMyArMjYsMTMg
QEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgpAQCAtNDgsMTEg
KzQ5LDEwIEBAIFNWR1JlbmRlclN0eWxlOjpTVkdSZW5kZXJTdHlsZSgpCiAgICAgc3Ryb2tlID0g
ZGVmYXVsdFN0eWxlLT5zdHJva2U7CiAgICAgdGV4dCA9IGRlZmF1bHRTdHlsZS0+dGV4dDsKICAg
ICBzdG9wcyA9IGRlZmF1bHRTdHlsZS0+c3RvcHM7Ci0gICAgY2xpcCA9IGRlZmF1bHRTdHlsZS0+
Y2xpcDsKLSAgICBtYXNrID0gZGVmYXVsdFN0eWxlLT5tYXNrOwogICAgIG1pc2MgPSBkZWZhdWx0
U3R5bGUtPm1pc2M7Ci0gICAgbWFya2VycyA9IGRlZmF1bHRTdHlsZS0+bWFya2VyczsKICAgICBz
aGFkb3dTVkcgPSBkZWZhdWx0U3R5bGUtPnNoYWRvd1NWRzsKKyAgICBpbmhlcml0ZWRSZXNvdXJj
ZXMgPSBkZWZhdWx0U3R5bGUtPmluaGVyaXRlZFJlc291cmNlczsKKyAgICByZXNvdXJjZXMgPSBk
ZWZhdWx0U3R5bGUtPnJlc291cmNlczsKIAogICAgIHNldEJpdERlZmF1bHRzKCk7CiB9CkBAIC02
NSwxMSArNjUsMTAgQEAgU1ZHUmVuZGVyU3R5bGU6OlNWR1JlbmRlclN0eWxlKENyZWF0ZURlZgog
ICAgIHN0cm9rZS5pbml0KCk7CiAgICAgdGV4dC5pbml0KCk7CiAgICAgc3RvcHMuaW5pdCgpOwot
ICAgIGNsaXAuaW5pdCgpOwotICAgIG1hc2suaW5pdCgpOwogICAgIG1pc2MuaW5pdCgpOwotICAg
IG1hcmtlcnMuaW5pdCgpOwogICAgIHNoYWRvd1NWRy5pbml0KCk7CisgICAgaW5oZXJpdGVkUmVz
b3VyY2VzLmluaXQoKTsKKyAgICByZXNvdXJjZXMuaW5pdCgpOwogfQogCiBTVkdSZW5kZXJTdHls
ZTo6U1ZHUmVuZGVyU3R5bGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUmIG90aGVyKQpAQCAtNzksMTEg
Kzc4LDEwIEBAIFNWR1JlbmRlclN0eWxlOjpTVkdSZW5kZXJTdHlsZShjb25zdCBTVkcKICAgICBz
dHJva2UgPSBvdGhlci5zdHJva2U7CiAgICAgdGV4dCA9IG90aGVyLnRleHQ7CiAgICAgc3RvcHMg
PSBvdGhlci5zdG9wczsKLSAgICBjbGlwID0gb3RoZXIuY2xpcDsKLSAgICBtYXNrID0gb3RoZXIu
bWFzazsKICAgICBtaXNjID0gb3RoZXIubWlzYzsKLSAgICBtYXJrZXJzID0gb3RoZXIubWFya2Vy
czsKICAgICBzaGFkb3dTVkcgPSBvdGhlci5zaGFkb3dTVkc7CisgICAgaW5oZXJpdGVkUmVzb3Vy
Y2VzID0gb3RoZXIuaW5oZXJpdGVkUmVzb3VyY2VzOworICAgIHJlc291cmNlcyA9IG90aGVyLnJl
c291cmNlczsKIAogICAgIHN2Z19pbmhlcml0ZWRfZmxhZ3MgPSBvdGhlci5zdmdfaW5oZXJpdGVk
X2ZsYWdzOwogICAgIHN2Z19ub25pbmhlcml0ZWRfZmxhZ3MgPSBvdGhlci5zdmdfbm9uaW5oZXJp
dGVkX2ZsYWdzOwpAQCAtOTMsMjIgKzkxLDI3IEBAIFNWR1JlbmRlclN0eWxlOjp+U1ZHUmVuZGVy
U3R5bGUoKQogewogfQogCi1ib29sIFNWR1JlbmRlclN0eWxlOjpvcGVyYXRvcj09KGNvbnN0IFNW
R1JlbmRlclN0eWxlJiBvKSBjb25zdAorYm9vbCBTVkdSZW5kZXJTdHlsZTo6b3BlcmF0b3I9PShj
b25zdCBTVkdSZW5kZXJTdHlsZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChmaWxsID09
IG8uZmlsbCAmJiBzdHJva2UgPT0gby5zdHJva2UgJiYgdGV4dCA9PSBvLnRleHQgJiYKLSAgICAg
ICAgc3RvcHMgPT0gby5zdG9wcyAmJiBjbGlwID09IG8uY2xpcCAmJiBtYXNrID09IG8ubWFzayAm
JgotICAgICAgICBtaXNjID09IG8ubWlzYyAmJiBtYXJrZXJzID09IG8ubWFya2VycyAmJiBzaGFk
b3dTVkcgPT0gby5zaGFkb3dTVkcgJiYKLSAgICAgICAgc3ZnX2luaGVyaXRlZF9mbGFncyA9PSBv
LnN2Z19pbmhlcml0ZWRfZmxhZ3MgJiYKLSAgICAgICAgc3ZnX25vbmluaGVyaXRlZF9mbGFncyA9
PSBvLnN2Z19ub25pbmhlcml0ZWRfZmxhZ3MpOworICAgIHJldHVybiBmaWxsID09IG90aGVyLmZp
bGwKKyAgICAgICAgJiYgc3Ryb2tlID09IG90aGVyLnN0cm9rZQorICAgICAgICAmJiB0ZXh0ID09
IG90aGVyLnRleHQKKyAgICAgICAgJiYgc3RvcHMgPT0gb3RoZXIuc3RvcHMKKyAgICAgICAgJiYg
bWlzYyA9PSBvdGhlci5taXNjCisgICAgICAgICYmIHNoYWRvd1NWRyA9PSBvdGhlci5zaGFkb3dT
VkcKKyAgICAgICAgJiYgaW5oZXJpdGVkUmVzb3VyY2VzID09IG90aGVyLmluaGVyaXRlZFJlc291
cmNlcworICAgICAgICAmJiByZXNvdXJjZXMgPT0gb3RoZXIucmVzb3VyY2VzCisgICAgICAgICYm
IHN2Z19pbmhlcml0ZWRfZmxhZ3MgPT0gb3RoZXIuc3ZnX2luaGVyaXRlZF9mbGFncworICAgICAg
ICAmJiBzdmdfbm9uaW5oZXJpdGVkX2ZsYWdzID09IG90aGVyLnN2Z19ub25pbmhlcml0ZWRfZmxh
Z3M7CiB9CiAKIGJvb2wgU1ZHUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4gKGZpbGwgIT0gb3RoZXIt
PmZpbGwKLSAgICAgICAgICAgIHx8IHN0cm9rZSAhPSBvdGhlci0+c3Ryb2tlCi0gICAgICAgICAg
ICB8fCBtYXJrZXJzICE9IG90aGVyLT5tYXJrZXJzCi0gICAgICAgICAgICB8fCB0ZXh0ICE9IG90
aGVyLT50ZXh0Ci0gICAgICAgICAgICB8fCBzdmdfaW5oZXJpdGVkX2ZsYWdzICE9IG90aGVyLT5z
dmdfaW5oZXJpdGVkX2ZsYWdzKTsKKyAgICByZXR1cm4gZmlsbCAhPSBvdGhlci0+ZmlsbAorICAg
ICAgICB8fCBzdHJva2UgIT0gb3RoZXItPnN0cm9rZQorICAgICAgICB8fCB0ZXh0ICE9IG90aGVy
LT50ZXh0CisgICAgICAgIHx8IGluaGVyaXRlZFJlc291cmNlcyAhPSBvdGhlci0+aW5oZXJpdGVk
UmVzb3VyY2VzCisgICAgICAgIHx8IHN2Z19pbmhlcml0ZWRfZmxhZ3MgIT0gb3RoZXItPnN2Z19p
bmhlcml0ZWRfZmxhZ3M7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3R5bGU6OmluaGVyaXRGcm9tKGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdJbmhlcml0UGFyZW50KQpAQCAtMTE4LDggKzEyMSw4IEBA
IHZvaWQgU1ZHUmVuZGVyU3R5bGU6OmluaGVyaXRGcm9tKGNvbnN0IFMKIAogICAgIGZpbGwgPSBz
dmdJbmhlcml0UGFyZW50LT5maWxsOwogICAgIHN0cm9rZSA9IHN2Z0luaGVyaXRQYXJlbnQtPnN0
cm9rZTsKLSAgICBtYXJrZXJzID0gc3ZnSW5oZXJpdFBhcmVudC0+bWFya2VyczsKICAgICB0ZXh0
ID0gc3ZnSW5oZXJpdFBhcmVudC0+dGV4dDsKKyAgICBpbmhlcml0ZWRSZXNvdXJjZXMgPSBzdmdJ
bmhlcml0UGFyZW50LT5pbmhlcml0ZWRSZXNvdXJjZXM7CiAKICAgICBzdmdfaW5oZXJpdGVkX2Zs
YWdzID0gc3ZnSW5oZXJpdFBhcmVudC0+c3ZnX2luaGVyaXRlZF9mbGFnczsKIH0KQEAgLTE0NCw3
ICsxNDcsNiBAQCBmbG9hdCBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5nCiAgICAg
cmV0dXJuIHByaW1pdGl2ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8UmVuZGVyU3R5
bGUqPihpdGVtLT5zdHlsZSgpKSwgaXRlbS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkt
PnJlbmRlclN0eWxlKCkpOwogfQogCi0KIHN0YXRpYyB2b2lkIGdldFNWR1NoYWRvd0V4dGVudChT
aGFkb3dEYXRhKiBzaGFkb3csIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSwgaW50
JiBsZWZ0KQogewogICAgIHRvcCA9IDA7CkBAIC0xOTcsNSArMTk5LDMgQEAgdm9pZCBTVkdSZW5k
ZXJTdHlsZTo6aW5mbGF0ZUZvclNoYWRvdyhGbAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykK
LQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVu
ZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5k
ZXJTdHlsZS5oCShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NW
R1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsOSArMjcsOSBAQAogI2lu
Y2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNWR1BhaW50Lmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGVEZWZzLmgiCi0jaW5jbHVkZSAiU2hhZG93RGF0YS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDEzICs5MCw2IEBAIHB1YmxpYzoKICAg
ICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChmbG9hdCwgc3Rv
cHMsIG9wYWNpdHksIFN0b3BPcGFjaXR5LCBzdG9wT3BhY2l0eSwgMS4wZikKICAgICBTVkdfUlNf
REVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChDb2xvciwgc3RvcHMsIGNvbG9y
LCBTdG9wQ29sb3IsIHN0b3BDb2xvciwgQ29sb3IoMCwgMCwgMCkpICAgIAogCi0gICAgU1ZHX1JT
X0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBjbGlwLCBjbGlw
UGF0aCwgQ2xpcFBhdGgsIGNsaXBQYXRoLCBTdHJpbmcoKSkKLSAgICBTVkdfUlNfREVGSU5FX0FU
VFJJQlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChTdHJpbmcsIG1hc2ssIG1hc2tFbGVtZW50LCBN
YXNrRWxlbWVudCwgbWFza0VsZW1lbnQsIFN0cmluZygpKQotICAgIFNWR19SU19ERUZJTkVfQVRU
UklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgbWFya2Vycywgc3RhcnRNYXJrZXIs
IFN0YXJ0TWFya2VyLCBzdGFydE1hcmtlciwgU3RyaW5nKCkpCi0gICAgU1ZHX1JTX0RFRklORV9B
VFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBtYXJrZXJzLCBtaWRNYXJrZXIs
IE1pZE1hcmtlciwgbWlkTWFya2VyLCBTdHJpbmcoKSkKLSAgICBTVkdfUlNfREVGSU5FX0FUVFJJ
QlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChTdHJpbmcsIG1hcmtlcnMsIGVuZE1hcmtlciwgRW5k
TWFya2VyLCBlbmRNYXJrZXIsIFN0cmluZygpKQotCi0gICAgU1ZHX1JTX0RFRklORV9BVFRSSUJV
VEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBtaXNjLCBmaWx0ZXIsIEZpbHRlciwgZmls
dGVyLCBTdHJpbmcoKSkKICAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhf
SU5JVElBTChmbG9hdCwgbWlzYywgZmxvb2RPcGFjaXR5LCBGbG9vZE9wYWNpdHksIGZsb29kT3Bh
Y2l0eSwgMS4wZikKICAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhfSU5J
VElBTChDb2xvciwgbWlzYywgZmxvb2RDb2xvciwgRmxvb2RDb2xvciwgZmxvb2RDb2xvciwgQ29s
b3IoMCwgMCwgMCkpCiAgICAgU1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lO
SVRJQUwoQ29sb3IsIG1pc2MsIGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5n
Q29sb3IsIENvbG9yKDI1NSwgMjU1LCAyNTUpKQpAQCAtMTAzLDYgKzk3LDE2IEBAIHB1YmxpYzoK
IAogICAgIFNWR19SU19ERUZJTkVfQVRUUklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMX09XTlBU
UihTaGFkb3dEYXRhLCBzaGFkb3dTVkcsIHNoYWRvdywgU2hhZG93LCBzaGFkb3csIDApCiAKKyAg
ICAvLyBOb24taW5oZXJpdGVkIHJlc291cmNlcworICAgIFNWR19SU19ERUZJTkVfQVRUUklCVVRF
X0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgcmVzb3VyY2VzLCBjbGlwcGVyLCBDbGlwcGVy
UmVzb3VyY2UsIGNsaXBwZXJSZXNvdXJjZSwgU3RyaW5nKCkpCisgICAgU1ZHX1JTX0RFRklORV9B
VFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCByZXNvdXJjZXMsIGZpbHRlciwg
RmlsdGVyUmVzb3VyY2UsIGZpbHRlclJlc291cmNlLCBTdHJpbmcoKSkKKyAgICBTVkdfUlNfREVG
SU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChTdHJpbmcsIHJlc291cmNlcywgbWFz
a2VyLCBNYXNrZXJSZXNvdXJjZSwgbWFza2VyUmVzb3VyY2UsIFN0cmluZygpKQorCisgICAgLy8g
SW5oZXJpdGVkIHJlc291cmNlcworICAgIFNWR19SU19ERUZJTkVfQVRUUklCVVRFX0RBVEFSRUZf
V0lUSF9JTklUSUFMKFN0cmluZywgaW5oZXJpdGVkUmVzb3VyY2VzLCBtYXJrZXJTdGFydCwgTWFy
a2VyU3RhcnRSZXNvdXJjZSwgbWFya2VyU3RhcnRSZXNvdXJjZSwgU3RyaW5nKCkpCisgICAgU1ZH
X1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBpbmhlcml0
ZWRSZXNvdXJjZXMsIG1hcmtlck1pZCwgTWFya2VyTWlkUmVzb3VyY2UsIG1hcmtlck1pZFJlc291
cmNlLCBTdHJpbmcoKSkKKyAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhf
SU5JVElBTChTdHJpbmcsIGluaGVyaXRlZFJlc291cmNlcywgbWFya2VyRW5kLCBNYXJrZXJFbmRS
ZXNvdXJjZSwgbWFya2VyRW5kUmVzb3VyY2UsIFN0cmluZygpKQorCiAgICAgLy8gY29udmVuaWVu
Y2UKICAgICBib29sIGhhc1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIChzdHJva2VQYWludCgpLT5w
YWludFR5cGUoKSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05FKTsgfQogICAgIGJvb2wg
aGFzRmlsbCgpIGNvbnN0IHsgcmV0dXJuIChmaWxsUGFpbnQoKS0+cGFpbnRUeXBlKCkgIT0gU1ZH
UGFpbnQ6OlNWR19QQUlOVFRZUEVfTk9ORSk7IH0KQEAgLTE2OSwxNSArMTczLDE0IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBpbmhlcml0ZWQgYXR0cmlidXRlcwogICAgIERhdGFSZWY8U3R5bGVGaWxs
RGF0YT4gZmlsbDsKICAgICBEYXRhUmVmPFN0eWxlU3Ryb2tlRGF0YT4gc3Ryb2tlOwotICAgIERh
dGFSZWY8U3R5bGVNYXJrZXJEYXRhPiBtYXJrZXJzOwogICAgIERhdGFSZWY8U3R5bGVUZXh0RGF0
YT4gdGV4dDsKKyAgICBEYXRhUmVmPFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhPiBpbmhlcml0
ZWRSZXNvdXJjZXM7CiAKICAgICAvLyBub24taW5oZXJpdGVkIGF0dHJpYnV0ZXMKICAgICBEYXRh
UmVmPFN0eWxlU3RvcERhdGE+IHN0b3BzOwotICAgIERhdGFSZWY8U3R5bGVDbGlwRGF0YT4gY2xp
cDsKLSAgICBEYXRhUmVmPFN0eWxlTWFza0RhdGE+IG1hc2s7CiAgICAgRGF0YVJlZjxTdHlsZU1p
c2NEYXRhPiBtaXNjOwogICAgIERhdGFSZWY8U3R5bGVTaGFkb3dTVkdEYXRhPiBzaGFkb3dTVkc7
CisgICAgRGF0YVJlZjxTdHlsZVJlc291cmNlRGF0YT4gcmVzb3VyY2VzOwogCiBwcml2YXRlOgog
ICAgIGVudW0gQ3JlYXRlRGVmYXVsdFR5cGUgeyBDcmVhdGVEZWZhdWx0IH07CkBAIC0yMTMsNSAr
MjE2LDMgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCiAjZW5kaWYgLy8gU1ZH
UmVuZGVyU3R5bGVfaAotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAJKHJldmlzaW9uIDU3NTcyKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIAogICAgIEJhc2VkIG9uIGtodG1sIGNvZGUgYnk6CiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQpAQCAtMjUsMjggKzI2LDI5IEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlRGVmcy5oIgogCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVz
cGFjZSBXZWJDb3JlIHsKIAogU3R5bGVGaWxsRGF0YTo6U3R5bGVGaWxsRGF0YSgpCisgICAgOiBv
cGFjaXR5KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbE9wYWNpdHkoKSkKKyAgICAsIHBhaW50
KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50KCkpCiB7Ci0gICAgcGFpbnQgPSBTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludCgpOwotICAgIG9wYWNpdHkgPSBTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbEZpbGxPcGFjaXR5KCk7CiB9CiAKIFN0eWxlRmlsbERhdGE6OlN0eWxlRmls
bERhdGEoY29uc3QgU3R5bGVGaWxsRGF0YSYgb3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPFN0eWxl
RmlsbERhdGE+KCkKKyAgICAsIG9wYWNpdHkob3RoZXIub3BhY2l0eSkKKyAgICAsIHBhaW50KG90
aGVyLnBhaW50KQogewotICAgIHBhaW50ID0gb3RoZXIucGFpbnQ7Ci0gICAgb3BhY2l0eSA9IG90
aGVyLm9wYWNpdHk7CiB9CiAKLWJvb2wgU3R5bGVGaWxsRGF0YTo6b3BlcmF0b3I9PShjb25zdCBT
dHlsZUZpbGxEYXRhICZvdGhlcikgY29uc3QKK2Jvb2wgU3R5bGVGaWxsRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBTdHlsZUZpbGxEYXRhJiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAob3BhY2l0eSAh
PSBvdGhlci5vcGFjaXR5KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Nyw2NCArNjksNjQg
QEAgYm9vbCBTdHlsZUZpbGxEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eQogfQogCiBTdHlsZVN0
cm9rZURhdGE6OlN0eWxlU3Ryb2tlRGF0YSgpCisgICAgOiBvcGFjaXR5KFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsU3Ryb2tlT3BhY2l0eSgpKQorICAgICwgbWl0ZXJMaW1pdChTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKSkKKyAgICAsIHdpZHRoKFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsU3Ryb2tlV2lkdGgoKSkKKyAgICAsIGRhc2hPZmZzZXQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxTdHJva2VEYXNoT2Zmc2V0KCkpCisgICAgLCBwYWludChTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZVBhaW50KCkpCisgICAgLCBkYXNoQXJyYXkoU1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxTdHJva2VEYXNoQXJyYXkoKSkKIHsKLSAgICB3aWR0aCA9IFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsU3Ryb2tlV2lkdGgoKTsKLSAgICBwYWludCA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFs
U3Ryb2tlUGFpbnQoKTsKLSAgICBvcGFjaXR5ID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VPcGFjaXR5KCk7Ci0gICAgbWl0ZXJMaW1pdCA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlTWl0ZXJMaW1pdCgpOwotICAgIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlh
bFN0cm9rZURhc2hPZmZzZXQoKTsKLSAgICBkYXNoQXJyYXkgPSBTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZURhc2hBcnJheSgpOwogfQogCiBTdHlsZVN0cm9rZURhdGE6OlN0eWxlU3Ryb2tl
RGF0YShjb25zdCBTdHlsZVN0cm9rZURhdGEmIG90aGVyKQogICAgIDogUmVmQ291bnRlZDxTdHls
ZVN0cm9rZURhdGE+KCkKKyAgICAsIG9wYWNpdHkob3RoZXIub3BhY2l0eSkKKyAgICAsIG1pdGVy
TGltaXQob3RoZXIubWl0ZXJMaW1pdCkKKyAgICAsIHdpZHRoKG90aGVyLndpZHRoKQorICAgICwg
ZGFzaE9mZnNldChvdGhlci5kYXNoT2Zmc2V0KQorICAgICwgcGFpbnQob3RoZXIucGFpbnQpCisg
ICAgLCBkYXNoQXJyYXkob3RoZXIuZGFzaEFycmF5KQogewotICAgIHdpZHRoID0gb3RoZXIud2lk
dGg7Ci0gICAgcGFpbnQgPSBvdGhlci5wYWludDsKLSAgICBvcGFjaXR5ID0gb3RoZXIub3BhY2l0
eTsKLSAgICBtaXRlckxpbWl0ID0gb3RoZXIubWl0ZXJMaW1pdDsKLSAgICBkYXNoT2Zmc2V0ID0g
b3RoZXIuZGFzaE9mZnNldDsKLSAgICBkYXNoQXJyYXkgPSBvdGhlci5kYXNoQXJyYXk7Ci19Ci0K
LWJvb2wgU3R5bGVTdHJva2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3Ryb2tlRGF0YSAm
b3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChwYWludCA9PSBvdGhlci5wYWludCkgJiYKLSAg
ICAgICAgICAgKHdpZHRoID09IG90aGVyLndpZHRoKSAmJgotICAgICAgICAgICAob3BhY2l0eSA9
PSBvdGhlci5vcGFjaXR5KSAmJgotICAgICAgICAgICAobWl0ZXJMaW1pdCA9PSBvdGhlci5taXRl
ckxpbWl0KSAmJgotICAgICAgICAgICAoZGFzaE9mZnNldCA9PSBvdGhlci5kYXNoT2Zmc2V0KSAm
JgotICAgICAgICAgICAoZGFzaEFycmF5ID09IG90aGVyLmRhc2hBcnJheSk7Cit9CisKK2Jvb2wg
U3R5bGVTdHJva2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3Ryb2tlRGF0YSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBhaW50ID09IG90aGVyLnBhaW50CisgICAgICAgICYmIHdp
ZHRoID09IG90aGVyLndpZHRoCisgICAgICAgICYmIG9wYWNpdHkgPT0gb3RoZXIub3BhY2l0eQor
ICAgICAgICAmJiBtaXRlckxpbWl0ID09IG90aGVyLm1pdGVyTGltaXQKKyAgICAgICAgJiYgZGFz
aE9mZnNldCA9PSBvdGhlci5kYXNoT2Zmc2V0CisgICAgICAgICYmIGRhc2hBcnJheSA9PSBvdGhl
ci5kYXNoQXJyYXk7CiB9CiAKIFN0eWxlU3RvcERhdGE6OlN0eWxlU3RvcERhdGEoKQorICAgIDog
b3BhY2l0eShTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0b3BPcGFjaXR5KCkpCisgICAgLCBjb2xv
cihTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0b3BDb2xvcigpKQogewotICAgIGNvbG9yID0gU1ZH
UmVuZGVyU3R5bGU6OmluaXRpYWxTdG9wQ29sb3IoKTsKLSAgICBvcGFjaXR5ID0gU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxTdG9wT3BhY2l0eSgpOwogfQogCiBTdHlsZVN0b3BEYXRhOjpTdHlsZVN0
b3BEYXRhKGNvbnN0IFN0eWxlU3RvcERhdGEmIG90aGVyKQogICAgIDogUmVmQ291bnRlZDxTdHls
ZVN0b3BEYXRhPigpCisgICAgLCBvcGFjaXR5KG90aGVyLm9wYWNpdHkpCisgICAgLCBjb2xvcihv
dGhlci5jb2xvcikKIHsKLSAgICBjb2xvciA9IG90aGVyLmNvbG9yOwotICAgIG9wYWNpdHkgPSBv
dGhlci5vcGFjaXR5OwogfQogCi1ib29sIFN0eWxlU3RvcERhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
U3R5bGVTdG9wRGF0YSAmb3RoZXIpIGNvbnN0Citib29sIFN0eWxlU3RvcERhdGE6Om9wZXJhdG9y
PT0oY29uc3QgU3R5bGVTdG9wRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChjb2xv
ciA9PSBvdGhlci5jb2xvcikgJiYKLSAgICAgICAgICAgKG9wYWNpdHkgPT0gb3RoZXIub3BhY2l0
eSk7CisgICAgcmV0dXJuIGNvbG9yID09IG90aGVyLmNvbG9yCisgICAgICAgICYmIG9wYWNpdHkg
PT0gb3RoZXIub3BhY2l0eTsKIH0KIAogU3R5bGVUZXh0RGF0YTo6U3R5bGVUZXh0RGF0YSgpCisg
ICAgOiBrZXJuaW5nKFNWR1JlbmRlclN0eWxlOjppbml0aWFsS2VybmluZygpKQogewotICAgIGtl
cm5pbmcgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEtlcm5pbmcoKTsKIH0KIAogU3R5bGVUZXh0
RGF0YTo6U3R5bGVUZXh0RGF0YShjb25zdCBTdHlsZVRleHREYXRhJiBvdGhlcikKICAgICA6IFJl
ZkNvdW50ZWQ8U3R5bGVUZXh0RGF0YT4oKQorICAgICwga2VybmluZyhvdGhlci5rZXJuaW5nKQog
ewotICAgIGtlcm5pbmcgPSBvdGhlci5rZXJuaW5nOwogfQogCiBib29sIFN0eWxlVGV4dERhdGE6
Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVUZXh0RGF0YSYgb3RoZXIpIGNvbnN0CkBAIC0xMzIsMTA0
ICsxMzQsOTQgQEAgYm9vbCBTdHlsZVRleHREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eQogICAg
IHJldHVybiBrZXJuaW5nID09IG90aGVyLmtlcm5pbmc7CiB9CiAKLVN0eWxlQ2xpcERhdGE6OlN0
eWxlQ2xpcERhdGEoKQotewotICAgIGNsaXBQYXRoID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxD
bGlwUGF0aCgpOwotfQotCi1TdHlsZUNsaXBEYXRhOjpTdHlsZUNsaXBEYXRhKGNvbnN0IFN0eWxl
Q2xpcERhdGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTdHlsZUNsaXBEYXRhPigpCitTdHls
ZU1pc2NEYXRhOjpTdHlsZU1pc2NEYXRhKCkKKyAgICA6IGZsb29kQ29sb3IoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGbG9vZENvbG9yKCkpCisgICAgLCBmbG9vZE9wYWNpdHkoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGbG9vZE9wYWNpdHkoKSkKKyAgICAsIGxpZ2h0aW5nQ29sb3IoU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxMaWdodGluZ0NvbG9yKCkpCisgICAgLCBiYXNlbGluZVNoaWZ0VmFsdWUo
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxCYXNlbGluZVNoaWZ0VmFsdWUoKSkKIHsKLSAgICBjbGlw
UGF0aCA9IG90aGVyLmNsaXBQYXRoOwogfQogCi1ib29sIFN0eWxlQ2xpcERhdGE6Om9wZXJhdG9y
PT0oY29uc3QgU3R5bGVDbGlwRGF0YSAmb3RoZXIpIGNvbnN0CitTdHlsZU1pc2NEYXRhOjpTdHls
ZU1pc2NEYXRhKGNvbnN0IFN0eWxlTWlzY0RhdGEmIG90aGVyKQorICAgIDogUmVmQ291bnRlZDxT
dHlsZU1pc2NEYXRhPigpCisgICAgLCBmbG9vZENvbG9yKG90aGVyLmZsb29kQ29sb3IpCisgICAg
LCBmbG9vZE9wYWNpdHkob3RoZXIuZmxvb2RPcGFjaXR5KQorICAgICwgbGlnaHRpbmdDb2xvcihv
dGhlci5saWdodGluZ0NvbG9yKQorICAgICwgYmFzZWxpbmVTaGlmdFZhbHVlKG90aGVyLmJhc2Vs
aW5lU2hpZnRWYWx1ZSkKIHsKLSAgICByZXR1cm4gKGNsaXBQYXRoID09IG90aGVyLmNsaXBQYXRo
KTsKIH0KIAotU3R5bGVNYXNrRGF0YTo6U3R5bGVNYXNrRGF0YSgpCitib29sIFN0eWxlTWlzY0Rh
dGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVNaXNjRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAg
bWFza0VsZW1lbnQgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbE1hc2tFbGVtZW50KCk7CisgICAg
cmV0dXJuIGZsb29kT3BhY2l0eSA9PSBvdGhlci5mbG9vZE9wYWNpdHkKKyAgICAgICAgJiYgZmxv
b2RDb2xvciA9PSBvdGhlci5mbG9vZENvbG9yCisgICAgICAgICYmIGxpZ2h0aW5nQ29sb3IgPT0g
b3RoZXIubGlnaHRpbmdDb2xvcgorICAgICAgICAmJiBiYXNlbGluZVNoaWZ0VmFsdWUgPT0gb3Ro
ZXIuYmFzZWxpbmVTaGlmdFZhbHVlOwogfQogCi1TdHlsZU1hc2tEYXRhOjpTdHlsZU1hc2tEYXRh
KGNvbnN0IFN0eWxlTWFza0RhdGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTdHlsZU1hc2tE
YXRhPigpCitTdHlsZVNoYWRvd1NWR0RhdGE6OlN0eWxlU2hhZG93U1ZHRGF0YSgpCiB7Ci0gICAg
bWFza0VsZW1lbnQgPSBvdGhlci5tYXNrRWxlbWVudDsKIH0KIAotYm9vbCBTdHlsZU1hc2tEYXRh
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlTWFza0RhdGEgJm90aGVyKSBjb25zdAorU3R5bGVTaGFk
b3dTVkdEYXRhOjpTdHlsZVNoYWRvd1NWR0RhdGEoY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBv
dGhlcikKKyAgICA6IFJlZkNvdW50ZWQ8U3R5bGVTaGFkb3dTVkdEYXRhPigpCisgICAgLCBzaGFk
b3cob3RoZXIuc2hhZG93ID8gbmV3IFNoYWRvd0RhdGEoKm90aGVyLnNoYWRvdykgOiAwKQogewot
ICAgIHJldHVybiAobWFza0VsZW1lbnQgPT0gb3RoZXIubWFza0VsZW1lbnQpOwogfQogCi1TdHls
ZU1hcmtlckRhdGE6OlN0eWxlTWFya2VyRGF0YSgpCitib29sIFN0eWxlU2hhZG93U1ZHRGF0YTo6
b3BlcmF0b3I9PShjb25zdCBTdHlsZVNoYWRvd1NWR0RhdGEmIG90aGVyKSBjb25zdAogewotICAg
IHN0YXJ0TWFya2VyID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdGFydE1hcmtlcigpOwotICAg
IG1pZE1hcmtlciA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsTWlkTWFya2VyKCk7Ci0gICAgZW5k
TWFya2VyID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxFbmRNYXJrZXIoKTsKKyAgICBpZiAoKCFz
aGFkb3cgJiYgb3RoZXIuc2hhZG93KSB8fCAoc2hhZG93ICYmICFvdGhlci5zaGFkb3cpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdyAmJiBvdGhlci5zaGFkb3cgJiYgKCpz
aGFkb3cgIT0gKm90aGVyLnNoYWRvdykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotU3R5bGVNYXJrZXJEYXRhOjpTdHlsZU1hcmtlckRhdGEoY29uc3QgU3R5
bGVNYXJrZXJEYXRhJiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8U3R5bGVNYXJrZXJEYXRhPigp
CitTdHlsZVJlc291cmNlRGF0YTo6U3R5bGVSZXNvdXJjZURhdGEoKQorICAgIDogY2xpcHBlcihT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbENsaXBwZXJSZXNvdXJjZSgpKQorICAgICwgZmlsdGVyKFNW
R1JlbmRlclN0eWxlOjppbml0aWFsRmlsdGVyUmVzb3VyY2UoKSkKKyAgICAsIG1hc2tlcihTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbE1hc2tlclJlc291cmNlKCkpCiB7Ci0gICAgc3RhcnRNYXJrZXIg
PSBvdGhlci5zdGFydE1hcmtlcjsKLSAgICBtaWRNYXJrZXIgPSBvdGhlci5taWRNYXJrZXI7Ci0g
ICAgZW5kTWFya2VyID0gb3RoZXIuZW5kTWFya2VyOwogfQogCi1ib29sIFN0eWxlTWFya2VyRGF0
YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZU1hcmtlckRhdGEgJm90aGVyKSBjb25zdAorU3R5bGVS
ZXNvdXJjZURhdGE6OlN0eWxlUmVzb3VyY2VEYXRhKGNvbnN0IFN0eWxlUmVzb3VyY2VEYXRhJiBv
dGhlcikKKyAgICA6IFJlZkNvdW50ZWQ8U3R5bGVSZXNvdXJjZURhdGE+KCkKKyAgICAsIGNsaXBw
ZXIob3RoZXIuY2xpcHBlcikKKyAgICAsIGZpbHRlcihvdGhlci5maWx0ZXIpCisgICAgLCBtYXNr
ZXIob3RoZXIubWFza2VyKQogewotICAgIHJldHVybiAoc3RhcnRNYXJrZXIgPT0gb3RoZXIuc3Rh
cnRNYXJrZXIgJiYgbWlkTWFya2VyID09IG90aGVyLm1pZE1hcmtlciAmJiBlbmRNYXJrZXIgPT0g
b3RoZXIuZW5kTWFya2VyKTsKIH0KIAotU3R5bGVNaXNjRGF0YTo6U3R5bGVNaXNjRGF0YSgpCiti
b29sIFN0eWxlUmVzb3VyY2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb3VyY2VEYXRh
JiBvdGhlcikgY29uc3QKIHsKLSAgICBmbG9vZENvbG9yID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxGbG9vZENvbG9yKCk7Ci0gICAgZmxvb2RPcGFjaXR5ID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxGbG9vZE9wYWNpdHkoKTsKLSAgICBsaWdodGluZ0NvbG9yID0gU1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaWdodGluZ0NvbG9yKCk7Ci0gICAgYmFzZWxpbmVTaGlmdFZhbHVlID0gU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxCYXNlbGluZVNoaWZ0VmFsdWUoKTsKKyAgICByZXR1cm4gY2xpcHBlciA9
PSBvdGhlci5jbGlwcGVyCisgICAgICAgICYmIGZpbHRlciA9PSBvdGhlci5maWx0ZXIKKyAgICAg
ICAgJiYgbWFza2VyID09IG90aGVyLm1hc2tlcjsKIH0KIAotU3R5bGVNaXNjRGF0YTo6U3R5bGVN
aXNjRGF0YShjb25zdCBTdHlsZU1pc2NEYXRhJiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8U3R5
bGVNaXNjRGF0YT4oKQorU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE6OlN0eWxlSW5oZXJpdGVk
UmVzb3VyY2VEYXRhKCkKKyAgICA6IG1hcmtlclN0YXJ0KFNWR1JlbmRlclN0eWxlOjppbml0aWFs
TWFya2VyU3RhcnRSZXNvdXJjZSgpKQorICAgICwgbWFya2VyTWlkKFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsTWFya2VyTWlkUmVzb3VyY2UoKSkKKyAgICAsIG1hcmtlckVuZChTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbE1hcmtlckVuZFJlc291cmNlKCkpCiB7Ci0gICAgZmlsdGVyID0gb3RoZXIuZmls
dGVyOwotICAgIGZsb29kQ29sb3IgPSBvdGhlci5mbG9vZENvbG9yOwotICAgIGZsb29kT3BhY2l0
eSA9IG90aGVyLmZsb29kT3BhY2l0eTsKLSAgICBsaWdodGluZ0NvbG9yID0gb3RoZXIubGlnaHRp
bmdDb2xvcjsKLSAgICBiYXNlbGluZVNoaWZ0VmFsdWUgPSBvdGhlci5iYXNlbGluZVNoaWZ0VmFs
dWU7CiB9CiAKLWJvb2wgU3R5bGVNaXNjRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZU1pc2NE
YXRhICZvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gZmlsdGVyID09IG90aGVyLmZpbHRlcgot
ICAgICAgICAgICAmJiBmbG9vZE9wYWNpdHkgPT0gb3RoZXIuZmxvb2RPcGFjaXR5Ci0gICAgICAg
ICAgICYmIGZsb29kQ29sb3IgPT0gb3RoZXIuZmxvb2RDb2xvcgotICAgICAgICAgICAmJiBsaWdo
dGluZ0NvbG9yID09IG90aGVyLmxpZ2h0aW5nQ29sb3IKLSAgICAgICAgICAgJiYgYmFzZWxpbmVT
aGlmdFZhbHVlID09IG90aGVyLmJhc2VsaW5lU2hpZnRWYWx1ZTsKLX0KLQotU3R5bGVTaGFkb3dT
VkdEYXRhOjpTdHlsZVNoYWRvd1NWR0RhdGEoKQorU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE6
OlN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhKGNvbnN0IFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VE
YXRhJiBvdGhlcikKKyAgICA6IFJlZkNvdW50ZWQ8U3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE+
KCkKKyAgICAsIG1hcmtlclN0YXJ0KG90aGVyLm1hcmtlclN0YXJ0KQorICAgICwgbWFya2VyTWlk
KG90aGVyLm1hcmtlck1pZCkKKyAgICAsIG1hcmtlckVuZChvdGhlci5tYXJrZXJFbmQpCiB7CiB9
CiAKLVN0eWxlU2hhZG93U1ZHRGF0YTo6U3R5bGVTaGFkb3dTVkdEYXRhKGNvbnN0IFN0eWxlU2hh
ZG93U1ZHRGF0YSYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPFN0eWxlU2hhZG93U1ZHRGF0YT4o
KQotICAgICwgc2hhZG93KG90aGVyLnNoYWRvdyA/IG5ldyBTaGFkb3dEYXRhKCpvdGhlci5zaGFk
b3cpIDogMCkKK2Jvb2wgU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE6Om9wZXJhdG9yPT0oY29u
c3QgU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEmIG90aGVyKSBjb25zdAogeworICAgIHJldHVy
biBtYXJrZXJTdGFydCA9PSBvdGhlci5tYXJrZXJTdGFydAorICAgICAgICAmJiBtYXJrZXJNaWQg
PT0gb3RoZXIubWFya2VyTWlkCisgICAgICAgICYmIG1hcmtlckVuZCA9PSBvdGhlci5tYXJrZXJF
bmQ7CiB9CiAKLWJvb2wgU3R5bGVTaGFkb3dTVkdEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxl
U2hhZG93U1ZHRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCghc2hhZG93ICYmIG90aGVy
LnNoYWRvdykgfHwgKHNoYWRvdyAmJiAhb3RoZXIuc2hhZG93KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChzaGFkb3cgJiYgb3RoZXIuc2hhZG93ICYmICgqc2hhZG93ICE9ICpvdGhl
ci5zaGFkb3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaAkocmV2aXNpb24gNTc1NzIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIAogICAgIEJhc2VkIG9uIGtodG1sIGNvZGUgYnk6CiAgICAgQ29weXJpZ2h0IChDKSAyMDAw
LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKQEAgLTI5LDExICszMCw5IEBACiAKICNp
ZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC0xMzMsOCAr
MTMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZUZpbGxEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVGaWxsRGF0
YSk7IH0KICAgICAgICAgUGFzc1JlZlB0cjxTdHlsZUZpbGxEYXRhPiBjb3B5KCkgY29uc3QgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlRmlsbERhdGEoKnRoaXMpKTsgfQogICAgICAgICAKLSAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlRmlsbERhdGEgJm90aGVyKSBjb25zdDsK
LSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlRmlsbERhdGEgJm90aGVyKSBjb25z
dAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVGaWxsRGF0YSYpIGNvbnN0Owor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVGaWxsRGF0YSYgb3RoZXIpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAg
ICAgfQpAQCAtMTc3LDggKzE3Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3R5bGVTdG9wRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlU3RvcERhdGEpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVTdG9wRGF0YT4g
Y29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVN0b3BEYXRhKCp0aGlzKSk7
IH0KIAotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVTdG9wRGF0YSAmb3RoZXIp
IGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTdG9wRGF0YSAmb3Ro
ZXIpIGNvbnN0CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVN0b3BEYXRhJikg
Y29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVN0b3BEYXRhJiBvdGhl
cikgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogICAgICAgICB9CkBAIC0yMDYsMTA5ICsyMDUsOTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgU3R5bGVUZXh0RGF0YSgpOwotICAgICAgICBTdHlsZVRl
eHREYXRhKGNvbnN0IFN0eWxlVGV4dERhdGEmIG90aGVyKTsKKyAgICAgICAgU3R5bGVUZXh0RGF0
YShjb25zdCBTdHlsZVRleHREYXRhJik7CiAgICAgfTsKIAotICAgIGNsYXNzIFN0eWxlQ2xpcERh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZUNsaXBEYXRhPiB7CisgICAgLy8gTm90ZTogdGhl
IHJ1bGUgZm9yIHRoaXMgY2xhc3MgaXMsICpubyBpbmhlcml0YW5jZSogb2YgdGhlc2UgcHJvcHMK
KyAgICBjbGFzcyBTdHlsZU1pc2NEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVNaXNjRGF0
YT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVDbGlwRGF0
YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlQ2xpcERhdGEpOyB9Ci0gICAg
ICAgIFBhc3NSZWZQdHI8U3R5bGVDbGlwRGF0YT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZUNsaXBEYXRhKCp0aGlzKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3R5bGVNaXNjRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlTWlz
Y0RhdGEpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVNaXNjRGF0YT4gY29weSgpIGNvbnN0
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1pc2NEYXRhKCp0aGlzKSk7IH0KIAotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVDbGlwRGF0YSAmb3RoZXIpIGNvbnN0OwotICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDbGlwRGF0YSAmb3RoZXIpIGNvbnN0Cisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1pc2NEYXRhJikgY29uc3Q7CisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZU1pc2NEYXRhJiBvdGhlcikgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgICAgICB9
CiAKLSAgICAgICAgU3RyaW5nIGNsaXBQYXRoOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU3R5
bGVDbGlwRGF0YSgpOwotICAgICAgICBTdHlsZUNsaXBEYXRhKGNvbnN0IFN0eWxlQ2xpcERhdGEm
KTsKLSAgICB9OwotCi0gICAgY2xhc3MgU3R5bGVNYXNrRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVk
PFN0eWxlTWFza0RhdGE+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlTWFza0RhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1hc2tE
YXRhKTsgfQotICAgICAgICBQYXNzUmVmUHRyPFN0eWxlTWFza0RhdGE+IGNvcHkoKSBjb25zdCB7
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVNYXNrRGF0YSgqdGhpcykpOyB9Ci0KLSAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlTWFza0RhdGEgJm90aGVyKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlTWFza0RhdGEgJm90aGVyKSBjb25zdCB7IHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICBDb2xvciBmbG9vZENvbG9yOworICAg
ICAgICBmbG9hdCBmbG9vZE9wYWNpdHk7CisgICAgICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7CiAK
LSAgICAgICAgU3RyaW5nIG1hc2tFbGVtZW50OworICAgICAgICAvLyBub24taW5oZXJpdGVkIHRl
eHQgc3R1ZmYgbGl2ZXMgaGVyZSBub3QgaW4gU3R5bGVUZXh0RGF0YS4KKyAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBiYXNlbGluZVNoaWZ0VmFsdWU7CiAKLSAgICBwcml2YXRlOiAgICAgICAgCi0g
ICAgICAgIFN0eWxlTWFza0RhdGEoKTsKLSAgICAgICAgU3R5bGVNYXNrRGF0YShjb25zdCBTdHls
ZU1hc2tEYXRhJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3R5bGVNaXNjRGF0YSgpOworICAg
ICAgICBTdHlsZU1pc2NEYXRhKGNvbnN0IFN0eWxlTWlzY0RhdGEmKTsKICAgICB9OwogCi0gICAg
Y2xhc3MgU3R5bGVNYXJrZXJEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVNYXJrZXJEYXRh
PiB7CisgICAgY2xhc3MgU3R5bGVTaGFkb3dTVkdEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5
bGVTaGFkb3dTVkdEYXRhPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHlsZU1hcmtlckRhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1h
cmtlckRhdGEpOyB9Ci0gICAgICAgIFBhc3NSZWZQdHI8U3R5bGVNYXJrZXJEYXRhPiBjb3B5KCkg
Y29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlTWFya2VyRGF0YSgqdGhpcykpOyB9Ci0K
LSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlTWFya2VyRGF0YSAmb3RoZXIpIGNv
bnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVNYXJrZXJEYXRhICZvdGhl
cikgY29uc3QKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGFkb3dTVkdEYXRhPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGFkb3dTVkdEYXRhKTsgfQorICAg
ICAgICBQYXNzUmVmUHRyPFN0eWxlU2hhZG93U1ZHRGF0YT4gY29weSgpIGNvbnN0IHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdHlsZVNoYWRvd1NWR0RhdGEoKnRoaXMpKTsgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYpIGNvbnN0Owor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBvdGhlcikg
Y29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIHN0YXJ0TWFya2VyOwotICAgICAgICBTdHJpbmcg
bWlkTWFya2VyOwotICAgICAgICBTdHJpbmcgZW5kTWFya2VyOworICAgICAgICBPd25QdHI8U2hh
ZG93RGF0YT4gc2hhZG93OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3R5bGVNYXJrZXJEYXRh
KCk7Ci0gICAgICAgIFN0eWxlTWFya2VyRGF0YShjb25zdCBTdHlsZU1hcmtlckRhdGEmKTsKKyAg
ICAgICAgU3R5bGVTaGFkb3dTVkdEYXRhKCk7CisgICAgICAgIFN0eWxlU2hhZG93U1ZHRGF0YShj
b25zdCBTdHlsZVNoYWRvd1NWR0RhdGEmKTsKICAgICB9OwogCi0gICAgLy8gTm90ZSA6IHRoZSBy
dWxlIGZvciB0aGlzIGNsYXNzIGlzLCAqbm8gaW5oZXJpdGFuY2UqIG9mIHRoZXNlIHByb3BzCi0g
ICAgY2xhc3MgU3R5bGVNaXNjRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlTWlzY0RhdGE+
IHsKKyAgICAvLyBOb24taW5oZXJpdGVkIHJlc291cmNlcworICAgIGNsYXNzIFN0eWxlUmVzb3Vy
Y2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVSZXNvdXJjZURhdGE+IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlTWlzY0RhdGE+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1pc2NEYXRhKTsgfQotICAgICAgICBQYXNzUmVmUHRy
PFN0eWxlTWlzY0RhdGE+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVN
aXNjRGF0YSgqdGhpcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUmVzb3Vy
Y2VEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSZXNvdXJjZURhdGEp
OyB9CisgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVSZXNvdXJjZURhdGE+IGNvcHkoKSBjb25zdCB7
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSZXNvdXJjZURhdGEoKnRoaXMpKTsgfQogCi0gICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1pc2NEYXRhICZvdGhlcikgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZU1pc2NEYXRhICZvdGhlcikgY29uc3QK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb3VyY2VEYXRhJikgY29uc3Q7
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc291cmNlRGF0YSYgb3RoZXIp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
ICAgICAgICAgfQogCisgICAgICAgIFN0cmluZyBjbGlwcGVyOwogICAgICAgICBTdHJpbmcgZmls
dGVyOwotICAgICAgICBDb2xvciBmbG9vZENvbG9yOwotICAgICAgICBmbG9hdCBmbG9vZE9wYWNp
dHk7Ci0KLSAgICAgICAgQ29sb3IgbGlnaHRpbmdDb2xvcjsKLQotICAgICAgICAvLyBub24taW5o
ZXJpdGVkIHRleHQgc3R1ZmYgbGl2ZXMgaGVyZSBub3QgaW4gU3R5bGVUZXh0RGF0YS4KLSAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlbGluZVNoaWZ0VmFsdWU7CisgICAgICAgIFN0cmluZyBt
YXNrZXI7CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdHlsZU1pc2NEYXRhKCk7Ci0gICAgICAg
IFN0eWxlTWlzY0RhdGEoY29uc3QgU3R5bGVNaXNjRGF0YSYpOworICAgICAgICBTdHlsZVJlc291
cmNlRGF0YSgpOworICAgICAgICBTdHlsZVJlc291cmNlRGF0YShjb25zdCBTdHlsZVJlc291cmNl
RGF0YSYpOwogICAgIH07Ci0gICAgCi0gICAgY2xhc3MgU3R5bGVTaGFkb3dTVkdEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8U3R5bGVTaGFkb3dTVkdEYXRhPiB7CisKKyAgICAvLyBJbmhlcml0ZWQg
cmVzb3VyY2VzCisgICAgY2xhc3MgU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YT4gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVTaGFkb3dTVkdEYXRhPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGFkb3dTVkdEYXRhKTsgfQotICAgICAgICBQYXNzUmVm
UHRyPFN0eWxlU2hhZG93U1ZHRGF0YT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHlsZVNoYWRvd1NWR0RhdGEoKnRoaXMpKTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3RoZXIpIGNvbnN0OwotICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBvdGhlcikgY29uc3QK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YSk7
IH0KKyAgICAgICAgUGFzc1JlZlB0cjxTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YT4gY29weSgp
IGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YSgq
dGhpcykpOyB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW5oZXJpdGVk
UmVzb3VyY2VEYXRhJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHls
ZUluaGVyaXRlZFJlc291cmNlRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIE93blB0
cjxTaGFkb3dEYXRhPiBzaGFkb3c7CisgICAgICAgIFN0cmluZyBtYXJrZXJTdGFydDsKKyAgICAg
ICAgU3RyaW5nIG1hcmtlck1pZDsKKyAgICAgICAgU3RyaW5nIG1hcmtlckVuZDsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFN0eWxlU2hhZG93U1ZHRGF0YSgpOwotICAgICAgICBTdHlsZVNoYWRv
d1NWR0RhdGEoY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBvdGhlcik7CisgICAgICAgIFN0eWxl
SW5oZXJpdGVkUmVzb3VyY2VEYXRhKCk7CisgICAgICAgIFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VE
YXRhKGNvbnN0IFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhJik7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKICNlbmRpZiAvLyBTVkdS
ZW5kZXJTdHlsZURlZnNfaAotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmNwcAkocmV2aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgU1ZHU3R5bGVk
RWxlbWVudDo6aW52YWxpZGF0ZVJlc291cmMKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KEZJTFRFUlMpCi0gICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQo
ZG9jdW1lbnQsIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCksIG9iamVjdCk7
CisgICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQs
IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyUmVzb3VyY2UoKSwgb2JqZWN0KTsK
ICAgICBpZiAoZmlsdGVyKQogICAgICAgICBmaWx0ZXItPmludmFsaWRhdGUoKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53325</attachid>
            <date>2010-04-14 03:14:21 -0700</date>
            <delta_ts>2010-04-14 03:40:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37568-20100414121411.patch</filename>
            <type>text/plain</type>
            <size>50442</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDQtMTQgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHUmVuZGVyU3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzIG5lZWRzIGEgY2xlYW51cAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc1NjgKKwor
ICAgICAgICBDbGVhbnVwIFNWR1JlbmRlclN0eWxlIC8gU1ZHUmVuZGVyU3R5bGVEZWZzOgorICAg
ICAgICAtIHVzZSBjb3B5IGNvbnN0cnVjdG9ycyBpbiBpbml0aWFsaXphdGlvbiBsaXN0IHRvIGlu
aXRpYWxpemUgbWVtYmVycywgaW5zdGVhZCBvZiBhc3NpZ25tZW50IG9wZXJhdG9ycyBpbiB0aGUg
Ym9keQorICAgICAgICAtIGZpeCBzdHlsZSBpc3N1ZXMgKG1pc3BsYWNlZCByZWZlcmVuY2VzLCBh
YmJyZXZhdGlvbnMpCisgICAgICAgIC0gbWVyZ2UgU3R5bGVDbGlwRGF0YS9TdHlsZU1hc2tEYXRh
IHRvIHNhdmUgbWVtb3J5LCByZW5hbWUgaXQgU3R5bGVSZXNvdXJjZURhdGEKKyAgICAgICAgLSBt
b3ZlIGZpbHRlciBwcm9wZXJ0eSBpbiBTdHlsZVJlc291cmNlRGF0YQorICAgICAgICAtIHJlbmFt
ZSBTdHlsZU1hcmtlckRhdGEgdG8gU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEgdG8gaGlnaGxp
Z2h0IHRoZSBkaWZmZXJlbmNlIHRvIFN0eWxlUmVzb3VyY2VEYXRhCisgICAgICAgIC0gdW5pZnkg
bmFtaW5nIHNjaGVtZXMgZm9yIGFsbCByZXNvdXJjZXMgKGZpbHRlci9jbGlwcGVyL21hc2tlci9t
YXJrZXJzKQorICAgICAgICAgIC0gY2xpcFBhdGgoKSAtPiBjbGlwcGVyUmVzb3VyY2UoKQorICAg
ICAgICAgIC0gbWFza0VsZW1lbnQoKSAtPiBtYXNrZXJSZXNvdXJjZSgpCisgICAgICAgICAgLSBz
dGFydE1hcmtlcigpIC0+IG1hcmtlclN0YXJ0UmVzb3VyY2UoKQorICAgICAgICAgIC0gbWlkTWFy
a2VyKCkgLT4gbWFya2VyTWlkUmVzb3VyY2UoKQorICAgICAgICAgIC0gZW5kTWFya2VyKCkgLT4g
bWFya2VyRW5kUmVzb3VyY2UoKQorICAgICAgICAgIC0gZmlsdGVyKCkgLT4gZmlsdGVyUmVzb3Vy
Y2UoKQorCisgICAgICAgIEFkYXB0IGFsbCBjYWxsc2l0ZXMgdG8gdGhlIHJlbmFtZXMgYWJvdmUu
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhpcyBkb2Vzbid0IGFmZmVjdCBhbnl0aGluZyBl
eGNlcHQgbWVtb3J5IG92ZXJoZWFkLgorCisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OmdldFNWR1Byb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6c2VsZldpbGxQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBv
cnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyQmFzZTo6cHJlcGFyZVRvUmVuZGVy
U1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJCYXNlOjpmaWx0ZXJCb3Vu
ZGluZ0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlckJhc2U6OmNs
aXBwZXJCb3VuZGluZ0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRl
ckJhc2U6Om1hc2tlckJvdW5kaW5nQm94Rm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZGVyZWdpc3RlckZyb21SZXNvdXJjZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZXNvdXJjZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TVkdS
ZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6U1ZHUmVu
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN0eWxlOjppbmhlcml0RnJvbSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUZp
bGxEYXRhOjpTdHlsZUZpbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRmlsbERhdGE6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTdHJva2VEYXRhOjpTdHlsZVN0
cm9rZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTdHJva2VEYXRhOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU3RvcERhdGE6OlN0eWxlU3RvcERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTdG9wRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVRleHREYXRhOjpTdHlsZVRleHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlTWlzY0RhdGE6OlN0eWxlTWlzY0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVNaXNj
RGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0RhdGE6
OlN0eWxlU2hhZG93U1ZHRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0Rh
dGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvdXJjZURhdGE6OlN0
eWxlUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb3VyY2VEYXRhOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRh
OjpTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUlu
aGVyaXRlZFJlc291cmNlRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVGaWxsRGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVN0b3BEYXRhOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlTWlzY0RhdGE6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZU1pc2NEYXRhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
TWlzY0RhdGE6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGFkb3dTVkdE
YXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGFkb3dTVkdEYXRhOjpjb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hhZG93U1ZHRGF0YTo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb3VyY2VEYXRhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb3VyY2VEYXRhOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJp
dGVkUmVzb3VyY2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbmhlcml0
ZWRSZXNvdXJjZURhdGE6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbmhlcml0ZWRS
ZXNvdXJjZURhdGE6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92
ZVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6CisgICAg
ICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkRWxlbWVudDo6aW52YWxpZGF0ZVJlc291cmNlcyk6CisKIDIwMTAtMDQtMTMgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAkocmV2aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTYgKzEwMiwxNiBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXcml0aW5nTW9kZToKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHN2Z1N0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNsaXBQYXRoOgotICAgICAgICAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3Zn
U3R5bGUtPmNsaXBQYXRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAg
ICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+Y2xpcHBl
clJlc291cmNlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKICAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKLSAgICAgICAgICAgIGlmICghc3ZnU3R5bGUt
Pm1hc2tFbGVtZW50KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJj
ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2UoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0g
ICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmZpbHRlcigp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICBpZiAoIXN2Z1N0eWxl
LT5maWx0ZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlGbG9vZENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVDb2xvcihzdmdTdHlsZS0+Zmxvb2RDb2xvcigpLnJnYigpKTsKQEAgLTEyNCwxNiArMTI0
LDE2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUtlcm5pbmc6CiAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5bGUtPmtl
cm5pbmcoKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKLSAgICAgICAgICAg
IGlmICghc3ZnU3R5bGUtPmVuZE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZW5kTWFya2VyKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1h
cmtlckVuZFJlc291cmNlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmtlck1pZDoKLSAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1pZE1hcmtlcigp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdmdTdHlsZS0+bWlkTWFya2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsK
KyAgICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0
eWxlLT5tYXJrZXJNaWRSZXNvdXJjZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAg
ICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NT
VmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlclN0YXJ0OgotICAgICAg
ICAgICAgaWYgKCFzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPnN0YXJ0TWFy
a2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIGlmICghc3Zn
U3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPm1hcmtlclN0YXJ0UmVz
b3VyY2UoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5bGUt
PnN0cm9rZVBhaW50KCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2
aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBc
CiBlbHNlIGlmIChpc0luaXRpYWwpIFwKICAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKFNWR1JlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOwogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGZsb2F0IHJvdW5kVG9OZWFyZXN0R2x5cGhPcmllbnRhdGlvbkFuZ2xlKGZsb2F0IGFuZ2xl
KQpAQCAtMzIxLDcgKzMyMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9w
ZXJ0eSgKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyU3RhcnQ6CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0YXJ0TWFy
a2VyLCBTdGFydE1hcmtlcikKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KG1hcmtlclN0YXJ0UmVzb3VyY2UsIE1hcmtlclN0YXJ0UmVzb3VyY2UpCiAgICAgICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzMyLDEy
ICszMzEsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldFN0YXJ0TWFya2VyKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKyAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5j
ZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJNaWQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKG1pZE1hcmtlciwgTWlkTWFya2VyKQorICAgICAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFya2VyTWlkUmVzb3VyY2UsIE1hcmtlck1pZFJl
c291cmNlKQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKQEAgLTM0OCwxMiArMzQ3LDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlTVkdQcm9wZXJ0eSgKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNaWRNYXJrZXIoU1ZHVVJJUmVmZXJlbmNl
OjpnZXRUYXJnZXQocykpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291
cmNlKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJFbmQ6CiAgICAgICAgIHsK
LSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGVuZE1hcmtlciwgRW5kTWFy
a2VyKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFya2VyRW5kUmVz
b3VyY2UsIE1hcmtlckVuZFJlc291cmNlKQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTM2NCw3ICszNjMsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RW5kTWFya2Vy
KFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChzKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tl
TGluZWNhcDoKQEAgLTM5Miw3ICszOTEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
U1ZHUHJvcGVydHkoCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoK
ICAgICAgICAgewotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVy
LCBGaWx0ZXIpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXJS
ZXNvdXJjZSwgRmlsdGVyUmVzb3VyY2UpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDAyLDEyICs0MDEsMTMgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHMgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyKFNWR1VS
SVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKKworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZp
bHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXNrRWxlbWVudCwg
TWFza0VsZW1lbnQpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXNr
ZXJSZXNvdXJjZSwgTWFza2VyUmVzb3VyY2UpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDE3LDEzICs0MTcsMTMgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrRWxl
bWVudChTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChzKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmdldFRh
cmdldChzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q2xpcFBhdGg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKGNsaXBQYXRoLCBDbGlwUGF0aCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGNsaXBwZXJSZXNvdXJjZSwgQ2xpcHBlclJlc291cmNlKQogICAgICAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTQzNCw3ICs0MzQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHko
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0Q2xpcFBhdGgoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQocykpOwor
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dEFuY2hvcjoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3Bw
CShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsOSArMzAxLDkgQEAgdm9pZCBSZW5kZXJQYXRoOjpjYWxjdWxh
dGVNYXJrZXJCb3VuZHNJZgogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEF0b21pY1N0cmluZyBz
dGFydE1hcmtlcklkKHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpKTsKLSAgICBBdG9taWNTdHJpbmcg
bWlkTWFya2VySWQoc3ZnU3R5bGUtPm1pZE1hcmtlcigpKTsKLSAgICBBdG9taWNTdHJpbmcgZW5k
TWFya2VySWQoc3ZnU3R5bGUtPmVuZE1hcmtlcigpKTsKKyAgICBBdG9taWNTdHJpbmcgc3RhcnRN
YXJrZXJJZChzdmdTdHlsZS0+bWFya2VyU3RhcnRSZXNvdXJjZSgpKTsKKyAgICBBdG9taWNTdHJp
bmcgbWlkTWFya2VySWQoc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpOworICAgIEF0b21p
Y1N0cmluZyBlbmRNYXJrZXJJZChzdmdTdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7CiAKICAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIgPSBnZXRSZW5kZXJTVkdSZXNv
dXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KGRvYywgc3RhcnRNYXJrZXJJZCk7CiAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291
cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4oZG9jLCBtaWRNYXJrZXJJZCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDU3NTcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6c2VsZldpbGxQ
YWludCgpCiB7CiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBTVkdSZXNvdXJjZUZpbHRlciog
ZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCksIHRo
aXMpOworICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpLCB0aGlzKTsKICAgICBpZiAoZmlsdGVy
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiA1NzU3MikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5
UmVzbwogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94
KQogewogICAgIC8vIElmIHRoZSBjdXJyZW50IGNsaXAtcGF0aCBnZXRzIGNsaXBwZWQgaXRzZWxm
LCB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRvIG1hc2tpbmcuCi0gICAgaWYgKCFzdHlsZSgpLT5zdmdT
dHlsZSgpLT5jbGlwUGF0aCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0eWxlKCktPnN2Z1N0eWxl
KCktPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIFdpbmRSdWxlIGNsaXBSdWxlID0gUlVMRV9OT05aRVJPOwogICAgIFBhdGggY2xpcFBhdGgg
PSBQYXRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OnBhdGhPbmx5QwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKICAgICAgICAgLy8gQ3Vy
cmVudCBzaGFwZSBpbiBjbGlwLXBhdGggZ2V0cyBjbGlwcGVkIHRvby4gRmFsbGJhY2sgdG8gbWFz
a2luZy4KLSAgICAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5KCkpCisgICAg
ICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gRmFsbGJhY2sgdG8gbWFza2luZywgaWYgdGhl
cmUgaXMgbW9yZSB0aGFuIG9uZSBjbGlwcGluZyBwYXRoLgogICAgICAgICBpZiAoY2xpcFBhdGgu
aXNFbXB0eSgpKSB7CkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmNyZWF0ZUNsaQogCiAgICAgLy8gY2xpcFBhdGggY2FuIGFsc28gYmUgY2xpcHBlZCBi
eSBhbm90aGVyIGNsaXBQYXRoLgogICAgIGJvb2wgY2xpcHBlckdldHNDbGlwcGVkID0gZmFsc2U7
Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRlclNW
R1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KHRoaXMtPmRvY3VtZW50KCks
IHN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBQYXRoKCkpKSB7CisgICAgaWYgKFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI+KHRoaXMtPmRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCkt
PmNsaXBwZXJSZXNvdXJjZSgpKSkgewogICAgICAgICBjbGlwcGVyR2V0c0NsaXBwZWQgPSB0cnVl
OwogICAgICAgICBpZiAoIWNsaXBwZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQodGhpcywgb2Jq
ZWN0Qm91bmRpbmdCb3gsIHJlcGFpbnRSZWN0LCBtYXNrQ29udGV4dCkpIHsKICAgICAgICAgICAg
IG1hc2tDb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0yMjcsOCArMjI3LDggQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmNyZWF0ZUNsaQogICAgICAgICBuZXdSZW5kZXJTdHlsZS5nZXQo
KS0+c2V0T3BhY2l0eSgxLjBmKTsKICAgICAgICAgc3ZnU3R5bGUtPnNldEZpbGxPcGFjaXR5KDEu
MGYpOwogICAgICAgICBzdmdTdHlsZS0+c2V0U3Ryb2tlT3BhY2l0eSgxLjBmKTsKLSAgICAgICAg
c3ZnU3R5bGUtPnNldEZpbHRlcihTdHJpbmcoKSk7Ci0gICAgICAgIHN2Z1N0eWxlLT5zZXRNYXNr
RWxlbWVudChTdHJpbmcoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShT
dHJpbmcoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTdHJpbmcoKSk7
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShuZXdSZW5kZXJTdHlsZS5yZWxlYXNlKCkpOwog
CiAgICAgICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgdGhlIGVsZW1lbnQsIHRoYXQgaXMgcmVm
ZXJlbmNlZCBieSB0aGUgPHVzZT4tZWxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCShyZXZpc2lvbiA1NzU3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBSZW5kZXJT
VkdSb290OjpzZWxmV2lsbFBhaW50KCkgY29ucwogewogI2lmIEVOQUJMRShGSUxURVJTKQogICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0g
ICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwg
c3ZnU3R5bGUtPmZpbHRlcigpLCB0aGlzKTsKKyAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVy
ID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSwg
dGhpcyk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiA1NzU3MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTIsMTEgKzExMiwxMSBAQCBib29sIFNWR1JlbmRlckJhc2U6OnByZXBhcmVUb1JlbmRl
clNWR0NvCiAgICAgfQogCiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgQXRvbWljU3RyaW5nIGZp
bHRlcklkKHN2Z1N0eWxlLT5maWx0ZXIoKSk7CisgICAgQXRvbWljU3RyaW5nIGZpbHRlcklkKHN2
Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKTsKICNlbmRpZgogCi0gICAgQXRvbWljU3RyaW5nIGNs
aXBwZXJJZChzdmdTdHlsZS0+Y2xpcFBhdGgoKSk7Ci0gICAgQXRvbWljU3RyaW5nIG1hc2tlcklk
KHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpKTsKKyAgICBBdG9taWNTdHJpbmcgY2xpcHBlcklkKHN2
Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKSk7CisgICAgQXRvbWljU3RyaW5nIG1hc2tlcklkKHN2
Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG9i
amVjdC0+ZG9jdW1lbnQoKTsKIApAQCAtMjgzLDcgKzI4Myw3IEBAIGJvb2wgU1ZHUmVuZGVyQmFz
ZTo6aXNPdmVyZmxvd0hpZGRlbihjb24KIEZsb2F0UmVjdCBTVkdSZW5kZXJCYXNlOjpmaWx0ZXJC
b3VuZGluZ0JveEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAog
ewogI2lmIEVOQUJMRShGSUxURVJTKQotICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBn
ZXRGaWx0ZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHls
ZSgpLT5maWx0ZXIoKSwgb2JqZWN0KTsKKyAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0g
Z2V0RmlsdGVyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5
bGUoKS0+ZmlsdGVyUmVzb3VyY2UoKSwgb2JqZWN0KTsKICAgICBpZiAoZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmlsdGVyLT5maWx0ZXJCb3VuZGluZ0JveChvYmplY3QtPm9iamVjdEJvdW5kaW5n
Qm94KCkpOwogI2Vsc2UKQEAgLTI5NCw3ICsyOTQsNyBAQCBGbG9hdFJlY3QgU1ZHUmVuZGVyQmFz
ZTo6ZmlsdGVyQm91bmRpbmdCCiAKIEZsb2F0UmVjdCBTVkdSZW5kZXJCYXNlOjpjbGlwcGVyQm91
bmRpbmdCb3hGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKIHsK
LSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0UmVuZGVyU1ZH
UmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4ob2JqZWN0LT5kb2N1bWVudCgp
LCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBQYXRoKCkpKQorICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcHBlclJlc291cmNlKCkpKQogICAgICAgICByZXR1cm4gY2xp
cHBlci0+cmVzb3VyY2VCb3VuZGluZ0JveChvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCkpOwog
CiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzAyLDcgKzMwMiw3IEBAIEZsb2F0UmVjdCBT
VkdSZW5kZXJCYXNlOjpjbGlwcGVyQm91bmRpbmcKIAogRmxvYXRSZWN0IFNWR1JlbmRlckJhc2U6
Om1hc2tlckJvdW5kaW5nQm94Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
IGNvbnN0CiB7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRS
ZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KG9iamVjdC0+ZG9j
dW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5tYXNrRWxlbWVudCgpKSkKKyAg
ICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291
cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmpl
Y3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPm1hc2tlclJlc291cmNlKCkpKQogICAgICAgICByZXR1
cm4gbWFza2VyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3go
KSk7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC0zMTEsMTUgKzMxMSwxNSBAQCBGbG9h
dFJlY3QgU1ZHUmVuZGVyQmFzZTo6bWFza2VyQm91bmRpbmdCCiB2b2lkIGRlcmVnaXN0ZXJGcm9t
UmVzb3VyY2VzKFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIC8vIFdlIG9ubHkgaGF2ZSB0
aGUgcmVuZGVyZXIgZm9yIG1hc2tlciBhbmQgY2xpcHBlciBhdCB0aGUgbW9tZW50LgotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VC
eUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+bWFza0VsZW1lbnQoKSkpCisgICAgaWYgKFJlbmRlclNWR1Jl
c291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXI+KG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpLT5tYXNrZXJSZXNvdXJjZSgpKSkKICAgICAgICAgbWFza2VyLT5pbnZhbGlkYXRlQ2xp
ZW50KG9iamVjdCk7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9
IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KG9iamVj
dC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwUGF0aCgpKSkK
KyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0UmVuZGVyU1ZH
UmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4ob2JqZWN0LT5kb2N1bWVudCgp
LCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBwZXJSZXNvdXJjZSgpKSkKICAgICAg
ICAgY2xpcHBlci0+aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOwotICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KG9iamVjdC0+ZG9jdW1lbnQoKSwgb2JqZWN0LT5zdHlsZSgp
LT5zdmdTdHlsZSgpLT5zdGFydE1hcmtlcigpKSkKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIHN0YXJ0TWFya2VyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jl
c291cmNlTWFya2VyPihvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5
bGUoKS0+bWFya2VyU3RhcnRSZXNvdXJjZSgpKSkKICAgICAgICAgc3RhcnRNYXJrZXItPmludmFs
aWRhdGVDbGllbnQob2JqZWN0KTsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1p
ZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPm1pZE1h
cmtlcigpKSkKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciA9IGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4ob2JqZWN0LT5k
b2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPm1hcmtlck1pZFJlc291cmNl
KCkpKQogICAgICAgICBtaWRNYXJrZXItPmludmFsaWRhdGVDbGllbnQob2JqZWN0KTsKLSAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291
cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmpl
Y3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmVuZE1hcmtlcigpKSkKKyAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcj4ob2JqZWN0LT5kb2N1bWVudCgpLCBvYmplY3QtPnN0eWxlKCkt
PnN2Z1N0eWxlKCktPm1hcmtlckVuZFJlc291cmNlKCkpKQogICAgICAgICBlbmRNYXJrZXItPmlu
dmFsaWRhdGVDbGllbnQob2JqZWN0KTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDU3NTcyKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MiwxMCArMzUy
LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAg
d3JpdGVJZk5vdERlZmF1bHQodHMsICJjbGlwIHJ1bGUiLCBzdmdTdHlsZS0+Y2xpcFJ1bGUoKSwg
UlVMRV9OT05aRVJPKTsKICAgICB9CiAKLSAgICB3cml0ZUlmTm90RW1wdHkodHMsICJzdGFydCBt
YXJrZXIiLCBzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKSk7Ci0gICAgd3JpdGVJZk5vdEVtcHR5KHRz
LCAibWlkZGxlIG1hcmtlciIsIHN2Z1N0eWxlLT5taWRNYXJrZXIoKSk7Ci0gICAgd3JpdGVJZk5v
dEVtcHR5KHRzLCAiZW5kIG1hcmtlciIsIHN2Z1N0eWxlLT5lbmRNYXJrZXIoKSk7Ci0gICAgd3Jp
dGVJZk5vdEVtcHR5KHRzLCAiZmlsdGVyIiwgc3ZnU3R5bGUtPmZpbHRlcigpKTsKKyAgICB3cml0
ZUlmTm90RW1wdHkodHMsICJzdGFydCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyU3RhcnRSZXNv
dXJjZSgpKTsKKyAgICB3cml0ZUlmTm90RW1wdHkodHMsICJtaWRkbGUgbWFya2VyIiwgc3ZnU3R5
bGUtPm1hcmtlck1pZFJlc291cmNlKCkpOworICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgImVuZCBt
YXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7CisgICAgd3JpdGVJZk5vdEVt
cHR5KHRzLCAiZmlsdGVyIiwgc3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpOwogfQogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTYwNCwyMSArNjA0LDIxIEBAIHZvaWQgd3JpdGVS
ZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIGNvbnMKICAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUgPSBvYmplY3Quc3R5bGUoKTsKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUg
PSBzdHlsZS0+c3ZnU3R5bGUoKTsKIAotICAgIGlmICghc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2Vy
ID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPihvYmpl
Y3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkpKSB7CisgICAgaWYgKCFzdmdT
dHlsZS0+bWFza2VyUmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKFJlbmRlclNW
R1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXI+KG9iamVjdC5kb2N1bWVudCgpLCBzdmdTdHlsZS0+bWFza2VyUmVz
b3VyY2UoKSkpIHsKICAgICAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgICAg
ICAgICAgdHMgPDwgIiAiOwotICAgICAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMs
ICJtYXNrZXIiLCBzdmdTdHlsZS0+bWFza0VsZW1lbnQoKSk7CisgICAgICAgICAgICB3cml0ZU5h
bWVBbmRRdW90ZWRWYWx1ZSh0cywgIm1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgp
KTsKICAgICAgICAgICAgIHRzIDw8ICIgIjsKICAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVm
aXgodHMsICptYXNrZXIsIDApOwogICAgICAgICAgICAgdHMgPDwgIiAiIDw8IG1hc2tlci0+cmVz
b3VyY2VCb3VuZGluZ0JveChvYmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKSkgPDwgIlxuIjsKICAg
ICAgICAgfQogICAgIH0KLSAgICBpZiAoIXN2Z1N0eWxlLT5jbGlwUGF0aCgpLmlzRW1wdHkoKSkg
ewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0UmVu
ZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4ob2JqZWN0LmRvY3Vt
ZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpKSkgeworICAgIGlmICghc3ZnU3R5bGUtPmNsaXBw
ZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyKiBjbGlwcGVyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2Uo
KSkpIHsKICAgICAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgICAgICAgICAg
dHMgPDwgIiAiOwotICAgICAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJjbGlw
UGF0aCIsIHN2Z1N0eWxlLT5jbGlwUGF0aCgpKTsKKyAgICAgICAgICAgIHdyaXRlTmFtZUFuZFF1
b3RlZFZhbHVlKHRzLCAiY2xpcFBhdGgiLCBzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkpOwog
ICAgICAgICAgICAgdHMgPDwgIiAiOwogICAgICAgICAgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0
cywgKmNsaXBwZXIsIDApOwogICAgICAgICAgICAgdHMgPDwgIiAiIDw8IGNsaXBwZXItPnJlc291
cmNlQm91bmRpbmdCb3gob2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94KCkpIDw8ICJcbiI7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiA1
NzU3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIAogICAgIEJhc2VkIG9uIGtodG1sIGNvZGUgYnk6CiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQpAQCAtMjUsMTMgKzI2LDEzIEBA
CiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCiAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKQEAgLTQ4LDExICs0
OSwxMCBAQCBTVkdSZW5kZXJTdHlsZTo6U1ZHUmVuZGVyU3R5bGUoKQogICAgIHN0cm9rZSA9IGRl
ZmF1bHRTdHlsZS0+c3Ryb2tlOwogICAgIHRleHQgPSBkZWZhdWx0U3R5bGUtPnRleHQ7CiAgICAg
c3RvcHMgPSBkZWZhdWx0U3R5bGUtPnN0b3BzOwotICAgIGNsaXAgPSBkZWZhdWx0U3R5bGUtPmNs
aXA7Ci0gICAgbWFzayA9IGRlZmF1bHRTdHlsZS0+bWFzazsKICAgICBtaXNjID0gZGVmYXVsdFN0
eWxlLT5taXNjOwotICAgIG1hcmtlcnMgPSBkZWZhdWx0U3R5bGUtPm1hcmtlcnM7CiAgICAgc2hh
ZG93U1ZHID0gZGVmYXVsdFN0eWxlLT5zaGFkb3dTVkc7CisgICAgaW5oZXJpdGVkUmVzb3VyY2Vz
ID0gZGVmYXVsdFN0eWxlLT5pbmhlcml0ZWRSZXNvdXJjZXM7CisgICAgcmVzb3VyY2VzID0gZGVm
YXVsdFN0eWxlLT5yZXNvdXJjZXM7CiAKICAgICBzZXRCaXREZWZhdWx0cygpOwogfQpAQCAtNjUs
MTEgKzY1LDEwIEBAIFNWR1JlbmRlclN0eWxlOjpTVkdSZW5kZXJTdHlsZShDcmVhdGVEZWYKICAg
ICBzdHJva2UuaW5pdCgpOwogICAgIHRleHQuaW5pdCgpOwogICAgIHN0b3BzLmluaXQoKTsKLSAg
ICBjbGlwLmluaXQoKTsKLSAgICBtYXNrLmluaXQoKTsKICAgICBtaXNjLmluaXQoKTsKLSAgICBt
YXJrZXJzLmluaXQoKTsKICAgICBzaGFkb3dTVkcuaW5pdCgpOworICAgIGluaGVyaXRlZFJlc291
cmNlcy5pbml0KCk7CisgICAgcmVzb3VyY2VzLmluaXQoKTsKIH0KIAogU1ZHUmVuZGVyU3R5bGU6
OlNWR1JlbmRlclN0eWxlKGNvbnN0IFNWR1JlbmRlclN0eWxlJiBvdGhlcikKQEAgLTc5LDExICs3
OCwxMCBAQCBTVkdSZW5kZXJTdHlsZTo6U1ZHUmVuZGVyU3R5bGUoY29uc3QgU1ZHCiAgICAgc3Ry
b2tlID0gb3RoZXIuc3Ryb2tlOwogICAgIHRleHQgPSBvdGhlci50ZXh0OwogICAgIHN0b3BzID0g
b3RoZXIuc3RvcHM7Ci0gICAgY2xpcCA9IG90aGVyLmNsaXA7Ci0gICAgbWFzayA9IG90aGVyLm1h
c2s7CiAgICAgbWlzYyA9IG90aGVyLm1pc2M7Ci0gICAgbWFya2VycyA9IG90aGVyLm1hcmtlcnM7
CiAgICAgc2hhZG93U1ZHID0gb3RoZXIuc2hhZG93U1ZHOworICAgIGluaGVyaXRlZFJlc291cmNl
cyA9IG90aGVyLmluaGVyaXRlZFJlc291cmNlczsKKyAgICByZXNvdXJjZXMgPSBvdGhlci5yZXNv
dXJjZXM7CiAKICAgICBzdmdfaW5oZXJpdGVkX2ZsYWdzID0gb3RoZXIuc3ZnX2luaGVyaXRlZF9m
bGFnczsKICAgICBzdmdfbm9uaW5oZXJpdGVkX2ZsYWdzID0gb3RoZXIuc3ZnX25vbmluaGVyaXRl
ZF9mbGFnczsKQEAgLTkzLDIyICs5MSwyNyBAQCBTVkdSZW5kZXJTdHlsZTo6flNWR1JlbmRlclN0
eWxlKCkKIHsKIH0KIAotYm9vbCBTVkdSZW5kZXJTdHlsZTo6b3BlcmF0b3I9PShjb25zdCBTVkdS
ZW5kZXJTdHlsZSYgbykgY29uc3QKK2Jvb2wgU1ZHUmVuZGVyU3R5bGU6Om9wZXJhdG9yPT0oY29u
c3QgU1ZHUmVuZGVyU3R5bGUmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiAoZmlsbCA9PSBv
LmZpbGwgJiYgc3Ryb2tlID09IG8uc3Ryb2tlICYmIHRleHQgPT0gby50ZXh0ICYmCi0gICAgICAg
IHN0b3BzID09IG8uc3RvcHMgJiYgY2xpcCA9PSBvLmNsaXAgJiYgbWFzayA9PSBvLm1hc2sgJiYK
LSAgICAgICAgbWlzYyA9PSBvLm1pc2MgJiYgbWFya2VycyA9PSBvLm1hcmtlcnMgJiYgc2hhZG93
U1ZHID09IG8uc2hhZG93U1ZHICYmCi0gICAgICAgIHN2Z19pbmhlcml0ZWRfZmxhZ3MgPT0gby5z
dmdfaW5oZXJpdGVkX2ZsYWdzICYmCi0gICAgICAgIHN2Z19ub25pbmhlcml0ZWRfZmxhZ3MgPT0g
by5zdmdfbm9uaW5oZXJpdGVkX2ZsYWdzKTsKKyAgICByZXR1cm4gZmlsbCA9PSBvdGhlci5maWxs
CisgICAgICAgICYmIHN0cm9rZSA9PSBvdGhlci5zdHJva2UKKyAgICAgICAgJiYgdGV4dCA9PSBv
dGhlci50ZXh0CisgICAgICAgICYmIHN0b3BzID09IG90aGVyLnN0b3BzCisgICAgICAgICYmIG1p
c2MgPT0gb3RoZXIubWlzYworICAgICAgICAmJiBzaGFkb3dTVkcgPT0gb3RoZXIuc2hhZG93U1ZH
CisgICAgICAgICYmIGluaGVyaXRlZFJlc291cmNlcyA9PSBvdGhlci5pbmhlcml0ZWRSZXNvdXJj
ZXMKKyAgICAgICAgJiYgcmVzb3VyY2VzID09IG90aGVyLnJlc291cmNlcworICAgICAgICAmJiBz
dmdfaW5oZXJpdGVkX2ZsYWdzID09IG90aGVyLnN2Z19pbmhlcml0ZWRfZmxhZ3MKKyAgICAgICAg
JiYgc3ZnX25vbmluaGVyaXRlZF9mbGFncyA9PSBvdGhlci5zdmdfbm9uaW5oZXJpdGVkX2ZsYWdz
OwogfQogCiBib29sIFNWR1JlbmRlclN0eWxlOjppbmhlcml0ZWROb3RFcXVhbChjb25zdCBTVkdS
ZW5kZXJTdHlsZSogb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChmaWxsICE9IG90aGVyLT5m
aWxsCi0gICAgICAgICAgICB8fCBzdHJva2UgIT0gb3RoZXItPnN0cm9rZQotICAgICAgICAgICAg
fHwgbWFya2VycyAhPSBvdGhlci0+bWFya2VycwotICAgICAgICAgICAgfHwgdGV4dCAhPSBvdGhl
ci0+dGV4dAotICAgICAgICAgICAgfHwgc3ZnX2luaGVyaXRlZF9mbGFncyAhPSBvdGhlci0+c3Zn
X2luaGVyaXRlZF9mbGFncyk7CisgICAgcmV0dXJuIGZpbGwgIT0gb3RoZXItPmZpbGwKKyAgICAg
ICAgfHwgc3Ryb2tlICE9IG90aGVyLT5zdHJva2UKKyAgICAgICAgfHwgdGV4dCAhPSBvdGhlci0+
dGV4dAorICAgICAgICB8fCBpbmhlcml0ZWRSZXNvdXJjZXMgIT0gb3RoZXItPmluaGVyaXRlZFJl
c291cmNlcworICAgICAgICB8fCBzdmdfaW5oZXJpdGVkX2ZsYWdzICE9IG90aGVyLT5zdmdfaW5o
ZXJpdGVkX2ZsYWdzOwogfQogCiB2b2lkIFNWR1JlbmRlclN0eWxlOjppbmhlcml0RnJvbShjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnSW5oZXJpdFBhcmVudCkKQEAgLTExOCw4ICsxMjEsOCBAQCB2
b2lkIFNWR1JlbmRlclN0eWxlOjppbmhlcml0RnJvbShjb25zdCBTCiAKICAgICBmaWxsID0gc3Zn
SW5oZXJpdFBhcmVudC0+ZmlsbDsKICAgICBzdHJva2UgPSBzdmdJbmhlcml0UGFyZW50LT5zdHJv
a2U7Ci0gICAgbWFya2VycyA9IHN2Z0luaGVyaXRQYXJlbnQtPm1hcmtlcnM7CiAgICAgdGV4dCA9
IHN2Z0luaGVyaXRQYXJlbnQtPnRleHQ7CisgICAgaW5oZXJpdGVkUmVzb3VyY2VzID0gc3ZnSW5o
ZXJpdFBhcmVudC0+aW5oZXJpdGVkUmVzb3VyY2VzOwogCiAgICAgc3ZnX2luaGVyaXRlZF9mbGFn
cyA9IHN2Z0luaGVyaXRQYXJlbnQtPnN2Z19pbmhlcml0ZWRfZmxhZ3M7CiB9CkBAIC0xNDQsNyAr
MTQ3LDYgQEAgZmxvYXQgU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZwogICAgIHJl
dHVybiBwcmltaXRpdmUtPmNvbXB1dGVMZW5ndGhGbG9hdChjb25zdF9jYXN0PFJlbmRlclN0eWxl
Kj4oaXRlbS0+c3R5bGUoKSksIGl0ZW0tPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5y
ZW5kZXJTdHlsZSgpKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBnZXRTVkdTaGFkb3dFeHRlbnQoU2hh
ZG93RGF0YSogc2hhZG93LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20sIGludCYg
bGVmdCkKIHsKICAgICB0b3AgPSAwOwpAQCAtMTk3LDUgKzE5OSwzIEBAIHZvaWQgU1ZHUmVuZGVy
U3R5bGU6OmluZmxhdGVGb3JTaGFkb3coRmwKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0K
LS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRl
clN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVy
U3R5bGUuaAkocmV2aXNpb24gNTc1NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdS
ZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAg
ICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDkgKzI3LDkgQEAKICNpbmNs
dWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJTVkdQYWludC5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlRGVmcy5oIgotI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OSwxMyArOTAsNiBAQCBwdWJsaWM6CiAgICAg
U1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoZmxvYXQsIHN0b3Bz
LCBvcGFjaXR5LCBTdG9wT3BhY2l0eSwgc3RvcE9wYWNpdHksIDEuMGYpCiAgICAgU1ZHX1JTX0RF
RklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoQ29sb3IsIHN0b3BzLCBjb2xvciwg
U3RvcENvbG9yLCBzdG9wQ29sb3IsIENvbG9yKDAsIDAsIDApKSAgICAKIAotICAgIFNWR19SU19E
RUZJTkVfQVRUUklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgY2xpcCwgY2xpcFBh
dGgsIENsaXBQYXRoLCBjbGlwUGF0aCwgU3RyaW5nKCkpCi0gICAgU1ZHX1JTX0RFRklORV9BVFRS
SUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBtYXNrLCBtYXNrRWxlbWVudCwgTWFz
a0VsZW1lbnQsIG1hc2tFbGVtZW50LCBTdHJpbmcoKSkKLSAgICBTVkdfUlNfREVGSU5FX0FUVFJJ
QlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTChTdHJpbmcsIG1hcmtlcnMsIHN0YXJ0TWFya2VyLCBT
dGFydE1hcmtlciwgc3RhcnRNYXJrZXIsIFN0cmluZygpKQotICAgIFNWR19SU19ERUZJTkVfQVRU
UklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgbWFya2VycywgbWlkTWFya2VyLCBN
aWRNYXJrZXIsIG1pZE1hcmtlciwgU3RyaW5nKCkpCi0gICAgU1ZHX1JTX0RFRklORV9BVFRSSUJV
VEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCBtYXJrZXJzLCBlbmRNYXJrZXIsIEVuZE1h
cmtlciwgZW5kTWFya2VyLCBTdHJpbmcoKSkKLQotICAgIFNWR19SU19ERUZJTkVfQVRUUklCVVRF
X0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgbWlzYywgZmlsdGVyLCBGaWx0ZXIsIGZpbHRl
ciwgU3RyaW5nKCkpCiAgICAgU1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lO
SVRJQUwoZmxvYXQsIG1pc2MsIGZsb29kT3BhY2l0eSwgRmxvb2RPcGFjaXR5LCBmbG9vZE9wYWNp
dHksIDEuMGYpCiAgICAgU1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJ
QUwoQ29sb3IsIG1pc2MsIGZsb29kQ29sb3IsIEZsb29kQ29sb3IsIGZsb29kQ29sb3IsIENvbG9y
KDAsIDAsIDApKQogICAgIFNWR19SU19ERUZJTkVfQVRUUklCVVRFX0RBVEFSRUZfV0lUSF9JTklU
SUFMKENvbG9yLCBtaXNjLCBsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yLCBsaWdodGluZ0Nv
bG9yLCBDb2xvcigyNTUsIDI1NSwgMjU1KSkKQEAgLTEwMyw2ICs5NywxNiBAQCBwdWJsaWM6CiAK
ICAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJVEhfSU5JVElBTF9PV05QVFIo
U2hhZG93RGF0YSwgc2hhZG93U1ZHLCBzaGFkb3csIFNoYWRvdywgc2hhZG93LCAwKQogCisgICAg
Ly8gTm9uLWluaGVyaXRlZCByZXNvdXJjZXMKKyAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9E
QVRBUkVGX1dJVEhfSU5JVElBTChTdHJpbmcsIHJlc291cmNlcywgY2xpcHBlciwgQ2xpcHBlclJl
c291cmNlLCBjbGlwcGVyUmVzb3VyY2UsIFN0cmluZygpKQorICAgIFNWR19SU19ERUZJTkVfQVRU
UklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgcmVzb3VyY2VzLCBmaWx0ZXIsIEZp
bHRlclJlc291cmNlLCBmaWx0ZXJSZXNvdXJjZSwgU3RyaW5nKCkpCisgICAgU1ZHX1JTX0RFRklO
RV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUwoU3RyaW5nLCByZXNvdXJjZXMsIG1hc2tl
ciwgTWFza2VyUmVzb3VyY2UsIG1hc2tlclJlc291cmNlLCBTdHJpbmcoKSkKKworICAgIC8vIElu
aGVyaXRlZCByZXNvdXJjZXMKKyAgICBTVkdfUlNfREVGSU5FX0FUVFJJQlVURV9EQVRBUkVGX1dJ
VEhfSU5JVElBTChTdHJpbmcsIGluaGVyaXRlZFJlc291cmNlcywgbWFya2VyU3RhcnQsIE1hcmtl
clN0YXJ0UmVzb3VyY2UsIG1hcmtlclN0YXJ0UmVzb3VyY2UsIFN0cmluZygpKQorICAgIFNWR19S
U19ERUZJTkVfQVRUUklCVVRFX0RBVEFSRUZfV0lUSF9JTklUSUFMKFN0cmluZywgaW5oZXJpdGVk
UmVzb3VyY2VzLCBtYXJrZXJNaWQsIE1hcmtlck1pZFJlc291cmNlLCBtYXJrZXJNaWRSZXNvdXJj
ZSwgU3RyaW5nKCkpCisgICAgU1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lO
SVRJQUwoU3RyaW5nLCBpbmhlcml0ZWRSZXNvdXJjZXMsIG1hcmtlckVuZCwgTWFya2VyRW5kUmVz
b3VyY2UsIG1hcmtlckVuZFJlc291cmNlLCBTdHJpbmcoKSkKKwogICAgIC8vIGNvbnZlbmllbmNl
CiAgICAgYm9vbCBoYXNTdHJva2UoKSBjb25zdCB7IHJldHVybiAoc3Ryb2tlUGFpbnQoKS0+cGFp
bnRUeXBlKCkgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfTk9ORSk7IH0KICAgICBib29sIGhh
c0ZpbGwoKSBjb25zdCB7IHJldHVybiAoZmlsbFBhaW50KCktPnBhaW50VHlwZSgpICE9IFNWR1Bh
aW50OjpTVkdfUEFJTlRUWVBFX05PTkUpOyB9CkBAIC0xNjksMTUgKzE3MywxNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gaW5oZXJpdGVkIGF0dHJpYnV0ZXMKICAgICBEYXRhUmVmPFN0eWxlRmlsbERh
dGE+IGZpbGw7CiAgICAgRGF0YVJlZjxTdHlsZVN0cm9rZURhdGE+IHN0cm9rZTsKLSAgICBEYXRh
UmVmPFN0eWxlTWFya2VyRGF0YT4gbWFya2VyczsKICAgICBEYXRhUmVmPFN0eWxlVGV4dERhdGE+
IHRleHQ7CisgICAgRGF0YVJlZjxTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YT4gaW5oZXJpdGVk
UmVzb3VyY2VzOwogCiAgICAgLy8gbm9uLWluaGVyaXRlZCBhdHRyaWJ1dGVzCiAgICAgRGF0YVJl
ZjxTdHlsZVN0b3BEYXRhPiBzdG9wczsKLSAgICBEYXRhUmVmPFN0eWxlQ2xpcERhdGE+IGNsaXA7
Ci0gICAgRGF0YVJlZjxTdHlsZU1hc2tEYXRhPiBtYXNrOwogICAgIERhdGFSZWY8U3R5bGVNaXNj
RGF0YT4gbWlzYzsKICAgICBEYXRhUmVmPFN0eWxlU2hhZG93U1ZHRGF0YT4gc2hhZG93U1ZHOwor
ICAgIERhdGFSZWY8U3R5bGVSZXNvdXJjZURhdGE+IHJlc291cmNlczsKIAogcHJpdmF0ZToKICAg
ICBlbnVtIENyZWF0ZURlZmF1bHRUeXBlIHsgQ3JlYXRlRGVmYXVsdCB9OwpAQCAtMjEzLDUgKzIx
NiwzIEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR1Jl
bmRlclN0eWxlX2gKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCShyZXZpc2lvbiA1NzU3MikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAKICAgICBCYXNlZCBvbiBraHRtbCBjb2RlIGJ5OgogICAgIENvcHlyaWdodCAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKQEAgLTI1LDI4ICsyNiwyOSBAQAog
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZURlZnMuaCIKIAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFN0eWxlRmlsbERhdGE6OlN0eWxlRmlsbERhdGEoKQorICAgIDogb3Bh
Y2l0eShTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxPcGFjaXR5KCkpCisgICAgLCBwYWludChT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludCgpKQogewotICAgIHBhaW50ID0gU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnQoKTsKLSAgICBvcGFjaXR5ID0gU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsT3BhY2l0eSgpOwogfQogCiBTdHlsZUZpbGxEYXRhOjpTdHlsZUZpbGxE
YXRhKGNvbnN0IFN0eWxlRmlsbERhdGEmIG90aGVyKQogICAgIDogUmVmQ291bnRlZDxTdHlsZUZp
bGxEYXRhPigpCisgICAgLCBvcGFjaXR5KG90aGVyLm9wYWNpdHkpCisgICAgLCBwYWludChvdGhl
ci5wYWludCkKIHsKLSAgICBwYWludCA9IG90aGVyLnBhaW50OwotICAgIG9wYWNpdHkgPSBvdGhl
ci5vcGFjaXR5OwogfQogCi1ib29sIFN0eWxlRmlsbERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5
bGVGaWxsRGF0YSAmb3RoZXIpIGNvbnN0Citib29sIFN0eWxlRmlsbERhdGE6Om9wZXJhdG9yPT0o
Y29uc3QgU3R5bGVGaWxsRGF0YSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKG9wYWNpdHkgIT0g
b3RoZXIub3BhY2l0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjcsNjQgKzY5LDY0IEBA
IGJvb2wgU3R5bGVGaWxsRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHkKIH0KIAogU3R5bGVTdHJv
a2VEYXRhOjpTdHlsZVN0cm9rZURhdGEoKQorICAgIDogb3BhY2l0eShTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZU9wYWNpdHkoKSkKKyAgICAsIG1pdGVyTGltaXQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxTdHJva2VNaXRlckxpbWl0KCkpCisgICAgLCB3aWR0aChTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZVdpZHRoKCkpCisgICAgLCBkYXNoT2Zmc2V0KFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsU3Ryb2tlRGFzaE9mZnNldCgpKQorICAgICwgcGFpbnQoU1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxTdHJva2VQYWludCgpKQorICAgICwgZGFzaEFycmF5KFNWR1JlbmRlclN0eWxlOjppbml0
aWFsU3Ryb2tlRGFzaEFycmF5KCkpCiB7Ci0gICAgd2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZVdpZHRoKCk7Ci0gICAgcGFpbnQgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0
cm9rZVBhaW50KCk7Ci0gICAgb3BhY2l0eSA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tl
T3BhY2l0eSgpOwotICAgIG1pdGVyTGltaXQgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9r
ZU1pdGVyTGltaXQoKTsKLSAgICBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxT
dHJva2VEYXNoT2Zmc2V0KCk7Ci0gICAgZGFzaEFycmF5ID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VEYXNoQXJyYXkoKTsKIH0KIAogU3R5bGVTdHJva2VEYXRhOjpTdHlsZVN0cm9rZURh
dGEoY29uc3QgU3R5bGVTdHJva2VEYXRhJiBvdGhlcikKICAgICA6IFJlZkNvdW50ZWQ8U3R5bGVT
dHJva2VEYXRhPigpCisgICAgLCBvcGFjaXR5KG90aGVyLm9wYWNpdHkpCisgICAgLCBtaXRlckxp
bWl0KG90aGVyLm1pdGVyTGltaXQpCisgICAgLCB3aWR0aChvdGhlci53aWR0aCkKKyAgICAsIGRh
c2hPZmZzZXQob3RoZXIuZGFzaE9mZnNldCkKKyAgICAsIHBhaW50KG90aGVyLnBhaW50KQorICAg
ICwgZGFzaEFycmF5KG90aGVyLmRhc2hBcnJheSkKIHsKLSAgICB3aWR0aCA9IG90aGVyLndpZHRo
OwotICAgIHBhaW50ID0gb3RoZXIucGFpbnQ7Ci0gICAgb3BhY2l0eSA9IG90aGVyLm9wYWNpdHk7
Ci0gICAgbWl0ZXJMaW1pdCA9IG90aGVyLm1pdGVyTGltaXQ7Ci0gICAgZGFzaE9mZnNldCA9IG90
aGVyLmRhc2hPZmZzZXQ7Ci0gICAgZGFzaEFycmF5ID0gb3RoZXIuZGFzaEFycmF5OwotfQotCi1i
b29sIFN0eWxlU3Ryb2tlRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVN0cm9rZURhdGEgJm90
aGVyKSBjb25zdAotewotICAgIHJldHVybiAocGFpbnQgPT0gb3RoZXIucGFpbnQpICYmCi0gICAg
ICAgICAgICh3aWR0aCA9PSBvdGhlci53aWR0aCkgJiYKLSAgICAgICAgICAgKG9wYWNpdHkgPT0g
b3RoZXIub3BhY2l0eSkgJiYKLSAgICAgICAgICAgKG1pdGVyTGltaXQgPT0gb3RoZXIubWl0ZXJM
aW1pdCkgJiYKLSAgICAgICAgICAgKGRhc2hPZmZzZXQgPT0gb3RoZXIuZGFzaE9mZnNldCkgJiYK
LSAgICAgICAgICAgKGRhc2hBcnJheSA9PSBvdGhlci5kYXNoQXJyYXkpOworfQorCitib29sIFN0
eWxlU3Ryb2tlRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVN0cm9rZURhdGEmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBwYWludCA9PSBvdGhlci5wYWludAorICAgICAgICAmJiB3aWR0
aCA9PSBvdGhlci53aWR0aAorICAgICAgICAmJiBvcGFjaXR5ID09IG90aGVyLm9wYWNpdHkKKyAg
ICAgICAgJiYgbWl0ZXJMaW1pdCA9PSBvdGhlci5taXRlckxpbWl0CisgICAgICAgICYmIGRhc2hP
ZmZzZXQgPT0gb3RoZXIuZGFzaE9mZnNldAorICAgICAgICAmJiBkYXNoQXJyYXkgPT0gb3RoZXIu
ZGFzaEFycmF5OwogfQogCiBTdHlsZVN0b3BEYXRhOjpTdHlsZVN0b3BEYXRhKCkKKyAgICA6IG9w
YWNpdHkoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdG9wT3BhY2l0eSgpKQorICAgICwgY29sb3Io
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdG9wQ29sb3IoKSkKIHsKLSAgICBjb2xvciA9IFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsU3RvcENvbG9yKCk7Ci0gICAgb3BhY2l0eSA9IFNWR1JlbmRlclN0
eWxlOjppbml0aWFsU3RvcE9wYWNpdHkoKTsKIH0KIAogU3R5bGVTdG9wRGF0YTo6U3R5bGVTdG9w
RGF0YShjb25zdCBTdHlsZVN0b3BEYXRhJiBvdGhlcikKICAgICA6IFJlZkNvdW50ZWQ8U3R5bGVT
dG9wRGF0YT4oKQorICAgICwgb3BhY2l0eShvdGhlci5vcGFjaXR5KQorICAgICwgY29sb3Iob3Ro
ZXIuY29sb3IpCiB7Ci0gICAgY29sb3IgPSBvdGhlci5jb2xvcjsKLSAgICBvcGFjaXR5ID0gb3Ro
ZXIub3BhY2l0eTsKIH0KIAotYm9vbCBTdHlsZVN0b3BEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0
eWxlU3RvcERhdGEgJm90aGVyKSBjb25zdAorYm9vbCBTdHlsZVN0b3BEYXRhOjpvcGVyYXRvcj09
KGNvbnN0IFN0eWxlU3RvcERhdGEmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiAoY29sb3Ig
PT0gb3RoZXIuY29sb3IpICYmCi0gICAgICAgICAgIChvcGFjaXR5ID09IG90aGVyLm9wYWNpdHkp
OworICAgIHJldHVybiBjb2xvciA9PSBvdGhlci5jb2xvcgorICAgICAgICAmJiBvcGFjaXR5ID09
IG90aGVyLm9wYWNpdHk7CiB9CiAKIFN0eWxlVGV4dERhdGE6OlN0eWxlVGV4dERhdGEoKQorICAg
IDoga2VybmluZyhTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEtlcm5pbmcoKSkKIHsKLSAgICBrZXJu
aW5nID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxLZXJuaW5nKCk7CiB9CiAKIFN0eWxlVGV4dERh
dGE6OlN0eWxlVGV4dERhdGEoY29uc3QgU3R5bGVUZXh0RGF0YSYgb3RoZXIpCiAgICAgOiBSZWZD
b3VudGVkPFN0eWxlVGV4dERhdGE+KCkKKyAgICAsIGtlcm5pbmcob3RoZXIua2VybmluZykKIHsK
LSAgICBrZXJuaW5nID0gb3RoZXIua2VybmluZzsKIH0KIAogYm9vbCBTdHlsZVRleHREYXRhOjpv
cGVyYXRvcj09KGNvbnN0IFN0eWxlVGV4dERhdGEmIG90aGVyKSBjb25zdApAQCAtMTMyLDEwNCAr
MTM0LDk0IEBAIGJvb2wgU3R5bGVUZXh0RGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHkKICAgICBy
ZXR1cm4ga2VybmluZyA9PSBvdGhlci5rZXJuaW5nOwogfQogCi1TdHlsZUNsaXBEYXRhOjpTdHls
ZUNsaXBEYXRhKCkKLXsKLSAgICBjbGlwUGF0aCA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsQ2xp
cFBhdGgoKTsKLX0KLQotU3R5bGVDbGlwRGF0YTo6U3R5bGVDbGlwRGF0YShjb25zdCBTdHlsZUNs
aXBEYXRhJiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8U3R5bGVDbGlwRGF0YT4oKQorU3R5bGVN
aXNjRGF0YTo6U3R5bGVNaXNjRGF0YSgpCisgICAgOiBmbG9vZENvbG9yKFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmxvb2RDb2xvcigpKQorICAgICwgZmxvb2RPcGFjaXR5KFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmxvb2RPcGFjaXR5KCkpCisgICAgLCBsaWdodGluZ0NvbG9yKFNWR1JlbmRlclN0
eWxlOjppbml0aWFsTGlnaHRpbmdDb2xvcigpKQorICAgICwgYmFzZWxpbmVTaGlmdFZhbHVlKFNW
R1JlbmRlclN0eWxlOjppbml0aWFsQmFzZWxpbmVTaGlmdFZhbHVlKCkpCiB7Ci0gICAgY2xpcFBh
dGggPSBvdGhlci5jbGlwUGF0aDsKIH0KIAotYm9vbCBTdHlsZUNsaXBEYXRhOjpvcGVyYXRvcj09
KGNvbnN0IFN0eWxlQ2xpcERhdGEgJm90aGVyKSBjb25zdAorU3R5bGVNaXNjRGF0YTo6U3R5bGVN
aXNjRGF0YShjb25zdCBTdHlsZU1pc2NEYXRhJiBvdGhlcikKKyAgICA6IFJlZkNvdW50ZWQ8U3R5
bGVNaXNjRGF0YT4oKQorICAgICwgZmxvb2RDb2xvcihvdGhlci5mbG9vZENvbG9yKQorICAgICwg
Zmxvb2RPcGFjaXR5KG90aGVyLmZsb29kT3BhY2l0eSkKKyAgICAsIGxpZ2h0aW5nQ29sb3Iob3Ro
ZXIubGlnaHRpbmdDb2xvcikKKyAgICAsIGJhc2VsaW5lU2hpZnRWYWx1ZShvdGhlci5iYXNlbGlu
ZVNoaWZ0VmFsdWUpCiB7Ci0gICAgcmV0dXJuIChjbGlwUGF0aCA9PSBvdGhlci5jbGlwUGF0aCk7
CiB9CiAKLVN0eWxlTWFza0RhdGE6OlN0eWxlTWFza0RhdGEoKQorYm9vbCBTdHlsZU1pc2NEYXRh
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlTWlzY0RhdGEmIG90aGVyKSBjb25zdAogewotICAgIG1h
c2tFbGVtZW50ID0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxNYXNrRWxlbWVudCgpOworICAgIHJl
dHVybiBmbG9vZE9wYWNpdHkgPT0gb3RoZXIuZmxvb2RPcGFjaXR5CisgICAgICAgICYmIGZsb29k
Q29sb3IgPT0gb3RoZXIuZmxvb2RDb2xvcgorICAgICAgICAmJiBsaWdodGluZ0NvbG9yID09IG90
aGVyLmxpZ2h0aW5nQ29sb3IKKyAgICAgICAgJiYgYmFzZWxpbmVTaGlmdFZhbHVlID09IG90aGVy
LmJhc2VsaW5lU2hpZnRWYWx1ZTsKIH0KIAotU3R5bGVNYXNrRGF0YTo6U3R5bGVNYXNrRGF0YShj
b25zdCBTdHlsZU1hc2tEYXRhJiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8U3R5bGVNYXNrRGF0
YT4oKQorU3R5bGVTaGFkb3dTVkdEYXRhOjpTdHlsZVNoYWRvd1NWR0RhdGEoKQogewotICAgIG1h
c2tFbGVtZW50ID0gb3RoZXIubWFza0VsZW1lbnQ7CiB9CiAKLWJvb2wgU3R5bGVNYXNrRGF0YTo6
b3BlcmF0b3I9PShjb25zdCBTdHlsZU1hc2tEYXRhICZvdGhlcikgY29uc3QKK1N0eWxlU2hhZG93
U1ZHRGF0YTo6U3R5bGVTaGFkb3dTVkdEYXRhKGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3Ro
ZXIpCisgICAgOiBSZWZDb3VudGVkPFN0eWxlU2hhZG93U1ZHRGF0YT4oKQorICAgICwgc2hhZG93
KG90aGVyLnNoYWRvdyA/IG5ldyBTaGFkb3dEYXRhKCpvdGhlci5zaGFkb3cpIDogMCkKIHsKLSAg
ICByZXR1cm4gKG1hc2tFbGVtZW50ID09IG90aGVyLm1hc2tFbGVtZW50KTsKIH0KIAotU3R5bGVN
YXJrZXJEYXRhOjpTdHlsZU1hcmtlckRhdGEoKQorYm9vbCBTdHlsZVNoYWRvd1NWR0RhdGE6Om9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBz
dGFydE1hcmtlciA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3RhcnRNYXJrZXIoKTsKLSAgICBt
aWRNYXJrZXIgPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbE1pZE1hcmtlcigpOwotICAgIGVuZE1h
cmtlciA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsRW5kTWFya2VyKCk7CisgICAgaWYgKCghc2hh
ZG93ICYmIG90aGVyLnNoYWRvdykgfHwgKHNoYWRvdyAmJiAhb3RoZXIuc2hhZG93KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzaGFkb3cgJiYgb3RoZXIuc2hhZG93ICYmICgqc2hh
ZG93ICE9ICpvdGhlci5zaGFkb3cpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVN0eWxlTWFya2VyRGF0YTo6U3R5bGVNYXJrZXJEYXRhKGNvbnN0IFN0eWxl
TWFya2VyRGF0YSYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPFN0eWxlTWFya2VyRGF0YT4oKQor
U3R5bGVSZXNvdXJjZURhdGE6OlN0eWxlUmVzb3VyY2VEYXRhKCkKKyAgICA6IGNsaXBwZXIoU1ZH
UmVuZGVyU3R5bGU6OmluaXRpYWxDbGlwcGVyUmVzb3VyY2UoKSkKKyAgICAsIGZpbHRlcihTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZpbHRlclJlc291cmNlKCkpCisgICAgLCBtYXNrZXIoU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxNYXNrZXJSZXNvdXJjZSgpKQogewotICAgIHN0YXJ0TWFya2VyID0g
b3RoZXIuc3RhcnRNYXJrZXI7Ci0gICAgbWlkTWFya2VyID0gb3RoZXIubWlkTWFya2VyOwotICAg
IGVuZE1hcmtlciA9IG90aGVyLmVuZE1hcmtlcjsKIH0KIAotYm9vbCBTdHlsZU1hcmtlckRhdGE6
Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVNYXJrZXJEYXRhICZvdGhlcikgY29uc3QKK1N0eWxlUmVz
b3VyY2VEYXRhOjpTdHlsZVJlc291cmNlRGF0YShjb25zdCBTdHlsZVJlc291cmNlRGF0YSYgb3Ro
ZXIpCisgICAgOiBSZWZDb3VudGVkPFN0eWxlUmVzb3VyY2VEYXRhPigpCisgICAgLCBjbGlwcGVy
KG90aGVyLmNsaXBwZXIpCisgICAgLCBmaWx0ZXIob3RoZXIuZmlsdGVyKQorICAgICwgbWFza2Vy
KG90aGVyLm1hc2tlcikKIHsKLSAgICByZXR1cm4gKHN0YXJ0TWFya2VyID09IG90aGVyLnN0YXJ0
TWFya2VyICYmIG1pZE1hcmtlciA9PSBvdGhlci5taWRNYXJrZXIgJiYgZW5kTWFya2VyID09IG90
aGVyLmVuZE1hcmtlcik7CiB9CiAKLVN0eWxlTWlzY0RhdGE6OlN0eWxlTWlzY0RhdGEoKQorYm9v
bCBTdHlsZVJlc291cmNlRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc291cmNlRGF0YSYg
b3RoZXIpIGNvbnN0CiB7Ci0gICAgZmxvb2RDb2xvciA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFs
Rmxvb2RDb2xvcigpOwotICAgIGZsb29kT3BhY2l0eSA9IFNWR1JlbmRlclN0eWxlOjppbml0aWFs
Rmxvb2RPcGFjaXR5KCk7Ci0gICAgbGlnaHRpbmdDb2xvciA9IFNWR1JlbmRlclN0eWxlOjppbml0
aWFsTGlnaHRpbmdDb2xvcigpOwotICAgIGJhc2VsaW5lU2hpZnRWYWx1ZSA9IFNWR1JlbmRlclN0
eWxlOjppbml0aWFsQmFzZWxpbmVTaGlmdFZhbHVlKCk7CisgICAgcmV0dXJuIGNsaXBwZXIgPT0g
b3RoZXIuY2xpcHBlcgorICAgICAgICAmJiBmaWx0ZXIgPT0gb3RoZXIuZmlsdGVyCisgICAgICAg
ICYmIG1hc2tlciA9PSBvdGhlci5tYXNrZXI7CiB9CiAKLVN0eWxlTWlzY0RhdGE6OlN0eWxlTWlz
Y0RhdGEoY29uc3QgU3R5bGVNaXNjRGF0YSYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPFN0eWxl
TWlzY0RhdGE+KCkKK1N0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhOjpTdHlsZUluaGVyaXRlZFJl
c291cmNlRGF0YSgpCisgICAgOiBtYXJrZXJTdGFydChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbE1h
cmtlclN0YXJ0UmVzb3VyY2UoKSkKKyAgICAsIG1hcmtlck1pZChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbE1hcmtlck1pZFJlc291cmNlKCkpCisgICAgLCBtYXJrZXJFbmQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxNYXJrZXJFbmRSZXNvdXJjZSgpKQogewotICAgIGZpbHRlciA9IG90aGVyLmZpbHRl
cjsKLSAgICBmbG9vZENvbG9yID0gb3RoZXIuZmxvb2RDb2xvcjsKLSAgICBmbG9vZE9wYWNpdHkg
PSBvdGhlci5mbG9vZE9wYWNpdHk7Ci0gICAgbGlnaHRpbmdDb2xvciA9IG90aGVyLmxpZ2h0aW5n
Q29sb3I7Ci0gICAgYmFzZWxpbmVTaGlmdFZhbHVlID0gb3RoZXIuYmFzZWxpbmVTaGlmdFZhbHVl
OwogfQogCi1ib29sIFN0eWxlTWlzY0RhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVNaXNjRGF0
YSAmb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZpbHRlciA9PSBvdGhlci5maWx0ZXIKLSAg
ICAgICAgICAgJiYgZmxvb2RPcGFjaXR5ID09IG90aGVyLmZsb29kT3BhY2l0eQotICAgICAgICAg
ICAmJiBmbG9vZENvbG9yID09IG90aGVyLmZsb29kQ29sb3IKLSAgICAgICAgICAgJiYgbGlnaHRp
bmdDb2xvciA9PSBvdGhlci5saWdodGluZ0NvbG9yCi0gICAgICAgICAgICYmIGJhc2VsaW5lU2hp
ZnRWYWx1ZSA9PSBvdGhlci5iYXNlbGluZVNoaWZ0VmFsdWU7Ci19Ci0KLVN0eWxlU2hhZG93U1ZH
RGF0YTo6U3R5bGVTaGFkb3dTVkdEYXRhKCkKK1N0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhOjpT
dHlsZUluaGVyaXRlZFJlc291cmNlRGF0YShjb25zdCBTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0
YSYgb3RoZXIpCisgICAgOiBSZWZDb3VudGVkPFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhPigp
CisgICAgLCBtYXJrZXJTdGFydChvdGhlci5tYXJrZXJTdGFydCkKKyAgICAsIG1hcmtlck1pZChv
dGhlci5tYXJrZXJNaWQpCisgICAgLCBtYXJrZXJFbmQob3RoZXIubWFya2VyRW5kKQogewogfQog
Ci1TdHlsZVNoYWRvd1NWR0RhdGE6OlN0eWxlU2hhZG93U1ZHRGF0YShjb25zdCBTdHlsZVNoYWRv
d1NWR0RhdGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTdHlsZVNoYWRvd1NWR0RhdGE+KCkK
LSAgICAsIHNoYWRvdyhvdGhlci5zaGFkb3cgPyBuZXcgU2hhZG93RGF0YSgqb3RoZXIuc2hhZG93
KSA6IDApCitib29sIFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0
IFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhJiBvdGhlcikgY29uc3QKIHsKKyAgICByZXR1cm4g
bWFya2VyU3RhcnQgPT0gb3RoZXIubWFya2VyU3RhcnQKKyAgICAgICAgJiYgbWFya2VyTWlkID09
IG90aGVyLm1hcmtlck1pZAorICAgICAgICAmJiBtYXJrZXJFbmQgPT0gb3RoZXIubWFya2VyRW5k
OwogfQogCi1ib29sIFN0eWxlU2hhZG93U1ZHRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVNo
YWRvd1NWR0RhdGEmIG90aGVyKSBjb25zdAotewotICAgIGlmICgoIXNoYWRvdyAmJiBvdGhlci5z
aGFkb3cpIHx8IChzaGFkb3cgJiYgIW90aGVyLnNoYWRvdykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoc2hhZG93ICYmIG90aGVyLnNoYWRvdyAmJiAoKnNoYWRvdyAhPSAqb3RoZXIu
c2hhZG93KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFNWRykKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmgJKHJldmlzaW9uIDU3NTcyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAKICAgICBCYXNlZCBvbiBraHRtbCBjb2RlIGJ5OgogICAgIENvcHlyaWdodCAoQykgMjAwMC0y
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCkBAIC0yOSwxMSArMzAsOSBAQAogCiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBhdGguaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTMzLDggKzEz
Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5
bGVGaWxsRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlRmlsbERhdGEp
OyB9CiAgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVGaWxsRGF0YT4gY29weSgpIGNvbnN0IHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUZpbGxEYXRhKCp0aGlzKSk7IH0KICAgICAgICAgCi0gICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUZpbGxEYXRhICZvdGhlcikgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUZpbGxEYXRhICZvdGhlcikgY29uc3QK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlRmlsbERhdGEmKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlRmlsbERhdGEmIG90aGVyKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAg
IH0KQEAgLTE3Nyw4ICsxNzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0eWxlU3RvcERhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHlsZVN0b3BEYXRhKTsgfQogICAgICAgICBQYXNzUmVmUHRyPFN0eWxlU3RvcERhdGE+IGNv
cHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTdG9wRGF0YSgqdGhpcykpOyB9
CiAKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3RvcERhdGEgJm90aGVyKSBj
b25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlU3RvcERhdGEgJm90aGVy
KSBjb25zdAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVTdG9wRGF0YSYpIGNv
bnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTdG9wRGF0YSYgb3RoZXIp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
ICAgICAgICAgfQpAQCAtMjA2LDEwOSArMjA1LDk0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFN0eWxlVGV4dERhdGEoKTsKLSAgICAgICAgU3R5bGVUZXh0
RGF0YShjb25zdCBTdHlsZVRleHREYXRhJiBvdGhlcik7CisgICAgICAgIFN0eWxlVGV4dERhdGEo
Y29uc3QgU3R5bGVUZXh0RGF0YSYpOwogICAgIH07CiAKLSAgICBjbGFzcyBTdHlsZUNsaXBEYXRh
IDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVDbGlwRGF0YT4geworICAgIC8vIE5vdGU6IHRoZSBy
dWxlIGZvciB0aGlzIGNsYXNzIGlzLCAqbm8gaW5oZXJpdGFuY2UqIG9mIHRoZXNlIHByb3BzCisg
ICAgY2xhc3MgU3R5bGVNaXNjRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlTWlzY0RhdGE+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlQ2xpcERhdGE+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUNsaXBEYXRhKTsgfQotICAgICAg
ICBQYXNzUmVmUHRyPFN0eWxlQ2xpcERhdGE+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJl
ZihuZXcgU3R5bGVDbGlwRGF0YSgqdGhpcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlTWlzY0RhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1pc2NE
YXRhKTsgfQorICAgICAgICBQYXNzUmVmUHRyPFN0eWxlTWlzY0RhdGE+IGNvcHkoKSBjb25zdCB7
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVNaXNjRGF0YSgqdGhpcykpOyB9CiAKLSAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlQ2xpcERhdGEgJm90aGVyKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ2xpcERhdGEgJm90aGVyKSBjb25zdAorICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVNaXNjRGF0YSYpIGNvbnN0OworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVNaXNjRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIFN0cmluZyBjbGlwUGF0aDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0eWxl
Q2xpcERhdGEoKTsKLSAgICAgICAgU3R5bGVDbGlwRGF0YShjb25zdCBTdHlsZUNsaXBEYXRhJik7
Ci0gICAgfTsKLQotICAgIGNsYXNzIFN0eWxlTWFza0RhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxT
dHlsZU1hc2tEYXRhPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZU1hc2tEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVNYXNrRGF0
YSk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxTdHlsZU1hc2tEYXRhPiBjb3B5KCkgY29uc3QgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlTWFza0RhdGEoKnRoaXMpKTsgfQotCi0gICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1hc2tEYXRhICZvdGhlcikgY29uc3Q7Ci0gICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZU1hc2tEYXRhICZvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgQ29sb3IgZmxvb2RDb2xvcjsKKyAgICAg
ICAgZmxvYXQgZmxvb2RPcGFjaXR5OworICAgICAgICBDb2xvciBsaWdodGluZ0NvbG9yOwogCi0g
ICAgICAgIFN0cmluZyBtYXNrRWxlbWVudDsKKyAgICAgICAgLy8gbm9uLWluaGVyaXRlZCB0ZXh0
IHN0dWZmIGxpdmVzIGhlcmUgbm90IGluIFN0eWxlVGV4dERhdGEuCisgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gYmFzZWxpbmVTaGlmdFZhbHVlOwogCi0gICAgcHJpdmF0ZTogICAgICAgIAotICAg
ICAgICBTdHlsZU1hc2tEYXRhKCk7Ci0gICAgICAgIFN0eWxlTWFza0RhdGEoY29uc3QgU3R5bGVN
YXNrRGF0YSYpOworICAgIHByaXZhdGU6CisgICAgICAgIFN0eWxlTWlzY0RhdGEoKTsKKyAgICAg
ICAgU3R5bGVNaXNjRGF0YShjb25zdCBTdHlsZU1pc2NEYXRhJik7CiAgICAgfTsKIAotICAgIGNs
YXNzIFN0eWxlTWFya2VyRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlTWFya2VyRGF0YT4g
eworICAgIGNsYXNzIFN0eWxlU2hhZG93U1ZHRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxl
U2hhZG93U1ZHRGF0YT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3R5bGVNYXJrZXJEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVNYXJr
ZXJEYXRhKTsgfQotICAgICAgICBQYXNzUmVmUHRyPFN0eWxlTWFya2VyRGF0YT4gY29weSgpIGNv
bnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZU1hcmtlckRhdGEoKnRoaXMpKTsgfQotCi0g
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1hcmtlckRhdGEgJm90aGVyKSBjb25z
dDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlTWFya2VyRGF0YSAmb3RoZXIp
IGNvbnN0CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hhZG93U1ZHRGF0YT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hhZG93U1ZHRGF0YSk7IH0KKyAgICAg
ICAgUGFzc1JlZlB0cjxTdHlsZVNoYWRvd1NWR0RhdGE+IGNvcHkoKSBjb25zdCB7IHJldHVybiBh
ZG9wdFJlZihuZXcgU3R5bGVTaGFkb3dTVkdEYXRhKCp0aGlzKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVNoYWRvd1NWR0RhdGEmKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3RoZXIpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAg
ICAgICAgfQogCi0gICAgICAgIFN0cmluZyBzdGFydE1hcmtlcjsKLSAgICAgICAgU3RyaW5nIG1p
ZE1hcmtlcjsKLSAgICAgICAgU3RyaW5nIGVuZE1hcmtlcjsKKyAgICAgICAgT3duUHRyPFNoYWRv
d0RhdGE+IHNoYWRvdzsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0eWxlTWFya2VyRGF0YSgp
OwotICAgICAgICBTdHlsZU1hcmtlckRhdGEoY29uc3QgU3R5bGVNYXJrZXJEYXRhJik7CisgICAg
ICAgIFN0eWxlU2hhZG93U1ZHRGF0YSgpOworICAgICAgICBTdHlsZVNoYWRvd1NWR0RhdGEoY29u
c3QgU3R5bGVTaGFkb3dTVkdEYXRhJik7CiAgICAgfTsKIAotICAgIC8vIE5vdGUgOiB0aGUgcnVs
ZSBmb3IgdGhpcyBjbGFzcyBpcywgKm5vIGluaGVyaXRhbmNlKiBvZiB0aGVzZSBwcm9wcwotICAg
IGNsYXNzIFN0eWxlTWlzY0RhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZU1pc2NEYXRhPiB7
CisgICAgLy8gTm9uLWluaGVyaXRlZCByZXNvdXJjZXMKKyAgICBjbGFzcyBTdHlsZVJlc291cmNl
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUmVzb3VyY2VEYXRhPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZU1pc2NEYXRhPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVNaXNjRGF0YSk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxT
dHlsZU1pc2NEYXRhPiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlTWlz
Y0RhdGEoKnRoaXMpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJlc291cmNl
RGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUmVzb3VyY2VEYXRhKTsg
fQorICAgICAgICBQYXNzUmVmUHRyPFN0eWxlUmVzb3VyY2VEYXRhPiBjb3B5KCkgY29uc3QgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUmVzb3VyY2VEYXRhKCp0aGlzKSk7IH0KIAotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVNaXNjRGF0YSAmb3RoZXIpIGNvbnN0OwotICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVNaXNjRGF0YSAmb3RoZXIpIGNvbnN0Cisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc291cmNlRGF0YSYpIGNvbnN0Owor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvdXJjZURhdGEmIG90aGVyKSBj
b25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAg
ICAgICAgIH0KIAorICAgICAgICBTdHJpbmcgY2xpcHBlcjsKICAgICAgICAgU3RyaW5nIGZpbHRl
cjsKLSAgICAgICAgQ29sb3IgZmxvb2RDb2xvcjsKLSAgICAgICAgZmxvYXQgZmxvb2RPcGFjaXR5
OwotCi0gICAgICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7Ci0KLSAgICAgICAgLy8gbm9uLWluaGVy
aXRlZCB0ZXh0IHN0dWZmIGxpdmVzIGhlcmUgbm90IGluIFN0eWxlVGV4dERhdGEuCi0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gYmFzZWxpbmVTaGlmdFZhbHVlOworICAgICAgICBTdHJpbmcgbWFz
a2VyOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3R5bGVNaXNjRGF0YSgpOwotICAgICAgICBT
dHlsZU1pc2NEYXRhKGNvbnN0IFN0eWxlTWlzY0RhdGEmKTsKKyAgICAgICAgU3R5bGVSZXNvdXJj
ZURhdGEoKTsKKyAgICAgICAgU3R5bGVSZXNvdXJjZURhdGEoY29uc3QgU3R5bGVSZXNvdXJjZURh
dGEmKTsKICAgICB9OwotICAgIAotICAgIGNsYXNzIFN0eWxlU2hhZG93U1ZHRGF0YSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFN0eWxlU2hhZG93U1ZHRGF0YT4geworCisgICAgLy8gSW5oZXJpdGVkIHJl
c291cmNlcworICAgIGNsYXNzIFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hhZG93U1ZHRGF0YT4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hhZG93U1ZHRGF0YSk7IH0KLSAgICAgICAgUGFzc1JlZlB0
cjxTdHlsZVNoYWRvd1NWR0RhdGE+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcg
U3R5bGVTaGFkb3dTVkdEYXRhKCp0aGlzKSk7IH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHlsZVNoYWRvd1NWR0RhdGEmIG90aGVyKSBjb25zdDsKLSAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEpOyB9
CisgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGE+IGNvcHkoKSBj
b25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVJbmhlcml0ZWRSZXNvdXJjZURhdGEoKnRo
aXMpKTsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUluaGVyaXRlZFJl
c291cmNlRGF0YSYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVJ
bmhlcml0ZWRSZXNvdXJjZURhdGEmIG90aGVyKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAotICAgICAgICBPd25QdHI8
U2hhZG93RGF0YT4gc2hhZG93OworICAgICAgICBTdHJpbmcgbWFya2VyU3RhcnQ7CisgICAgICAg
IFN0cmluZyBtYXJrZXJNaWQ7CisgICAgICAgIFN0cmluZyBtYXJrZXJFbmQ7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBTdHlsZVNoYWRvd1NWR0RhdGEoKTsKLSAgICAgICAgU3R5bGVTaGFkb3dT
VkdEYXRhKGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3RoZXIpOworICAgICAgICBTdHlsZUlu
aGVyaXRlZFJlc291cmNlRGF0YSgpOworICAgICAgICBTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0
YShjb25zdCBTdHlsZUluaGVyaXRlZFJlc291cmNlRGF0YSYpOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCiAjZW5kaWYgLy8gU1ZHUmVu
ZGVyU3R5bGVEZWZzX2gKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5jcHAJKHJldmlzaW9uIDU3NTcyKQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFNWR1N0eWxlZEVs
ZW1lbnQ6OmludmFsaWRhdGVSZXNvdXJjCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShG
SUxURVJTKQotICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRv
Y3VtZW50LCBvYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbHRlcigpLCBvYmplY3QpOwor
ICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50LCBv
YmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbHRlclJlc291cmNlKCksIG9iamVjdCk7CiAg
ICAgaWYgKGZpbHRlcikKICAgICAgICAgZmlsdGVyLT5pbnZhbGlkYXRlKCk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="37018"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>