<?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>203729</bug_id>
          
          <creation_ts>2019-11-01 04:19:39 -0700</creation_ts>
          <short_desc>Style::Builder should not depend on StyleResolver</short_desc>
          <delta_ts>2019-11-01 08:21:21 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1586317</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-01 04:19:39 -0700</bug_when>
    <thetext>With all style building state is in builder, we can remove the back-reference to style resolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586319</commentid>
    <comment_count>1</comment_count>
      <attachid>382571</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-01 04:39:56 -0700</bug_when>
    <thetext>Created attachment 382571
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586322</commentid>
    <comment_count>2</comment_count>
      <attachid>382572</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-01 05:54:03 -0700</bug_when>
    <thetext>Created attachment 382572
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586326</commentid>
    <comment_count>3</comment_count>
      <attachid>382573</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-01 05:58:50 -0700</bug_when>
    <thetext>Created attachment 382573
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586340</commentid>
    <comment_count>4</comment_count>
      <attachid>382574</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-01 07:13:26 -0700</bug_when>
    <thetext>Created attachment 382574
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586360</commentid>
    <comment_count>5</comment_count>
      <attachid>382574</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-01 08:20:26 -0700</bug_when>
    <thetext>Comment on attachment 382574
patch

Clearing flags on attachment: 382574

Committed r251916: &lt;https://trac.webkit.org/changeset/251916&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586361</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-01 08:20:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586362</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-01 08:21:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/56816451&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382571</attachid>
            <date>2019-11-01 04:39:56 -0700</date>
            <delta_ts>2019-11-01 05:54:03 -0700</delta_ts>
            <desc>wip</desc>
            <filename>style-builder-no-resolver.patch</filename>
            <type>text/plain</type>
            <size>35347</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCBkZmNjZjE0
OWVmNi4uZTViOGFiNDY5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0
ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5jcHAKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNDAsMTAgKzE0MCwxMCBAQCB2
b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJbnRSZWN0
JikKICAgICAgICAgY2xpZW50LmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJ
bWFnZVB0cj4odGhpcykpOwogfQogCi12b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCit2b2lkIENTU0ZpbHRlcklt
YWdlVmFsdWU6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewogICAgIG1fZmlsdGVyT3BlcmF0aW9ucy5jbGVhcigpOwotICAgIHJlc29s
dmVyLT5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKG1fZmlsdGVyVmFsdWUsIG1fZmlsdGVyT3BlcmF0
aW9ucyk7CisgICAgYnVpbGRlclN0YXRlLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMobV9maWx0ZXJW
YWx1ZSwgbV9maWx0ZXJPcGVyYXRpb25zKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZhbHVl
OjpGaWx0ZXJTdWJpbWFnZU9ic2VydmVyUHJveHk6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSos
IGNvbnN0IEludFJlY3QqIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuaAppbmRleCBkN2E0ODZiODVlYi4uM2E3YjQzN2I5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuaApAQCAtMzksNyArMzksMTAgQEAgY2xhc3MgQ2FjaGVkSW1h
Z2U7CiBjbGFzcyBGaWx0ZXJTdWJpbWFnZU9ic2VydmVyUHJveHk7CiBjbGFzcyBSZW5kZXJFbGVt
ZW50OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOworCituYW1lc3BhY2Ug
U3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQogCiBjbGFzcyBDU1NGaWx0ZXJJbWFnZVZh
bHVlIGZpbmFsIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewogICAgIGZyaWVuZCBj
bGFzcyBGaWx0ZXJTdWJpbWFnZU9ic2VydmVyUHJveHk7CkBAIC02OCw3ICs3MSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgZXF1YWxJbnB1dEltYWdlcyhjb25zdCBDU1NGaWx0ZXJJbWFnZVZhbHVl
JikgY29uc3Q7CiAKLSAgICB2b2lkIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZl
ciopOworICAgIHZvaWQgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6QnVpbGRlclN0YXRl
Jik7CiAKICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJPcGVyYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXJPcGVyYXRpb25zOyB9CiAgICAgdm9pZCBzZXRGaWx0ZXJPcGVy
YXRpb25zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlvbnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggNzMyOThjZGU3MTQuLjBkYjY4MmQ0
ZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0zNiw3ICsz
Niw3IEBACiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1
ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDMsMTEgKzEwMywxMSBAQCBzdGF0aWMg
aW5saW5lIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBjbG9uZShDU1NHcmFkaWVudFZhbHVlJiB2YWx1
ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ29uaWNHcmFkaWVudFZhbHVlPih2YWx1ZSkuY2xv
bmUoKTsKIH0KIAotUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGJv
b2wgY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgc3Rv
cCA6IG1fc3RvcHMpIHsKLSAgICAgICAgaWYgKCFzdG9wLmlzTWlkcG9pbnQgJiYgc3RvcC5tX2Nv
bG9yICYmIHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9t
RWxlbWVudCgqc3RvcC5tX2NvbG9yKSkgeworICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCAm
JiBzdG9wLm1fY29sb3IgJiYgYnVpbGRlclN0YXRlLmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVE
ZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AubV9jb2xvcikpIHsKICAgICAgICAgICAgIHN0b3AubV9j
b2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbG9ySXNEZXJp
dmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTksNyArMTE5
LDcgQEAgUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKGNvbnN0IFN0eWxlUmUKICAgICAgICAgaWYgKHN0b3AuaXNNaWRwb2lu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RvcC5tX2NvbG9yKQotICAg
ICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKCpzdG9wLm1fY29sb3IpOworICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVk
Q29sb3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKnN0b3AubV9jb2xv
cik7CiAgICAgICAgIGVsc2UgaWYgKGkpIHsKICAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzU3Rv
cCA9IHJlc3VsdC0+bV9zdG9wc1tpIC0gMV07CiAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNT
dG9wLm1fY29sb3IpOwpAQCAtMTMwLDYgKzEzMCwyMyBAQCBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4g
Q1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoY29uc3QgU3R5bGVS
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6cmVzb2x2
ZVJHQkNvbG9ycygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0b3BzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBpZiAo
c3RvcC5pc01pZHBvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzdG9w
Lm1fY29sb3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChzdG9wLm1fY29sb3ItPmlzUkdCQ29sb3Io
KSk7CisgICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IHN0b3AubV9jb2xvci0+Y29s
b3IoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpKSB7CisgICAgICAgICAgICBhdXRvJiBwcmV2aW91
c1N0b3AgPSBtX3N0b3BzW2kgLSAxXTsKKyAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHByZXZp
b3VzU3RvcC5tX2NvbG9yOworICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBwcmV2
aW91c1N0b3AubV9yZXNvbHZlZENvbG9yOworICAgICAgICB9CisgICAgfQorfQorCiBjbGFzcyBM
aW5lYXJHcmFkaWVudEFkYXB0ZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IExpbmVhckdyYWRp
ZW50QWRhcHRlcihHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCmluZGV4IDBiNmNlYTcxM2UzLi5kNzU0NDJlMGEyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0zNSw2ICszNSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAorbmFt
ZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKwogZW51bSBDU1NHcmFkaWVu
dFR5cGUgewogICAgIENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCwKICAgICBDU1NEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQsCkBAIC04Niw3ICs5MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGtu
b3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lkIGxv
YWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmKSB7IH0KLSAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlciYpOworICAgIFJlZjxDU1NHcmFkaWVudFZhbHVl
PiBncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRlJik7CisgICAg
dm9pZCByZXNvbHZlUkdCQ29sb3JzKCk7CiAKIHByb3RlY3RlZDoKICAgICBDU1NHcmFkaWVudFZh
bHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3Jh
ZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCBmMzYxMzg2MTkwNi4uY2FlNzZjZjEwYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKQEAgLTEyNzMsNiArMTI3Myw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlN
YXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAK
ICAgICBidWlsZGVyLmFwcGx5TG93UHJpb3JpdHlQcm9wZXJ0aWVzKCk7CiAKKyAgICBmb3IgKGF1
dG8mIGNvbnRlbnRBdHRyaWJ1dGUgOiBidWlsZGVyLnN0YXRlKCkucmVnaXN0ZXJlZENvbnRlbnRB
dHRyaWJ1dGVzKCkpCisgICAgICAgIHJ1bGVTZXRzKCkubXV0YWJsZUZlYXR1cmVzKCkucmVnaXN0
ZXJDb250ZW50QXR0cmlidXRlKGNvbnRlbnRBdHRyaWJ1dGUpOworCiAgICAgaWYgKGNhY2hlSXRl
bSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0NhY2hlYWJsZUlu
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgqc3RhdGUuZWxlbWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5wYXJlbnRTdHlsZSgpKSkKQEAgLTEyOTgsMjUgKzEzMDEsNiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdQogICAgIGJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwog
fQogCi1SZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1
ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkg
ewotICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZh
bHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKLQotICAgICAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgICAgICAvLyBG
aWx0ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAg
ICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0
VmFsdWU+KHZhbHVlKSB8fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCi0gICAgICAg
IHJldHVybiBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOwotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiB7
CiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CkBAIC0xMzMyLDQ0
ICsxMzE2LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKICAg
ICBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZl
ZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2ggKHZhbHVlLnZhbHVlSUQoKSkgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVs
aW5rOgotICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUNvbG9y
IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKLXsKLSAgICBpZiAodmFs
dWUuaXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuY29sb3IoKTsKLQotICAgIGF1
dG8gaWRlbnRpZmllciA9IHZhbHVlLnZhbHVlSUQoKTsKLSAgICBzd2l0Y2ggKGlkZW50aWZpZXIp
IHsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50
KCkudGV4dENvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJl
dHVybiAobV9zdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IGRv
Y3VtZW50KCkudmlzaXRlZExpbmtDb2xvcigpIDogZG9jdW1lbnQoKS5saW5rQ29sb3IoKTsKLSAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50
KCkuYWN0aXZlTGlua0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZvY3VzUmluZ0Nv
bG9yKGRvY3VtZW50KCkuc3R5bGVDb2xvck9wdGlvbnMobV9zdGF0ZS5zdHlsZSgpKSk7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgLy8gQ29sb3IgaXMgYW4gaW5oZXJp
dGVkIHByb3BlcnR5IHNvIGRlcGVuZGluZyBvbiBpdCBlZmZlY3RpdmVseSBtYWtlcyB0aGUgcHJv
cGVydHkgaW5oZXJpdGVkLgotICAgICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgZmxhZyBhcyBh
IHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBvYmxpcXVlLiBD
YW4gd2UgZG8gYmV0dGVyPwotICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0
bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLnN0eWxlKCkt
PmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFN0eWxlQ29sb3I6OmNvbG9y
RnJvbUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9ucyhtX3N0
YXRlLnN0eWxlKCkpKTsKLSAgICB9Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBib29sIHJlc3VsdCkKIHsKICAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1bHQgeyBleHByZXNzaW9uLCByZXN1bHQg
fSk7CkBAIC0xNDE1LDE3MSArMTM2MSw0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzTWVkaWFR
dWVyaWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVy
YXRpb25Gb3JUeXBlKENTU1ZhbHVlSUQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIENTU1ZhbHVlVXJsOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpSRUZF
UkVOQ0U7Ci0gICAgY2FzZSBDU1NWYWx1ZUdyYXlzY2FsZToKLSAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOwotICAgIGNhc2UgQ1NTVmFsdWVTZXBpYToKLSAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE7Ci0gICAgY2FzZSBDU1NWYWx1ZVNhdHVyYXRl
OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTsKLSAgICBjYXNlIENT
U1ZhbHVlSHVlUm90YXRlOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOwotICAgIGNhc2UgQ1NTVmFsdWVJbnZlcnQ6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDsKLSAgICBjYXNlIENTU1ZhbHVlQXBwbGVJbnZlcnRMaWdodG5lc3M6Ci0g
ICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M7Ci0g
ICAgY2FzZSBDU1NWYWx1ZU9wYWNpdHk6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk7Ci0gICAgY2FzZSBDU1NWYWx1ZUJyaWdodG5lc3M6Ci0gICAgICAgIHJldHVybiBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7Ci0gICAgY2FzZSBDU1NWYWx1ZUNvbnRyYXN0Ogot
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDsKLSAgICBjYXNlIENTU1Zh
bHVlQmx1cjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKLSAgICBjYXNl
IENTU1ZhbHVlRHJvcFNoYWRvdzoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Ci19Ci0K
LWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1
ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKLXsKLSAgICBTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIEFTU0VSVChvdXRPcGVyYXRpb25zLmlzRW1wdHkoKSk7
Ci0KLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUpKSB7Ci0gICAgICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUp
OwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0PihpblZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmlsdGVyT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkgewotCi0gICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4oY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKLSAgICAg
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1pdGl2ZVZhbHVlLnN0cmlu
Z1ZhbHVlKCk7Ci0gICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChj
c3NVcmwpOwotCi0gICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKGNzc1VybCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChXVEZNb3ZlKG9wZXJhdGlvbikp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzPENT
U0Z1bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvJiBmaWx0ZXJWYWx1ZSA9IGRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KGN1
cnJlbnRWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS5uYW1l
KCkpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2
ZSB2YWx1ZXMsIHdpdGggdGhlCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBvZiBkcm9wIHNoYWRvdyB3
aGljaCBoYXMgYSBDU1NTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIuCi0gICAgICAgIGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG9wZXJhdGlv
blR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykgewotICAgICAgICAgICAgYm9v
bCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPihmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQ
SUE6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3Ro
KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmRvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQot
ICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0
VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5n
bGUsIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAg
ICBkb3VibGUgYW1vdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgo
KSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+ZG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzogewotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6IHsKLSAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwg
Rml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID49IDEpCi0gICAg
ICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1
ZSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChz
dGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAg
ICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgY29uc3QgYXV0byogY3NzVmFsdWUgPSBmaWx0
ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwotICAgICAgICAgICAgaWYgKCFpczxD
U1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBjb25zdCBhdXRvJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCpj
c3NWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgeSA9
IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAgICAgICAgICAg
IGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7Ci0gICAgICAgICAgICBDb2xvciBj
b2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9y
ID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKml0ZW0uY29sb3IpOwotCi0gICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0
cmFuc3BhcmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZjlmYzM3NGZiNjEuLjExNTYwOGNhZWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTE1OSw5ICsxNTksNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoKTsKIAotICAgIHN0YXRpYyBib29sIGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmKTsKLSAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSYsIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7Ci0KICAgICBib29s
IGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogICAgIGJvb2wgaGFz
U2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmKSBj
b25zdDsKIApAQCAtMTkwLDE0ICsxODcsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckNh
Y2hlZFByb3BlcnRpZXNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygpOwogCi0gICAgYm9vbCBjcmVh
dGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRp
b25zJiBvdXRPcGVyYXRpb25zKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFJlbmRlclN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lkIGFk
anVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCYpOwotICAgIAotICAgIHZvaWQgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1
YnkoKTsKLSAgICAKKyAgICAgICAgCiAgICAgZW51bSBTaG91bGRVc2VNYXRjaGVkUHJvcGVydGll
c0NhY2hlIHsgRG9Ob3RVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlID0gMCwgVXNlTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSB9OwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBN
YXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBTaG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlID0gVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAKQEAgLTI2MCw4ICsyNTMsNiBAQCBw
dWJsaWM6CiAgICAgU3RhdGUmIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAotICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7Ci0KICAgICBJbnNwZWN0b3JDU1NPTVdy
YXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NP
TVdyYXBwZXJzOyB9CiAKICAgICBib29sIGFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXpp
bmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Jik7CkBAIC0yNjksOCArMjYwLDYgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCi0g
ICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KICAg
ICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRj
aFJlc3VsdCYpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CiAgICAg
ICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gdXNlckFnZW50RGVjbGFyYXRpb25zOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZGRmNTViNzRkZWQuLjRh
ZmY3ZjEzNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAg
LTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAi
U2VhcmNoSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUg
IlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CkBAIC0yMDY2LDYgKzIwNjYsOCBAQCBz
dGF0aWMgUmVmPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRN
YXNrSW1hZ2UoKQogICAgIGdyYWRpZW50LT5zZXRBbmdsZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGU6OkNTU19ERUcp
KTsKICAgICBncmFkaWVudC0+YWRkU3RvcChmaXJzdFN0b3ApOwogICAgIGdyYWRpZW50LT5hZGRT
dG9wKHNlY29uZFN0b3ApOworICAgIGdyYWRpZW50LT5yZXNvbHZlUkdCQ29sb3JzKCk7CisKICAg
ICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKQEAgLTIwODgsNyArMjA5MCw3IEBAIFJlbmRlclN0eWxl
IEhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKICAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0TWF4V2lkdGgoTGVuZ3RoIHsgMTAw
LCBQZXJjZW50IH0pOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcih7IDAuMGYsIDAu
MGYsIDAuMGYsIDAuNmYgfSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxv
dyhUZXh0T3ZlcmZsb3c6OkNsaXApOwotICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1h
Z2Uoc3R5bGVSZXNvbHZlcigpLnN0eWxlSW1hZ2UoYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJ
bWFnZSgpKSk7CisgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldE1hc2tJbWFnZShTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpKSk7CiAg
ICAgICAgIC8vIEEgc3RhY2tpbmcgY29udGV4dCBpcyBuZWVkZWQgZm9yIHRoZSBtYXNrLgogICAg
ICAgICBpZiAodGV4dEJsb2NrU3R5bGUuaGFzQXV0b1pJbmRleCgpKQogICAgICAgICAgICAgdGV4
dEJsb2NrU3R5bGUuc2V0WkluZGV4KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5j
cHAKaW5kZXggOWM3MTA3YTYyZGUuLmYyNmI3YjA1YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlN0eWxlQnVpbGRlckdlbmVyYXRlZC5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNp
emVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CkBAIC00Nyw4ICs0OCwxMCBAQCBzdGF0aWMgUHJv
cGVydHlDYXNjYWRlOjpEaXJlY3Rpb24gZGlyZWN0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkKIAogQnVpbGRlcjo6QnVpbGRlcihTdHlsZVJlc29sdmVyJiByZXNvbHZlciwg
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBj
YXNjYWRlTGV2ZWxzLCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyBpbmNsdWRl
ZFByb3BlcnRpZXMpCiAgICAgOiBtX2Nhc2NhZGUobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbHMs
IGluY2x1ZGVkUHJvcGVydGllcywgZGlyZWN0aW9uRnJvbVN0eWxlKCpyZXNvbHZlci5zdHlsZSgp
KSkKLSAgICAsIG1fc3RhdGUoKnRoaXMsIHJlc29sdmVyKQorICAgICwgbV9zdGF0ZSgqdGhpcywg
KnJlc29sdmVyLnN0eWxlKCksICpyZXNvbHZlci5wYXJlbnRTdHlsZSgpLCByZXNvbHZlci5yb290
RWxlbWVudFN0eWxlKCksIHJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpLCByZXNvbHZlci5kb2N1bWVudCgpLCByZXNvbHZlci5lbGVtZW50KCkpCiB7CisgICAgQVNT
RVJUKHJlc29sdmVyLnN0eWxlKCkpOworICAgIEFTU0VSVChyZXNvbHZlci5wYXJlbnRTdHlsZSgp
KTsKIH0KIAogQnVpbGRlcjo6fkJ1aWxkZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IGVkMDk3NmI5YTAyLi5kNDBjMDM1N2FkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTEzMjAsNyAr
MTMyMCw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KEJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1CiAgICAgZm9yIChhdXRvJiBpdGVtIDog
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU+KGl0ZW0pKSB7CiAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRW
YWx1ZT4oaXRlbSkpCi0gICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29u
dGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1
ZT4oaXRlbS5nZXQoKSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlLnN0
eWxlUmVzb2x2ZXIoKSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENT
U0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGJ1
aWxkZXJTdGF0ZSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0
KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC0xMzUzLDcgKzEzNTMsNyBAQCBpbmxp
bmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudChCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgQ1NTVmFsdQogICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFJlZ2lzdGVy
IHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKS5tdXRhYmxl
RmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRBdHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7Cisg
ICAgICAgICAgICBidWlsZGVyU3RhdGUucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9j
YWxOYW1lKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkg
ewogICAgICAgICAgICAgYXV0byogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLmNvdW50ZXJW
YWx1ZSgpOwogICAgICAgICAgICAgTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTGlzdFN0
eWxlVHlwZTo6Tm9uZTsKQEAgLTE3NDcsNyArMTc0Nyw3IEBAIHZvaWQgQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUFsdChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5p
c051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUpOwogCiAgICAgICAgIC8vIFJlZ2lzdGVyIHRo
ZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11dGFibGVGZWF0dXJl
cygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKKyAgICAgICAg
YnVpbGRlclN0YXRlLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsK
ICAgICB9IGVsc2UKICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudEFsdFRl
eHQoZW1wdHlBdG9tKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3Rh
dGUuY3BwCmluZGV4IDkzNTZkZjExOGQ0Li5iYmJjMDA3YTllYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcApAQCAtMzAsMjcgKzMwLDM0IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyU3RhdGUuaCIKIAorI2luY2x1ZGUg
IkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTRnVuY3Rpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUu
aCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTU2hhZG93VmFs
dWUuaCIKKyNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCi1CdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShC
dWlsZGVyJiBidWlsZGVyLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorQnVpbGRlclN0
YXRlOjpCdWlsZGVyU3RhdGUoQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxl
bWVudFN0eWxlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBsZW5ndGhDb252ZXJz
aW9uLCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKICAgICAsIG1fc3R5bGVNYXAoKnRoaXMpCi0gICAgLCBt
X2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKSkKLSAgICAsIG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVy
KQotICAgICwgbV9zdHlsZSgqc3R5bGVSZXNvbHZlci5zdHlsZSgpKQotICAgICwgbV9wYXJlbnRT
dHlsZSgqc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKQotICAgICwgbV9yb290RWxlbWVudFN0
eWxlKHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gKnN0eWxlUmVzb2x2ZXIucm9v
dEVsZW1lbnRTdHlsZSgpIDogUmVuZGVyU3R5bGU6OmRlZmF1bHRTdHlsZSgpKQotICAgICwgbV9k
b2N1bWVudChtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudChtX3N0
eWxlUmVzb2x2ZXIuZWxlbWVudCgpKQorICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICAsIG1fcGFy
ZW50U3R5bGUocGFyZW50U3R5bGUpCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUocm9vdEVsZW1l
bnRTdHlsZSA/ICpyb290RWxlbWVudFN0eWxlIDogUmVuZGVyU3R5bGU6OmRlZmF1bHRTdHlsZSgp
KQorICAgICwgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKGxlbmd0aENvbnZlcnNpb24pCisg
ICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiB7Ci0g
ICAgQVNTRVJUKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSk7Ci0gICAgQVNTRVJUKHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKSk7CiB9CiAKIC8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZm
ZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBp
bnN0ZWFkCkBAIC03MywxNyArODAsMjMzIEBAIGJvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29t
UnVsZXNGb3JMZW5ndGgoKSBjb25zdAogCiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0YXRl
OjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9zdHls
ZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNh
c3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0
aGlzKSk7CisKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewor
ICAgICAgICAgICAgLy8gRmlsdGVySW1hZ2UgbmVlZHMgdG8gY2FsY3VsYXRlIEZpbHRlck9wZXJh
dGlvbnMuCisgICAgICAgICAgICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSku
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPih2YWx1ZSkpOworICAgIH0KKworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkg
fHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKENTU1ZhbHVlSUQgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1ZhbHVlVXJsOgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U7CisgICAgY2FzZSBDU1NWYWx1ZUdyYXlzY2FsZToK
KyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOworICAgIGNhc2UgQ1NT
VmFsdWVTZXBpYToKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE7CisgICAg
Y2FzZSBDU1NWYWx1ZVNhdHVyYXRlOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTsKKyAgICBjYXNlIENTU1ZhbHVlSHVlUm90YXRlOgorICAgICAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOworICAgIGNhc2UgQ1NTVmFsdWVJbnZlcnQ6CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDsKKyAgICBjYXNlIENTU1ZhbHVlQXBw
bGVJbnZlcnRMaWdodG5lc3M6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M7CisgICAgY2FzZSBDU1NWYWx1ZU9wYWNpdHk6CisgICAgICAgIHJl
dHVybiBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk7CisgICAgY2FzZSBDU1NWYWx1ZUJyaWdodG5l
c3M6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7CisgICAgY2Fz
ZSBDU1NWYWx1ZUNvbnRyYXN0OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDsKKyAgICBjYXNlIENTU1ZhbHVlQmx1cjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJh
dGlvbjo6QkxVUjsKKyAgICBjYXNlIENTU1ZhbHVlRHJvcFNoYWRvdzoKKyAgICAgICAgcmV0dXJu
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBGaWx0ZXJP
cGVyYXRpb246Ok5PTkU7CiB9CiAKLWJvb2wgQnVpbGRlclN0YXRlOjpjcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0
aW9ucykKK2Jvb2wgQnVpbGRlclN0YXRlOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQogewotICAg
IHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgb3V0
T3BlcmF0aW9ucyk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZSBlbHNl
LgorCisgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKworICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4oaW5WYWx1ZSkpIHsKKyAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaW5WYWx1ZSk7CisgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGluVmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7
CisgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KGlu
VmFsdWUpKSB7CisKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFs
dWUpKSB7CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZS5pc1VSSSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKTsKKyAgICAg
ICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGNzc1VybCk7CisKKyAgICAg
ICAgICAgIGF1dG8gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
Y3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFdURk1vdmUob3BlcmF0aW9uKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXM8Q1NTRnVuY3Rpb25WYWx1ZT4o
Y3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGZp
bHRlclZhbHVlID0gZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4oY3VycmVudFZhbHVlLmdldCgp
KTsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUg
PSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVlLm5hbWUoKSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0
aGUKKyAgICAgICAgLy8gZXhjZXB0aW9uIG9mIGRyb3Agc2hhZG93IHdoaWNoIGhhcyBhIENTU1No
YWRvd1ZhbHVlIHBhcmFtZXRlci4KKyAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIGZp
cnN0VmFsdWUgPSBudWxscHRyOworICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSAhPSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XKSB7CisgICAgICAgICAgICBib29sIGhhdmVOb25QcmltaXRp
dmVWYWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGZp
bHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICBmaXJzdFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZpbHRlclZh
bHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICB9CisKKyAgICAgICAgc3dp
dGNoIChvcGVyYXRpb25UeXBlKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50
ID0gMTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAg
ICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogeworICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gMDsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5n
dGgoKSA9PSAxKQorICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlw
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAxOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgYW1vdW50IC89IDEwMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElH
SFRORVNTOiB7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogeworICAg
ICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0gMSkKKyAgICAgICAgICAgICAgICBzdGRE
ZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBjc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAgaWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgb3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdGRE
ZXZpYXRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLmxlbmd0aCgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBjb25zdCBhdXRvKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPihjc3NWYWx1
ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IGF1dG8m
IGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmNzc1ZhbHVlKTsKKyAgICAgICAgICAg
IGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVuZ3RoPGludD4oY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4o
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0
aW9uKHgsIHkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJsdXIt
PmNvbXB1dGVMZW5ndGg8aW50Pihjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKKyAg
ICAgICAgICAgIENvbG9yIGNvbG9yOworICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCisgICAg
ICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqaXRlbS5jb2xvcik7
CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/
IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dE9wZXJhdGlv
bnMgPSBvcGVyYXRpb25zOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJ1aWxkZXJTdGF0
ZTo6aXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURlcml2ZWRGcm9tRWxlbWVudChjb25zdCBDU1NQ
cmltaXRpdmVWYWx1ZSYgdmFsdWUpCit7CisgICAgc3dpdGNoICh2YWx1ZS52YWx1ZUlEKCkpIHsK
KyAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGlu
azoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKKyAgICBjYXNlIENTU1ZhbHVl
Q3VycmVudGNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBDb2xvciBCdWlsZGVyU3RhdGU6OmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JW
aXNpdGVkTGluaykgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHZhbHVlLCBmb3JWaXNpdGVkTGluayk7CisgICAgaWYgKHZhbHVlLmlz
UkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmNvbG9yKCk7CisKKyAgICBhdXRvIGlk
ZW50aWZpZXIgPSB2YWx1ZS52YWx1ZUlEKCk7CisgICAgc3dpdGNoIChpZGVudGlmaWVyKSB7Cisg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6CisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLnRl
eHRDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgorICAgICAgICByZXR1cm4g
KGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IGRv
Y3VtZW50KCkudmlzaXRlZExpbmtDb2xvcigpIDogZG9jdW1lbnQoKS5saW5rQ29sb3IoKTsKKyAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50
KCkuYWN0aXZlTGlua0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZvY3VzUmluZ0Nv
bG9yKGRvY3VtZW50KCkuc3R5bGVDb2xvck9wdGlvbnMoJm1fc3R5bGUpKTsKKyAgICBjYXNlIENT
U1ZhbHVlQ3VycmVudGNvbG9yOgorICAgICAgICAvLyBDb2xvciBpcyBhbiBpbmhlcml0ZWQgcHJv
cGVydHkgc28gZGVwZW5kaW5nIG9uIGl0IGVmZmVjdGl2ZWx5IG1ha2VzIHRoZSBwcm9wZXJ0eSBp
bmhlcml0ZWQuCisgICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSBmbGFnIGFzIGEgc2lkZSBl
ZmZlY3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIGEgYml0IG9ibGlxdWUuIENhbiB3ZSBk
byBiZXR0ZXI/CisgICAgICAgIG1fc3R5bGUuc2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3Bl
cnRpZXMoKTsKKyAgICAgICAgcmV0dXJuIG1fc3R5bGUuY29sb3IoKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gU3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5d29yZChpZGVudGlmaWVyLCBk
b2N1bWVudCgpLnN0eWxlQ29sb3JPcHRpb25zKCZtX3N0eWxlKSk7CisgICAgfQorfQorCit2b2lk
IEJ1aWxkZXJTdGF0ZTo6cmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmcm
IGF0dHJpYnV0ZUxvY2FsTmFtZSkKK3sKKyAgICBpZiAoc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBQ
c2V1ZG9JZDo6QmVmb3JlIHx8IHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6OkFmdGVy
KQorICAgICAgICBtX3JlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlcy5hcHBlbmQoYXR0cmlidXRl
TG9jYWxOYW1lKTsKIH0KIAogdm9pZCBCdWlsZGVyU3RhdGU6OmFkanVzdFN0eWxlRm9ySW50ZXJD
aGFyYWN0ZXJSdWJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCmlu
ZGV4IGU3Yjk5Y2E3NjdmLi5lZDRiMTdhMDFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUJ1aWxkZXJTdGF0ZS5oCkBAIC00MywxMCArNDMsOSBAQCBjbGFzcyBCdWlsZGVyOwogCiBjbGFz
cyBCdWlsZGVyU3RhdGUgewogcHVibGljOgotICAgIEJ1aWxkZXJTdGF0ZShCdWlsZGVyJiwgU3R5
bGVSZXNvbHZlciYpOworICAgIEJ1aWxkZXJTdGF0ZShCdWlsZGVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxl
bWVudFN0eWxlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgRG9jdW1l
bnQmLCBjb25zdCBFbGVtZW50Kik7CiAKICAgICBCdWlsZGVyJiBidWlsZGVyKCkgeyByZXR1cm4g
bV9idWlsZGVyOyB9Ci0gICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJu
IG1fc3R5bGVSZXNvbHZlcjsgfQogCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgeyByZXR1cm4g
bV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KQEAgLTc4LDggKzc3LDEzIEBAIHB1YmxpYzoKIAogICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJik7CiAgICAgYm9v
bCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiwgRmlsdGVyT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucyk7CisKKyAgICBib29sIGlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVE
ZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAgICBDb2xvciBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYsIGJvb2wgZm9y
VmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7CiAKKyAgICBjb25zdCBWZWN0b3I8QXRvbVN0cmlu
Zz4mIHJlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0
ZXJlZENvbnRlbnRBdHRyaWJ1dGVzOyB9CisgICAgdm9pZCByZWdpc3RlckNvbnRlbnRBdHRyaWJ1
dGUoY29uc3QgQXRvbVN0cmluZyYgYXR0cmlidXRlTG9jYWxOYW1lKTsKKwogICAgIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7IH0KICAgICBDU1NUb1N0eWxl
TWFwJiBzdHlsZU1hcCgpIHsgcmV0dXJuIG1fc3R5bGVNYXA7IH0KIApAQCAtOTksMTUgKzEwMywx
MyBAQCBwcml2YXRlOgogICAgIEJ1aWxkZXImIG1fYnVpbGRlcjsKIAogICAgIENTU1RvU3R5bGVN
YXAgbV9zdHlsZU1hcDsKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIG1fY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YTsKLQotICAgIC8vIEZJWE1FOiBSZW1vdmUuCi0gICAgU3R5bGVSZXNv
bHZlciYgbV9zdHlsZVJlc29sdmVyOwogCiAgICAgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIG1fcGFyZW50U3R5bGU7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IG1fcm9vdEVsZW1lbnRTdHlsZTsKIAorICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOworCiAgICAgUmVmPGNvbnN0IERvY3VtZW50
PiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxjb25zdCBFbGVtZW50PiBtX2VsZW1lbnQ7CiAKQEAg
LTEyMSw2ICsxMjMsNyBAQCBwcml2YXRlOgogICAgIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNo
TWFzayBtX2xpbmtNYXRjaCB7IH07CiAKICAgICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsK
KyAgICBWZWN0b3I8QXRvbVN0cmluZz4gbV9yZWdpc3RlcmVkQ29udGVudEF0dHJpYnV0ZXM7CiB9
OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382572</attachid>
            <date>2019-11-01 05:54:03 -0700</date>
            <delta_ts>2019-11-01 05:58:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder-no-resolver-2.patch</filename>
            <type>text/plain</type>
            <size>44057</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyY2Q2Njc2NmJjNi4uZjJjODY2Mzg4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MCBAQAorMjAxOS0xMS0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3R5bGU6OkJ1aWxkZXIgc2hvdWxkIG5vdCBkZXBlbmQgb24gU3R5bGVSZXNv
bHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
NzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2l0
aCBhbGwgc3R5bGUgYnVpbGRpbmcgc3RhdGUgaW4gYnVpbGRlciwgd2UgY2FuIHJlbW92ZSB0aGUg
YmFjay1yZWZlcmVuY2UgdG8gc3R5bGUgcmVzb2x2ZXIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVl
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OnJlc29sdmVSR0JDb2xvcnMpOgorCisg
ICAgICAgIEFkZCBoZWxwZXIgZm9yIHJlc29sdmluZyBiYXNpYyBjb2xvcnMgd2l0aG91dCBzdHls
ZSBidWlsZGVyLgorCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKToKKworICAgICAgICBSZWdpc3RlciBjb250ZW50IGF0dHJpYnV0ZXMgZW5jb3VudGVyZWQg
ZHVyaW5nIHN0eWxlIGJ1aWxkaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6dXBkYXRlQ29udmVyc2lvbkRhdGEpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMg
aXMgbm93IGNyZWF0ZWQgYnkgQnVpbGRlclN0YXRlIGNvbnN0cnVjdG9yLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJv
bUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZmlsdGVyT3BlcmF0aW9uRm9yVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKTogRGVsZXRlZC4KKworICAgICAgICBN
b3ZlIGltYWdlIG1hcHBpbmcgZnVuY3Rpb25zIHRvIEJ1aWxkZXJTdGF0ZS4KKworICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmF1dG9GaWxs
U3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUpOgorCisgICAgICAgIENyZWF0ZSBtYXNrIGltYWdl
IHdpdGhvdXQgcmVxdWlyaW5nIHN0eWxlIHJlc29sdmVyLgorCisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjpCdWlsZGVy
KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlWm9vbSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKworICAgICAgICBObyBtb3JlIG1fc3R5
bGVSZXNvbHZlci4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3Jl
YXRlU3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZmlsdGVyT3BlcmF0aW9u
Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cmVnaXN0ZXJDb250
ZW50QXR0cmlidXRlKToKKworICAgICAgICBDb2xsZWN0IGNvbnRlbnQgYXR0cmlidXRlcyBzbyB0
aGV5IGNhbiBiZSBhcHBsaWVkIGxhdGVyIGJ5IFN0eWxlUmVzb2x2ZXIuCisKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6YnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpyb290RWxlbWVudFN0eWxlIGNvbnN0KToKKworICAgICAgICBSZXN0b3JlIHRoaXMgdG8gYmUg
bnVsbGFibGUgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OnJlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVJlc29sdmVyKTogRGVsZXRlZC4KKwog
MjAxOS0xMC0zMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbV2luQ2Fpcm9dW0NsYW5nXSBVbnJldmlld2VkIGJ1aWxkIGZpeApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGRmY2NmMTQ5ZWY2Li5lNWI4
YWI0NjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0MCwxMCArMTQwLDEwIEBAIHZvaWQgQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogICAgICAg
ICBjbGllbnQua2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKK3ZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUp
CiB7CiAgICAgbV9maWx0ZXJPcGVyYXRpb25zLmNsZWFyKCk7Ci0gICAgcmVzb2x2ZXItPmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMobV9maWx0ZXJWYWx1ZSwgbV9maWx0ZXJPcGVyYXRpb25zKTsKKyAg
ICBidWlsZGVyU3RhdGUuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhtX2ZpbHRlclZhbHVlLCBtX2Zp
bHRlck9wZXJhdGlvbnMpOwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OkZpbHRlclN1
YmltYWdlT2JzZXJ2ZXJQcm94eTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50
UmVjdCogcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oCmluZGV4
IGQ3YTQ4NmI4NWViLi4zYTdiNDM3YjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5oCkBAIC0zOSw3ICszOSwxMCBAQCBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNz
IEZpbHRlclN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFz
cyBEb2N1bWVudDsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7Citj
bGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAKIGNsYXNzIENTU0ZpbHRlckltYWdlVmFsdWUgZmluYWwg
OiBwdWJsaWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRl
clN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKQEAgLTY4LDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBlcXVhbElucHV0SW1hZ2VzKGNvbnN0IENTU0ZpbHRlckltYWdlVmFsdWUmKSBjb25zdDsK
IAotICAgIHZvaWQgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyKik7CisgICAg
dm9pZCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlck9wZXJhdGlvbnM7IH0KICAgICB2b2lkIHNldEZpbHRlck9wZXJhdGlvbnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVyT3BlcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA3MzI5OGNkZTcxNC4uMGRiNjgyZDRkYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVC
dWlsZGVyU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwMywxMSArMTAzLDExIEBAIHN0YXRpYyBpbmxpbmUgUmVm
PENTU0dyYWRpZW50VmFsdWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQogICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KHZhbHVlKS5jbG9uZSgpOwogfQog
Ci1SZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK1JlZjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYm9vbCBjb2xvcklz
RGVyaXZlZEZyb21FbGVtZW50ID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9w
cykgewotICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdG9wLm1fY29sb3IgJiYgc3R5
bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KCpz
dG9wLm1fY29sb3IpKSB7CisgICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50ICYmIHN0b3AubV9j
b2xvciAmJiBidWlsZGVyU3RhdGUuaXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURlcml2ZWRGcm9t
RWxlbWVudCgqc3RvcC5tX2NvbG9yKSkgewogICAgICAgICAgICAgc3RvcC5tX2NvbG9ySXNEZXJp
dmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgY29sb3JJc0Rlcml2ZWRGcm9tRWxl
bWVudCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTExOSw3ICsxMTksNyBAQCBSZWY8
Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVz
b2x2ZWQoY29uc3QgU3R5bGVSZQogICAgICAgICBpZiAoc3RvcC5pc01pZHBvaW50KQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdG9wLm1fY29sb3IpCi0gICAgICAgICAgICBz
dG9wLm1fcmVzb2x2ZWRDb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoKnN0b3AubV9jb2xvcik7CisgICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IGJ1
aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqc3RvcC5tX2NvbG9yKTsKICAgICAg
ICAgZWxzZSBpZiAoaSkgewogICAgICAgICAgICAgYXV0byYgcHJldmlvdXNTdG9wID0gcmVzdWx0
LT5tX3N0b3BzW2kgLSAxXTsKICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1N0b3AubV9jb2xv
cik7CkBAIC0xMzAsNiArMTMwLDIzIEBAIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVu
dFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChjb25zdCBTdHlsZVJlCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAordm9pZCBDU1NHcmFkaWVudFZhbHVlOjpyZXNvbHZlUkdCQ29sb3Jz
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYXV0byYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAgICAgIGlmIChzdG9wLmlzTWlk
cG9pbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHN0b3AubV9jb2xvcikg
eworICAgICAgICAgICAgQVNTRVJUKHN0b3AubV9jb2xvci0+aXNSR0JDb2xvcigpKTsKKyAgICAg
ICAgICAgIHN0b3AubV9yZXNvbHZlZENvbG9yID0gc3RvcC5tX2NvbG9yLT5jb2xvcigpOworICAg
ICAgICB9IGVsc2UgaWYgKGkpIHsKKyAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzU3RvcCA9IG1f
c3RvcHNbaSAtIDFdOworICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gcHJldmlvdXNTdG9wLm1f
Y29sb3I7CisgICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IHByZXZpb3VzU3RvcC5t
X3Jlc29sdmVkQ29sb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisKIGNsYXNzIExpbmVhckdyYWRp
ZW50QWRhcHRlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgTGluZWFyR3JhZGllbnRBZGFwdGVy
KEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgKaW5kZXggMGI2Y2VhNzEzZTMuLmQ3NTQ0MmUwYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmgKQEAgLTM1LDYgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogCituYW1lc3BhY2UgU3R5
bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQorCiBlbnVtIENTU0dyYWRpZW50VHlwZSB7CiAg
ICAgQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50LAogICAgIENTU0RlcHJlY2F0ZWRSYWRpYWxH
cmFkaWVudCwKQEAgLTg2LDcgKzkwLDggQEAgcHVibGljOgogICAgIGJvb2wga25vd25Ub0JlT3Bh
cXVlKGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZFN1YmltYWdl
cyhDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIHsg
fQotICAgIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChj
b25zdCBTdHlsZVJlc29sdmVyJik7CisgICAgUmVmPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKKyAgICB2b2lkIHJlc29s
dmVSR0JDb2xvcnMoKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NU
eXBlIGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUg
Z3JhZGllbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGYzNjEz
ODYxOTA2Li5kMGZmZDA3ZDcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMzAsMjkgKzMwLDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU0N1cnNvckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NEZWZhdWx0U3R5bGVTaGVldHMu
aCIKLSNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNl
bGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTRnVuY3Rpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0dy
YWRpZW50VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0tleWZyYW1lUnVsZS5oIgogI2luY2x1ZGUg
IkNTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgotI2luY2x1ZGUgIkNTU1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgi
Ci0jaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNv
bGxlY3Rvci5oIgotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
QEAgLTg4LDE3ICs3NywxMiBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJT
aGFyZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCi0jaW5jbHVkZSAi
U3R5bGVDb2xvci5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJT
dHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1
ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIlZpZXdwb3J0
U3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKQEAgLTEyOCw3
ICsxMTIsNiBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQogICAg
IG1fZWxlbWVudCA9IG51bGxwdHI7CiAgICAgbV9wYXJlbnRTdHlsZSA9IG51bGxwdHI7CiAgICAg
bV9vd25lZFBhcmVudFN0eWxlID0gbnVsbHB0cjsKLSAgICBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEgPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiB9CiAKIFN0eWxlUmVzb2x2ZXI6
OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtMjQ5LDE5ICsyMzIsMTEgQEAg
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKICAgICAgICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9j
dW1lbnQucmVuZGVyU3R5bGUoKTsKICAgICBlbHNlCiAgICAgICAgIG1fcm9vdEVsZW1lbnRTdHls
ZSA9IGRvY3VtZW50RWxlbWVudFN0eWxlID8gZG9jdW1lbnRFbGVtZW50U3R5bGUgOiBkb2N1bWVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0KLSAgICB1cGRhdGVDb252ZXJzaW9uRGF0YSgpOwot
fQotCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXBkYXRlQ29udmVyc2lvbkRh
dGEoKQotewotICAgIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEobV9zdHlsZS5nZXQoKSwgbV9yb290RWxlbWVudFN0eWxlLCBtX2VsZW1lbnQg
PyBtX2VsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVmlldygpIDogbnVsbHB0cik7CiB9CiAKIGlu
bGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIG1fc3R5bGUgPSBXVEZNb3ZlKHN0eWxlKTsKLSAg
ICB1cGRhdGVDb252ZXJzaW9uRGF0YSgpOwogfQogCiBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6c2V0UGFyZW50U3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwYXJl
bnRTdHlsZSkKQEAgLTEyNzMsNiArMTI0OCw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlN
YXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAK
ICAgICBidWlsZGVyLmFwcGx5TG93UHJpb3JpdHlQcm9wZXJ0aWVzKCk7CiAKKyAgICBmb3IgKGF1
dG8mIGNvbnRlbnRBdHRyaWJ1dGUgOiBidWlsZGVyLnN0YXRlKCkucmVnaXN0ZXJlZENvbnRlbnRB
dHRyaWJ1dGVzKCkpCisgICAgICAgIHJ1bGVTZXRzKCkubXV0YWJsZUZlYXR1cmVzKCkucmVnaXN0
ZXJDb250ZW50QXR0cmlidXRlKGNvbnRlbnRBdHRyaWJ1dGUpOworCiAgICAgaWYgKGNhY2hlSXRl
bSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0NhY2hlYWJsZUlu
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgqc3RhdGUuZWxlbWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5wYXJlbnRTdHlsZSgpKSkKQEAgLTEyOTgsMjUgKzEyNzYsNiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdQogICAgIGJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwog
fQogCi1SZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1
ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkg
ewotICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZh
bHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKLQotICAgICAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgICAgICAvLyBG
aWx0ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAg
ICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0
VmFsdWU+KHZhbHVlKSB8fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCi0gICAgICAg
IHJldHVybiBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOwotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiB7
CiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CkBAIC0xMzMyLDQ0
ICsxMjkxLDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKICAg
ICBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZl
ZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2ggKHZhbHVlLnZhbHVlSUQoKSkgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVs
aW5rOgotICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUNvbG9y
IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKLXsKLSAgICBpZiAodmFs
dWUuaXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuY29sb3IoKTsKLQotICAgIGF1
dG8gaWRlbnRpZmllciA9IHZhbHVlLnZhbHVlSUQoKTsKLSAgICBzd2l0Y2ggKGlkZW50aWZpZXIp
IHsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50
KCkudGV4dENvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJl
dHVybiAobV9zdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IGRv
Y3VtZW50KCkudmlzaXRlZExpbmtDb2xvcigpIDogZG9jdW1lbnQoKS5saW5rQ29sb3IoKTsKLSAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50
KCkuYWN0aXZlTGlua0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZvY3VzUmluZ0Nv
bG9yKGRvY3VtZW50KCkuc3R5bGVDb2xvck9wdGlvbnMobV9zdGF0ZS5zdHlsZSgpKSk7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgLy8gQ29sb3IgaXMgYW4gaW5oZXJp
dGVkIHByb3BlcnR5IHNvIGRlcGVuZGluZyBvbiBpdCBlZmZlY3RpdmVseSBtYWtlcyB0aGUgcHJv
cGVydHkgaW5oZXJpdGVkLgotICAgICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgZmxhZyBhcyBh
IHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBvYmxpcXVlLiBD
YW4gd2UgZG8gYmV0dGVyPwotICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0
bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLnN0eWxlKCkt
PmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFN0eWxlQ29sb3I6OmNvbG9y
RnJvbUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9ucyhtX3N0
YXRlLnN0eWxlKCkpKTsKLSAgICB9Ci19Ci0KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBib29sIHJlc3VsdCkKIHsKICAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1bHQgeyBleHByZXNzaW9uLCByZXN1bHQg
fSk7CkBAIC0xNDE1LDE3MSArMTMzNiw0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzTWVkaWFR
dWVyaWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVy
YXRpb25Gb3JUeXBlKENTU1ZhbHVlSUQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIENTU1ZhbHVlVXJsOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpSRUZF
UkVOQ0U7Ci0gICAgY2FzZSBDU1NWYWx1ZUdyYXlzY2FsZToKLSAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOwotICAgIGNhc2UgQ1NTVmFsdWVTZXBpYToKLSAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE7Ci0gICAgY2FzZSBDU1NWYWx1ZVNhdHVyYXRl
OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTsKLSAgICBjYXNlIENT
U1ZhbHVlSHVlUm90YXRlOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOwotICAgIGNhc2UgQ1NTVmFsdWVJbnZlcnQ6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDsKLSAgICBjYXNlIENTU1ZhbHVlQXBwbGVJbnZlcnRMaWdodG5lc3M6Ci0g
ICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M7Ci0g
ICAgY2FzZSBDU1NWYWx1ZU9wYWNpdHk6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk7Ci0gICAgY2FzZSBDU1NWYWx1ZUJyaWdodG5lc3M6Ci0gICAgICAgIHJldHVybiBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7Ci0gICAgY2FzZSBDU1NWYWx1ZUNvbnRyYXN0Ogot
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDsKLSAgICBjYXNlIENTU1Zh
bHVlQmx1cjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKLSAgICBjYXNl
IENTU1ZhbHVlRHJvcFNoYWRvdzoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Ci19Ci0K
LWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1
ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKLXsKLSAgICBTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIEFTU0VSVChvdXRPcGVyYXRpb25zLmlzRW1wdHkoKSk7
Ci0KLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUpKSB7Ci0gICAgICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUp
OwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0PihpblZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmlsdGVyT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkgewotCi0gICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4oY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKLSAgICAg
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1pdGl2ZVZhbHVlLnN0cmlu
Z1ZhbHVlKCk7Ci0gICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChj
c3NVcmwpOwotCi0gICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKGNzc1VybCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChXVEZNb3ZlKG9wZXJhdGlvbikp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzPENT
U0Z1bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvJiBmaWx0ZXJWYWx1ZSA9IGRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KGN1
cnJlbnRWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS5uYW1l
KCkpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2
ZSB2YWx1ZXMsIHdpdGggdGhlCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBvZiBkcm9wIHNoYWRvdyB3
aGljaCBoYXMgYSBDU1NTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIuCi0gICAgICAgIGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG9wZXJhdGlv
blR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykgewotICAgICAgICAgICAgYm9v
bCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPihmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQ
SUE6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3Ro
KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmRvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQot
ICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0
VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5n
bGUsIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAg
ICBkb3VibGUgYW1vdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgo
KSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+ZG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzogewotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6IHsKLSAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwg
Rml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID49IDEpCi0gICAg
ICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1
ZSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChz
dGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAg
ICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgY29uc3QgYXV0byogY3NzVmFsdWUgPSBmaWx0
ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwotICAgICAgICAgICAgaWYgKCFpczxD
U1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBjb25zdCBhdXRvJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCpj
c3NWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgeSA9
IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAgICAgICAgICAg
IGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7Ci0gICAgICAgICAgICBDb2xvciBj
b2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9y
ID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKml0ZW0uY29sb3IpOwotCi0gICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0
cmFuc3BhcmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZjlmYzM3NGZiNjEuLmRkYzUxMjdhYTMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmgiCi0jaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
UnVsZVNldHMuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKQEAgLTE1OSw5ICsxNTcsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoKTsKIAotICAgIHN0YXRpYyBib29sIGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZl
VmFsdWUmKTsKLSAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSYsIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7Ci0KICAgICBi
b29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogICAgIGJvb2wg
aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcm
KSBjb25zdDsKIApAQCAtMTkwLDE0ICsxODUsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVh
ckNhY2hlZFByb3BlcnRpZXNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygpOwogCi0gICAgYm9vbCBj
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVy
YXRpb25zJiBvdXRPcGVyYXRpb25zKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lk
IGFkanVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCYpOwotICAgIAotICAgIHZvaWQgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3Rl
clJ1YnkoKTsKLSAgICAKKyAgICAgICAgCiAgICAgZW51bSBTaG91bGRVc2VNYXRjaGVkUHJvcGVy
dGllc0NhY2hlIHsgRG9Ob3RVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlID0gMCwgVXNlTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSB9OwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBTaG91bGRVc2VNYXRjaGVkUHJvcGVydGll
c0NhY2hlID0gVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAKQEAgLTIzMywxMyArMjI0LDkg
QEAgcHVibGljOgogICAgICAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tncm91bmREYXRhOyB9CiAgICAgICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCi0gICAgICAgIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7IH0KLQogICAgICAg
ICBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdG9yRmlsdGVyOyB9CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQg
dXBkYXRlQ29udmVyc2lvbkRhdGEoKTsKLQogICAgICAgICBjb25zdCBFbGVtZW50KiBtX2VsZW1l
bnQgeyBudWxscHRyIH07CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9z
dHlsZTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRy
IH07CkBAIC0yNTIsMTYgKzIzOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBtX2Jh
Y2tncm91bmREYXRhIHsgRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCB9OwogICAgICAgICBDb2xv
ciBtX2JhY2tncm91bmRDb2xvcjsKIAotICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
IG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKLQogICAgICAgICBib29sIG1faGFzVUFBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgU3RhdGUmIHN0YXRlKCkgeyByZXR1cm4g
bV9zdGF0ZTsgfQogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KIAotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7Ci0K
ICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CiAKICAgICBib29sIGFkanVzdFJlbmRl
clN0eWxlRm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Jik7CkBA
IC0yNjksOCArMjUyLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCgpOwogCi0gICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKik7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9w
ZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlSXRlbSB7CiAgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gdXNlckFn
ZW50RGVjbGFyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
aW5kZXggZGRmNTViNzRkZWQuLjRhZmY3ZjEzNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlICJTY29wZWRFdmVu
dFF1ZXVlLmgiCiAjaW5jbHVkZSAiU2VhcmNoSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0
ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CkBA
IC0yMDY2LDYgKzIwNjYsOCBAQCBzdGF0aWMgUmVmPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IGF1
dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKQogICAgIGdyYWRpZW50LT5zZXRBbmdsZShD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGU6OkNTU19ERUcpKTsKICAgICBncmFkaWVudC0+YWRkU3RvcChmaXJzdFN0b3Ap
OwogICAgIGdyYWRpZW50LT5hZGRTdG9wKHNlY29uZFN0b3ApOworICAgIGdyYWRpZW50LT5yZXNv
bHZlUkdCQ29sb3JzKCk7CisKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKQEAgLTIwODgsNyAr
MjA5MCw3IEBAIFJlbmRlclN0eWxlIEhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZUlubmVyVGV4dFN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0
TWF4V2lkdGgoTGVuZ3RoIHsgMTAwLCBQZXJjZW50IH0pOwogICAgICAgICB0ZXh0QmxvY2tTdHls
ZS5zZXRDb2xvcih7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNmYgfSk7CiAgICAgICAgIHRleHRCbG9j
a1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZsb3c6OkNsaXApOwotICAgICAgICB0ZXh0
QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2Uoc3R5bGVSZXNvbHZlcigpLnN0eWxlSW1hZ2UoYXV0b0Zp
bGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpKSk7CisgICAgICAgIHRleHRCbG9ja1N0eWxlLnNl
dE1hc2tJbWFnZShTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoYXV0b0ZpbGxTdHJvbmdQYXNz
d29yZE1hc2tJbWFnZSgpKSk7CiAgICAgICAgIC8vIEEgc3RhY2tpbmcgY29udGV4dCBpcyBuZWVk
ZWQgZm9yIHRoZSBtYXNrLgogICAgICAgICBpZiAodGV4dEJsb2NrU3R5bGUuaGFzQXV0b1pJbmRl
eCgpKQogICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0WkluZGV4KDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggOWM3MTA3YTYyZGUuLjJiOGVhOWFlYWEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckdlbmVyYXRlZC5oIgog
I2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CkBAIC00Nyw4
ICs0OCwxMCBAQCBzdGF0aWMgUHJvcGVydHlDYXNjYWRlOjpEaXJlY3Rpb24gZGlyZWN0aW9uRnJv
bVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogQnVpbGRlcjo6QnVpbGRlcihTdHls
ZVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRp
b25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1
ZGVkUHJvcGVydGllcyBpbmNsdWRlZFByb3BlcnRpZXMpCiAgICAgOiBtX2Nhc2NhZGUobWF0Y2hS
ZXN1bHQsIGNhc2NhZGVMZXZlbHMsIGluY2x1ZGVkUHJvcGVydGllcywgZGlyZWN0aW9uRnJvbVN0
eWxlKCpyZXNvbHZlci5zdHlsZSgpKSkKLSAgICAsIG1fc3RhdGUoKnRoaXMsIHJlc29sdmVyKQor
ICAgICwgbV9zdGF0ZSgqdGhpcywgKnJlc29sdmVyLnN0eWxlKCksICpyZXNvbHZlci5wYXJlbnRT
dHlsZSgpLCByZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCksIHJlc29sdmVyLmRvY3VtZW50KCks
IHJlc29sdmVyLmVsZW1lbnQoKSkKIHsKKyAgICBBU1NFUlQocmVzb2x2ZXIuc3R5bGUoKSk7Cisg
ICAgQVNTRVJUKHJlc29sdmVyLnBhcmVudFN0eWxlKCkpOwogfQogCiBCdWlsZGVyOjp+QnVpbGRl
cigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgK
aW5kZXggZWQwOTc2YjlhMDIuLjI0ZTk3NTE1YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMjE5LDcgKzIxOSw3IEBAIGlubGluZSB2b2lkIEJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVab29tKEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NW
YWx1ZSYKICAgICAgICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwogICAgICAgICBidWlsZGVyU3RhdGUuc2V0Wm9vbShSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICBmbG9hdCBkb2Nab29tID0gYnVpbGRl
clN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKS56b29tKCk7CisgICAgICAgIGZsb2F0IGRvY1pvb20g
PSBidWlsZGVyU3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpID8gYnVpbGRlclN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7CiAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwogICAgICAgICBidWlsZGVy
U3RhdGUuc2V0Wm9vbShkb2Nab29tKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
UGVyY2VudGFnZSgpKSB7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlQ29udGVudChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdQogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUp
KSB7CiAgICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtKSkgewogICAg
ICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KGl0ZW0pKQotICAgICAgICAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpLmdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKGJ1aWxkZXJTdGF0ZS5zdHlsZVJlc29sdmVyKCkpKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgpKS5n
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlkU2V0KTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250
ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OwpAQCAtMTM1Myw3ICsxMzUzLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUNvbnRlbnQoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHUKICAgICAgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0
eUF0b20oKSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUg
dmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUuCi0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVS
ZXNvbHZlcigpLnJ1bGVTZXRzKCkubXV0YWJsZUZlYXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0
cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnJlZ2lz
dGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
IChjb250ZW50VmFsdWUuaXNDb3VudGVyKCkpIHsKICAgICAgICAgICAgIGF1dG8qIGNvdW50ZXJW
YWx1ZSA9IGNvbnRlbnRWYWx1ZS5jb3VudGVyVmFsdWUoKTsKICAgICAgICAgICAgIExpc3RTdHls
ZVR5cGUgbGlzdFN0eWxlVHlwZSA9IExpc3RTdHlsZVR5cGU6Ok5vbmU7CkBAIC0xNjExLDcgKzE2
MTEsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoQnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAh
KHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJl
bGF0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0
PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSwg
JmJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgp
LnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOworICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2
ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJmJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLCBidWlsZGVyU3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgp
KQogICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc1ZpZXdwb3J0VW5p
dHMoKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkK
QEAgLTE3NDcsNyArMTc0Nyw3IEBAIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdChC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5
QXRvbSgpIDogdmFsdWUpOwogCiAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhl
IGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29u
dGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnJl
Z2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudEFsdFRleHQoZW1wdHlBdG9tKCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCmluZGV4IDkz
NTZkZjExOGQ0Li5lN2FmMWI5ZTdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlclN0YXRlLmNwcApAQCAtMzAsMjcgKzMwLDM0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU3R5bGVCdWlsZGVyU3RhdGUuaCIKIAorI2luY2x1ZGUgIkNTU0N1cnNvckltYWdl
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NT
RnVuY3Rpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0
eWxlQnVpbGRlci5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHls
ZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgU3R5bGUgewogCi1CdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVy
LCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorQnVpbGRlclN0YXRlOjpCdWlsZGVyU3Rh
dGUoQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBtX2J1
aWxkZXIoYnVpbGRlcikKICAgICAsIG1fc3R5bGVNYXAoKnRoaXMpCi0gICAgLCBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkKLSAgICAsIG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVyKQotICAgICwg
bV9zdHlsZSgqc3R5bGVSZXNvbHZlci5zdHlsZSgpKQotICAgICwgbV9wYXJlbnRTdHlsZSgqc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKQotICAgICwgbV9yb290RWxlbWVudFN0eWxlKHN0eWxl
UmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gKnN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRT
dHlsZSgpIDogUmVuZGVyU3R5bGU6OmRlZmF1bHRTdHlsZSgpKQotICAgICwgbV9kb2N1bWVudCht
X3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudChtX3N0eWxlUmVzb2x2
ZXIuZWxlbWVudCgpKQorICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICAsIG1fcGFyZW50U3R5bGUo
cGFyZW50U3R5bGUpCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUocm9vdEVsZW1lbnRTdHlsZSkK
KyAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsIHJvb3RFbGVtZW50U3R5
bGUsIGRvY3VtZW50LnJlbmRlclZpZXcoKSkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisg
ICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoc3R5bGVSZXNvbHZlci5zdHls
ZSgpKTsKLSAgICBBU1NFUlQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKTsKIH0KIAogLy8g
U1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBU
aGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKQEAgLTczLDE3ICs4MCwyMzMgQEAg
Ym9vbCBCdWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0CiAKIFJl
ZlB0cjxTdHlsZUltYWdlPiBCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUm
IHZhbHVlKQogewotICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSk7
CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkgeworICAgICAgICBp
ZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSku
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKKworICAgICAgICBpZiAoaXM8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgICAgICAvLyBGaWx0ZXJJbWFnZSBu
ZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KKyAgICAgICAgICAgIGRvd25jYXN0
PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKCp0aGlz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7CisgICAgfQorCisgICAg
aWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1
ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5
bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKKworICAgIHJldHVybiBudWxscHRyOworfQor
CitzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZv
clR5cGUoQ1NTVmFsdWVJRCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
Q1NTVmFsdWVVcmw6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTsK
KyAgICBjYXNlIENTU1ZhbHVlR3JheXNjYWxlOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0
aW9uOjpHUkFZU0NBTEU7CisgICAgY2FzZSBDU1NWYWx1ZVNlcGlhOgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKKyAgICBjYXNlIENTU1ZhbHVlU2F0dXJhdGU6CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOworICAgIGNhc2UgQ1NTVmFsdWVI
dWVSb3RhdGU6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU7Cisg
ICAgY2FzZSBDU1NWYWx1ZUludmVydDoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOworICAgIGNhc2UgQ1NTVmFsdWVBcHBsZUludmVydExpZ2h0bmVzczoKKyAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzsKKyAgICBjYXNl
IENTU1ZhbHVlT3BhY2l0eToKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WTsKKyAgICBjYXNlIENTU1ZhbHVlQnJpZ2h0bmVzczoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9w
ZXJhdGlvbjo6QlJJR0hUTkVTUzsKKyAgICBjYXNlIENTU1ZhbHVlQ29udHJhc3Q6CisgICAgICAg
IHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOworICAgIGNhc2UgQ1NTVmFsdWVCbHVy
OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOworICAgIGNhc2UgQ1NTVmFs
dWVEcm9wU2hhZG93OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKIH0KIAotYm9vbCBC
dWlsZGVyU3RhdGU6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIHZhbHVl
LCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQorYm9vbCBCdWlsZGVyU3RhdGU6OmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJh
dGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5jcmVh
dGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvdXRPcGVyYXRpb25zKTsKKyAgICAvLyBGSVhNRTog
TW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlIGVsc2UuCisKKyAgICBBU1NFUlQob3V0T3BlcmF0aW9u
cy5pc0VtcHR5KCkpOworCisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihpblZhbHVlKSkg
eworICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPihpblZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
IWlzPENTU1ZhbHVlTGlzdD4oaW5WYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1
ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oaW5WYWx1ZSkpIHsKKworICAgICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5n
ZXQoKSk7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzVVJJKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFN0cmluZyBjc3NVcmwgPSBwcmltaXRp
dmVWYWx1ZS5zdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgVVJMIHVybCA9IGRvY3VtZW50KCku
Y29tcGxldGVVUkwoY3NzVXJsKTsKKworICAgICAgICAgICAgYXV0byBvcGVyYXRpb24gPSBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShjc3NVcmwsIHVybC5mcmFnbWVudElkZW50aWZp
ZXIoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoV1RGTW92
ZShvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFpczxDU1NGdW5jdGlvblZhbHVlPihjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byYgZmlsdGVyVmFsdWUgPSBkb3duY2FzdDxDU1NGdW5j
dGlvblZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmls
dGVyVmFsdWUubmFtZSgpKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBwYXJhbWV0ZXJz
IGFyZSBwcmltaXRpdmUgdmFsdWVzLCB3aXRoIHRoZQorICAgICAgICAvLyBleGNlcHRpb24gb2Yg
ZHJvcCBzaGFkb3cgd2hpY2ggaGFzIGEgQ1NTU2hhZG93VmFsdWUgcGFyYW1ldGVyLgorICAgICAg
ICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IG51bGxwdHI7CisgICAgICAg
IGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1cpIHsKKyAg
ICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFsdWUubGVuZ3RoKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaWx0ZXJWYWx1ZS5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgeworICAgICAgICAgICAgICAgICAgICBoYXZlTm9u
UHJpbWl0aXZlVmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGF2ZU5vblByaW1p
dGl2ZVZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZp
bHRlclZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygw
KSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNFUElBOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAgICAgICAgICAgaWYgKGZpbHRl
clZhbHVlLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZh
bHVlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1Bl
cmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOiB7CisgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAwOworICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICAgICAg
YW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworCisgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTog
eworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVy
VmFsdWUubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFs
dWUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVy
Y2VudGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9u
VHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6IHsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246
OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgICAgICBMZW5ndGggc3RkRGV2aWF0aW9u
ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgo
KSA+PSAxKQorICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKGZpcnN0VmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAg
ICBpZiAoc3RkRGV2aWF0aW9uLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1
ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN0ZERldmlhdGlvbikpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9X
OiB7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgIT0gMSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGNzc1ZhbHVl
ID0gZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIGlm
ICghaXM8Q1NTU2hhZG93VmFsdWU+KGNzc1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgY29uc3QgYXV0byYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1Zh
bHVlPigqY3NzVmFsdWUpOworICAgICAgICAgICAgaW50IHggPSBpdGVtLngtPmNvbXB1dGVMZW5n
dGg8aW50Pihjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAgaW50IHkg
PSBpdGVtLnktPmNvbXB1dGVMZW5ndGg8aW50Pihjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkp
OworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oeCwgeSk7CisgICAgICAgICAgICBpbnQg
Ymx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAg
ICAgICAgICBpZiAoaXRlbS5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKCppdGVtLmNvbG9yKTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2Nh
dGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQnVpbGRlclN0YXRlOjppc0NvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
RGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHZhbHVlLnZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0
OgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRB
Y3RpdmVsaW5rOgorICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAK
IENvbG9yIEJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAogewotICAgIHJl
dHVybiBtX3N0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUodmFsdWUsIGZvclZp
c2l0ZWRMaW5rKTsKKyAgICBpZiAodmFsdWUuaXNSR0JDb2xvcigpKQorICAgICAgICByZXR1cm4g
dmFsdWUuY29sb3IoKTsKKworICAgIGF1dG8gaWRlbnRpZmllciA9IHZhbHVlLnZhbHVlSUQoKTsK
KyAgICBzd2l0Y2ggKGlkZW50aWZpZXIpIHsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoK
KyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkudGV4dENvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdExpbms6CisgICAgICAgIHJldHVybiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNM
aW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gZG9jdW1lbnQoKS52aXNpdGVkTGlua0NvbG9yKCkg
OiBkb2N1bWVudCgpLmxpbmtDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVs
aW5rOgorICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5hY3RpdmVMaW5rQ29sb3IoKTsKKyAgICBj
YXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3I6CisgICAgICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6c2luZ2xldG9uKCkuZm9jdXNSaW5nQ29sb3IoZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0
aW9ucygmbV9zdHlsZSkpOworICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6CisgICAgICAg
IC8vIENvbG9yIGlzIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBzbyBkZXBlbmRpbmcgb24gaXQgZWZm
ZWN0aXZlbHkgbWFrZXMgdGhlIHByb3BlcnR5IGluaGVyaXRlZC4KKyAgICAgICAgLy8gRklYTUU6
IFNldHRpbmcgdGhlIGZsYWcgYXMgYSBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rp
b24gaXMgYSBiaXQgb2JsaXF1ZS4gQ2FuIHdlIGRvIGJldHRlcj8KKyAgICAgICAgbV9zdHlsZS5z
ZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgICAgICByZXR1cm4gbV9z
dHlsZS5jb2xvcigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTdHlsZUNvbG9yOjpj
b2xvckZyb21LZXl3b3JkKGlkZW50aWZpZXIsIGRvY3VtZW50KCkuc3R5bGVDb2xvck9wdGlvbnMo
Jm1fc3R5bGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgQnVpbGRlclN0YXRlOjpyZWdpc3RlckNvbnRl
bnRBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZyYgYXR0cmlidXRlTG9jYWxOYW1lKQoreworICAg
IGlmIChzdHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpCZWZvcmUgfHwgc3R5bGUoKS5z
dHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6QWZ0ZXIpCisgICAgICAgIG1fcmVnaXN0ZXJlZENvbnRl
bnRBdHRyaWJ1dGVzLmFwcGVuZChhdHRyaWJ1dGVMb2NhbE5hbWUpOwogfQogCiB2b2lkIEJ1aWxk
ZXJTdGF0ZTo6YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXggZTdiOTljYTc2N2YuLjFkMTlhMTU3YTNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTQzLDE0ICs0
MywxMyBAQCBjbGFzcyBCdWlsZGVyOwogCiBjbGFzcyBCdWlsZGVyU3RhdGUgewogcHVibGljOgot
ICAgIEJ1aWxkZXJTdGF0ZShCdWlsZGVyJiwgU3R5bGVSZXNvbHZlciYpOworICAgIEJ1aWxkZXJT
dGF0ZShCdWlsZGVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBjb25zdCBEb2N1bWVudCYs
IGNvbnN0IEVsZW1lbnQqKTsKIAogICAgIEJ1aWxkZXImIGJ1aWxkZXIoKSB7IHJldHVybiBtX2J1
aWxkZXI7IH0KLSAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCkgeyByZXR1cm4gbV9z
dHlsZVJlc29sdmVyOyB9CiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7IHJldHVybiBtX3N0
eWxlOyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiByb290RWxlbWVudFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CisgICAgY29uc3QgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9jdW1lbnQuZ2V0KCk7IH0KICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CkBAIC03OCw4ICs3NywxMyBAQCBwdWJsaWM6CiAK
ICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gY3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogICAg
IGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYsIEZpbHRlck9wZXJh
dGlvbnMmIG91dE9wZXJhdGlvbnMpOworCisgICAgYm9vbCBpc0NvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlRGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAgICAgQ29s
b3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBib29s
IGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCisgICAgY29uc3QgVmVjdG9yPEF0b21T
dHJpbmc+JiByZWdpc3RlcmVkQ29udGVudEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z2lzdGVyZWRDb250ZW50QXR0cmlidXRlczsgfQorICAgIHZvaWQgcmVnaXN0ZXJDb250ZW50QXR0
cmlidXRlKGNvbnN0IEF0b21TdHJpbmcmIGF0dHJpYnV0ZUxvY2FsTmFtZSk7CisKICAgICBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CiAgICAgQ1NTVG9T
dHlsZU1hcCYgc3R5bGVNYXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9CiAKQEAgLTk5LDE0ICsx
MDMsMTIgQEAgcHJpdmF0ZToKICAgICBCdWlsZGVyJiBtX2J1aWxkZXI7CiAKICAgICBDU1NUb1N0
eWxlTWFwIG1fc3R5bGVNYXA7Ci0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGE7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlLgotICAgIFN0eWxl
UmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKIAogICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOwog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBtX3Jvb3RFbGVtZW50U3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fcm9vdEVs
ZW1lbnRTdHlsZTsKKworICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgbV9jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhOwogCiAgICAgUmVmPGNvbnN0IERvY3VtZW50PiBtX2RvY3Vt
ZW50OwogICAgIFJlZlB0cjxjb25zdCBFbGVtZW50PiBtX2VsZW1lbnQ7CkBAIC0xMjEsNiArMTIz
LDcgQEAgcHJpdmF0ZToKICAgICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbV9saW5r
TWF0Y2ggeyB9OwogCiAgICAgYm9vbCBtX2ZvbnREaXJ0eSB7IGZhbHNlIH07CisgICAgVmVjdG9y
PEF0b21TdHJpbmc+IG1fcmVnaXN0ZXJlZENvbnRlbnRBdHRyaWJ1dGVzOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382573</attachid>
            <date>2019-11-01 05:58:50 -0700</date>
            <delta_ts>2019-11-01 07:13:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder-no-resolver-3.patch</filename>
            <type>text/plain</type>
            <size>44072</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyY2Q2Njc2NmJjNi4uZjJjODY2Mzg4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MCBAQAorMjAxOS0xMS0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3R5bGU6OkJ1aWxkZXIgc2hvdWxkIG5vdCBkZXBlbmQgb24gU3R5bGVSZXNv
bHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
NzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2l0
aCBhbGwgc3R5bGUgYnVpbGRpbmcgc3RhdGUgaW4gYnVpbGRlciwgd2UgY2FuIHJlbW92ZSB0aGUg
YmFjay1yZWZlcmVuY2UgdG8gc3R5bGUgcmVzb2x2ZXIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVl
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OnJlc29sdmVSR0JDb2xvcnMpOgorCisg
ICAgICAgIEFkZCBoZWxwZXIgZm9yIHJlc29sdmluZyBiYXNpYyBjb2xvcnMgd2l0aG91dCBzdHls
ZSBidWlsZGVyLgorCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKToKKworICAgICAgICBSZWdpc3RlciBjb250ZW50IGF0dHJpYnV0ZXMgZW5jb3VudGVyZWQg
ZHVyaW5nIHN0eWxlIGJ1aWxkaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6dXBkYXRlQ29udmVyc2lvbkRhdGEpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMg
aXMgbm93IGNyZWF0ZWQgYnkgQnVpbGRlclN0YXRlIGNvbnN0cnVjdG9yLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJv
bUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZmlsdGVyT3BlcmF0aW9uRm9yVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKTogRGVsZXRlZC4KKworICAgICAgICBN
b3ZlIGltYWdlIG1hcHBpbmcgZnVuY3Rpb25zIHRvIEJ1aWxkZXJTdGF0ZS4KKworICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmF1dG9GaWxs
U3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUpOgorCisgICAgICAgIENyZWF0ZSBtYXNrIGltYWdl
IHdpdGhvdXQgcmVxdWlyaW5nIHN0eWxlIHJlc29sdmVyLgorCisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjpCdWlsZGVy
KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlWm9vbSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKworICAgICAgICBObyBtb3JlIG1fc3R5
bGVSZXNvbHZlci4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3Jl
YXRlU3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZmlsdGVyT3BlcmF0aW9u
Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cmVnaXN0ZXJDb250
ZW50QXR0cmlidXRlKToKKworICAgICAgICBDb2xsZWN0IGNvbnRlbnQgYXR0cmlidXRlcyBzbyB0
aGV5IGNhbiBiZSBhcHBsaWVkIGxhdGVyIGJ5IFN0eWxlUmVzb2x2ZXIuCisKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6YnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpyb290RWxlbWVudFN0eWxlIGNvbnN0KToKKworICAgICAgICBSZXN0b3JlIHRoaXMgdG8gYmUg
bnVsbGFibGUgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OnJlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVJlc29sdmVyKTogRGVsZXRlZC4KKwog
MjAxOS0xMC0zMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbV2luQ2Fpcm9dW0NsYW5nXSBVbnJldmlld2VkIGJ1aWxkIGZpeApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGRmY2NmMTQ5ZWY2Li5lNWI4
YWI0NjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0MCwxMCArMTQwLDEwIEBAIHZvaWQgQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogICAgICAg
ICBjbGllbnQua2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKK3ZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUp
CiB7CiAgICAgbV9maWx0ZXJPcGVyYXRpb25zLmNsZWFyKCk7Ci0gICAgcmVzb2x2ZXItPmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMobV9maWx0ZXJWYWx1ZSwgbV9maWx0ZXJPcGVyYXRpb25zKTsKKyAg
ICBidWlsZGVyU3RhdGUuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhtX2ZpbHRlclZhbHVlLCBtX2Zp
bHRlck9wZXJhdGlvbnMpOwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OkZpbHRlclN1
YmltYWdlT2JzZXJ2ZXJQcm94eTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50
UmVjdCogcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oCmluZGV4
IGQ3YTQ4NmI4NWViLi4zYTdiNDM3YjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5oCkBAIC0zOSw3ICszOSwxMCBAQCBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNz
IEZpbHRlclN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFz
cyBEb2N1bWVudDsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7Citj
bGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAKIGNsYXNzIENTU0ZpbHRlckltYWdlVmFsdWUgZmluYWwg
OiBwdWJsaWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRl
clN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKQEAgLTY4LDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBlcXVhbElucHV0SW1hZ2VzKGNvbnN0IENTU0ZpbHRlckltYWdlVmFsdWUmKSBjb25zdDsK
IAotICAgIHZvaWQgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyKik7CisgICAg
dm9pZCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlck9wZXJhdGlvbnM7IH0KICAgICB2b2lkIHNldEZpbHRlck9wZXJhdGlvbnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVyT3BlcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA3MzI5OGNkZTcxNC4uZjA2YmU0ZWE1MGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVC
dWlsZGVyU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwMywxMSArMTAzLDExIEBAIHN0YXRpYyBpbmxpbmUgUmVm
PENTU0dyYWRpZW50VmFsdWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQogICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KHZhbHVlKS5jbG9uZSgpOwogfQog
Ci1SZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK1JlZjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYm9vbCBjb2xvcklz
RGVyaXZlZEZyb21FbGVtZW50ID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9w
cykgewotICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdG9wLm1fY29sb3IgJiYgc3R5
bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KCpz
dG9wLm1fY29sb3IpKSB7CisgICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50ICYmIHN0b3AubV9j
b2xvciAmJiBTdHlsZTo6QnVpbGRlclN0YXRlOjppc0NvbG9yRnJvbVByaW1pdGl2ZVZhbHVlRGVy
aXZlZEZyb21FbGVtZW50KCpzdG9wLm1fY29sb3IpKSB7CiAgICAgICAgICAgICBzdG9wLm1fY29s
b3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBjb2xvcklzRGVyaXZl
ZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE5LDcgKzExOSw3
IEBAIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZChjb25zdCBTdHlsZVJlCiAgICAgICAgIGlmIChzdG9wLmlzTWlkcG9pbnQp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0b3AubV9jb2xvcikKLSAgICAg
ICAgICAgIHN0b3AubV9yZXNvbHZlZENvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZSgqc3RvcC5tX2NvbG9yKTsKKyAgICAgICAgICAgIHN0b3AubV9yZXNvbHZlZENv
bG9yID0gYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpzdG9wLm1fY29sb3Ip
OwogICAgICAgICBlbHNlIGlmIChpKSB7CiAgICAgICAgICAgICBhdXRvJiBwcmV2aW91c1N0b3Ag
PSByZXN1bHQtPm1fc3RvcHNbaSAtIDFdOwogICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzU3Rv
cC5tX2NvbG9yKTsKQEAgLTEzMCw2ICsxMzAsMjMgQEAgUmVmPENTU0dyYWRpZW50VmFsdWU+IENT
U0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGNvbnN0IFN0eWxlUmUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIENTU0dyYWRpZW50VmFsdWU6OnJlc29sdmVS
R0JDb2xvcnMoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7
ICsraSkgeworICAgICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKKyAgICAgICAgaWYgKHN0
b3AuaXNNaWRwb2ludCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc3RvcC5t
X2NvbG9yKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RvcC5tX2NvbG9yLT5pc1JHQkNvbG9yKCkp
OworICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBzdG9wLm1fY29sb3ItPmNvbG9y
KCk7CisgICAgICAgIH0gZWxzZSBpZiAoaSkgeworICAgICAgICAgICAgYXV0byYgcHJldmlvdXNT
dG9wID0gbV9zdG9wc1tpIC0gMV07CisgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwcmV2aW91
c1N0b3AubV9jb2xvcjsKKyAgICAgICAgICAgIHN0b3AubV9yZXNvbHZlZENvbG9yID0gcHJldmlv
dXNTdG9wLm1fcmVzb2x2ZWRDb2xvcjsKKyAgICAgICAgfQorICAgIH0KK30KKwogY2xhc3MgTGlu
ZWFyR3JhZGllbnRBZGFwdGVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBMaW5lYXJHcmFkaWVu
dEFkYXB0ZXIoR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuaAppbmRleCAwYjZjZWE3MTNlMy4uZDc1NDQyZTBhMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKK25hbWVz
cGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisKIGVudW0gQ1NTR3JhZGllbnRU
eXBlIHsKICAgICBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQsCiAgICAgQ1NTRGVwcmVjYXRl
ZFJhZGlhbEdyYWRpZW50LApAQCAtODYsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBrbm93
blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdm9pZCBsb2Fk
U3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJikgeyB9Ci0gICAgUmVmPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jl
c29sdmVkKGNvbnN0IFN0eWxlUmVzb2x2ZXImKTsKKyAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4g
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOworICAgIHZv
aWQgcmVzb2x2ZVJHQkNvbG9ycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1
ZShDbGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRp
ZW50VHlwZSBncmFkaWVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5k
ZXggZjM2MTM4NjE5MDYuLmQwZmZkMDdkNzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCkBAIC0zMCwyOSArMzAsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCi0j
aW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0RlZmF1bHRTdHls
ZVNoZWV0cy5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJhbWVSdWxlLmgiCiAj
aW5jbHVkZSAiQ1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTU2Vs
ZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
UnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxp
c3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1l
bnRSdWxlQ29sbGVjdG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgpAQCAtODgsMTcgKzc3LDEyIEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2lu
Y2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKLSNp
bmNsdWRlICJTdHlsZUNvbG9yLmgiCi0jaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAi
Vmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgpA
QCAtMTI4LDcgKzExMiw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVh
cigpCiAgICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKICAgICBtX3BhcmVudFN0eWxlID0gbnVsbHB0
cjsKICAgICBtX293bmVkUGFyZW50U3R5bGUgPSBudWxscHRyOwotICAgIG1fY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAogU3R5bGVS
ZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCkBAIC0yNDksMTkgKzIz
MiwxMSBAQCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogICAgICAgICBtX3Jvb3RFbGVtZW50U3R5
bGUgPSBkb2N1bWVudC5yZW5kZXJTdHlsZSgpOwogICAgIGVsc2UKICAgICAgICAgbV9yb290RWxl
bWVudFN0eWxlID0gZG9jdW1lbnRFbGVtZW50U3R5bGUgPyBkb2N1bWVudEVsZW1lbnRTdHlsZSA6
IGRvY3VtZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLQotICAgIHVwZGF0ZUNvbnZlcnNpb25E
YXRhKCk7Ci19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp1cGRhdGVDb252
ZXJzaW9uRGF0YSgpCi17Ci0gICAgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhID0gQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YShtX3N0eWxlLmdldCgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG1f
ZWxlbWVudCA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkgOiBudWxscHRyKTsK
IH0KIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlKHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAgICAgbV9zdHlsZSA9IFdURk1vdmUoc3R5
bGUpOwotICAgIHVwZGF0ZUNvbnZlcnNpb25EYXRhKCk7CiB9CiAKIGlubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpzZXRQYXJlbnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHBhcmVudFN0eWxlKQpAQCAtMTI3Myw2ICsxMjQ4LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwg
Y29uc3QKIAogICAgIGJ1aWxkZXIuYXBwbHlMb3dQcmlvcml0eVByb3BlcnRpZXMoKTsKIAorICAg
IGZvciAoYXV0byYgY29udGVudEF0dHJpYnV0ZSA6IGJ1aWxkZXIuc3RhdGUoKS5yZWdpc3RlcmVk
Q29udGVudEF0dHJpYnV0ZXMoKSkKKyAgICAgICAgcnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMo
KS5yZWdpc3RlckNvbnRlbnRBdHRyaWJ1dGUoY29udGVudEF0dHJpYnV0ZSk7CisKICAgICBpZiAo
Y2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzQ2Fj
aGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKCpzdGF0ZS5lbGVtZW50KCksIHN0YXRlLnN0
eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpKQpAQCAtMTI5OCwyNSArMTI3Niw2IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgYnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoaWQsICp2
YWx1ZSk7CiB9CiAKLVJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdl
KENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4o
dmFsdWUpKSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dy
YWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOwot
Ci0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAg
ICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgot
ICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnModGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1
ZSkpOwotICAgIH0KLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NT
SW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0
eWxlKCkKIHsKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKQEAg
LTEzMzIsNDQgKzEyOTEsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5
bGUoKQogICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQotewot
ICAgIHN3aXRjaCAodmFsdWUudmFsdWVJRCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRl
eHQ6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dEFjdGl2ZWxpbms6Ci0gICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAotewotICAg
IGlmICh2YWx1ZS5pc1JHQkNvbG9yKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5jb2xvcigpOwot
Ci0gICAgYXV0byBpZGVudGlmaWVyID0gdmFsdWUudmFsdWVJRCgpOwotICAgIHN3aXRjaCAoaWRl
bnRpZmllcikgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4g
ZG9jdW1lbnQoKS50ZXh0Q29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAg
ICAgICAgcmV0dXJuIChtX3N0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExp
bmspID8gZG9jdW1lbnQoKS52aXNpdGVkTGlua0NvbG9yKCkgOiBkb2N1bWVudCgpLmxpbmtDb2xv
cigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAgICAgICByZXR1cm4g
ZG9jdW1lbnQoKS5hY3RpdmVMaW5rQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9j
dXNSaW5nQ29sb3I6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9j
dXNSaW5nQ29sb3IoZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9ucyhtX3N0YXRlLnN0eWxlKCkp
KTsKLSAgICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICAvLyBDb2xvciBpcyBh
biBpbmhlcml0ZWQgcHJvcGVydHkgc28gZGVwZW5kaW5nIG9uIGl0IGVmZmVjdGl2ZWx5IG1ha2Vz
IHRoZSBwcm9wZXJ0eSBpbmhlcml0ZWQuCi0gICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSBm
bGFnIGFzIGEgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIGEgYml0IG9i
bGlxdWUuIENhbiB3ZSBkbyBiZXR0ZXI/Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0SGFz
RXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RhdGUu
c3R5bGUoKS0+Y29sb3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU3R5bGVDb2xv
cjo6Y29sb3JGcm9tS2V5d29yZChpZGVudGlmaWVyLCBkb2N1bWVudCgpLnN0eWxlQ29sb3JPcHRp
b25zKG1fc3RhdGUuc3R5bGUoKSkpOwotICAgIH0KLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjph
ZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVzdWx0KQogewogICAgIG1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVyeVJlc3VsdCB7IGV4cHJlc3Npb24s
IHJlc3VsdCB9KTsKQEAgLTE0MTUsMTcxICsxMzM2LDQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpo
YXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSgpIGNvbnN0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZp
bHRlck9wZXJhdGlvbkZvclR5cGUoQ1NTVmFsdWVJRCB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgQ1NTVmFsdWVVcmw6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRp
b246OlJFRkVSRU5DRTsKLSAgICBjYXNlIENTU1ZhbHVlR3JheXNjYWxlOgotICAgICAgICByZXR1
cm4gRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU7Ci0gICAgY2FzZSBDU1NWYWx1ZVNlcGlhOgot
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKLSAgICBjYXNlIENTU1ZhbHVl
U2F0dXJhdGU6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOwotICAg
IGNhc2UgQ1NTVmFsdWVIdWVSb3RhdGU6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
OkhVRV9ST1RBVEU7Ci0gICAgY2FzZSBDU1NWYWx1ZUludmVydDoKLSAgICAgICAgcmV0dXJuIEZp
bHRlck9wZXJhdGlvbjo6SU5WRVJUOwotICAgIGNhc2UgQ1NTVmFsdWVBcHBsZUludmVydExpZ2h0
bmVzczoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hU
TkVTUzsKLSAgICBjYXNlIENTU1ZhbHVlT3BhY2l0eToKLSAgICAgICAgcmV0dXJuIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWTsKLSAgICBjYXNlIENTU1ZhbHVlQnJpZ2h0bmVzczoKLSAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzsKLSAgICBjYXNlIENTU1ZhbHVlQ29u
dHJhc3Q6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOwotICAgIGNh
c2UgQ1NTVmFsdWVCbHVyOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOwot
ICAgIGNhc2UgQ1NTVmFsdWVEcm9wU2hhZG93OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0
aW9uOjpEUk9QX1NIQURPVzsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9O
RTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0
IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQotewot
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNF
bXB0eSgpKTsKLQotICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oaW5WYWx1ZSkpIHsKLSAg
ICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
aW5WYWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFpczxD
U1NWYWx1ZUxpc3Q+KGluVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGaWx0
ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBk
b3duY2FzdDxDU1NWYWx1ZUxpc3Q+KGluVmFsdWUpKSB7Ci0KLSAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1VSSSgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFs
dWUuc3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudCgpLmNvbXBs
ZXRlVVJMKGNzc1VybCk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gUmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkp
OwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFdURk1vdmUob3Bl
cmF0aW9uKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghaXM8Q1NTRnVuY3Rpb25WYWx1ZT4oY3VycmVudFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8mIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8Q1NTRnVuY3Rpb25W
YWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZh
bHVlLm5hbWUoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1ldGVycyBhcmUg
cHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0aGUKLSAgICAgICAgLy8gZXhjZXB0aW9uIG9mIGRyb3Ag
c2hhZG93IHdoaWNoIGhhcyBhIENTU1NoYWRvd1ZhbHVlIHBhcmFtZXRlci4KLSAgICAgICAgY29u
c3QgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBudWxscHRyOwotICAgICAgICBpZiAo
b3BlcmF0aW9uVHlwZSAhPSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7Ci0gICAgICAg
ICAgICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhqKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1p
dGl2ZVZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVW
YWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJW
YWx1ZS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBmaXJzdFZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTRVBJQToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0g
ICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1
ZS5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+
ZG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50
YWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAg
ICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAgIGFuZ2xl
ID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLQotICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAg
ICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVl
Lmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5k
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRh
Z2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOiB7Ci0gICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9IExl
bmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0g
MSkKLSAgICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAg
ICAgaWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJs
dXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdGREZXZpYXRpb24pKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzogewotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjb25zdCBhdXRvKiBjc3NWYWx1
ZSA9IGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBp
ZiAoIWlzPENTU1NoYWRvd1ZhbHVlPihjc3NWYWx1ZSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dW
YWx1ZT4oKmNzc1ZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAg
IGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKHgsIHkpOwotICAg
ICAgICAgICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8
aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKLSAgICAgICAgICAg
IENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCi0gICAgICAgICAgICAg
ICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqaXRlbS5jb2xvcik7Ci0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDog
Q29sb3I6OnRyYW5zcGFyZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVy
YXRpb25zOwotICAgIHJldHVybiB0cnVlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBmOWZjMzc0ZmI2MS4uZGRjNTEyN2FhMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjIsOCArMjIsNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEuaCIKLSNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgpAQCAtMTU5LDkgKzE1Nyw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgpOwogCi0gICAgc3RhdGljIGJv
b2wgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChjb25zdCBDU1NQ
cmltaXRpdmVWYWx1ZSYpOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0
IENTU1ByaW1pdGl2ZVZhbHVlJiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsK
LQogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAg
ICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBFbGVtZW50JiwgY29uc3QgQXRv
bVN0cmluZyYpIGNvbnN0OwogCkBAIC0xOTAsMTQgKzE4NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFyQ2FjaGVkUHJvcGVydGllc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKLSAg
ICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotCiBwcml2YXRlOgogICAgIHZvaWQgYWRq
dXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxlbWVudCopOwog
ICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3BlY2lmaWNRdWlya3MoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50Jik7Ci0gICAgCi0gICAgdm9pZCBhZGp1c3RTdHlsZUZvckludGVy
Q2hhcmFjdGVyUnVieSgpOwotICAgIAorICAgICAgICAKICAgICBlbnVtIFNob3VsZFVzZU1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUgeyBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgPSAwLCBV
c2VNYXRjaGVkUHJvcGVydGllc0NhY2hlIH07CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCYsIFNob3VsZFVzZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUgPSBVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlKTsKIApAQCAtMjMzLDEz
ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAg
ICAgICAgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQot
CiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdm9pZCB1cGRhdGVDb252ZXJzaW9uRGF0YSgpOwotCiAgICAgICAgIGNvbnN0IEVsZW1lbnQq
IG1fZWxlbWVudCB7IG51bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBtX3N0eWxlOwogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7
IG51bGxwdHIgfTsKQEAgLTI1MiwxNiArMjM5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExh
eWVyIG1fYmFja2dyb3VuZERhdGEgeyBGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kIH07CiAgICAg
ICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogCi0gICAgICAgIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwotCiAgICAgICAgIGJvb2wgbV9o
YXNVQUFwcGVhcmFuY2UgeyBmYWxzZSB9OwogICAgIH07CiAKICAgICBTdGF0ZSYgc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlOyB9CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTVmFs
dWUmKTsKLQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBl
cnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KIAogICAgIGJvb2wgYWRq
dXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3NpemluZyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQmKTsKQEAgLTI2OSw4ICsyNTIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgY2Fj
aGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0
Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoUmVzdWx0Jik7CiAgICAgc3RydWN0IE1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKICAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVz
PiB1c2VyQWdlbnREZWNsYXJhdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCBkZGY1NWI3NGRlZC4uNGFmZjdmMTM0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNjIsNyArNjIsNyBAQAogI2luY2x1ZGUgIlNj
b3BlZEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJTZWFyY2hJbnB1dFR5cGUuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHls
ZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTGFuZ3Vh
Z2UuaD4KQEAgLTIwNjYsNiArMjA2Niw4IEBAIHN0YXRpYyBSZWY8Q1NTTGluZWFyR3JhZGllbnRW
YWx1ZT4gYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpCiAgICAgZ3JhZGllbnQtPnNl
dEFuZ2xlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoOTAsIENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZTo6Q1NTX0RFRykpOwogICAgIGdyYWRpZW50LT5hZGRTdG9wKGZp
cnN0U3RvcCk7CiAgICAgZ3JhZGllbnQtPmFkZFN0b3Aoc2Vjb25kU3RvcCk7CisgICAgZ3JhZGll
bnQtPnJlc29sdmVSR0JDb2xvcnMoKTsKKwogICAgIHJldHVybiBncmFkaWVudDsKIH0KIApAQCAt
MjA4OCw3ICsyMDkwLDcgQEAgUmVuZGVyU3R5bGUgSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5u
ZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICB0ZXh0QmxvY2tT
dHlsZS5zZXRNYXhXaWR0aChMZW5ndGggeyAxMDAsIFBlcmNlbnQgfSk7CiAgICAgICAgIHRleHRC
bG9ja1N0eWxlLnNldENvbG9yKHsgMC4wZiwgMC4wZiwgMC4wZiwgMC42ZiB9KTsKICAgICAgICAg
dGV4dEJsb2NrU3R5bGUuc2V0VGV4dE92ZXJmbG93KFRleHRPdmVyZmxvdzo6Q2xpcCk7Ci0gICAg
ICAgIHRleHRCbG9ja1N0eWxlLnNldE1hc2tJbWFnZShzdHlsZVJlc29sdmVyKCkuc3R5bGVJbWFn
ZShhdXRvRmlsbFN0cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKCkpKTsKKyAgICAgICAgdGV4dEJsb2Nr
U3R5bGUuc2V0TWFza0ltYWdlKFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShhdXRvRmlsbFN0
cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKCkpKTsKICAgICAgICAgLy8gQSBzdGFja2luZyBjb250ZXh0
IGlzIG5lZWRlZCBmb3IgdGhlIG1hc2suCiAgICAgICAgIGlmICh0ZXh0QmxvY2tTdHlsZS5oYXNB
dXRvWkluZGV4KCkpCiAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRaSW5kZXgoMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcAppbmRleCA5YzcxMDdhNjJkZS4uMmI4ZWE5
YWVhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJh
dGVkLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsK
QEAgLTQ3LDggKzQ4LDEwIEBAIHN0YXRpYyBQcm9wZXJ0eUNhc2NhZGU6OkRpcmVjdGlvbiBkaXJl
Y3Rpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiBCdWlsZGVyOjpCdWls
ZGVyKFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFByb3BlcnR5Q2FzY2Fk
ZTo6SW5jbHVkZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKICAgICA6IG1fY2FzY2Fk
ZShtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0aWVzLCBkaXJlY3Rp
b25Gcm9tU3R5bGUoKnJlc29sdmVyLnN0eWxlKCkpKQotICAgICwgbV9zdGF0ZSgqdGhpcywgcmVz
b2x2ZXIpCisgICAgLCBtX3N0YXRlKCp0aGlzLCAqcmVzb2x2ZXIuc3R5bGUoKSwgKnJlc29sdmVy
LnBhcmVudFN0eWxlKCksIHJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSwgcmVzb2x2ZXIuZG9j
dW1lbnQoKSwgcmVzb2x2ZXIuZWxlbWVudCgpKQogeworICAgIEFTU0VSVChyZXNvbHZlci5zdHls
ZSgpKTsKKyAgICBBU1NFUlQocmVzb2x2ZXIucGFyZW50U3R5bGUoKSk7CiB9CiAKIEJ1aWxkZXI6
On5CdWlsZGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaAppbmRleCBlZDA5NzZiOWEwMi4uMjRlOTc1MTVhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0yMTksNyArMjE5LDcgQEAgaW5saW5lIHZv
aWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVpvb20oQnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIENTU1ZhbHVlJgogICAgICAgICBidWlsZGVyU3RhdGUuc2V0RWZmZWN0aXZlWm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgIGZsb2F0IGRvY1pvb20g
PSBidWlsZGVyU3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLnpvb20oKTsKKyAgICAgICAgZmxvYXQg
ZG9jWm9vbSA9IGJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0eWxlKCkgPyBidWlsZGVyU3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsK
ICAgICAgICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7CiAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKQEAgLTEzMjAsNyArMTMyMCw3IEBAIGlubGluZSB2b2lk
IEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1CiAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
Pih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0p
KSB7CiAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbSkpCi0gICAgICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKSkpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0u
Z2V0KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGJ1aWxkZXJTdGF0ZSkpLCBkaWRTZXQp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CkBAIC0xMzUzLDcgKzEzNTMsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ29udGVudChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdQog
ICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudCh2YWx1ZS5pc051bGwo
KSA/IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0
dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNv
bnRlbnRBdHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBidWlsZGVyU3Rh
dGUucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgYXV0byog
Y291bnRlclZhbHVlID0gY29udGVudFZhbHVlLmNvdW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAg
TGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTGlzdFN0eWxlVHlwZTo6Tm9uZTsKQEAgLTE2
MTEsNyArMTYxMSw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
U2l6ZShCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVT
aXplIHx8ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUu
aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNM
ZW5ndGgoKSkgewotICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJmJ1aWxkZXJTdGF0ZS5wYXJlbnRT
dHlsZSgpLCAmYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgYnVpbGRlclN0YXRlLmRv
Y3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAgICBzaXplID0g
cHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgmYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1
ZSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdl
TGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzVmll
d3BvcnRVbml0cygpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2Vu
dGFnZSgpKQpAQCAtMTc0Nyw3ICsxNzQ3LDcgQEAgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQWx0KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnRBbHRUZXh0KHZhbHVlLmlzTnVsbCgp
ID8gZW1wdHlBdG9tKCkgOiB2YWx1ZSk7CiAKICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3Qg
dGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlLgotICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkubXV0YWJsZUZlYXR1cmVzKCkucmVn
aXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOworICAgICAgICBidWlsZGVy
U3RhdGUucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAgIH0g
ZWxzZQogICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dChlbXB0
eUF0b20oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAK
aW5kZXggOTM1NmRmMTE4ZDQuLmU3YWYxYjllN2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCkBAIC0zMCwyNyArMzAsMzQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5oIgogCisjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgor
I2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU3R5bGVCdWlsZGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1
ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBTdHlsZSB7CiAKLUJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKEJ1aWxkZXIm
IGJ1aWxkZXIsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitCdWlsZGVyU3RhdGU6OkJ1
aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKICAg
ICA6IG1fYnVpbGRlcihidWlsZGVyKQogICAgICwgbV9zdHlsZU1hcCgqdGhpcykKLSAgICAsIG1f
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKQotICAgICwgbV9zdHlsZVJlc29sdmVyKHN0eWxlUmVzb2x2ZXIp
Ci0gICAgLCBtX3N0eWxlKCpzdHlsZVJlc29sdmVyLnN0eWxlKCkpCi0gICAgLCBtX3BhcmVudFN0
eWxlKCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpCi0gICAgLCBtX3Jvb3RFbGVtZW50U3R5
bGUoc3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCkgPyAqc3R5bGVSZXNvbHZlci5yb290
RWxlbWVudFN0eWxlKCkgOiBSZW5kZXJTdHlsZTo6ZGVmYXVsdFN0eWxlKCkpCi0gICAgLCBtX2Rv
Y3VtZW50KG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKQotICAgICwgbV9lbGVtZW50KG1fc3R5
bGVSZXNvbHZlci5lbGVtZW50KCkpCisgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgICwgbV9wYXJl
bnRTdHlsZShwYXJlbnRTdHlsZSkKKyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZShyb290RWxlbWVu
dFN0eWxlKQorICAgICwgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgcm9vdEVs
ZW1lbnRTdHlsZSwgZG9jdW1lbnQucmVuZGVyVmlldygpKQorICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQogewotICAgIEFTU0VSVChzdHlsZVJlc29s
dmVyLnN0eWxlKCkpOwotICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpOwog
fQogCiAvLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0
byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZApAQCAtNzMsMTcgKzgw
LDIzMyBAQCBib29sIEJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29u
c3QKIAogUmVmUHRyPFN0eWxlSW1hZ2U+IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZShD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5zdHlsZUltYWdl
KHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Cisg
ICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+
KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOworCisgICAgICAgIGlm
IChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIEZpbHRl
ckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgorICAgICAgICAgICAg
ZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlv
bnMoKnRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdl
OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKKyAgICB9
CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFs
dWU+KHZhbHVlKSB8fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOworCisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3N0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3Bl
cmF0aW9uRm9yVHlwZShDU1NWYWx1ZUlEIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDU1NWYWx1ZVVybDoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFOworICAgIGNhc2UgQ1NTVmFsdWVHcmF5c2NhbGU6CisgICAgICAgIHJldHVybiBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTsKKyAgICBjYXNlIENTU1ZhbHVlU2VwaWE6CisgICAgICAg
IHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNFUElBOworICAgIGNhc2UgQ1NTVmFsdWVTYXR1cmF0
ZToKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU7CisgICAgY2FzZSBD
U1NWYWx1ZUh1ZVJvdGF0ZToKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTsKKyAgICBjYXNlIENTU1ZhbHVlSW52ZXJ0OgorICAgICAgICByZXR1cm4gRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlSW52ZXJ0TGlnaHRuZXNzOgor
ICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOwor
ICAgIGNhc2UgQ1NTVmFsdWVPcGFjaXR5OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOworICAgIGNhc2UgQ1NTVmFsdWVCcmlnaHRuZXNzOgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOworICAgIGNhc2UgQ1NTVmFsdWVDb250cmFzdDoK
KyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q7CisgICAgY2FzZSBDU1NW
YWx1ZUJsdXI6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJMVVI7CisgICAgY2Fz
ZSBDU1NWYWx1ZURyb3BTaGFkb3c6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkRS
T1BfU0hBRE9XOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOwogfQog
Ci1ib29sIEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1
ZSYgdmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIEJ1aWxkZXJT
dGF0ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29s
dmVyLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIG91dE9wZXJhdGlvbnMpOworICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUgZWxzZS4KKworICAgIEFTU0VSVChvdXRP
cGVyYXRpb25zLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGlu
VmFsdWUpKSB7CisgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KGluVmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoYXV0byYgY3Vy
cmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkgeworCisgICAgICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlKSkgeworICAgICAgICAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVu
dFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9
IHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBVUkwgdXJsID0gZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChjc3NVcmwpOworCisgICAgICAgICAgICBhdXRvIG9wZXJhdGlv
biA9IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VybCwgdXJsLmZyYWdtZW50
SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZChXVEZNb3ZlKG9wZXJhdGlvbikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWlzPENTU0Z1bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvJiBmaWx0ZXJWYWx1ZSA9IGRvd25jYXN0
PENTU0Z1bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CisgICAgICAgIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9y
VHlwZShmaWx0ZXJWYWx1ZS5uYW1lKCkpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBh
cmFtZXRlcnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCisgICAgICAgIC8vIGV4Y2Vw
dGlvbiBvZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBDU1NTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIu
CisgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsK
KyAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VykgeworICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRl
clZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaikpKSB7CisgICAgICAgICAgICAgICAgICAg
IGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXZl
Tm9uUHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkg
eworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURTogeworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgICAgICBp
ZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGFtb3VudCA9
IGZpcnN0VmFsdWUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFs
dWUtPmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0
aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9
IDA7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKKyAgICAgICAg
ICAgICAgICBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgICAgIGlm
IChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW1vdW50ID0g
Zmlyc3RWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1
ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBv
cGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzogeworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIExlbmd0aCBzdGRE
ZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVl
Lmxlbmd0aCgpID49IDEpCisgICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRv
RmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAg
ICAgICAgICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c6IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSAhPSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY29uc3QgYXV0byog
Y3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAg
ICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBjb25zdCBhdXRvJiBpdGVtID0gZG93bmNhc3Q8Q1NT
U2hhZG93VmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAg
ICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbih4LCB5KTsKKyAgICAgICAg
ICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4o
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7CisgICAgICAgICAgICBDb2xvciBjb2xv
cjsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKml0ZW0uY29sb3IpOworCisgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFu
c3BhcmVudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCdWlsZGVyU3RhdGU6OmlzQ29sb3JGcm9tUHJpbWl0
aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVl
KQoreworICAgIHN3aXRjaCAodmFsdWUudmFsdWVJRCgpKSB7CisgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdFRleHQ6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6CisgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEFjdGl2ZWxpbms6CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIH0KIAogQ29sb3IgQnVpbGRlclN0YXRlOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2YWx1
ZSwgZm9yVmlzaXRlZExpbmspOworICAgIGlmICh2YWx1ZS5pc1JHQkNvbG9yKCkpCisgICAgICAg
IHJldHVybiB2YWx1ZS5jb2xvcigpOworCisgICAgYXV0byBpZGVudGlmaWVyID0gdmFsdWUudmFs
dWVJRCgpOworICAgIHN3aXRjaCAoaWRlbnRpZmllcikgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRUZXh0OgorICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS50ZXh0Q29sb3IoKTsKKyAgICBjYXNl
IENTU1ZhbHVlV2Via2l0TGluazoKKyAgICAgICAgcmV0dXJuIChlbGVtZW50KCkgJiYgZWxlbWVu
dCgpLT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBkb2N1bWVudCgpLnZpc2l0ZWRMaW5r
Q29sb3IoKSA6IGRvY3VtZW50KCkubGlua0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dEFjdGl2ZWxpbms6CisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLmFjdGl2ZUxpbmtDb2xvcigp
OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKKyAgICAgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5mb2N1c1JpbmdDb2xvcihkb2N1bWVudCgpLnN0eWxl
Q29sb3JPcHRpb25zKCZtX3N0eWxlKSk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoK
KyAgICAgICAgLy8gQ29sb3IgaXMgYW4gaW5oZXJpdGVkIHByb3BlcnR5IHNvIGRlcGVuZGluZyBv
biBpdCBlZmZlY3RpdmVseSBtYWtlcyB0aGUgcHJvcGVydHkgaW5oZXJpdGVkLgorICAgICAgICAv
LyBGSVhNRTogU2V0dGluZyB0aGUgZmxhZyBhcyBhIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhp
cyBmdW5jdGlvbiBpcyBhIGJpdCBvYmxpcXVlLiBDYW4gd2UgZG8gYmV0dGVyPworICAgICAgICBt
X3N0eWxlLnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIHJl
dHVybiBtX3N0eWxlLmNvbG9yKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0eWxl
Q29sb3I6OmNvbG9yRnJvbUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS5zdHlsZUNvbG9y
T3B0aW9ucygmbV9zdHlsZSkpOworICAgIH0KK30KKwordm9pZCBCdWlsZGVyU3RhdGU6OnJlZ2lz
dGVyQ29udGVudEF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiBhdHRyaWJ1dGVMb2NhbE5hbWUp
Cit7CisgICAgaWYgKHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6OkJlZm9yZSB8fCBz
dHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpBZnRlcikKKyAgICAgICAgbV9yZWdpc3Rl
cmVkQ29udGVudEF0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0ZUxvY2FsTmFtZSk7CiB9CiAKIHZv
aWQgQnVpbGRlclN0YXRlOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAppbmRleCBlN2I5OWNhNzY3Zi4uZTU4
NjRlZjNkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaApAQCAt
NDMsMTQgKzQzLDEzIEBAIGNsYXNzIEJ1aWxkZXI7CiAKIGNsYXNzIEJ1aWxkZXJTdGF0ZSB7CiBw
dWJsaWM6Ci0gICAgQnVpbGRlclN0YXRlKEJ1aWxkZXImLCBTdHlsZVJlc29sdmVyJik7CisgICAg
QnVpbGRlclN0YXRlKEJ1aWxkZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGNvbnN0IERv
Y3VtZW50JiwgY29uc3QgRWxlbWVudCopOwogCiAgICAgQnVpbGRlciYgYnVpbGRlcigpIHsgcmV0
dXJuIG1fYnVpbGRlcjsgfQotICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7IHJl
dHVybiBtX3N0eWxlUmVzb2x2ZXI7IH0KIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIHsgcmV0
dXJuIG1fc3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHJvb3RF
bGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBj
b25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dEVsZW1lbnRTdHlsZTsgfQogCiAgICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQogICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KQEAgLTc4LDggKzc3LDEzIEBAIHB1
YmxpYzoKIAogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVl
Jik7CiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0NvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlRGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZh
bHVlJik7CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCisgICAgY29u
c3QgVmVjdG9yPEF0b21TdHJpbmc+JiByZWdpc3RlcmVkQ29udGVudEF0dHJpYnV0ZXMoKSBjb25z
dCB7IHJldHVybiBtX3JlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlczsgfQorICAgIHZvaWQgcmVn
aXN0ZXJDb250ZW50QXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmcmIGF0dHJpYnV0ZUxvY2FsTmFt
ZSk7CisKICAgICBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
OyB9CiAgICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVNYXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9
CiAKQEAgLTk5LDE0ICsxMDMsMTIgQEAgcHJpdmF0ZToKICAgICBCdWlsZGVyJiBtX2J1aWxkZXI7
CiAKICAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7Ci0gICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7Ci0KLSAgICAvLyBGSVhNRTogUmVt
b3ZlLgotICAgIFN0eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKIAogICAgIFJlbmRlclN0
eWxlJiBtX3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOwotICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBtX3Jvb3RFbGVtZW50U3R5bGU7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKKworICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogCiAgICAgUmVmPGNvbnN0IERv
Y3VtZW50PiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxjb25zdCBFbGVtZW50PiBtX2VsZW1lbnQ7
CkBAIC0xMjEsNiArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBTZWxlY3RvckNoZWNrZXI6OkxpbmtN
YXRjaE1hc2sgbV9saW5rTWF0Y2ggeyB9OwogCiAgICAgYm9vbCBtX2ZvbnREaXJ0eSB7IGZhbHNl
IH07CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IG1fcmVnaXN0ZXJlZENvbnRlbnRBdHRyaWJ1dGVz
OwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382574</attachid>
            <date>2019-11-01 07:13:26 -0700</date>
            <delta_ts>2019-11-01 08:20:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder-no-resolver-4.patch</filename>
            <type>text/plain</type>
            <size>44579</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyY2Q2Njc2NmJjNi4uZjJjODY2Mzg4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MCBAQAorMjAxOS0xMS0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgU3R5bGU6OkJ1aWxkZXIgc2hvdWxkIG5vdCBkZXBlbmQgb24gU3R5bGVSZXNv
bHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
NzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2l0
aCBhbGwgc3R5bGUgYnVpbGRpbmcgc3RhdGUgaW4gYnVpbGRlciwgd2UgY2FuIHJlbW92ZSB0aGUg
YmFjay1yZWZlcmVuY2UgdG8gc3R5bGUgcmVzb2x2ZXIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVl
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OnJlc29sdmVSR0JDb2xvcnMpOgorCisg
ICAgICAgIEFkZCBoZWxwZXIgZm9yIHJlc29sdmluZyBiYXNpYyBjb2xvcnMgd2l0aG91dCBzdHls
ZSBidWlsZGVyLgorCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKToKKworICAgICAgICBSZWdpc3RlciBjb250ZW50IGF0dHJpYnV0ZXMgZW5jb3VudGVyZWQg
ZHVyaW5nIHN0eWxlIGJ1aWxkaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6dXBkYXRlQ29udmVyc2lvbkRhdGEpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMg
aXMgbm93IGNyZWF0ZWQgYnkgQnVpbGRlclN0YXRlIGNvbnN0cnVjdG9yLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJv
bUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZmlsdGVyT3BlcmF0aW9uRm9yVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKTogRGVsZXRlZC4KKworICAgICAgICBN
b3ZlIGltYWdlIG1hcHBpbmcgZnVuY3Rpb25zIHRvIEJ1aWxkZXJTdGF0ZS4KKworICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmF1dG9GaWxs
U3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUpOgorCisgICAgICAgIENyZWF0ZSBtYXNrIGltYWdl
IHdpdGhvdXQgcmVxdWlyaW5nIHN0eWxlIHJlc29sdmVyLgorCisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjpCdWlsZGVy
KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlWm9vbSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKworICAgICAgICBObyBtb3JlIG1fc3R5
bGVSZXNvbHZlci4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3Jl
YXRlU3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZmlsdGVyT3BlcmF0aW9u
Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cmVnaXN0ZXJDb250
ZW50QXR0cmlidXRlKToKKworICAgICAgICBDb2xsZWN0IGNvbnRlbnQgYXR0cmlidXRlcyBzbyB0
aGV5IGNhbiBiZSBhcHBsaWVkIGxhdGVyIGJ5IFN0eWxlUmVzb2x2ZXIuCisKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6YnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpyb290RWxlbWVudFN0eWxlIGNvbnN0KToKKworICAgICAgICBSZXN0b3JlIHRoaXMgdG8gYmUg
bnVsbGFibGUgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OnJlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVJlc29sdmVyKTogRGVsZXRlZC4KKwog
MjAxOS0xMC0zMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbV2luQ2Fpcm9dW0NsYW5nXSBVbnJldmlld2VkIGJ1aWxkIGZpeApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGRmY2NmMTQ5ZWY2Li5lNWI4
YWI0NjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0MCwxMCArMTQwLDEwIEBAIHZvaWQgQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQogICAgICAg
ICBjbGllbnQua2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKK3ZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUp
CiB7CiAgICAgbV9maWx0ZXJPcGVyYXRpb25zLmNsZWFyKCk7Ci0gICAgcmVzb2x2ZXItPmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMobV9maWx0ZXJWYWx1ZSwgbV9maWx0ZXJPcGVyYXRpb25zKTsKKyAg
ICBidWlsZGVyU3RhdGUuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhtX2ZpbHRlclZhbHVlLCBtX2Zp
bHRlck9wZXJhdGlvbnMpOwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OkZpbHRlclN1
YmltYWdlT2JzZXJ2ZXJQcm94eTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50
UmVjdCogcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oCmluZGV4
IGQ3YTQ4NmI4NWViLi4zYTdiNDM3YjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5oCkBAIC0zOSw3ICszOSwxMCBAQCBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNz
IEZpbHRlclN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFz
cyBEb2N1bWVudDsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7Citj
bGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAKIGNsYXNzIENTU0ZpbHRlckltYWdlVmFsdWUgZmluYWwg
OiBwdWJsaWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIEZpbHRl
clN1YmltYWdlT2JzZXJ2ZXJQcm94eTsKQEAgLTY4LDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBlcXVhbElucHV0SW1hZ2VzKGNvbnN0IENTU0ZpbHRlckltYWdlVmFsdWUmKSBjb25zdDsK
IAotICAgIHZvaWQgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyKik7CisgICAg
dm9pZCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlck9wZXJhdGlvbnM7IH0KICAgICB2b2lkIHNldEZpbHRlck9wZXJhdGlvbnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVyT3BlcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA3MzI5OGNkZTcxNC4uN2FjZTFjNWZjMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVC
dWlsZGVyU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwMywzMyArMTAzLDQ5IEBAIHN0YXRpYyBpbmxpbmUgUmVm
PENTU0dyYWRpZW50VmFsdWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQogICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KHZhbHVlKS5jbG9uZSgpOwogfQog
Ci1SZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uPgordm9pZCByZXNvbHZlU3RvcENvbG9ycyhWZWN0b3I8Q1NTR3Jh
ZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcywgRnVuY3Rpb24mJiBjb2xvclJlc29sdmVGdW5jdGlv
bikKIHsKLSAgICBib29sIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKLSAgICBm
b3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50
ICYmIHN0b3AubV9jb2xvciAmJiBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AubV9jb2xvcikpIHsKLSAgICAgICAgICAgIHN0b3Au
bV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbG9ySXNE
ZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID8gY2xv
bmUoKnRoaXMpIDogbWFrZVJlZigqdGhpcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZXN1bHQtPm1fc3RvcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgc3RvcCA9IHJlc3Vs
dC0+bV9zdG9wc1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGF1dG8mIHN0b3AgPSBzdG9wc1tpXTsKICAgICAgICAgaWYgKHN0b3Au
aXNNaWRwb2ludCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RvcC5tX2Nv
bG9yKQotICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpzdG9wLm1fY29sb3IpOworICAgICAgICAgICAgc3RvcC5t
X3Jlc29sdmVkQ29sb3IgPSBjb2xvclJlc29sdmVGdW5jdGlvbigqc3RvcC5tX2NvbG9yKTsKICAg
ICAgICAgZWxzZSBpZiAoaSkgewotICAgICAgICAgICAgYXV0byYgcHJldmlvdXNTdG9wID0gcmVz
dWx0LT5tX3N0b3BzW2kgLSAxXTsKKyAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzU3RvcCA9IHN0
b3BzW2kgLSAxXTsKICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1N0b3AubV9jb2xvcik7CiAg
ICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwcmV2aW91c1N0b3AubV9jb2xvcjsKICAgICAgICAg
ICAgIHN0b3AubV9yZXNvbHZlZENvbG9yID0gcHJldmlvdXNTdG9wLm1fcmVzb2x2ZWRDb2xvcjsK
ICAgICAgICAgfQogICAgIH0KK30KKworUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50
VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSkKK3sKKyAgICBib29sIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIGlmICghc3RvcC5p
c01pZHBvaW50ICYmIHN0b3AubV9jb2xvciAmJiBTdHlsZTo6QnVpbGRlclN0YXRlOjppc0NvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlRGVyaXZlZEZyb21FbGVtZW50KCpzdG9wLm1fY29sb3IpKSB7Cisg
ICAgICAgICAgICBzdG9wLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CisgICAg
ICAgICAgICBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gY29sb3JJc0Rlcml2ZWRG
cm9tRWxlbWVudCA/IGNsb25lKCp0aGlzKSA6IG1ha2VSZWYoKnRoaXMpOworICAgIHJlc29sdmVT
dG9wQ29sb3JzKHJlc3VsdC0+bV9zdG9wcywgWyZdKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBj
b2xvclZhbHVlKSB7CisgICAgICAgIHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoY29sb3JWYWx1ZSk7CisgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
dm9pZCBDU1NHcmFkaWVudFZhbHVlOjpyZXNvbHZlUkdCQ29sb3JzKCkKK3sKKyAgICByZXNvbHZl
U3RvcENvbG9ycyhtX3N0b3BzLCBbJl0oY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbG9yVmFs
dWUpIHsKKyAgICAgICAgQVNTRVJUKGNvbG9yVmFsdWUuaXNSR0JDb2xvcigpKTsKKyAgICAgICAg
cmV0dXJuIGNvbG9yVmFsdWUuY29sb3IoKTsKKyAgICB9KTsKK30KKwogY2xhc3MgTGluZWFyR3Jh
ZGllbnRBZGFwdGVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBMaW5lYXJHcmFkaWVudEFkYXB0
ZXIoR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuaAppbmRleCAwYjZjZWE3MTNlMy4uZDc1NDQyZTBhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKK25hbWVzcGFjZSBT
dHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisKIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsK
ICAgICBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQsCiAgICAgQ1NTRGVwcmVjYXRlZFJhZGlh
bEdyYWRpZW50LApAQCAtODYsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBrbm93blRvQmVP
cGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkU3ViaW1h
Z2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikg
eyB9Ci0gICAgUmVmPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KGNvbnN0IFN0eWxlUmVzb2x2ZXImKTsKKyAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOworICAgIHZvaWQgcmVz
b2x2ZVJHQkNvbG9ycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFz
c1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlw
ZSBncmFkaWVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZjM2
MTM4NjE5MDYuLmQwZmZkMDdkNzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0zMCwyOSArMzAsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0RlZmF1bHRTdHlsZVNoZWV0
cy5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250
U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NT
R3JhZGllbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJhbWVSdWxlLmgiCiAjaW5jbHVk
ZSAiQ1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3Iu
aCIKLSNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5o
IgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxl
Q29sbGVjdG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgpAQCAtODgsMTcgKzc3LDEyIEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUg
IlNoYXJlZFN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKLSNpbmNsdWRl
ICJTdHlsZUNvbG9yLmgiCi0jaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdl
LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
eVNob3J0aGFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiVmlld3Bv
cnRTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgpAQCAtMTI4
LDcgKzExMiw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcigpCiAg
ICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKICAgICBtX3BhcmVudFN0eWxlID0gbnVsbHB0cjsKICAg
ICBtX293bmVkUGFyZW50U3R5bGUgPSBudWxscHRyOwotICAgIG1fY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAogU3R5bGVSZXNvbHZl
cjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCkBAIC0yNDksMTkgKzIzMiwxMSBA
QCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogICAgICAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBk
b2N1bWVudC5yZW5kZXJTdHlsZSgpOwogICAgIGVsc2UKICAgICAgICAgbV9yb290RWxlbWVudFN0
eWxlID0gZG9jdW1lbnRFbGVtZW50U3R5bGUgPyBkb2N1bWVudEVsZW1lbnRTdHlsZSA6IGRvY3Vt
ZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLQotICAgIHVwZGF0ZUNvbnZlcnNpb25EYXRhKCk7
Ci19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp1cGRhdGVDb252ZXJzaW9u
RGF0YSgpCi17Ci0gICAgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhID0gQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShtX3N0eWxlLmdldCgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG1fZWxlbWVu
dCA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkgOiBudWxscHRyKTsKIH0KIAog
aW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlKHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAgICAgbV9zdHlsZSA9IFdURk1vdmUoc3R5bGUpOwot
ICAgIHVwZGF0ZUNvbnZlcnNpb25EYXRhKCk7CiB9CiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRQYXJlbnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBh
cmVudFN0eWxlKQpAQCAtMTI3Myw2ICsxMjQ4LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QK
IAogICAgIGJ1aWxkZXIuYXBwbHlMb3dQcmlvcml0eVByb3BlcnRpZXMoKTsKIAorICAgIGZvciAo
YXV0byYgY29udGVudEF0dHJpYnV0ZSA6IGJ1aWxkZXIuc3RhdGUoKS5yZWdpc3RlcmVkQ29udGVu
dEF0dHJpYnV0ZXMoKSkKKyAgICAgICAgcnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdp
c3RlckNvbnRlbnRBdHRyaWJ1dGUoY29udGVudEF0dHJpYnV0ZSk7CisKICAgICBpZiAoY2FjaGVJ
dGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzQ2FjaGVhYmxl
SW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKCpzdGF0ZS5lbGVtZW50KCksIHN0YXRlLnN0eWxlKCks
IHN0YXRlLnBhcmVudFN0eWxlKCkpKQpAQCAtMTI5OCwyNSArMTI3Niw2IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1CiAgICAgYnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoaWQsICp2YWx1ZSk7
CiB9CiAKLVJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Zh
bHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUp
KSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50
VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAg
ICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8v
IEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnModGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VT
ZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkK
IHsKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKQEAgLTEzMzIs
NDQgKzEyOTEsNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoKQog
ICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJp
dmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQotewotICAgIHN3
aXRjaCAodmFsdWUudmFsdWVJRCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Ci0g
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2
ZWxpbms6Ci0gICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotQ29s
b3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAotewotICAgIGlmICh2
YWx1ZS5pc1JHQkNvbG9yKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5jb2xvcigpOwotCi0gICAg
YXV0byBpZGVudGlmaWVyID0gdmFsdWUudmFsdWVJRCgpOwotICAgIHN3aXRjaCAoaWRlbnRpZmll
cikgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4gZG9jdW1l
bnQoKS50ZXh0Q29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAg
cmV0dXJuIChtX3N0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8g
ZG9jdW1lbnQoKS52aXNpdGVkTGlua0NvbG9yKCkgOiBkb2N1bWVudCgpLmxpbmtDb2xvcigpOwot
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAgICAgICByZXR1cm4gZG9jdW1l
bnQoKS5hY3RpdmVMaW5rQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5n
Q29sb3I6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9jdXNSaW5n
Q29sb3IoZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9ucyhtX3N0YXRlLnN0eWxlKCkpKTsKLSAg
ICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICAvLyBDb2xvciBpcyBhbiBpbmhl
cml0ZWQgcHJvcGVydHkgc28gZGVwZW5kaW5nIG9uIGl0IGVmZmVjdGl2ZWx5IG1ha2VzIHRoZSBw
cm9wZXJ0eSBpbmhlcml0ZWQuCi0gICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSBmbGFnIGFz
IGEgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIGEgYml0IG9ibGlxdWUu
IENhbiB3ZSBkbyBiZXR0ZXI/Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0SGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RhdGUuc3R5bGUo
KS0+Y29sb3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU3R5bGVDb2xvcjo6Y29s
b3JGcm9tS2V5d29yZChpZGVudGlmaWVyLCBkb2N1bWVudCgpLnN0eWxlQ29sb3JPcHRpb25zKG1f
c3RhdGUuc3R5bGUoKSkpOwotICAgIH0KLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIGJvb2wgcmVzdWx0KQogewogICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVyeVJlc3VsdCB7IGV4cHJlc3Npb24sIHJlc3Vs
dCB9KTsKQEAgLTE0MTUsMTcxICsxMzM2LDQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNNZWRp
YVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9w
ZXJhdGlvbkZvclR5cGUoQ1NTVmFsdWVJRCB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgQ1NTVmFsdWVVcmw6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlJF
RkVSRU5DRTsKLSAgICBjYXNlIENTU1ZhbHVlR3JheXNjYWxlOgotICAgICAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU7Ci0gICAgY2FzZSBDU1NWYWx1ZVNlcGlhOgotICAgICAg
ICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKLSAgICBjYXNlIENTU1ZhbHVlU2F0dXJh
dGU6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOwotICAgIGNhc2Ug
Q1NTVmFsdWVIdWVSb3RhdGU6Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU7Ci0gICAgY2FzZSBDU1NWYWx1ZUludmVydDoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOwotICAgIGNhc2UgQ1NTVmFsdWVBcHBsZUludmVydExpZ2h0bmVzczoK
LSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzsK
LSAgICBjYXNlIENTU1ZhbHVlT3BhY2l0eToKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlv
bjo6T1BBQ0lUWTsKLSAgICBjYXNlIENTU1ZhbHVlQnJpZ2h0bmVzczoKLSAgICAgICAgcmV0dXJu
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzsKLSAgICBjYXNlIENTU1ZhbHVlQ29udHJhc3Q6
Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOwotICAgIGNhc2UgQ1NT
VmFsdWVCbHVyOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCTFVSOwotICAgIGNh
c2UgQ1NTVmFsdWVEcm9wU2hhZG93OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpE
Uk9QX1NIQURPVzsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKLX0K
LQotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Zh
bHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQotewotICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKLQotICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oaW5WYWx1ZSkpIHsKLSAgICAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaW5WYWx1
ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFpczxDU1NWYWx1
ZUxpc3Q+KGluVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGaWx0ZXJPcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KGluVmFsdWUpKSB7Ci0KLSAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPihjdXJyZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOwotICAg
ICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1VSSSgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFsdWUuc3Ry
aW5nVmFsdWUoKTsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudCgpLmNvbXBsZXRlVVJM
KGNzc1VybCk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpOwotICAg
ICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFdURk1vdmUob3BlcmF0aW9u
KSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXM8
Q1NTRnVuY3Rpb25WYWx1ZT4oY3VycmVudFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGF1dG8mIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4o
Y3VycmVudFZhbHVlLmdldCgpKTsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVlLm5h
bWUoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1ldGVycyBhcmUgcHJpbWl0
aXZlIHZhbHVlcywgd2l0aCB0aGUKLSAgICAgICAgLy8gZXhjZXB0aW9uIG9mIGRyb3Agc2hhZG93
IHdoaWNoIGhhcyBhIENTU1NoYWRvd1ZhbHVlIHBhcmFtZXRlci4KLSAgICAgICAgY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBudWxscHRyOwotICAgICAgICBpZiAob3BlcmF0
aW9uVHlwZSAhPSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7Ci0gICAgICAgICAgICBi
b29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhqKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZh
bHVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5s
ZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBmaXJzdFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
RVBJQToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAg
ICAgICBkb3VibGUgYW1vdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5n
dGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+ZG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlm
IChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAgIGFuZ2xlID0gZmly
c3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShh
bmdsZSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAg
ICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0
aCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5kb3VibGVW
YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkK
LSAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOiB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QkxVUjogewotICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlvbiA9IExlbmd0aCgw
LCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0gMSkKLSAg
ICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZh
bHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAgICAgaWYg
KHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShzdGREZXZpYXRpb24pKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewot
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjb25zdCBhdXRvKiBjc3NWYWx1ZSA9IGZp
bHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAoIWlz
PENTU1NoYWRvd1ZhbHVlPihjc3NWYWx1ZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4o
KmNzc1ZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGludCB5
ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKHgsIHkpOwotICAgICAgICAg
ICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKLSAgICAgICAgICAgIENvbG9y
IGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCi0gICAgICAgICAgICAgICAgY29s
b3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqaXRlbS5jb2xvcik7Ci0KLSAgICAgICAgICAg
IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6
OnRyYW5zcGFyZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25z
OwotICAgIHJldHVybiB0cnVlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBmOWZjMzc0ZmI2MS4uZGRjNTEyN2FhMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjIsOCArMjIsNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEuaCIKLSNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgpAQCAtMTU5LDkgKzE1Nyw2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgpOwogCi0gICAgc3RhdGljIGJvb2wgY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSYpOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlJiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKLQogICAg
IGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAgICAgYm9v
bCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBFbGVtZW50JiwgY29uc3QgQXRvbVN0cmlu
ZyYpIGNvbnN0OwogCkBAIC0xOTAsMTQgKzE4NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNs
ZWFyQ2FjaGVkUHJvcGVydGllc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKLSAgICBib29s
IGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9w
ZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotCiBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0UmVu
ZGVyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxlbWVudCopOwogICAgIHZv
aWQgYWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3BlY2lmaWNRdWlya3MoUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50Jik7Ci0gICAgCi0gICAgdm9pZCBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFj
dGVyUnVieSgpOwotICAgIAorICAgICAgICAKICAgICBlbnVtIFNob3VsZFVzZU1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUgeyBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgPSAwLCBVc2VNYXRj
aGVkUHJvcGVydGllc0NhY2hlIH07CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCYsIFNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUgPSBVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlKTsKIApAQCAtMjMzLDEzICsyMjQs
OSBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICAgICAg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQotCiAgICAg
ICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0b3JGaWx0ZXI7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCB1cGRhdGVDb252ZXJzaW9uRGF0YSgpOwotCiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxl
bWVudCB7IG51bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBt
X3N0eWxlOwogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxw
dHIgfTsKQEAgLTI1MiwxNiArMjM5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIG1f
YmFja2dyb3VuZERhdGEgeyBGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kIH07CiAgICAgICAgIENv
bG9yIG1fYmFja2dyb3VuZENvbG9yOwogCi0gICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwotCiAgICAgICAgIGJvb2wgbV9oYXNVQUFw
cGVhcmFuY2UgeyBmYWxzZSB9OwogICAgIH07CiAKICAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVy
biBtX3N0YXRlOyB9CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsK
LQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7
IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KIAogICAgIGJvb2wgYWRqdXN0UmVu
ZGVyU3R5bGVGb3JUZXh0QXV0b3NpemluZyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsK
QEAgLTI2OSw4ICsyNTIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFBy
b3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoUmVzdWx0Jik7CiAgICAgc3RydWN0IE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVJdGVtIHsKICAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiB1c2Vy
QWdlbnREZWNsYXJhdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAppbmRleCBkZGY1NWI3NGRlZC4uNGFmZjdmMTM0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNjIsNyArNjIsNyBAQAogI2luY2x1ZGUgIlNjb3BlZEV2
ZW50UXVldWUuaCIKICNpbmNsdWRlICJTZWFyY2hJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVy
YXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4K
QEAgLTIwNjYsNiArMjA2Niw4IEBAIHN0YXRpYyBSZWY8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4g
YXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpCiAgICAgZ3JhZGllbnQtPnNldEFuZ2xl
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoOTAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZTo6Q1NTX0RFRykpOwogICAgIGdyYWRpZW50LT5hZGRTdG9wKGZpcnN0U3Rv
cCk7CiAgICAgZ3JhZGllbnQtPmFkZFN0b3Aoc2Vjb25kU3RvcCk7CisgICAgZ3JhZGllbnQtPnJl
c29sdmVSR0JDb2xvcnMoKTsKKwogICAgIHJldHVybiBncmFkaWVudDsKIH0KIApAQCAtMjA4OCw3
ICsyMDkwLDcgQEAgUmVuZGVyU3R5bGUgSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5z
ZXRNYXhXaWR0aChMZW5ndGggeyAxMDAsIFBlcmNlbnQgfSk7CiAgICAgICAgIHRleHRCbG9ja1N0
eWxlLnNldENvbG9yKHsgMC4wZiwgMC4wZiwgMC4wZiwgMC42ZiB9KTsKICAgICAgICAgdGV4dEJs
b2NrU3R5bGUuc2V0VGV4dE92ZXJmbG93KFRleHRPdmVyZmxvdzo6Q2xpcCk7Ci0gICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1hc2tJbWFnZShzdHlsZVJlc29sdmVyKCkuc3R5bGVJbWFnZShhdXRv
RmlsbFN0cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKCkpKTsKKyAgICAgICAgdGV4dEJsb2NrU3R5bGUu
c2V0TWFza0ltYWdlKFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShhdXRvRmlsbFN0cm9uZ1Bh
c3N3b3JkTWFza0ltYWdlKCkpKTsKICAgICAgICAgLy8gQSBzdGFja2luZyBjb250ZXh0IGlzIG5l
ZWRlZCBmb3IgdGhlIG1hc2suCiAgICAgICAgIGlmICh0ZXh0QmxvY2tTdHlsZS5oYXNBdXRvWklu
ZGV4KCkpCiAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRaSW5kZXgoMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcAppbmRleCA5YzcxMDdhNjJkZS4uMmI4ZWE5YWVhYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmgi
CiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKQEAgLTQ3
LDggKzQ4LDEwIEBAIHN0YXRpYyBQcm9wZXJ0eUNhc2NhZGU6OkRpcmVjdGlvbiBkaXJlY3Rpb25G
cm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiBCdWlsZGVyOjpCdWlsZGVyKFN0
eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIE9w
dGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIFByb3BlcnR5Q2FzY2FkZTo6SW5j
bHVkZWRQcm9wZXJ0aWVzIGluY2x1ZGVkUHJvcGVydGllcykKICAgICA6IG1fY2FzY2FkZShtYXRj
aFJlc3VsdCwgY2FzY2FkZUxldmVscywgaW5jbHVkZWRQcm9wZXJ0aWVzLCBkaXJlY3Rpb25Gcm9t
U3R5bGUoKnJlc29sdmVyLnN0eWxlKCkpKQotICAgICwgbV9zdGF0ZSgqdGhpcywgcmVzb2x2ZXIp
CisgICAgLCBtX3N0YXRlKCp0aGlzLCAqcmVzb2x2ZXIuc3R5bGUoKSwgKnJlc29sdmVyLnBhcmVu
dFN0eWxlKCksIHJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSwgcmVzb2x2ZXIuZG9jdW1lbnQo
KSwgcmVzb2x2ZXIuZWxlbWVudCgpKQogeworICAgIEFTU0VSVChyZXNvbHZlci5zdHlsZSgpKTsK
KyAgICBBU1NFUlQocmVzb2x2ZXIucGFyZW50U3R5bGUoKSk7CiB9CiAKIEJ1aWxkZXI6On5CdWls
ZGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aAppbmRleCBlZDA5NzZiOWEwMi4uMjRlOTc1MTVhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0yMTksNyArMjE5LDcgQEAgaW5saW5lIHZvaWQgQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVpvb20oQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENT
U1ZhbHVlJgogICAgICAgICBidWlsZGVyU3RhdGUuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgIGZsb2F0IGRvY1pvb20gPSBidWls
ZGVyU3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLnpvb20oKTsKKyAgICAgICAgZmxvYXQgZG9jWm9v
bSA9IGJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0eWxlKCkgPyBidWlsZGVyU3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKICAgICAg
ICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7CiAgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNQZXJjZW50YWdlKCkpIHsKQEAgLTEzMjAsNyArMTMyMCw3IEBAIGlubGluZSB2b2lkIEJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1CiAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1
ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0pKSB7CiAg
ICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbSkpCi0gICAgICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpj
cmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKSkpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkp
LmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGJ1aWxkZXJTdGF0ZSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENv
bnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CkBAIC0xMzUzLDcgKzEzNTMsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQ29udGVudChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdQogICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVt
cHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0
ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZVJlc29sdmVyKCkucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRB
dHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUucmVn
aXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAgICAgICB9IGVsc2Ug
aWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgYXV0byogY291bnRl
clZhbHVlID0gY29udGVudFZhbHVlLmNvdW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAgTGlzdFN0
eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTGlzdFN0eWxlVHlwZTo6Tm9uZTsKQEAgLTE2MTEsNyAr
MTYxMSw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplIHx8
ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUuaXNGb250
UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgo
KSkgewotICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgp
LCAmYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgYnVpbGRlclN0YXRlLmRvY3VtZW50
KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAgICBzaXplID0gcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgm
YnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwog
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCkpCiAgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzVmlld3BvcnRV
bml0cygpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgp
KQpAQCAtMTc0Nyw3ICsxNzQ3LDcgQEAgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0
KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnRBbHRUZXh0KHZhbHVlLmlzTnVsbCgpID8gZW1w
dHlBdG9tKCkgOiB2YWx1ZSk7CiAKICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0
aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlLgotICAgICAgICBidWlsZGVyU3Rh
dGUuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkubXV0YWJsZUZlYXR1cmVzKCkucmVnaXN0ZXJD
b250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOworICAgICAgICBidWlsZGVyU3RhdGUu
cmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAgIH0gZWxzZQog
ICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dChlbXB0eUF0b20o
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKaW5kZXgg
OTM1NmRmMTE4ZDQuLmU3YWYxYjllN2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuY3BwCkBAIC0zMCwyNyArMzAsMzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5oIgogCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5j
bHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U3R5bGVCdWlsZGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0
eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBTdHlsZSB7CiAKLUJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKEJ1aWxkZXImIGJ1aWxk
ZXIsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJT
dGF0ZShCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKICAgICA6IG1f
YnVpbGRlcihidWlsZGVyKQogICAgICwgbV9zdHlsZU1hcCgqdGhpcykKLSAgICAsIG1fY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKQotICAgICwgbV9zdHlsZVJlc29sdmVyKHN0eWxlUmVzb2x2ZXIpCi0gICAg
LCBtX3N0eWxlKCpzdHlsZVJlc29sdmVyLnN0eWxlKCkpCi0gICAgLCBtX3BhcmVudFN0eWxlKCpz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpCi0gICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoc3R5
bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCkgPyAqc3R5bGVSZXNvbHZlci5yb290RWxlbWVu
dFN0eWxlKCkgOiBSZW5kZXJTdHlsZTo6ZGVmYXVsdFN0eWxlKCkpCi0gICAgLCBtX2RvY3VtZW50
KG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKQotICAgICwgbV9lbGVtZW50KG1fc3R5bGVSZXNv
bHZlci5lbGVtZW50KCkpCisgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgICwgbV9wYXJlbnRTdHls
ZShwYXJlbnRTdHlsZSkKKyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZShyb290RWxlbWVudFN0eWxl
KQorICAgICwgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgcm9vdEVsZW1lbnRT
dHlsZSwgZG9jdW1lbnQucmVuZGVyVmlldygpKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
KyAgICAsIG1fZWxlbWVudChlbGVtZW50KQogewotICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLnN0
eWxlKCkpOwotICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpOwogfQogCiAv
LyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1Mu
IFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZApAQCAtNzMsMTcgKzgwLDIzMyBA
QCBib29sIEJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3QKIAog
UmVmUHRyPFN0eWxlSW1hZ2U+IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKHZhbHVl
KTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7CisgICAgICAg
IGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVl
KS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOworCisgICAgICAgIGlmIChpczxD
U1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIEZpbHRlckltYWdl
IG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgorICAgICAgICAgICAgZG93bmNh
c3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRo
aXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKKyAgICB9CisKKyAg
ICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KHZh
bHVlKSB8fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBT
dHlsZUNhY2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9u
Rm9yVHlwZShDU1NWYWx1ZUlEIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBDU1NWYWx1ZVVybDoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OworICAgIGNhc2UgQ1NTVmFsdWVHcmF5c2NhbGU6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRTsKKyAgICBjYXNlIENTU1ZhbHVlU2VwaWE6CisgICAgICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246OlNFUElBOworICAgIGNhc2UgQ1NTVmFsdWVTYXR1cmF0ZToKKyAg
ICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU7CisgICAgY2FzZSBDU1NWYWx1
ZUh1ZVJvdGF0ZToKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTsK
KyAgICBjYXNlIENTU1ZhbHVlSW52ZXJ0OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9u
OjpJTlZFUlQ7CisgICAgY2FzZSBDU1NWYWx1ZUFwcGxlSW52ZXJ0TGlnaHRuZXNzOgorICAgICAg
ICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOworICAgIGNh
c2UgQ1NTVmFsdWVPcGFjaXR5OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOworICAgIGNhc2UgQ1NTVmFsdWVCcmlnaHRuZXNzOgorICAgICAgICByZXR1cm4gRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOworICAgIGNhc2UgQ1NTVmFsdWVDb250cmFzdDoKKyAgICAg
ICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q7CisgICAgY2FzZSBDU1NWYWx1ZUJs
dXI6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJMVVI7CisgICAgY2FzZSBDU1NW
YWx1ZURyb3BTaGFkb3c6CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOwogfQogCi1ib29s
IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgdmFs
dWUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIEJ1aWxkZXJTdGF0ZTo6
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3Bl
cmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIG91dE9wZXJhdGlvbnMpOworICAgIC8vIEZJWE1F
OiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUgZWxzZS4KKworICAgIEFTU0VSVChvdXRPcGVyYXRp
b25zLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUp
KSB7CisgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGluVmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICghaXM8Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoYXV0byYgY3VycmVudFZh
bHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihpblZhbHVlKSkgeworCisgICAgICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlKSkgeworICAgICAgICAgICAgYXV0byYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVl
LmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1p
dGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChjc3NVcmwpOworCisgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VybCwgdXJsLmZyYWdtZW50SWRlbnRp
ZmllcigpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChXVEZN
b3ZlKG9wZXJhdGlvbikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWlzPENTU0Z1bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBhdXRvJiBmaWx0ZXJWYWx1ZSA9IGRvd25jYXN0PENTU0Z1
bmN0aW9uVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CisgICAgICAgIEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShm
aWx0ZXJWYWx1ZS5uYW1lKCkpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBhcmFtZXRl
cnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCisgICAgICAgIC8vIGV4Y2VwdGlvbiBv
ZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBDU1NTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIuCisgICAg
ICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsKKyAgICAg
ICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykgewor
ICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRlclZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaikpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXZlTm9uUHJp
bWl0aXZlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgeworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RTogeworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAgICAgICAgICBpZiAoZmls
dGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0
VmFsdWUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlz
UGVyY2VudGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlw
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Cisg
ICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgICAgICAg
ICBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uOjpjcmVhdGUoYW5nbGUsIG9wZXJhdGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZ
OiB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgICAgIGlmIChmaWx0
ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RW
YWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQ
ZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRp
b25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzogeworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIExlbmd0aCBzdGREZXZpYXRp
b24gPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0
aCgpID49IDEpCisgICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAg
ICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChC
bHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSAhPSAxKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY29uc3QgYXV0byogY3NzVmFs
dWUgPSBmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAg
aWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBjb25zdCBhdXRvJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93
VmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBpbnQg
eSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSk7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbih4LCB5KTsKKyAgICAgICAgICAgIGlu
dCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoKml0ZW0uY29sb3IpOworCisgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxv
Y2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVu
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBCdWlsZGVyU3RhdGU6OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFs
dWVEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQorewor
ICAgIHN3aXRjaCAodmFsdWUudmFsdWVJRCgpKSB7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRl
eHQ6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dEFjdGl2ZWxpbms6CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0K
IAogQ29sb3IgQnVpbGRlclN0YXRlOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQ
cmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2YWx1ZSwgZm9y
VmlzaXRlZExpbmspOworICAgIGlmICh2YWx1ZS5pc1JHQkNvbG9yKCkpCisgICAgICAgIHJldHVy
biB2YWx1ZS5jb2xvcigpOworCisgICAgYXV0byBpZGVudGlmaWVyID0gdmFsdWUudmFsdWVJRCgp
OworICAgIHN3aXRjaCAoaWRlbnRpZmllcikgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0
OgorICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS50ZXh0Q29sb3IoKTsKKyAgICBjYXNlIENTU1Zh
bHVlV2Via2l0TGluazoKKyAgICAgICAgcmV0dXJuIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5p
c0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBkb2N1bWVudCgpLnZpc2l0ZWRMaW5rQ29sb3Io
KSA6IGRvY3VtZW50KCkubGlua0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2
ZWxpbms6CisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLmFjdGl2ZUxpbmtDb2xvcigpOworICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKKyAgICAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjpzaW5nbGV0b24oKS5mb2N1c1JpbmdDb2xvcihkb2N1bWVudCgpLnN0eWxlQ29sb3JP
cHRpb25zKCZtX3N0eWxlKSk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKKyAgICAg
ICAgLy8gQ29sb3IgaXMgYW4gaW5oZXJpdGVkIHByb3BlcnR5IHNvIGRlcGVuZGluZyBvbiBpdCBl
ZmZlY3RpdmVseSBtYWtlcyB0aGUgcHJvcGVydHkgaW5oZXJpdGVkLgorICAgICAgICAvLyBGSVhN
RTogU2V0dGluZyB0aGUgZmxhZyBhcyBhIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyBmdW5j
dGlvbiBpcyBhIGJpdCBvYmxpcXVlLiBDYW4gd2UgZG8gYmV0dGVyPworICAgICAgICBtX3N0eWxl
LnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIHJldHVybiBt
X3N0eWxlLmNvbG9yKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0eWxlQ29sb3I6
OmNvbG9yRnJvbUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9u
cygmbV9zdHlsZSkpOworICAgIH0KK30KKwordm9pZCBCdWlsZGVyU3RhdGU6OnJlZ2lzdGVyQ29u
dGVudEF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiBhdHRyaWJ1dGVMb2NhbE5hbWUpCit7Cisg
ICAgaWYgKHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6OkJlZm9yZSB8fCBzdHlsZSgp
LnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpBZnRlcikKKyAgICAgICAgbV9yZWdpc3RlcmVkQ29u
dGVudEF0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0ZUxvY2FsTmFtZSk7CiB9CiAKIHZvaWQgQnVp
bGRlclN0YXRlOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAppbmRleCBlN2I5OWNhNzY3Zi4uZTU4NjRlZjNk
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaApAQCAtNDMsMTQg
KzQzLDEzIEBAIGNsYXNzIEJ1aWxkZXI7CiAKIGNsYXNzIEJ1aWxkZXJTdGF0ZSB7CiBwdWJsaWM6
Ci0gICAgQnVpbGRlclN0YXRlKEJ1aWxkZXImLCBTdHlsZVJlc29sdmVyJik7CisgICAgQnVpbGRl
clN0YXRlKEJ1aWxkZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGNvbnN0IERvY3VtZW50
JiwgY29uc3QgRWxlbWVudCopOwogCiAgICAgQnVpbGRlciYgYnVpbGRlcigpIHsgcmV0dXJuIG1f
YnVpbGRlcjsgfQotICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7IHJldHVybiBt
X3N0eWxlUmVzb2x2ZXI7IH0KIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIHsgcmV0dXJuIG1f
c3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBjb25zdCBS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1l
bnRTdHlsZTsgfQogCiAgICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kb2N1bWVudC5nZXQoKTsgfQogICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KQEAgLTc4LDggKzc3LDEzIEBAIHB1YmxpYzoK
IAogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJik7CiAg
ICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiwgRmlsdGVyT3Bl
cmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0NvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlRGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7
CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCisgICAgY29uc3QgVmVj
dG9yPEF0b21TdHJpbmc+JiByZWdpc3RlcmVkQ29udGVudEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lzdGVyZWRDb250ZW50QXR0cmlidXRlczsgfQorICAgIHZvaWQgcmVnaXN0ZXJD
b250ZW50QXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmcmIGF0dHJpYnV0ZUxvY2FsTmFtZSk7CisK
ICAgICBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CiAg
ICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVNYXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9CiAKQEAg
LTk5LDE0ICsxMDMsMTIgQEAgcHJpdmF0ZToKICAgICBCdWlsZGVyJiBtX2J1aWxkZXI7CiAKICAg
ICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7Ci0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlLgot
ICAgIFN0eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKIAogICAgIFJlbmRlclN0eWxlJiBt
X3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOwotICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBtX3Jvb3RFbGVtZW50U3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUq
IG1fcm9vdEVsZW1lbnRTdHlsZTsKKworICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogCiAgICAgUmVmPGNvbnN0IERvY3VtZW50
PiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxjb25zdCBFbGVtZW50PiBtX2VsZW1lbnQ7CkBAIC0x
MjEsNiArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1h
c2sgbV9saW5rTWF0Y2ggeyB9OwogCiAgICAgYm9vbCBtX2ZvbnREaXJ0eSB7IGZhbHNlIH07Cisg
ICAgVmVjdG9yPEF0b21TdHJpbmc+IG1fcmVnaXN0ZXJlZENvbnRlbnRBdHRyaWJ1dGVzOwogfTsK
IAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>