<?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>226697</bug_id>
          
          <creation_ts>2021-06-06 08:12:38 -0700</creation_ts>
          <short_desc>Factor selection clamping into a type</short_desc>
          <delta_ts>2021-06-06 23:20:17 -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>Layout and Rendering</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>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1767215</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 08:12:38 -0700</bug_when>
    <thetext>It will be helpful for moving selection code out of legacy inline boxes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767219</commentid>
    <comment_count>1</comment_count>
      <attachid>430684</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 09:19:50 -0700</bug_when>
    <thetext>Created attachment 430684
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767230</commentid>
    <comment_count>2</comment_count>
      <attachid>430689</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 11:27:52 -0700</bug_when>
    <thetext>Created attachment 430689
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767231</commentid>
    <comment_count>3</comment_count>
      <attachid>430690</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 11:35:50 -0700</bug_when>
    <thetext>Created attachment 430690
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767239</commentid>
    <comment_count>4</comment_count>
      <attachid>430690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-06 12:32:41 -0700</bug_when>
    <thetext>Comment on attachment 430690
patch

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

&gt; Source/WebCore/rendering/TextBoxSelectableRange.h:39
&gt; +        auto clampedOffset = std::max(std::min(offset, start + length), start) - start;

I think you can write this as:

auto clampedOffset = std::clamp(offset, start, start + length) - start;

(though  `- start` is kind of confusing, I do realize this is existing code you ar moving.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767249</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 13:26:41 -0700</bug_when>
    <thetext>&gt; (though  `- start` is kind of confusing, I do realize this is existing code
&gt; you ar moving.).

Yeah, in addition to clamping it also moves the offset to be relative to the current run start. I didn&apos;t know how to express that so didn&apos;t change the naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767300</commentid>
    <comment_count>6</comment_count>
      <attachid>430710</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-06 21:34:42 -0700</bug_when>
    <thetext>Created attachment 430710
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767311</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-06 23:19:11 -0700</bug_when>
    <thetext>Committed r278545 (238543@main): &lt;https://commits.webkit.org/238543@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430710.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767313</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-06 23:20:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78935528&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430684</attachid>
            <date>2021-06-06 09:19:50 -0700</date>
            <delta_ts>2021-06-06 11:27:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection-clamping.patch</filename>
            <type>text/plain</type>
            <size>22595</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzY3ZmM1MTRkMTAuLjFmNWZiNmMzNjY1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTA2LTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3Igc2VsZWN0aW9uIGNsYW1waW5nIGludG8gYSB0eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY2OTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYmUg
aGVscGZ1bCBmb3IgbW92aW5nIHNlbGVjdGlvbiBjb2RlIG91dCBvZiBsZWdhY3kgaW5saW5lIGJv
eGVzLgorICAgICAgICBJdCBhbHNvIGFsbG93cyBzb21lIGNvZGUgc2hhcmluZyBhbHJlYWR5IGlu
IHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OnBvc2l0aW9u
Rm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpS
dW5JdGVyYXRvck1vZGVyblBhdGg6OmlzU2VsZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpzZWxlY3Rpb25S
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVy
YXRvck1vZGVyblBhdGg6OnNlbGVjdGlvbkNsYW1waW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OmNsYW1wZWRPZmZz
ZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmlzU2VsZWN0
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6bG9jYWxT
ZWxlY3Rpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVj
dGlvbkNsYW1waW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OmNsYW1wZWRTdGFydEVuZEZvclN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0
c0ZvckRyYWdnZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFya2VycyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpjbGFt
cGVkT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5s
aW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rpb25DbGFtcGluZy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNsYW1waW5nOjpjbGFtcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25DbGFtcGluZzo6aXNTZWxlY3RhYmxlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0IGNvbnN0KToKKwogMjAy
MS0wNi0wNiAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
VEZDXSBBZG9wdCBhIGxlc3MgcXVpcmt5IGZpeGVkIGNvbHVtbiB3aWR0aCBzcGFjZSBkaXN0cmli
dXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGYzODQ2YWJlMWU3MS4uZGYxNTdjYTBiZDBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKQEAgLTE1NzksNiArMTU3OSw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVyVmlldy5oCiAgICAgcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5oCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCisg
ICAgcmVuZGVyaW5nL1NlbGVjdGlvbkNsYW1waW5nLmgKICAgICByZW5kZXJpbmcvU2VsZWN0aW9u
UmFuZ2VEYXRhLmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTJhMWJk
OGYxMTljLi4wM2YxZDIwN2I1ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyMTIsNiArNTIxMiw3IEBACiAJCUU0NDYxNDNB
MENENjg5QzgwMEZBREE3NSAvKiBKU0hUTUxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQyMzgwMENCRkI3M0MwMEFGMkVDRSAv
KiBKU0hUTUxNZWRpYUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0M0MwQ0Q2ODlDQzAwRkFEQTc1
IC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QjQyMzcyMENCRkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VF
bGVtZW50LmggKi87IH07CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRl
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFF
MzQwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ0N0Y1QjMyNjZDRjYzRDAwMTMzRjAwIC8q
IFNlbGVjdGlvbkNsYW1waW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogU2VsZWN0aW9uQ2xhbXBpbmcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDRC
NEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIg
LyogU2VsZWN0b3JDaGVja2VyLmggKi87IH07CiAJCUU0NEZBMTg1MUJDQTZCNUEwMDkxQjZFRiAv
KiBDb21wb3NlZFRyZWVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ0RkExODQxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0
ZXJhdG9yLmggKi87IH07CiAJCUU0NTFDNjMxMjM5NDAyNzkwMDk5MzE5MCAvKiBMYXlvdXRVbml0
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Mzkx
OEMyMTA2Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2NTY1LDYgKzE2NTY2LDcgQEAKIAkJRTQ0
NjE0MTEwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01lZGlhRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ0NjE0MTIwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RpbWVSYW5nZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQxMzBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1l
UmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVGltZVJhbmdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAg
LyogU2VsZWN0aW9uQ2xhbXBpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VsZWN0aW9uQ2xhbXBpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0QjRC
QjExNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvckNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDRFRTNBNjE3NTc2RTU1MDBFRUU4Q0Yg
LyogRm9udEdlbmVyaWNGYW1pbGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250R2VuZXJp
Y0ZhbWlsaWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwNDA3LDYgKzMw
NDA5LDcgQEAKIAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQWxpZ25tZW50
LmggKi8sCiAJCQkJNDRCMzhCRjkyNTM2OUE4ODAwQTQ0NThEIC8qIFNlbGVjdGlvblJhbmdlRGF0
YS5jcHAgKi8sCiAJCQkJNDRCMzhCRjQyNTM2OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlvblJhbmdl
RGF0YS5oICovLAorCQkJCUU0NDdGNUIxMjY2Q0Y2M0QwMDEzM0YwMCAvKiBTZWxlY3Rpb25DbGFt
cGluZy5oICovLAogCQkJCUUzMUNENzUwMjI5Rjc0OTUwMEZCREExOSAvKiBUYWJsZUxheW91dC5j
cHAgKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggKi8s
CiAJCQkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLywK
QEAgLTMyNDcwLDYgKzMyNDczLDcgQEAKIAkJCQk0MUZBQkQyRDFGNERGRTRBMDA2QTZDOTcgLyog
RE9NQ2FjaGVFbmdpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzgwQzI5MUYzNDM2QUMwMDE1
NUZEQSAvKiBET01DYWNoZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCREEzRkZFMjE1
MUI2RjUwMEZENjYwNCAvKiBET01DU1NDdXN0b21Qcm9wZXJ0eURlc2NyaXB0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUU0NDdGNUIzMjY2Q0Y2M0QwMDEzM0YwMCAvKiBTZWxlY3Rpb25DbGFtcGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkM5QTBGNzUxNjQwOTRDRjAwM0Q2QjhEIC8qIERPTUNT
U05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEI2QjVDQkQyMTY0MEVGRjAwNjAzODE3
IC8qIERPTUNTU1BhaW50V29ya2xldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEJEQTNGRkYyMTUx
QjZGNTAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaApp
bmRleCAxN2RlOTM2YzBlOTUuLmY3Zjc3MDUyYjRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5Q
YXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250
ZW50LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ2xhbXBpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC05MSw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzTGluZUJyZWFr
KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVjdCgpLngoKTsKIAotICAgICAgICBhdXRvIGVuZE9m
ZnNldCA9IGNsYW1wZWRPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBz
ZWxlY3Rpb25DbGFtcGluZygpLmNsYW1wKG9mZnNldCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBz
ZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChyZWN0KCkueCgpLCAwLCAwLCAwKTsKICAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOwpAQCAt
MTAxLDEzICsxMDIsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFt
cGVkT2Zmc2V0KHN0YXJ0KSA8IGNsYW1wZWRPZmZzZXQoZW5kKTsKKyAgICAgICAgcmV0dXJuIHNl
bGVjdGlvbkNsYW1waW5nKCkuaXNTZWxlY3RhYmxlKHN0YXJ0LCBlbmQpOwogICAgIH0KIAogICAg
IExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCh1bnNpZ25lZCByYW5nZVN0YXJ0LCB1bnNpZ25lZCBy
YW5nZUVuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNsYW1wZWRTdGFydCA9IGNs
YW1wZWRPZmZzZXQocmFuZ2VTdGFydCk7Ci0gICAgICAgIHVuc2lnbmVkIGNsYW1wZWRFbmQgPSBj
bGFtcGVkT2Zmc2V0KHJhbmdlRW5kKTsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFt
cGVkRW5kXSA9IHNlbGVjdGlvbkNsYW1waW5nKCkuY2xhbXAocmFuZ2VTdGFydCwgcmFuZ2VFbmQp
OwogCiAgICAgICAgIGlmIChjbGFtcGVkU3RhcnQgPj0gY2xhbXBlZEVuZCAmJiAhKHJhbmdlU3Rh
cnQgPT0gcmFuZ2VFbmQgJiYgcmFuZ2VTdGFydCA+PSBzdGFydCgpICYmIHJhbmdlU3RhcnQgPD0g
ZW5kKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTIwNCwxNCArMjA0LDEzIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFJ1bkl0ZXJhdG9yOwogCi0gICAgdW5z
aWduZWQgY2xhbXBlZE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CisgICAgU2VsZWN0aW9u
Q2xhbXBpbmcgc2VsZWN0aW9uQ2xhbXBpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgYXV0byBj
bGFtcGVkT2Zmc2V0ID0gc3RkOjptYXgoc3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkp
IC0gc3RhcnQoKTsKLSAgICAgICAgLy8gV2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRo
aXMgcnVuIGFuZCB0aGUgaHlwaGVuIGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNI
eXBoZW4oKSAmJiBjbGFtcGVkT2Zmc2V0ID09IGxlbmd0aCgpKQotICAgICAgICAgICAgY2xhbXBl
ZE9mZnNldCArPSBydW4oKS5zdHlsZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgpOwotCi0gICAg
ICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
c3RhcnQoKSwKKyAgICAgICAgICAgIGxlbmd0aCgpLAorICAgICAgICAgICAgcnVuKCkuc3R5bGUo
KS5oeXBoZW5TdHJpbmcoKS5sZW5ndGgoKQorICAgICAgICB9OwogICAgIH0KIAogICAgIGVudW0g
Y2xhc3MgSHlwaGVuTW9kZSB7IEluY2x1ZGUsIElnbm9yZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IDA3MGFlYWU0YzE5MC4u
ZjU1OTc2NjE4Nzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ2xhbXBpbmcuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0RGVjb3Jh
dGlvblBhaW50ZXIuaCIKQEAgLTE1NSw3ICsxNTYsNyBAQCBMYXlvdXRVbml0IExlZ2FjeUlubGlu
ZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0CiAKIGJvb2wgTGVnYWN5SW5saW5lVGV4
dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3Np
dGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gY2xhbXBlZE9mZnNldChzdGFydFBvc2l0aW9uKSA8
IGNsYW1wZWRPZmZzZXQoZW5kUG9zaXRpb24pOworICAgIHJldHVybiBzZWxlY3Rpb25DbGFtcGlu
ZygpLmlzU2VsZWN0YWJsZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKIFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3Rh
dGUoKQpAQCAtMjQzLDggKzI0NCw3IEBAIExheW91dFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNhbFJpCiAvLyBGSVhN
RTogU2hhcmUgbW9yZSBjb2RlIHdpdGggcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZCgpLgogTGF5
b3V0UmVjdCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQg
c3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzUG9zID0g
Y2xhbXBlZE9mZnNldChzdGFydFBvcyk7Ci0gICAgdW5zaWduZWQgZVBvcyA9IGNsYW1wZWRPZmZz
ZXQoZW5kUG9zKTsKKyAgICBhdXRvIFtzUG9zLCBlUG9zXSA9IHNlbGVjdGlvbkNsYW1waW5nKCku
Y2xhbXAoc3RhcnRQb3MsIGVuZFBvcyk7CiAKICAgICBpZiAoc1BvcyA+PSBlUG9zICYmICEoc3Rh
cnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQb3MgPD0gKHN0
YXJ0KCkgKyBsZW4oKSkpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtNTUzLDcgKzU1Myw4IEBA
IHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtlZFRl
eHRzOwogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7
CiAgICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMgZm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1l
bnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2
aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBjbGFt
cGVkT2Zmc2V0KG1fc3RhcnQpLCBjbGFtcGVkT2Zmc2V0KGVuZCgpKSwgTWFya2VkVGV4dDo6VW5t
YXJrZWQgfSk7CisgICAgICAgIGF1dG8gY2xhbXBpbmcgPSBzZWxlY3Rpb25DbGFtcGluZygpOwor
ICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBjbGFtcGluZy5jbGFtcChtX3N0YXJ0KSwgY2xh
bXBpbmcuY2xhbXAoZW5kKCkpLCBNYXJrZWRUZXh0OjpVbm1hcmtlZCB9KTsKICAgICAgICAgaWYg
KCFpc1ByaW50aW5nKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoY29s
bGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJzKFRleHRQYWludFBoYXNlOjpGb3JlZ3Jv
dW5kKSk7CiAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdodE1hcmtlZFRleHRzID0gY29sbGVjdE1h
cmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCk7CkBAIC02
NDAsMzUgKzY0MSw0NyBAQCB2b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICBjb250ZXh0
LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAKLXVu
c2lnbmVkIExlZ2FjeUlubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29u
c3QKK1NlbGVjdGlvbkNsYW1waW5nIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvbkNsYW1w
aW5nKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdGQ6Om1heChzdGQ6Om1pbih4
LCBtX3N0YXJ0ICsgbV9sZW4pLCBtX3N0YXJ0KSAtIG1fc3RhcnQ7Ci0gICAgaWYgKG1fdHJ1bmNh
dGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgaWYg
KG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1p
bjx1bnNpZ25lZD4ob2Zmc2V0LCBtX3RydW5jYXRpb24pOwotICAgIGVsc2UgaWYgKG9mZnNldCA9
PSBtX2xlbikgewotICAgICAgICAvLyBGaXggdXAgdGhlIG9mZnNldCBpZiB3ZSBhcmUgY29tYmlu
ZWQgdGV4dCBvciBoYXZlIGEgaHlwaGVuIGJlY2F1c2Ugd2UgbWFuYWdlIHRoZXNlIGVtYmVsbGlz
aG1lbnRzLgotICAgICAgICAvLyBUaGF0IGlzLCB0aGV5IGFyZSBub3QgcmVmbGVjdGVkIGluIHJl
bmRlcmVyKCkudGV4dCgpLiBXZSB0cmVhdCBjb21iaW5lZCB0ZXh0IGFzIGEgc2luZ2xlIHVuaXQu
Ci0gICAgICAgIC8vIFdlIGFsc28gdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgYm94
IGFuZCB0aGUgaHlwaGVuIGFzIGEgc2luZ2xlIHVuaXQuCisgICAgLy8gRml4IHVwIHRoZSBvZmZz
ZXQgaWYgd2UgYXJlIGNvbWJpbmVkIHRleHQgb3IgaGF2ZSBhIGh5cGhlbiBiZWNhdXNlIHdlIG1h
bmFnZSB0aGVzZSBlbWJlbGxpc2htZW50cy4KKyAgICAvLyBUaGF0IGlzLCB0aGV5IGFyZSBub3Qg
cmVmbGVjdGVkIGluIHJlbmRlcmVyKCkudGV4dCgpLiBXZSB0cmVhdCBjb21iaW5lZCB0ZXh0IGFz
IGEgc2luZ2xlIHVuaXQuCisgICAgLy8gV2UgYWxzbyB0cmVhdCB0aGUgbGFzdCBjb2RlcG9pbnQg
aW4gdGhpcyBib3ggYW5kIHRoZSBoeXBoZW4gYXMgYSBzaW5nbGUgdW5pdC4KKyAgICBhdXRvIGFk
ZGl0aW9uYWxMZW5ndGhBdEVuZCA9IFsmXSB7CiAgICAgICAgIGlmIChhdXRvKiBjb21iaW5lZFRl
eHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IGNvbWJpbmVk
VGV4dC0+Y29tYmluZWRTdHJpbmdGb3JSZW5kZXJpbmcoKS5sZW5ndGgoKTsKLSAgICAgICAgZWxz
ZSBpZiAoaGFzSHlwaGVuKCkpCi0gICAgICAgICAgICBvZmZzZXQgKz0gbGluZVN0eWxlKCkuaHlw
aGVuU3RyaW5nKCkubGVuZ3RoKCk7Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAg
ICAgICByZXR1cm4gY29tYmluZWRUZXh0LT5jb21iaW5lZFN0cmluZ0ZvclJlbmRlcmluZygpLmxl
bmd0aCgpIC0gbV9sZW47CisgICAgICAgIGlmIChoYXNIeXBoZW4oKSkKKyAgICAgICAgICAgIHJl
dHVybiBsaW5lU3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IDB1OworICAgIH0oKTsKKworICAgIGF1dG8gdHJ1bmNhdGlvbiA9IFsmXSgpIC0+IHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9
PSBjRnVsbFRydW5jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICByZXR1cm4gbV90cnVuY2F0aW9uOworICAgIH0o
KTsKKworICAgIHJldHVybiB7CisgICAgICAgIG1fc3RhcnQsCisgICAgICAgIG1fbGVuLAorICAg
ICAgICBhZGRpdGlvbmFsTGVuZ3RoQXRFbmQsCisgICAgICAgIHRydW5jYXRpb24KKyAgICB9Owog
fQogCiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpj
bGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKSBjb25zdAogeworICAgIGF1
dG8gY2xhbXBpbmcgPSBzZWxlY3Rpb25DbGFtcGluZygpOworCiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkKLSAgICAgICAgcmV0
dXJuIHsgMCwgY2xhbXBlZE9mZnNldChtX3N0YXJ0ICsgbV9sZW4pIH07CisgICAgICAgIHJldHVy
biB7IDAsIGNsYW1waW5nLmNsYW1wKG1fc3RhcnQgKyBtX2xlbikgfTsKICAgICAKICAgICBpZiAo
c2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpCiAg
ICAgICAgIGVuZCA9IHJlbmRlcmVyKCkudGV4dCgpLmxlbmd0aCgpOwogICAgIGVsc2UgaWYgKHNl
bGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCkKICAgICAg
ICAgc3RhcnQgPSAwOwotICAgIHJldHVybiB7IGNsYW1wZWRPZmZzZXQoc3RhcnQpLCBjbGFtcGVk
T2Zmc2V0KGVuZCkgfTsKKyAgICByZXR1cm4gY2xhbXBpbmcuY2xhbXAoc3RhcnQsIGVuZCk7CiB9
CiAKIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IExlZ2FjeUlubGluZVRleHRCb3g6OnNl
bGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKQEAgLTcxOSw3ICs3MzIsNyBAQCBGbG9hdFJlY3QgTGVn
YWN5SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTWFy
a2VkVGV4dCYgbQogICAgIGF1dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOwogCiAgICAg
Ly8gQXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBz
ZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCi0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZz
ZXQgfHwgbWFya2VkVGV4dC5lbmRPZmZzZXQgIT0gY2xhbXBlZE9mZnNldChlbmQoKSkpIHsKKyAg
ICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0LmVuZE9mZnNldCAhPSBz
ZWxlY3Rpb25DbGFtcGluZygpLmNsYW1wKGVuZCgpKSkgewogICAgICAgICBUZXh0UnVuIHJ1biA9
IGNyZWF0ZVRleHRSdW4oKTsKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdCgwLCB5LCAwLCBoZWlnaHQpOwogICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVj
dGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgbWFya2VkVGV4dC5zdGFydE9mZnNl
dCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwpAQCAtNzcwLDggKzc4MywxMCBAQCBWZWN0b3I8TWFy
a2VkVGV4dD4gTGVnYWN5SW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9yRHJhZ2dl
ZENvbnRlbnQoKQogewogICAgIHVzaW5nIERyYWdnZW5kQ29udGVudFJhbmdlID0gc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD47CiAgICAgYXV0byBkcmFnZ2VkQ29udGVudFJhbmdlcyA9IHJl
bmRlcmVyKCkuZHJhZ2dlZENvbnRlbnRSYW5nZXNCZXR3ZWVuT2Zmc2V0cyhtX3N0YXJ0LCBtX3N0
YXJ0ICsgbV9sZW4pOworCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IHJlc3VsdCA9IGRyYWdnZWRD
b250ZW50UmFuZ2VzLm1hcChbdGhpc10gKGNvbnN0IERyYWdnZW5kQ29udGVudFJhbmdlJiByYW5n
ZSkgLT4gTWFya2VkVGV4dCB7Ci0gICAgICAgIHJldHVybiB7IGNsYW1wZWRPZmZzZXQocmFuZ2Uu
Zmlyc3QpLCBjbGFtcGVkT2Zmc2V0KHJhbmdlLnNlY29uZCksIE1hcmtlZFRleHQ6OkRyYWdnZWRD
b250ZW50IH07CisgICAgICAgIGF1dG8gY2xhbXBpbmcgPSBzZWxlY3Rpb25DbGFtcGluZygpOwor
ICAgICAgICByZXR1cm4geyBjbGFtcGluZy5jbGFtcChyYW5nZS5maXJzdCksIGNsYW1waW5nLmNs
YW1wKHJhbmdlLnNlY29uZCksIE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50IH07CiAgICAgfSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg2NSw5ICs4ODAsMTEgQEAgVmVjdG9yPE1hcmtl
ZFRleHQ+IExlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50
TWFya2VycyhUZXgKICAgICAgICAgLy8gRklYTUU6IFNlZSA8cmRhcjovL3Byb2JsZW0vODkzMzM1
Mj4uIEFsc28sIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCiAgICAgICAg
IGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6CiAj
ZW5kaWYKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgotICAgICAgICAg
ICAgbWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHsgY2xhbXBlZE9mZnNldChtYXJrZXItPnN0
YXJ0T2Zmc2V0KCkpLCBjbGFtcGVkT2Zmc2V0KG1hcmtlci0+ZW5kT2Zmc2V0KCkpLCBtYXJrZWRU
ZXh0VHlwZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpLCBtYXJrZXIgfSk7CisgICAgICAg
IGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaDogeworICAgICAgICAgICAgYXV0byBjbGFt
cGluZyA9IHNlbGVjdGlvbkNsYW1waW5nKCk7CisgICAgICAgICAgICBtYXJrZWRUZXh0cy51bmNo
ZWNrZWRBcHBlbmQoeyBjbGFtcGluZy5jbGFtcChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpLCBjbGFt
cGluZy5jbGFtcChtYXJrZXItPmVuZE9mZnNldCgpKSwgbWFya2VkVGV4dFR5cGVGb3JNYXJrZXJU
eXBlKG1hcmtlci0+dHlwZSgpKSwgbWFya2VyIH0pOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAgICAg
ICAgICBicmVhazsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCkBAIC0x
MTAxLDggKzExMTgsMTAgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRl
eHREZWNvcmF0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogCiB2b2lkIExlZ2FjeUlu
bGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pCiB7CisgICAgYXV0byBjbGFtcGluZyA9
IHNlbGVjdGlvbkNsYW1waW5nKCk7CisKICAgICBpZiAoIXJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0
b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgcGFpbnRN
YXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29tcG9zaXRpb25IaWdo
bGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvciwgY2xhbXBlZE9mZnNldChyZW5kZXJl
cigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBlZE9mZnNldChy
ZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOworICAgICAgICBw
YWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlv
bkhpZ2hsaWdodDo6ZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yLCBjbGFtcGluZy5jbGFtcChy
ZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBpbmcu
Y2xhbXAocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTExMyw3ICsxMTMyLDcgQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QKICAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBlbmQoKSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQo
cGFpbnRJbmZvLCBib3hPcmlnaW4sIGhpZ2hsaWdodC5jb2xvciwgY2xhbXBlZE9mZnNldChoaWdo
bGlnaHQuc3RhcnRPZmZzZXQpLCBjbGFtcGVkT2Zmc2V0KGhpZ2hsaWdodC5lbmRPZmZzZXQpLCBN
YXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsKKyAgICAgICAgcGFpbnRNYXJrZWRU
ZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFt
cGluZy5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQpLCBjbGFtcGluZy5jbGFtcChoaWdobGln
aHQuZW5kT2Zmc2V0KSwgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7CiAKICAg
ICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBlbmQoKSkKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTIzOSwxMyArMTI1OCwxNSBAQCBmbG9hdCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgaWYgKGlzTGluZUJyZWFr
KCkpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCisgICAgYXV0byBjbGFtcGVkT2Zm
c2V0ID0gc2VsZWN0aW9uQ2xhbXBpbmcoKS5jbGFtcChvZmZzZXQpOworCiAgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0OwogICAgIGlmIChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRP
ZmZzZXQgPSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7CisgICAgICAgIGVuZE9mZnNldCA9IGNsYW1w
ZWRPZmZzZXQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSBjbGFtcGVkT2Zm
c2V0KG9mZnNldCk7CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gY2xhbXBlZE9mZnNldDsKICAgICAg
ICAgZW5kT2Zmc2V0ID0gbV9sZW47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCBlNTcwNjY4NjYyOTYuLmEzZGNjZjM5ZDZk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CiBjbGFzcyBU
ZXh0UGFpbnRlcjsKIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGluZTsKIHN0cnVjdCBNYXJrZWRU
ZXh0Oworc3RydWN0IFNlbGVjdGlvbkNsYW1waW5nOwogc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7
CiBzdHJ1Y3QgVGV4dFBhaW50U3R5bGU7CiAKQEAgLTc3LDYgKzc4LDggQEAgcHVibGljOgogCiAg
ICAgdW5zaWduZWQgc2hvcnQgdHJ1bmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGlv
bjsgfQogCisgICAgU2VsZWN0aW9uQ2xhbXBpbmcgc2VsZWN0aW9uQ2xhbXBpbmcoKSBjb25zdDsK
KwogICAgIHZvaWQgbWFya0RpcnR5KGJvb2wgZGlydHkgPSB0cnVlKSBmaW5hbDsKIAogICAgIHVz
aW5nIExlZ2FjeUlubGluZUJveDo6aGFzSHlwaGVuOwpAQCAtMTI2LDggKzEyOSw2IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwogICAgIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIAotICAgIHVuc2lnbmVkIGNsYW1wZWRP
ZmZzZXQodW5zaWduZWQpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlTGluZSgp
IGZpbmFsOwogICAgIHZvaWQgZXh0cmFjdExpbmUoKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25DbGFtcGluZy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NlbGVjdGlvbkNsYW1waW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi43ZDIwOTdmY2EwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uQ2xhbXBpbmcuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3B0aW9uYWw+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IFNlbGVjdGlvbkNsYW1waW5nIHsKKyAgICB1bnNpZ25lZCBz
dGFydDsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgdW5zaWduZWQgYWRkaXRpb25hbExlbmd0
aEF0RW5kIHsgMCB9OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRydW5jYXRpb24geyB9
OworCisgICAgdW5zaWduZWQgY2xhbXAodW5zaWduZWQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptYXgoc3RkOjptaW4ob2Zmc2V0LCBzdGFy
dCArIGxlbmd0aCksIHN0YXJ0KSAtIHN0YXJ0OworCisgICAgICAgIGlmICh0cnVuY2F0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihjbGFtcGVkT2Zmc2V0LCAqdHJ1
bmNhdGlvbik7CisKKyAgICAgICAgaWYgKGNsYW1wZWRPZmZzZXQgPT0gbGVuZ3RoKQorICAgICAg
ICAgICAgY2xhbXBlZE9mZnNldCArPSBhZGRpdGlvbmFsTGVuZ3RoQXRFbmQ7CisKKyAgICAgICAg
cmV0dXJuIGNsYW1wZWRPZmZzZXQ7CisgICAgfQorCisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4gY2xhbXAodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB7IGNsYW1wKHN0YXJ0T2Zmc2V0KSwgY2xhbXAo
ZW5kT2Zmc2V0KSB9OworICAgIH0KKworICAgIGJvb2wgaXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gY2xh
bXAoc3RhcnRPZmZzZXQpIDwgY2xhbXAoZW5kT2Zmc2V0KTsKKyAgICB9Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRl
eCBlNTY5OTFmNzBkMDMuLjZhNDRhNTA4ZWU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hl
LmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNs
YW1waW5nLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogCkBAIC0xMzYsOCArMTM3LDEwIEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYKIAogTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5z
aWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAg
c3RhcnRQb3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3NpdGlvbik7Ci0gICAgZW5kUG9z
aXRpb24gPSBjbGFtcGVkT2Zmc2V0KGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIGNsYW1waW5nID0g
c2VsZWN0aW9uQ2xhbXBpbmcoKTsKKworICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGluZy5jbGFt
cChzdGFydFBvc2l0aW9uKTsKKyAgICBlbmRQb3NpdGlvbiA9IGNsYW1waW5nLmNsYW1wKGVuZFBv
c2l0aW9uKTsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430689</attachid>
            <date>2021-06-06 11:27:52 -0700</date>
            <delta_ts>2021-06-06 11:36:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection-clamping-2.patch</filename>
            <type>text/plain</type>
            <size>26311</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzY3ZmM1MTRkMTAuLjJkZDgyNjkzOWM2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDIxLTA2LTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3Igc2VsZWN0aW9uIGNsYW1waW5nIGludG8gYSB0eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY2OTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlIHdpbGwgYmUgaGVscGZ1bCBmb3IgbW92aW5nIHNlbGVjdGlvbiBjb2RlIG91dCBv
ZiB0aGUgbGVnYWN5IGlubGluZSBib3hlcy4KKyAgICAgICAgSXQgYWxzbyBhbGxvd3Mgc29tZSBj
b2RlIHNoYXJpbmcgYWxyZWFkeSBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdh
Y3lQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0
b3JMZWdhY3lQYXRoOjppc1NlbGVjdGFibGUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6cG9z
aXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6aXNTZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OnNlbGVj
dGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1
bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0YWJsZVJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OmNsYW1wZWRP
ZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmlzU2Vs
ZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5l
VGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6
c2VsZWN0YWJsZVJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmNsYW1wZWRTdGFydEVuZEZvclN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRyYWdnZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFya2VycyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZv
ck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpp
c1NlbGVjdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGlu
ZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNl
bGVjdGlvbkdhcHMpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94U2VsZWN0YWJsZVJhbmdl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFNlbGVjdGFibGVSYW5nZTo6Y2xh
bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFNlbGVjdGFibGVSYW5nZTo6aW50
ZXJzZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9u
UmVjdCBjb25zdCk6CisKIDIwMjEtMDYtMDYgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW1RGQ10gQWRvcHQgYSBsZXNzIHF1aXJreSBmaXhlZCBjb2x1bW4g
d2lkdGggc3BhY2UgZGlzdHJpYnV0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBmMzg0NmFiZTFl
NzEuLmM4NDQzMWRkNjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNTgwLDYgKzE1ODAsNyBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5oCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCiAgICAgcmVuZGVy
aW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCisgICAgcmVuZGVyaW5nL1RleHRCb3hTZWxlY3RhYmxl
UmFuZ2UuaAogCiAgICAgcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgKICAgICByZW5kZXJpbmcv
bGluZS9UcmFpbGluZ09iamVjdHMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEyYTFiZDhmMTE5Yy4uNzRiMTVjYjdkOWIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01MjEyLDYgKzUyMTIsNyBAQAogCQlFNDQ2MTQzQTBDRDY4OUM4MDBGQURBNzUgLyogSlNI
VE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEI0MjM4MDBDQkZCNzNDMDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50Lmgg
Ki87IH07CiAJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM3
MjBDQkZCNkUwMDBBRjJFQ0UgLyogSlNIVE1MU291cmNlRWxlbWVudC5oICovOyB9OwogCQlFNDQ2
MTQ1MjBDRDY4QTM1MDBGQURBNzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVDRSAvKiBS
ZW5kZXJWaWRlby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUU0NDdGNUIzMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ3RjVC
MTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJl
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ1MUM2MzEyMzk0MDI3OTAwOTkzMTkwIC8qIExheW91dFVuaXRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjczOTE4QzIxMDZDRUREMDA2
QUYyNjIgLyogTGF5b3V0VW5pdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTY1NjUsNiArMTY1NjYsNyBAQAogCQlFNDQ2MTQxMTBDRDY4MjY5
MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQx
MjBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGltZVJhbmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0NDdGNUIxMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2Vs
ZWN0YWJsZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hT
ZWxlY3RhYmxlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0QjRCQjEx
NDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvckNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDRFRTNBNjE3NTc2RTU1MDBFRUU4Q0YgLyog
Rm9udEdlbmVyaWNGYW1pbGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250R2VuZXJpY0Zh
bWlsaWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwNDExLDYgKzMwNDEz
LDcgQEAKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywK
IAkJCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovLAog
CQkJCTBGNTREQ0U0MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5oICovLAorCQkJ
CUU0NDdGNUIxMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmggKi8s
CiAJCQkJNTgyREUzMjIxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5j
cHAgKi8sCiAJCQkJNTgyREUzMjMxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFp
bnRlci5oICovLAogCQkJCTFDMThEQTU2MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5j
cHAgKi8sCkBAIC0zMjQ3MCw2ICszMjQ3Myw3IEBACiAJCQkJNDFGQUJEMkQxRjRERkU0QTAwNkE2
Qzk3IC8qIERPTUNhY2hlRW5naW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM4MEMyOTFGMzQz
NkFDMDAxNTVGREEgLyogRE9NQ2FjaGVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QkRB
M0ZGRTIxNTFCNkY1MDBGRDY2MDQgLyogRE9NQ1NTQ3VzdG9tUHJvcGVydHlEZXNjcmlwdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDQ3RjVCMzI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkM5QTBGNzUxNjQwOTRDRjAwM0Q2
QjhEIC8qIERPTUNTU05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEI2QjVDQkQyMTY0
MEVGRjAwNjAzODE3IC8qIERPTUNTU1BhaW50V29ya2xldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NEJEQTNGRkYyMTUxQjZGNTAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHku
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxl
Z2FjeVBhdGguaAppbmRleCA1NTZmMDVkZTc3MTYuLmU4YTAxMGEyZjUyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0
IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7IH0KICAgICBm
bG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGlu
bGluZVRleHRCb3goKS0+cG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0KTsgfQogCi0gICAgYm9vbCBp
c1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1cm4g
aW5saW5lVGV4dEJveCgpLT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQpOyB9CisgICAgYm9vbCBpc1Nl
bGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1cm4gaW5s
aW5lVGV4dEJveCgpLT5pc1NlbGVjdGFibGUoc3RhcnQsIGVuZCk7IH0KICAgICBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1
cm4gaW5saW5lVGV4dEJveCgpLT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7IH0KIAog
ICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAppbmRleCAxN2RlOTM2YzBlOTUuLjk3
ZDJjOTk3NjAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rl
cm5QYXRoLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisjaW5jbHVkZSAiVGV4
dEJveFNlbGVjdGFibGVSYW5nZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkxLDcg
KzkyLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAg
IHJldHVybiByZWN0KCkueCgpOwogCi0gICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2xhbXBlZE9m
ZnNldChvZmZzZXQpOworICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKG9mZnNldCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdChyZWN0KCkueCgpLCAwLCAwLCAwKTsKICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOwpAQCAtMTAxLDEzICsxMDIsMTIgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSA8
IGNsYW1wZWRPZmZzZXQoZW5kKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmlu
dGVyc2VjdHMoc3RhcnQsIGVuZCk7CiAgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0KHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdlRW5kKSBjb25zdAogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgY2xhbXBlZFN0YXJ0ID0gY2xhbXBlZE9mZnNldChyYW5nZVN0YXJ0
KTsKLSAgICAgICAgdW5zaWduZWQgY2xhbXBlZEVuZCA9IGNsYW1wZWRPZmZzZXQocmFuZ2VFbmQp
OworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJh
bmdlKCkuY2xhbXAocmFuZ2VTdGFydCwgcmFuZ2VFbmQpOwogCiAgICAgICAgIGlmIChjbGFtcGVk
U3RhcnQgPj0gY2xhbXBlZEVuZCAmJiAhKHJhbmdlU3RhcnQgPT0gcmFuZ2VFbmQgJiYgcmFuZ2VT
dGFydCA+PSBzdGFydCgpICYmIHJhbmdlU3RhcnQgPD0gZW5kKCkpKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTIwNCwxNCArMjA0LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFJ1bkl0ZXJhdG9yOwogCi0gICAgdW5zaWduZWQgY2xhbXBlZE9mZnNldCh1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0CisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBzZWxlY3RhYmxl
UmFuZ2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjpt
YXgoc3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQoKTsKLSAgICAgICAg
Ly8gV2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFuZCB0aGUgaHlwaGVu
IGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAmJiBjbGFtcGVkT2Zm
c2V0ID09IGxlbmd0aCgpKQotICAgICAgICAgICAgY2xhbXBlZE9mZnNldCArPSBydW4oKS5zdHls
ZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgpOwotCi0gICAgICAgIHJldHVybiBjbGFtcGVkT2Zm
c2V0OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc3RhcnQoKSwKKyAgICAgICAgICAg
IGxlbmd0aCgpLAorICAgICAgICAgICAgcnVuKCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5n
dGgoKQorICAgICAgICB9OwogICAgIH0KIAogICAgIGVudW0gY2xhc3MgSHlwaGVuTW9kZSB7IElu
Y2x1ZGUsIElnbm9yZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guY3BwCmluZGV4IDA3MGFlYWU0YzE5MC4uYmEwMTA5YjMzOWM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCkBAIC01
NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKICNpbmNs
dWRlICJUZXh0UGFpbnRTdHlsZS5oIgogI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCkBAIC0xNTMs
OSArMTU0LDkgQEAgTGF5b3V0VW5pdCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWln
aHQoKSBjb25zdAogICAgIHJldHVybiByb290KCkuc2VsZWN0aW9uSGVpZ2h0KCk7CiB9CiAKLWJv
b2wgTGVnYWN5SW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9u
LCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3QKK2Jvb2wgTGVnYWN5SW5saW5lVGV4dEJveDo6
aXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9u
KSBjb25zdAogewotICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0KHN0YXJ0UG9zaXRpb24pIDwgY2xh
bXBlZE9mZnNldChlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmlu
dGVyc2VjdHMoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCiBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKQEAg
LTI0MywxMCArMjQ0LDkgQEAgTGF5b3V0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdChjb25zdCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBmbG9hdCBsb2dpY2FsUmkKIC8vIEZJWE1FOiBTaGFy
ZSBtb3JlIGNvZGUgd2l0aCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKCkuCiBMYXlvdXRSZWN0
IExlZ2FjeUlubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBv
cywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNQb3MgPSBjbGFtcGVk
T2Zmc2V0KHN0YXJ0UG9zKTsKLSAgICB1bnNpZ25lZCBlUG9zID0gY2xhbXBlZE9mZnNldChlbmRQ
b3MpOworICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFu
Z2UoKS5jbGFtcChzdGFydFBvcywgZW5kUG9zKTsKIAotICAgIGlmIChzUG9zID49IGVQb3MgJiYg
IShzdGFydFBvcyA9PSBlbmRQb3MgJiYgc3RhcnRQb3MgPj0gc3RhcnQoKSAmJiBzdGFydFBvcyA8
PSAoc3RhcnQoKSArIGxlbigpKSkpCisgICAgaWYgKGNsYW1wZWRTdGFydCA+PSBjbGFtcGVkRW5k
ICYmICEoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQ
b3MgPD0gKHN0YXJ0KCkgKyBsZW4oKSkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgTGF5
b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKQEAgLTI1Niw4ICsy
NTYsOCBAQCBMYXlvdXRSZWN0IExlZ2FjeUlubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVj
dCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZQogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rp
b25SZWN0IHsgTGF5b3V0VW5pdChsb2dpY2FsTGVmdCgpKSwgc2VsZWN0aW9uVG9wLCBMYXlvdXRV
bml0KGxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CiAgICAgLy8gQXZvaWQgbWVh
c3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBh
biBvcHRpbWl6YXRpb24uCi0gICAgaWYgKHNQb3MgfHwgZVBvcyAhPSB0ZXh0UnVuLmxlbmd0aCgp
KQotICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOworICAgIGlmIChjbGFtcGVkU3RhcnQgfHwgY2xh
bXBlZEVuZCAhPSB0ZXh0UnVuLmxlbmd0aCgpKQorICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydCwg
Y2xhbXBlZEVuZCk7CiAgICAgLy8gRklYTUU6IFRoZSBjb21wdXRhdGlvbiBvZiB0aGUgc25hcHBl
ZCBzZWxlY3Rpb24gcmVjdCBkaWZmZXJzIGZyb20gdGhlIGNvbXB1dGF0aW9uIG9mIHRoaXMgcmVj
dAogICAgIC8vIGluIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4gU2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4OTEzPi4KICAgICByZXR1cm4gc25hcHBl
ZFNlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCwgbG9naWNhbFJpZ2h0KCksIHNlbGVjdGlvblRv
cCwgc2VsZWN0aW9uSGVpZ2h0LCBpc0hvcml6b250YWwoKSk7CkBAIC01NTMsNyArNTUzLDggQEAg
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gbWFya2VkVGV4
dHM7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24pIHsK
ICAgICAgICAgLy8gVGhlIG1hcmtlZCB0ZXh0cyBmb3IgdGhlIGdhcHMgYmV0d2VlbiBkb2N1bWVu
dCBtYXJrZXJzIGFuZCBzZWxlY3Rpb24gYXJlIGltcGxpY2l0bHkgY3JlYXRlZCBieSBzdWJkaXZp
ZGluZyB0aGUgZW50aXJlIGxpbmUuCi0gICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGNsYW1w
ZWRPZmZzZXQobV9zdGFydCksIGNsYW1wZWRPZmZzZXQoZW5kKCkpLCBNYXJrZWRUZXh0OjpVbm1h
cmtlZCB9KTsKKyAgICAgICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSB0aGlzLT5zZWxlY3RhYmxl
UmFuZ2UoKTsKKyAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgc2VsZWN0YWJsZVJhbmdlLmNs
YW1wKG1fc3RhcnQpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoZW5kKCkpLCBNYXJrZWRUZXh0OjpV
bm1hcmtlZCB9KTsKICAgICAgICAgaWYgKCFpc1ByaW50aW5nKSB7CiAgICAgICAgICAgICBtYXJr
ZWRUZXh0cy5hcHBlbmRWZWN0b3IoY29sbGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJz
KFRleHRQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7CiAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdo
dE1hcmtlZFRleHRzID0gY29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCk7CkBAIC02NDAsMzUgKzY0MSw0NSBAQCB2b2lkIExlZ2FjeUlubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZgogICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3Vu
dGVyY2xvY2t3aXNlKSk7CiB9CiAKLXVuc2lnbmVkIExlZ2FjeUlubGluZVRleHRCb3g6OmNsYW1w
ZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKK1RleHRCb3hTZWxlY3RhYmxlUmFuZ2UgTGVnYWN5
SW5saW5lVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBzdGQ6Om1heChzdGQ6Om1pbih4LCBtX3N0YXJ0ICsgbV9sZW4pLCBtX3N0YXJ0KSAt
IG1fc3RhcnQ7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAg
ICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9u
KQotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4ob2Zmc2V0LCBtX3RydW5jYXRp
b24pOwotICAgIGVsc2UgaWYgKG9mZnNldCA9PSBtX2xlbikgewotICAgICAgICAvLyBGaXggdXAg
dGhlIG9mZnNldCBpZiB3ZSBhcmUgY29tYmluZWQgdGV4dCBvciBoYXZlIGEgaHlwaGVuIGJlY2F1
c2Ugd2UgbWFuYWdlIHRoZXNlIGVtYmVsbGlzaG1lbnRzLgotICAgICAgICAvLyBUaGF0IGlzLCB0
aGV5IGFyZSBub3QgcmVmbGVjdGVkIGluIHJlbmRlcmVyKCkudGV4dCgpLiBXZSB0cmVhdCBjb21i
aW5lZCB0ZXh0IGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIC8vIFdlIGFsc28gdHJlYXQgdGhl
IGxhc3QgY29kZXBvaW50IGluIHRoaXMgYm94IGFuZCB0aGUgaHlwaGVuIGFzIGEgc2luZ2xlIHVu
aXQuCisgICAgLy8gRml4IHVwIHRoZSBvZmZzZXQgaWYgd2UgYXJlIGNvbWJpbmVkIHRleHQgb3Ig
aGF2ZSBhIGh5cGhlbiBiZWNhdXNlIHdlIG1hbmFnZSB0aGVzZSBlbWJlbGxpc2htZW50cy4KKyAg
ICAvLyBUaGF0IGlzLCB0aGV5IGFyZSBub3QgcmVmbGVjdGVkIGluIHJlbmRlcmVyKCkudGV4dCgp
LiBXZSB0cmVhdCBjb21iaW5lZCB0ZXh0IGFzIGEgc2luZ2xlIHVuaXQuCisgICAgLy8gV2UgYWxz
byB0cmVhdCB0aGUgbGFzdCBjb2RlcG9pbnQgaW4gdGhpcyBib3ggYW5kIHRoZSBoeXBoZW4gYXMg
YSBzaW5nbGUgdW5pdC4KKyAgICBhdXRvIGFkZGl0aW9uYWxMZW5ndGhBdEVuZCA9IFsmXSB7CiAg
ICAgICAgIGlmIChhdXRvKiBjb21iaW5lZFRleHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKSkKLSAg
ICAgICAgICAgIG9mZnNldCA9IGNvbWJpbmVkVGV4dC0+Y29tYmluZWRTdHJpbmdGb3JSZW5kZXJp
bmcoKS5sZW5ndGgoKTsKLSAgICAgICAgZWxzZSBpZiAoaGFzSHlwaGVuKCkpCi0gICAgICAgICAg
ICBvZmZzZXQgKz0gbGluZVN0eWxlKCkuaHlwaGVuU3RyaW5nKCkubGVuZ3RoKCk7Ci0gICAgfQot
ICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gY29tYmluZWRUZXh0LT5jb21i
aW5lZFN0cmluZ0ZvclJlbmRlcmluZygpLmxlbmd0aCgpIC0gbV9sZW47CisgICAgICAgIGlmICho
YXNIeXBoZW4oKSkKKyAgICAgICAgICAgIHJldHVybiBsaW5lU3R5bGUoKS5oeXBoZW5TdHJpbmco
KS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIDB1OworICAgIH0oKTsKKworICAgIGF1dG8gdHJ1
bmNhdGlvbiA9IFsmXSgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgaWYg
KG1fdHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICBy
ZXR1cm4gbV90cnVuY2F0aW9uOworICAgIH0oKTsKKworICAgIHJldHVybiB7CisgICAgICAgIG1f
c3RhcnQsCisgICAgICAgIG1fbGVuLAorICAgICAgICBhZGRpdGlvbmFsTGVuZ3RoQXRFbmQsCisg
ICAgICAgIHRydW5jYXRpb24KKyAgICB9OwogfQogCiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVj
dGlvblN0YXRlKSBjb25zdAogewogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpCi0gICAgICAgIHJldHVybiB7IDAsIGNsYW1wZWRP
ZmZzZXQobV9zdGFydCArIG1fbGVuKSB9OworICAgICAgICByZXR1cm4geyAwLCBzZWxlY3RhYmxl
UmFuZ2UoKS5jbGFtcChtX3N0YXJ0ICsgbV9sZW4pIH07CiAgICAgCiAgICAgaWYgKHNlbGVjdGlv
blN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KQogICAgICAgICBl
bmQgPSByZW5kZXJlcigpLnRleHQoKS5sZW5ndGgoKTsKICAgICBlbHNlIGlmIChzZWxlY3Rpb25T
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCiAgICAgICAgIHN0YXJ0
ID0gMDsKLSAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChl
bmQpIH07CisgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHN0YXJ0LCBlbmQpOwog
fQogCiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CkBAIC03MTksNyArNzMwLDcgQEAgRmxvYXRSZWN0IExl
Z2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1h
cmtlZFRleHQmIG0KICAgICBhdXRvIGhlaWdodCA9IDAuMTMyNDcgKiBmb250U2l6ZTsKIAogICAg
IC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMg
c2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgotICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zm
c2V0IHx8IG1hcmtlZFRleHQuZW5kT2Zmc2V0ICE9IGNsYW1wZWRPZmZzZXQoZW5kKCkpKSB7Cisg
ICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFya2VkVGV4dC5lbmRPZmZzZXQgIT0g
c2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAoZW5kKCkpKSB7CiAgICAgICAgIFRleHRSdW4gcnVuID0g
Y3JlYXRlVGV4dFJ1bigpOwogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlv
dXRSZWN0KDAsIHksIDAsIGhlaWdodCk7CiAgICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0
LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CkBAIC03NzAsOCArNzgxLDEwIEBAIFZlY3RvcjxNYXJr
ZWRUZXh0PiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JEcmFnZ2Vk
Q29udGVudCgpCiB7CiAgICAgdXNpbmcgRHJhZ2dlbmRDb250ZW50UmFuZ2UgPSBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPjsKICAgICBhdXRvIGRyYWdnZWRDb250ZW50UmFuZ2VzID0gcmVu
ZGVyZXIoKS5kcmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKG1fc3RhcnQsIG1fc3Rh
cnQgKyBtX2xlbik7CisKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gcmVzdWx0ID0gZHJhZ2dlZENv
bnRlbnRSYW5nZXMubWFwKFt0aGlzXSAoY29uc3QgRHJhZ2dlbmRDb250ZW50UmFuZ2UmIHJhbmdl
KSAtPiBNYXJrZWRUZXh0IHsKLSAgICAgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChyYW5nZS5m
aXJzdCksIGNsYW1wZWRPZmZzZXQocmFuZ2Uuc2Vjb25kKSwgTWFya2VkVGV4dDo6RHJhZ2dlZENv
bnRlbnQgfTsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVj
dGFibGVSYW5nZSgpLmNsYW1wKHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOworICAgICAgICBy
ZXR1cm4geyBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1hcmtlZFRleHQ6OkRyYWdnZWRDb250
ZW50IH07CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg2NSw5ICs4NzgsMTEg
QEAgVmVjdG9yPE1hcmtlZFRleHQ+IExlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRvY3VtZW50TWFya2VycyhUZXgKICAgICAgICAgLy8gRklYTUU6IFNlZSA8cmRhcjov
L3Byb2JsZW0vODkzMzM1Mj4uIEFsc28sIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSkt
Z3VhcmQuCiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXM6CiAjZW5kaWYKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1h
dGNoOgotICAgICAgICAgICAgbWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHsgY2xhbXBlZE9m
ZnNldChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpLCBjbGFtcGVkT2Zmc2V0KG1hcmtlci0+ZW5kT2Zm
c2V0KCkpLCBtYXJrZWRUZXh0VHlwZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpLCBtYXJr
ZXIgfSk7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaDogeworICAgICAg
ICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7CisgICAg
ICAgICAgICBtYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQoeyBjbGFtcGVkU3RhcnQsIGNsYW1w
ZWRFbmQsIG1hcmtlZFRleHRUeXBlRm9yTWFya2VyVHlwZShtYXJrZXItPnR5cGUoKSksIG1hcmtl
ciB9KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50OgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQpAQCAtMTEwMSw4ICsxMTE2LDEwIEBAIHZvaWQgTGVn
YWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3JhdGlvbihQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QKIAogdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luKQogeworICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJh
bmdlKCk7CisKICAgICBpZiAoIXJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlv
blVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dy
b3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRD
b21wb3NpdGlvbkZpbGxDb2xvciwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1l
KCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOworICAgICAgICBwYWludE1hcmtlZFRleHRC
YWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlvbkhpZ2hsaWdodDo6ZGVm
YXVsdENvbXBvc2l0aW9uRmlsbENvbG9yLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAocmVuZGVyZXIo
KS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uU3RhcnQoKSksIHNlbGVjdGFibGVSYW5nZS5j
bGFtcChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEzLDcgKzExMzAsOCBAQCB2b2lkIExlZ2FjeUlu
bGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdAogICAgICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49IGVuZCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChw
YWludEluZm8sIGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkT2Zmc2V0KGhpZ2hs
aWdodC5zdGFydE9mZnNldCksIGNsYW1wZWRPZmZzZXQoaGlnaGxpZ2h0LmVuZE9mZnNldCksIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOworICAgICAgICBhdXRvIFtjbGFtcGVk
U3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlLmNsYW1wKGhpZ2hsaWdodC5zdGFy
dE9mZnNldCwgaGlnaGxpZ2h0LmVuZE9mZnNldCk7CisgICAgICAgIHBhaW50TWFya2VkVGV4dEJh
Y2tncm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIGhpZ2hsaWdodC5jb2xvciwgY2xhbXBlZFN0
YXJ0LCBjbGFtcGVkRW5kLCBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsKIAog
ICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA+IGVuZCgpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMjQzLDkgKzEyNjEsOSBAQCBmbG9hdCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgdW5zaWduZWQgZW5kT2Zm
c2V0OwogICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgc3RhcnRP
ZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7Cisg
ICAgICAgIGVuZE9mZnNldCA9IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7Cisg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KTsKICAg
ICAgICAgZW5kT2Zmc2V0ID0gbV9sZW47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCBlNTcwNjY4NjYyOTYuLjVhZmJiNzUz
YWE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRl
eHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIFRleHRQYWludGVyOwogc3RydWN0IENvbXBvc2l0
aW9uVW5kZXJsaW5lOwogc3RydWN0IE1hcmtlZFRleHQ7CiBzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4
dDsKK3N0cnVjdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlOwogc3RydWN0IFRleHRQYWludFN0eWxl
OwogCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwpAQCAt
NzcsNiArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90cnVuY2F0aW9uOyB9CiAKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJh
bmdlIHNlbGVjdGFibGVSYW5nZSgpIGNvbnN0OworCiAgICAgdm9pZCBtYXJrRGlydHkoYm9vbCBk
aXJ0eSA9IHRydWUpIGZpbmFsOwogCiAgICAgdXNpbmcgTGVnYWN5SW5saW5lQm94OjpoYXNIeXBo
ZW47CkBAIC0xMTgsNyArMTIxLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVk
IGVuZFBvcykgY29uc3Q7Ci0gICAgYm9vbCBpc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU2VsZWN0YWJsZSh1
bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Q7CiAgICAg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsK
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVuZChIaWdo
bGlnaHREYXRhJikgY29uc3Q7CiAKQEAgLTEyNiw4ICsxMjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKICAgICBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0
VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKLSAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2ln
bmVkKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUxpbmUoKSBmaW5hbDsKICAg
ICB2b2lkIGV4dHJhY3RMaW5lKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGVmOTgxYWE0NTA2OC4uNDg5NzViN2VjZmMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzI1OSw3
ICszMjU5LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KICAgICAgICAgICAgIGNhc2UgUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZXh0Qm94LmlzU2VsZWN0ZWQoc3RhcnQs
IGVuZCkpCisgICAgICAgICAgICBpZiAodGV4dEJveC5pc1NlbGVjdGFibGUoc3RhcnQsIGVuZCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94U2VsZWN0YWJs
ZVJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jNDdiOTQ0
MzVhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJv
eFNlbGVjdGFibGVSYW5nZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxvcHRpb25hbD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSB7CisgICAgY29uc3QgdW5zaWduZWQgc3RhcnQ7
CisgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoOworICAgIGNvbnN0IHVuc2lnbmVkIGFkZGl0aW9u
YWxMZW5ndGhBdEVuZCB7IDAgfTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0
cnVuY2F0aW9uIHsgfTsKKworICAgIHVuc2lnbmVkIGNsYW1wKHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWlu
KG9mZnNldCwgc3RhcnQgKyBsZW5ndGgpLCBzdGFydCkgLSBzdGFydDsKKworICAgICAgICBpZiAo
dHJ1bmNhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oY2xhbXBl
ZE9mZnNldCwgKnRydW5jYXRpb24pOworCisgICAgICAgIGlmIChjbGFtcGVkT2Zmc2V0ID09IGxl
bmd0aCkKKyAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gYWRkaXRpb25hbExlbmd0aEF0RW5k
OworCisgICAgICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0OworICAgIH0KKworICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNsYW1wKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBjbGFtcChzdGFydE9m
ZnNldCksIGNsYW1wKGVuZE9mZnNldCkgfTsKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdHMo
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjbGFtcChzdGFydE9mZnNldCkgPCBjbGFtcChlbmRPZmZzZXQpOworICAg
IH0KK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IGU1Njk5MWY3MGQwMy4uYTc0ODI0YjU1ZWMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VzQ2FjaGUuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5j
bHVkZSAiVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRQYWludGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTM2LDggKzEzNywxMCBA
QCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dChjb25zdCBTVkdUZXh0RnJhZ21lbnQmCiAKIExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6
bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBv
c2l0aW9uKSBjb25zdAogewotICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KHN0YXJ0
UG9zaXRpb24pOwotICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChlbmRQb3NpdGlvbik7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGFibGVSYW5nZSgpOworCisgICAgc3RhcnRQb3NpdGlv
biA9IHJhbmdlLmNsYW1wKHN0YXJ0UG9zaXRpb24pOworICAgIGVuZFBvc2l0aW9uID0gcmFuZ2Uu
Y2xhbXAoZW5kUG9zaXRpb24pOwogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9u
KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430690</attachid>
            <date>2021-06-06 11:35:50 -0700</date>
            <delta_ts>2021-06-06 21:34:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection-clamping-3.patch</filename>
            <type>text/plain</type>
            <size>27000</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzY3ZmM1MTRkMTAuLjJkZDgyNjkzOWM2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDIxLTA2LTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3Igc2VsZWN0aW9uIGNsYW1waW5nIGludG8gYSB0eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY2OTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlIHdpbGwgYmUgaGVscGZ1bCBmb3IgbW92aW5nIHNlbGVjdGlvbiBjb2RlIG91dCBv
ZiB0aGUgbGVnYWN5IGlubGluZSBib3hlcy4KKyAgICAgICAgSXQgYWxzbyBhbGxvd3Mgc29tZSBj
b2RlIHNoYXJpbmcgYWxyZWFkeSBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdh
Y3lQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0
b3JMZWdhY3lQYXRoOjppc1NlbGVjdGFibGUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6cG9z
aXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6aXNTZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OnNlbGVj
dGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1
bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0YWJsZVJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvck1vZGVyblBhdGg6OmNsYW1wZWRP
ZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmlzU2Vs
ZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5l
VGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6
c2VsZWN0YWJsZVJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmNsYW1wZWRTdGFydEVuZEZvclN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRyYWdnZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFya2VycyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZv
ck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpp
c1NlbGVjdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGlu
ZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNl
bGVjdGlvbkdhcHMpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94U2VsZWN0YWJsZVJhbmdl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFNlbGVjdGFibGVSYW5nZTo6Y2xh
bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFNlbGVjdGFibGVSYW5nZTo6aW50
ZXJzZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9u
UmVjdCBjb25zdCk6CisKIDIwMjEtMDYtMDYgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW1RGQ10gQWRvcHQgYSBsZXNzIHF1aXJreSBmaXhlZCBjb2x1bW4g
d2lkdGggc3BhY2UgZGlzdHJpYnV0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBmMzg0NmFiZTFl
NzEuLmM4NDQzMWRkNjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNTgwLDYgKzE1ODAsNyBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5oCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCiAgICAgcmVuZGVy
aW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCisgICAgcmVuZGVyaW5nL1RleHRCb3hTZWxlY3RhYmxl
UmFuZ2UuaAogCiAgICAgcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgKICAgICByZW5kZXJpbmcv
bGluZS9UcmFpbGluZ09iamVjdHMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEyYTFiZDhmMTE5Yy4uNzRiMTVjYjdkOWIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01MjEyLDYgKzUyMTIsNyBAQAogCQlFNDQ2MTQzQTBDRDY4OUM4MDBGQURBNzUgLyogSlNI
VE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEI0MjM4MDBDQkZCNzNDMDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50Lmgg
Ki87IH07CiAJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM3
MjBDQkZCNkUwMDBBRjJFQ0UgLyogSlNIVE1MU291cmNlRWxlbWVudC5oICovOyB9OwogCQlFNDQ2
MTQ1MjBDRDY4QTM1MDBGQURBNzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVDRSAvKiBS
ZW5kZXJWaWRlby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUU0NDdGNUIzMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ3RjVC
MTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJl
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ1MUM2MzEyMzk0MDI3OTAwOTkzMTkwIC8qIExheW91dFVuaXRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjczOTE4QzIxMDZDRUREMDA2
QUYyNjIgLyogTGF5b3V0VW5pdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTY1NjUsNiArMTY1NjYsNyBAQAogCQlFNDQ2MTQxMTBDRDY4MjY5
MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVkaWFFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQx
MjBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGltZVJhbmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0NDdGNUIxMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2Vs
ZWN0YWJsZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hT
ZWxlY3RhYmxlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0QjRCQjEx
NDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3RvckNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDRCNEJCMjE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDRFRTNBNjE3NTc2RTU1MDBFRUU4Q0YgLyog
Rm9udEdlbmVyaWNGYW1pbGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250R2VuZXJpY0Zh
bWlsaWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwNDExLDYgKzMwNDEz
LDcgQEAKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywK
IAkJCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovLAog
CQkJCTBGNTREQ0U0MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5oICovLAorCQkJ
CUU0NDdGNUIxMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmggKi8s
CiAJCQkJNTgyREUzMjIxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5j
cHAgKi8sCiAJCQkJNTgyREUzMjMxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFp
bnRlci5oICovLAogCQkJCTFDMThEQTU2MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5j
cHAgKi8sCkBAIC0zMjQ3MCw2ICszMjQ3Myw3IEBACiAJCQkJNDFGQUJEMkQxRjRERkU0QTAwNkE2
Qzk3IC8qIERPTUNhY2hlRW5naW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM4MEMyOTFGMzQz
NkFDMDAxNTVGREEgLyogRE9NQ2FjaGVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QkRB
M0ZGRTIxNTFCNkY1MDBGRDY2MDQgLyogRE9NQ1NTQ3VzdG9tUHJvcGVydHlEZXNjcmlwdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDQ3RjVCMzI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkM5QTBGNzUxNjQwOTRDRjAwM0Q2
QjhEIC8qIERPTUNTU05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEI2QjVDQkQyMTY0
MEVGRjAwNjAzODE3IC8qIERPTUNTU1BhaW50V29ya2xldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NEJEQTNGRkYyMTUxQjZGNTAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHku
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxl
Z2FjeVBhdGguaAppbmRleCA1NTZmMDVkZTc3MTYuLmU4YTAxMGEyZjUyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0
IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7IH0KICAgICBm
bG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGlu
bGluZVRleHRCb3goKS0+cG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0KTsgfQogCi0gICAgYm9vbCBp
c1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1cm4g
aW5saW5lVGV4dEJveCgpLT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQpOyB9CisgICAgYm9vbCBpc1Nl
bGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1cm4gaW5s
aW5lVGV4dEJveCgpLT5pc1NlbGVjdGFibGUoc3RhcnQsIGVuZCk7IH0KICAgICBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1
cm4gaW5saW5lVGV4dEJveCgpLT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7IH0KIAog
ICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAppbmRleCAxN2RlOTM2YzBlOTUuLjk3
ZDJjOTk3NjAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rl
cm5QYXRoLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisjaW5jbHVkZSAiVGV4
dEJveFNlbGVjdGFibGVSYW5nZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkxLDcg
KzkyLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAg
IHJldHVybiByZWN0KCkueCgpOwogCi0gICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2xhbXBlZE9m
ZnNldChvZmZzZXQpOworICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKG9mZnNldCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdChyZWN0KCkueCgpLCAwLCAwLCAwKTsKICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOwpAQCAtMTAxLDEzICsxMDIsMTIgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSA8
IGNsYW1wZWRPZmZzZXQoZW5kKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmlu
dGVyc2VjdHMoc3RhcnQsIGVuZCk7CiAgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0KHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdlRW5kKSBjb25zdAogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgY2xhbXBlZFN0YXJ0ID0gY2xhbXBlZE9mZnNldChyYW5nZVN0YXJ0
KTsKLSAgICAgICAgdW5zaWduZWQgY2xhbXBlZEVuZCA9IGNsYW1wZWRPZmZzZXQocmFuZ2VFbmQp
OworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJh
bmdlKCkuY2xhbXAocmFuZ2VTdGFydCwgcmFuZ2VFbmQpOwogCiAgICAgICAgIGlmIChjbGFtcGVk
U3RhcnQgPj0gY2xhbXBlZEVuZCAmJiAhKHJhbmdlU3RhcnQgPT0gcmFuZ2VFbmQgJiYgcmFuZ2VT
dGFydCA+PSBzdGFydCgpICYmIHJhbmdlU3RhcnQgPD0gZW5kKCkpKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTIwNCwxNCArMjA0LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFJ1bkl0ZXJhdG9yOwogCi0gICAgdW5zaWduZWQgY2xhbXBlZE9mZnNldCh1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0CisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBzZWxlY3RhYmxl
UmFuZ2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjpt
YXgoc3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQoKTsKLSAgICAgICAg
Ly8gV2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFuZCB0aGUgaHlwaGVu
IGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAmJiBjbGFtcGVkT2Zm
c2V0ID09IGxlbmd0aCgpKQotICAgICAgICAgICAgY2xhbXBlZE9mZnNldCArPSBydW4oKS5zdHls
ZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgpOwotCi0gICAgICAgIHJldHVybiBjbGFtcGVkT2Zm
c2V0OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc3RhcnQoKSwKKyAgICAgICAgICAg
IGxlbmd0aCgpLAorICAgICAgICAgICAgcnVuKCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5n
dGgoKQorICAgICAgICB9OwogICAgIH0KIAogICAgIGVudW0gY2xhc3MgSHlwaGVuTW9kZSB7IElu
Y2x1ZGUsIElnbm9yZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guY3BwCmluZGV4IDA3MGFlYWU0YzE5MC4uYmEwMTA5YjMzOWM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCkBAIC01
NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKICNpbmNs
dWRlICJUZXh0UGFpbnRTdHlsZS5oIgogI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCkBAIC0xNTMs
OSArMTU0LDkgQEAgTGF5b3V0VW5pdCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWln
aHQoKSBjb25zdAogICAgIHJldHVybiByb290KCkuc2VsZWN0aW9uSGVpZ2h0KCk7CiB9CiAKLWJv
b2wgTGVnYWN5SW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9u
LCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3QKK2Jvb2wgTGVnYWN5SW5saW5lVGV4dEJveDo6
aXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9u
KSBjb25zdAogewotICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0KHN0YXJ0UG9zaXRpb24pIDwgY2xh
bXBlZE9mZnNldChlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmlu
dGVyc2VjdHMoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCiBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKQEAg
LTI0MywxMCArMjQ0LDkgQEAgTGF5b3V0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdChjb25zdCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBmbG9hdCBsb2dpY2FsUmkKIC8vIEZJWE1FOiBTaGFy
ZSBtb3JlIGNvZGUgd2l0aCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKCkuCiBMYXlvdXRSZWN0
IExlZ2FjeUlubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBv
cywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNQb3MgPSBjbGFtcGVk
T2Zmc2V0KHN0YXJ0UG9zKTsKLSAgICB1bnNpZ25lZCBlUG9zID0gY2xhbXBlZE9mZnNldChlbmRQ
b3MpOworICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFu
Z2UoKS5jbGFtcChzdGFydFBvcywgZW5kUG9zKTsKIAotICAgIGlmIChzUG9zID49IGVQb3MgJiYg
IShzdGFydFBvcyA9PSBlbmRQb3MgJiYgc3RhcnRQb3MgPj0gc3RhcnQoKSAmJiBzdGFydFBvcyA8
PSAoc3RhcnQoKSArIGxlbigpKSkpCisgICAgaWYgKGNsYW1wZWRTdGFydCA+PSBjbGFtcGVkRW5k
ICYmICEoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQ
b3MgPD0gKHN0YXJ0KCkgKyBsZW4oKSkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgTGF5
b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKQEAgLTI1Niw4ICsy
NTYsOCBAQCBMYXlvdXRSZWN0IExlZ2FjeUlubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVj
dCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZQogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rp
b25SZWN0IHsgTGF5b3V0VW5pdChsb2dpY2FsTGVmdCgpKSwgc2VsZWN0aW9uVG9wLCBMYXlvdXRV
bml0KGxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CiAgICAgLy8gQXZvaWQgbWVh
c3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBh
biBvcHRpbWl6YXRpb24uCi0gICAgaWYgKHNQb3MgfHwgZVBvcyAhPSB0ZXh0UnVuLmxlbmd0aCgp
KQotICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOworICAgIGlmIChjbGFtcGVkU3RhcnQgfHwgY2xh
bXBlZEVuZCAhPSB0ZXh0UnVuLmxlbmd0aCgpKQorICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydCwg
Y2xhbXBlZEVuZCk7CiAgICAgLy8gRklYTUU6IFRoZSBjb21wdXRhdGlvbiBvZiB0aGUgc25hcHBl
ZCBzZWxlY3Rpb24gcmVjdCBkaWZmZXJzIGZyb20gdGhlIGNvbXB1dGF0aW9uIG9mIHRoaXMgcmVj
dAogICAgIC8vIGluIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4gU2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4OTEzPi4KICAgICByZXR1cm4gc25hcHBl
ZFNlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCwgbG9naWNhbFJpZ2h0KCksIHNlbGVjdGlvblRv
cCwgc2VsZWN0aW9uSGVpZ2h0LCBpc0hvcml6b250YWwoKSk7CkBAIC01NTMsNyArNTUzLDggQEAg
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gbWFya2VkVGV4
dHM7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24pIHsK
ICAgICAgICAgLy8gVGhlIG1hcmtlZCB0ZXh0cyBmb3IgdGhlIGdhcHMgYmV0d2VlbiBkb2N1bWVu
dCBtYXJrZXJzIGFuZCBzZWxlY3Rpb24gYXJlIGltcGxpY2l0bHkgY3JlYXRlZCBieSBzdWJkaXZp
ZGluZyB0aGUgZW50aXJlIGxpbmUuCi0gICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGNsYW1w
ZWRPZmZzZXQobV9zdGFydCksIGNsYW1wZWRPZmZzZXQoZW5kKCkpLCBNYXJrZWRUZXh0OjpVbm1h
cmtlZCB9KTsKKyAgICAgICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSB0aGlzLT5zZWxlY3RhYmxl
UmFuZ2UoKTsKKyAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgc2VsZWN0YWJsZVJhbmdlLmNs
YW1wKG1fc3RhcnQpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoZW5kKCkpLCBNYXJrZWRUZXh0OjpV
bm1hcmtlZCB9KTsKICAgICAgICAgaWYgKCFpc1ByaW50aW5nKSB7CiAgICAgICAgICAgICBtYXJr
ZWRUZXh0cy5hcHBlbmRWZWN0b3IoY29sbGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJz
KFRleHRQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7CiAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdo
dE1hcmtlZFRleHRzID0gY29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCk7CkBAIC02NDAsMzUgKzY0MSw0NSBAQCB2b2lkIExlZ2FjeUlubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZgogICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3Vu
dGVyY2xvY2t3aXNlKSk7CiB9CiAKLXVuc2lnbmVkIExlZ2FjeUlubGluZVRleHRCb3g6OmNsYW1w
ZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKK1RleHRCb3hTZWxlY3RhYmxlUmFuZ2UgTGVnYWN5
SW5saW5lVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBzdGQ6Om1heChzdGQ6Om1pbih4LCBtX3N0YXJ0ICsgbV9sZW4pLCBtX3N0YXJ0KSAt
IG1fc3RhcnQ7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAg
ICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9u
KQotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4ob2Zmc2V0LCBtX3RydW5jYXRp
b24pOwotICAgIGVsc2UgaWYgKG9mZnNldCA9PSBtX2xlbikgewotICAgICAgICAvLyBGaXggdXAg
dGhlIG9mZnNldCBpZiB3ZSBhcmUgY29tYmluZWQgdGV4dCBvciBoYXZlIGEgaHlwaGVuIGJlY2F1
c2Ugd2UgbWFuYWdlIHRoZXNlIGVtYmVsbGlzaG1lbnRzLgotICAgICAgICAvLyBUaGF0IGlzLCB0
aGV5IGFyZSBub3QgcmVmbGVjdGVkIGluIHJlbmRlcmVyKCkudGV4dCgpLiBXZSB0cmVhdCBjb21i
aW5lZCB0ZXh0IGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIC8vIFdlIGFsc28gdHJlYXQgdGhl
IGxhc3QgY29kZXBvaW50IGluIHRoaXMgYm94IGFuZCB0aGUgaHlwaGVuIGFzIGEgc2luZ2xlIHVu
aXQuCisgICAgLy8gRml4IHVwIHRoZSBvZmZzZXQgaWYgd2UgYXJlIGNvbWJpbmVkIHRleHQgb3Ig
aGF2ZSBhIGh5cGhlbiBiZWNhdXNlIHdlIG1hbmFnZSB0aGVzZSBlbWJlbGxpc2htZW50cy4KKyAg
ICAvLyBUaGF0IGlzLCB0aGV5IGFyZSBub3QgcmVmbGVjdGVkIGluIHJlbmRlcmVyKCkudGV4dCgp
LiBXZSB0cmVhdCBjb21iaW5lZCB0ZXh0IGFzIGEgc2luZ2xlIHVuaXQuCisgICAgLy8gV2UgYWxz
byB0cmVhdCB0aGUgbGFzdCBjb2RlcG9pbnQgaW4gdGhpcyBib3ggYW5kIHRoZSBoeXBoZW4gYXMg
YSBzaW5nbGUgdW5pdC4KKyAgICBhdXRvIGFkZGl0aW9uYWxMZW5ndGhBdEVuZCA9IFsmXSB7CiAg
ICAgICAgIGlmIChhdXRvKiBjb21iaW5lZFRleHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKSkKLSAg
ICAgICAgICAgIG9mZnNldCA9IGNvbWJpbmVkVGV4dC0+Y29tYmluZWRTdHJpbmdGb3JSZW5kZXJp
bmcoKS5sZW5ndGgoKTsKLSAgICAgICAgZWxzZSBpZiAoaGFzSHlwaGVuKCkpCi0gICAgICAgICAg
ICBvZmZzZXQgKz0gbGluZVN0eWxlKCkuaHlwaGVuU3RyaW5nKCkubGVuZ3RoKCk7Ci0gICAgfQot
ICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gY29tYmluZWRUZXh0LT5jb21i
aW5lZFN0cmluZ0ZvclJlbmRlcmluZygpLmxlbmd0aCgpIC0gbV9sZW47CisgICAgICAgIGlmICho
YXNIeXBoZW4oKSkKKyAgICAgICAgICAgIHJldHVybiBsaW5lU3R5bGUoKS5oeXBoZW5TdHJpbmco
KS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIDB1OworICAgIH0oKTsKKworICAgIGF1dG8gdHJ1
bmNhdGlvbiA9IFsmXSgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgaWYg
KG1fdHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICBy
ZXR1cm4gbV90cnVuY2F0aW9uOworICAgIH0oKTsKKworICAgIHJldHVybiB7CisgICAgICAgIG1f
c3RhcnQsCisgICAgICAgIG1fbGVuLAorICAgICAgICBhZGRpdGlvbmFsTGVuZ3RoQXRFbmQsCisg
ICAgICAgIHRydW5jYXRpb24KKyAgICB9OwogfQogCiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVj
dGlvblN0YXRlKSBjb25zdAogewogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpCi0gICAgICAgIHJldHVybiB7IDAsIGNsYW1wZWRP
ZmZzZXQobV9zdGFydCArIG1fbGVuKSB9OworICAgICAgICByZXR1cm4geyAwLCBzZWxlY3RhYmxl
UmFuZ2UoKS5jbGFtcChtX3N0YXJ0ICsgbV9sZW4pIH07CiAgICAgCiAgICAgaWYgKHNlbGVjdGlv
blN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KQogICAgICAgICBl
bmQgPSByZW5kZXJlcigpLnRleHQoKS5sZW5ndGgoKTsKICAgICBlbHNlIGlmIChzZWxlY3Rpb25T
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCiAgICAgICAgIHN0YXJ0
ID0gMDsKLSAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChl
bmQpIH07CisgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHN0YXJ0LCBlbmQpOwog
fQogCiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CkBAIC03MTksNyArNzMwLDcgQEAgRmxvYXRSZWN0IExl
Z2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1h
cmtlZFRleHQmIG0KICAgICBhdXRvIGhlaWdodCA9IDAuMTMyNDcgKiBmb250U2l6ZTsKIAogICAg
IC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMg
c2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgotICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zm
c2V0IHx8IG1hcmtlZFRleHQuZW5kT2Zmc2V0ICE9IGNsYW1wZWRPZmZzZXQoZW5kKCkpKSB7Cisg
ICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFya2VkVGV4dC5lbmRPZmZzZXQgIT0g
c2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAoZW5kKCkpKSB7CiAgICAgICAgIFRleHRSdW4gcnVuID0g
Y3JlYXRlVGV4dFJ1bigpOwogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlv
dXRSZWN0KDAsIHksIDAsIGhlaWdodCk7CiAgICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0
LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CkBAIC03NzAsOCArNzgxLDEwIEBAIFZlY3RvcjxNYXJr
ZWRUZXh0PiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JEcmFnZ2Vk
Q29udGVudCgpCiB7CiAgICAgdXNpbmcgRHJhZ2dlbmRDb250ZW50UmFuZ2UgPSBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPjsKICAgICBhdXRvIGRyYWdnZWRDb250ZW50UmFuZ2VzID0gcmVu
ZGVyZXIoKS5kcmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKG1fc3RhcnQsIG1fc3Rh
cnQgKyBtX2xlbik7CisKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gcmVzdWx0ID0gZHJhZ2dlZENv
bnRlbnRSYW5nZXMubWFwKFt0aGlzXSAoY29uc3QgRHJhZ2dlbmRDb250ZW50UmFuZ2UmIHJhbmdl
KSAtPiBNYXJrZWRUZXh0IHsKLSAgICAgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChyYW5nZS5m
aXJzdCksIGNsYW1wZWRPZmZzZXQocmFuZ2Uuc2Vjb25kKSwgTWFya2VkVGV4dDo6RHJhZ2dlZENv
bnRlbnQgfTsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVj
dGFibGVSYW5nZSgpLmNsYW1wKHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOworICAgICAgICBy
ZXR1cm4geyBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1hcmtlZFRleHQ6OkRyYWdnZWRDb250
ZW50IH07CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg2NSw5ICs4NzgsMTEg
QEAgVmVjdG9yPE1hcmtlZFRleHQ+IExlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRvY3VtZW50TWFya2VycyhUZXgKICAgICAgICAgLy8gRklYTUU6IFNlZSA8cmRhcjov
L3Byb2JsZW0vODkzMzM1Mj4uIEFsc28sIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSkt
Z3VhcmQuCiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXM6CiAjZW5kaWYKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1h
dGNoOgotICAgICAgICAgICAgbWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHsgY2xhbXBlZE9m
ZnNldChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpLCBjbGFtcGVkT2Zmc2V0KG1hcmtlci0+ZW5kT2Zm
c2V0KCkpLCBtYXJrZWRUZXh0VHlwZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpLCBtYXJr
ZXIgfSk7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaDogeworICAgICAg
ICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7CisgICAg
ICAgICAgICBtYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQoeyBjbGFtcGVkU3RhcnQsIGNsYW1w
ZWRFbmQsIG1hcmtlZFRleHRUeXBlRm9yTWFya2VyVHlwZShtYXJrZXItPnR5cGUoKSksIG1hcmtl
ciB9KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50OgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQpAQCAtMTEwMSw4ICsxMTE2LDEwIEBAIHZvaWQgTGVn
YWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3JhdGlvbihQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QKIAogdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luKQogeworICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJh
bmdlKCk7CisKICAgICBpZiAoIXJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlv
blVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dy
b3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRD
b21wb3NpdGlvbkZpbGxDb2xvciwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1l
KCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOworICAgICAgICBwYWludE1hcmtlZFRleHRC
YWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlvbkhpZ2hsaWdodDo6ZGVm
YXVsdENvbXBvc2l0aW9uRmlsbENvbG9yLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAocmVuZGVyZXIo
KS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uU3RhcnQoKSksIHNlbGVjdGFibGVSYW5nZS5j
bGFtcChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEzLDcgKzExMzAsOCBAQCB2b2lkIExlZ2FjeUlu
bGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdAogICAgICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49IGVuZCgpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChw
YWludEluZm8sIGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkT2Zmc2V0KGhpZ2hs
aWdodC5zdGFydE9mZnNldCksIGNsYW1wZWRPZmZzZXQoaGlnaGxpZ2h0LmVuZE9mZnNldCksIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOworICAgICAgICBhdXRvIFtjbGFtcGVk
U3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlLmNsYW1wKGhpZ2hsaWdodC5zdGFy
dE9mZnNldCwgaGlnaGxpZ2h0LmVuZE9mZnNldCk7CisgICAgICAgIHBhaW50TWFya2VkVGV4dEJh
Y2tncm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIGhpZ2hsaWdodC5jb2xvciwgY2xhbXBlZFN0
YXJ0LCBjbGFtcGVkRW5kLCBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsKIAog
ICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA+IGVuZCgpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMjQzLDkgKzEyNjEsOSBAQCBmbG9hdCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgdW5zaWduZWQgZW5kT2Zm
c2V0OwogICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgc3RhcnRP
ZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7Cisg
ICAgICAgIGVuZE9mZnNldCA9IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7Cisg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KTsKICAg
ICAgICAgZW5kT2Zmc2V0ID0gbV9sZW47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCBlNTcwNjY4NjYyOTYuLjVhZmJiNzUz
YWE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRl
eHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIFRleHRQYWludGVyOwogc3RydWN0IENvbXBvc2l0
aW9uVW5kZXJsaW5lOwogc3RydWN0IE1hcmtlZFRleHQ7CiBzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4
dDsKK3N0cnVjdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlOwogc3RydWN0IFRleHRQYWludFN0eWxl
OwogCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwpAQCAt
NzcsNiArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90cnVuY2F0aW9uOyB9CiAKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJh
bmdlIHNlbGVjdGFibGVSYW5nZSgpIGNvbnN0OworCiAgICAgdm9pZCBtYXJrRGlydHkoYm9vbCBk
aXJ0eSA9IHRydWUpIGZpbmFsOwogCiAgICAgdXNpbmcgTGVnYWN5SW5saW5lQm94OjpoYXNIeXBo
ZW47CkBAIC0xMTgsNyArMTIxLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVk
IGVuZFBvcykgY29uc3Q7Ci0gICAgYm9vbCBpc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU2VsZWN0YWJsZSh1
bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Q7CiAgICAg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsK
ICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVuZChIaWdo
bGlnaHREYXRhJikgY29uc3Q7CiAKQEAgLTEyNiw4ICsxMjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKICAgICBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0
VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKLSAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2ln
bmVkKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUxpbmUoKSBmaW5hbDsKICAg
ICB2b2lkIGV4dHJhY3RMaW5lKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGVmOTgxYWE0NTA2OC4uNDg5NzViN2VjZmMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzI1OSw3
ICszMjU5LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBz
KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KICAgICAgICAgICAgIGNhc2UgUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZXh0Qm94LmlzU2VsZWN0ZWQoc3RhcnQs
IGVuZCkpCisgICAgICAgICAgICBpZiAodGV4dEJveC5pc1NlbGVjdGFibGUoc3RhcnQsIGVuZCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94U2VsZWN0YWJs
ZVJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jNDdiOTQ0
MzVhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJv
eFNlbGVjdGFibGVSYW5nZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxvcHRpb25hbD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSB7CisgICAgY29uc3QgdW5zaWduZWQgc3RhcnQ7
CisgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoOworICAgIGNvbnN0IHVuc2lnbmVkIGFkZGl0aW9u
YWxMZW5ndGhBdEVuZCB7IDAgfTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0
cnVuY2F0aW9uIHsgfTsKKworICAgIHVuc2lnbmVkIGNsYW1wKHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWlu
KG9mZnNldCwgc3RhcnQgKyBsZW5ndGgpLCBzdGFydCkgLSBzdGFydDsKKworICAgICAgICBpZiAo
dHJ1bmNhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oY2xhbXBl
ZE9mZnNldCwgKnRydW5jYXRpb24pOworCisgICAgICAgIGlmIChjbGFtcGVkT2Zmc2V0ID09IGxl
bmd0aCkKKyAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gYWRkaXRpb25hbExlbmd0aEF0RW5k
OworCisgICAgICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0OworICAgIH0KKworICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNsYW1wKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBjbGFtcChzdGFydE9m
ZnNldCksIGNsYW1wKGVuZE9mZnNldCkgfTsKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdHMo
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjbGFtcChzdGFydE9mZnNldCkgPCBjbGFtcChlbmRPZmZzZXQpOworICAg
IH0KK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IGU1Njk5MWY3MGQwMy4uZDMwMzNkMTVmNjYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VzQ2FjaGUuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5j
bHVkZSAiVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRQYWludGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTM0LDExICsxMzUsMTEg
QEAgRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21l
bnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JgogICAgIHJldHVybiBzbmFwcGVkU2VsZWN0aW9uUmVj
dDsKIH0KIAotTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3Qo
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0CitMYXlv
dXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKSBjb25zdAogewotICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zm
c2V0KHN0YXJ0UG9zaXRpb24pOwotICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChlbmRQ
b3NpdGlvbik7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCisgICAgYXV0
byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHN0
YXJ0LCBlbmQpOworCisgICAgaWYgKGNsYW1wZWRTdGFydCA+PSBjbGFtcGVkRW5kKQogICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLnN0
eWxlKCk7CkBAIC0xNTIsOCArMTUzLDggQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewogICAgICAg
ICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkp
OwogCi0gICAgICAgIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAg
ICAgIGZyYWdtZW50RW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKKyAgICAgICAgZnJhZ21lbnRT
dGFydFBvc2l0aW9uID0gY2xhbXBlZFN0YXJ0OworICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9u
ID0gY2xhbXBlZEVuZDsKICAgICAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50
RW5kUG9zaXRpb24pKQogICAgICAgICAgICAgY29udGludWU7CiAK
</data>
<flag name="review"
          id="452240"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="452249"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430710</attachid>
            <date>2021-06-06 21:34:42 -0700</date>
            <delta_ts>2021-06-06 23:19:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection-clamping-4.patch</filename>
            <type>text/plain</type>
            <size>26988</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzY3ZmM1MTRkMTAuLmNjYzNhYTBmZDBiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDIxLTA2LTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3Igc2VsZWN0aW9uIGNsYW1waW5nIGludG8gYSB0eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY2OTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFRleHRCb3hTZWxlY3RhYmxl
UmFuZ2Ugd2lsbCBiZSBoZWxwZnVsIGZvciBtb3Zpbmcgc2VsZWN0aW9uIGNvZGUgb3V0IG9mIHRo
ZSBsZWdhY3kgaW5saW5lIGJveGVzLgorICAgICAgICBJdCBhbHNvIGFsbG93cyBzb21lIGNvZGUg
c2hhcmluZyBhbHJlYWR5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBh
dGguaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvckxl
Z2FjeVBhdGg6OmlzU2VsZWN0YWJsZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpwb3NpdGlv
bkZvck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6
UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjppc1NlbGVjdGFibGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9u
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRl
cmF0b3JNb2Rlcm5QYXRoOjpzZWxlY3RhYmxlUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6Y2xhbXBlZE9mZnNl
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6aXNTZWxlY3Rh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmxvY2Fs
U2VsZWN0aW9uUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0
Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpzZWxl
Y3RhYmxlUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJv
eDo6Y2xhbXBlZFN0YXJ0RW5kRm9yU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRz
Rm9yRHJhZ2dlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJv
eDo6Y29sbGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmlzU2Vs
ZWN0ZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4
dEJveDo6Y2xhbXBlZE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0
aW9uR2Fwcyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94U2VsZWN0YWJsZVJhbmdlOjpjbGFtcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94U2VsZWN0YWJsZVJhbmdlOjppbnRlcnNl
Y3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0
IGNvbnN0KToKKwogMjAyMS0wNi0wNiAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ11bVEZDXSBBZG9wdCBhIGxlc3MgcXVpcmt5IGZpeGVkIGNvbHVtbiB3aWR0
aCBzcGFjZSBkaXN0cmlidXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGYzODQ2YWJlMWU3MS4u
Yzg0NDMxZGQ2ODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE1ODAsNiArMTU4MCw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmgKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmgKICAgICByZW5kZXJpbmcv
U2VsZWN0aW9uUmFuZ2VEYXRhLmgKKyAgICByZW5kZXJpbmcvVGV4dEJveFNlbGVjdGFibGVSYW5n
ZS5oCiAKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJlbmRlcmluZy9saW5l
L1RyYWlsaW5nT2JqZWN0cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTJhMWJkOGYxMTljLi43NGIxNWNiN2Q5YjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTUyMTIsNiArNTIxMiw3IEBACiAJCUU0NDYxNDNBMENENjg5QzgwMEZBREE3NSAvKiBKU0hUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QjQyMzgwMENCRkI3M0MwMEFGMkVDRSAvKiBKU0hUTUxNZWRpYUVsZW1lbnQuaCAqLzsg
fTsKIAkJRTQ0NjE0M0MwQ0Q2ODlDQzAwRkFEQTc1IC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQyMzcyMENC
RkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggKi87IH07CiAJCUU0NDYxNDUy
MENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRl
clZpZGVvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTQ0N0Y1QjMyNjZDRjYzRDAwMTMzRjAwIC8qIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDdGNUIxMjY2
Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0QjRCQjQxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ0QjRCQjIxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5oICovOyB9OwogCQlFNDRGQTE4NTFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NEZBMTg0MUJDQTZCNUEwMDkxQjZFRiAvKiBDb21wb3NlZFRyZWVJdGVyYXRvci5oICovOyB9Owog
CQlFNDUxQzYzMTIzOTQwMjc5MDA5OTMxOTAgLyogTGF5b3V0VW5pdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNzM5MThDMjEwNkNFREQwMDZBRjI2
MiAvKiBMYXlvdXRVbml0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xNjU2NSw2ICsxNjU2Niw3IEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZB
REE3NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENE
NjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ0N0Y1QjEyNjZDRjYzRDAwMTMzRjAwIC8qIFRleHRCb3hTZWxlY3Rh
YmxlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJveFNlbGVj
dGFibGVSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDRCNEJCMTE0MTY1
MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JDaGVja2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NEVFM0E2MTc1NzZFNTUwMEVFRThDRiAvKiBGb250
R2VuZXJpY0ZhbWlsaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRHZW5lcmljRmFtaWxp
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA0MTEsNiArMzA0MTMsNyBA
QAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJ
CTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJ
MEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0
N0Y1QjEyNjZDRjYzRDAwMTMzRjAwIC8qIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCAqLywKIAkJ
CQk1ODJERTMyMjFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmNwcCAq
LywKIAkJCQk1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVy
LmggKi8sCiAJCQkJMUMxOERBNTYxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmNwcCAq
LywKQEAgLTMyNDcwLDYgKzMyNDczLDcgQEAKIAkJCQk0MUZBQkQyRDFGNERGRTRBMDA2QTZDOTcg
LyogRE9NQ2FjaGVFbmdpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzgwQzI5MUYzNDM2QUMw
MDE1NUZEQSAvKiBET01DYWNoZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCREEzRkZF
MjE1MUI2RjUwMEZENjYwNCAvKiBET01DU1NDdXN0b21Qcm9wZXJ0eURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0NDdGNUIzMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQzlBMEY3NTE2NDA5NENGMDAzRDZCOEQg
LyogRE9NQ1NTTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjZCNUNCRDIxNjQwRUZG
MDA2MDM4MTcgLyogRE9NQ1NTUGFpbnRXb3JrbGV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QkRB
M0ZGRjIxNTFCNkY1MDBGRDY2MDQgLyogRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5
UGF0aC5oCmluZGV4IDU1NmYwNWRlNzcxNi4uZThhMDEwYTJmNTIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRv
ckxlZ2FjeVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaApAQCAtNzQsNyArNzQsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyBy
ZXR1cm4gaW5saW5lVGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQogICAgIGZsb2F0
IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QgeyByZXR1cm4gaW5saW5l
VGV4dEJveCgpLT5wb3NpdGlvbkZvck9mZnNldChvZmZzZXQpOyB9CiAKLSAgICBib29sIGlzU2Vs
ZWN0YWJsZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdCB7IHJldHVybiBpbmxp
bmVUZXh0Qm94KCktPmlzU2VsZWN0ZWQoc3RhcnQsIGVuZCk7IH0KKyAgICBib29sIGlzU2VsZWN0
YWJsZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdCB7IHJldHVybiBpbmxpbmVU
ZXh0Qm94KCktPmlzU2VsZWN0YWJsZShzdGFydCwgZW5kKTsgfQogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdCB7IHJldHVybiBp
bmxpbmVUZXh0Qm94KCktPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsgfQogCiAgICAg
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1v
ZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IDE3ZGU5MzZjMGU5NS4uOTdkMmM5
OTc2MDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBh
dGguaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaCIKKyNpbmNsdWRlICJUZXh0Qm94
U2VsZWN0YWJsZVJhbmdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTEsNyArOTIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICAgICAgcmV0
dXJuIHJlY3QoKS54KCk7CiAKLSAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0
KG9mZnNldCk7CisgICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xh
bXAob2Zmc2V0KTsKIAogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRS
ZWN0KHJlY3QoKS54KCksIDAsIDAsIDApOwogICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVh
dGVUZXh0UnVuKEh5cGhlbk1vZGU6Oklnbm9yZSk7CkBAIC0xMDEsMTMgKzEwMiwxMiBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzU2VsZWN0YWJsZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQoc3RhcnQpIDwgY2xh
bXBlZE9mZnNldChlbmQpOworICAgICAgICByZXR1cm4gc2VsZWN0YWJsZVJhbmdlKCkuaW50ZXJz
ZWN0cyhzdGFydCwgZW5kKTsKICAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Qo
dW5zaWduZWQgcmFuZ2VTdGFydCwgdW5zaWduZWQgcmFuZ2VFbmQpIGNvbnN0CiAgICAgewotICAg
ICAgICB1bnNpZ25lZCBjbGFtcGVkU3RhcnQgPSBjbGFtcGVkT2Zmc2V0KHJhbmdlU3RhcnQpOwot
ICAgICAgICB1bnNpZ25lZCBjbGFtcGVkRW5kID0gY2xhbXBlZE9mZnNldChyYW5nZUVuZCk7Cisg
ICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2Uo
KS5jbGFtcChyYW5nZVN0YXJ0LCByYW5nZUVuZCk7CiAKICAgICAgICAgaWYgKGNsYW1wZWRTdGFy
dCA+PSBjbGFtcGVkRW5kICYmICEocmFuZ2VTdGFydCA9PSByYW5nZUVuZCAmJiByYW5nZVN0YXJ0
ID49IHN0YXJ0KCkgJiYgcmFuZ2VTdGFydCA8PSBlbmQoKSkpCiAgICAgICAgICAgICByZXR1cm4g
eyB9OwpAQCAtMjA0LDE0ICsyMDQsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgUnVuSXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCkgY29uc3QKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVjdGFibGVSYW5n
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGNsYW1wZWRPZmZzZXQgPSBzdGQ6Om1heChz
dGFydCgpLCBzdGQ6Om1pbihvZmZzZXQsIGVuZCgpKSkgLSBzdGFydCgpOwotICAgICAgICAvLyBX
ZSB0cmVhdCB0aGUgbGFzdCBjb2RlcG9pbnQgaW4gdGhpcyBydW4gYW5kIHRoZSBoeXBoZW4gYXMg
YSBzaW5nbGUgdW5pdC4KLSAgICAgICAgaWYgKGhhc0h5cGhlbigpICYmIGNsYW1wZWRPZmZzZXQg
PT0gbGVuZ3RoKCkpCi0gICAgICAgICAgICBjbGFtcGVkT2Zmc2V0ICs9IHJ1bigpLnN0eWxlKCku
aHlwaGVuU3RyaW5nKCkubGVuZ3RoKCk7Ci0KLSAgICAgICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQ7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzdGFydCgpLAorICAgICAgICAgICAgbGVu
Z3RoKCksCisgICAgICAgICAgICBydW4oKS5zdHlsZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgp
CisgICAgICAgIH07CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBIeXBoZW5Nb2RlIHsgSW5jbHVk
ZSwgSWdub3JlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
VGV4dEJveC5jcHAKaW5kZXggMDcwYWVhZTRjMTkwLi5iYTAxMDliMzM5YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEJveFNlbGVjdGFi
bGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgogI2luY2x1ZGUg
IlRleHRQYWludFN0eWxlLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKQEAgLTE1Myw5ICsx
NTQsOSBAQCBMYXlvdXRVbml0IExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgp
IGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25IZWlnaHQoKTsKIH0KIAotYm9vbCBM
ZWdhY3lJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVu
c2lnbmVkIGVuZFBvc2l0aW9uKSBjb25zdAorYm9vbCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojppc1Nl
bGVjdGFibGUodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQoc3RhcnRQb3NpdGlvbikgPCBjbGFtcGVk
T2Zmc2V0KGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gc2VsZWN0YWJsZVJhbmdlKCkuaW50ZXJz
ZWN0cyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKIFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUoKQpAQCAtMjQz
LDEwICsyNDQsOSBAQCBMYXlvdXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0KGNvbnN0IExheW91
dFJlY3QmIHNlbGVjdGlvblJlY3QsIGZsb2F0IGxvZ2ljYWxSaQogLy8gRklYTUU6IFNoYXJlIG1v
cmUgY29kZSB3aXRoIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4KIExheW91dFJlY3QgTGVn
YWN5SW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1
bnNpZ25lZCBlbmRQb3MpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgc1BvcyA9IGNsYW1wZWRPZmZz
ZXQoc3RhcnRQb3MpOwotICAgIHVuc2lnbmVkIGVQb3MgPSBjbGFtcGVkT2Zmc2V0KGVuZFBvcyk7
CisgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKHN0YXJ0UG9zLCBlbmRQb3MpOwogCi0gICAgaWYgKHNQb3MgPj0gZVBvcyAmJiAhKHN0
YXJ0UG9zID09IGVuZFBvcyAmJiBzdGFydFBvcyA+PSBzdGFydCgpICYmIHN0YXJ0UG9zIDw9IChz
dGFydCgpICsgbGVuKCkpKSkKKyAgICBpZiAoY2xhbXBlZFN0YXJ0ID49IGNsYW1wZWRFbmQgJiYg
IShzdGFydFBvcyA9PSBlbmRQb3MgJiYgc3RhcnRQb3MgPj0gc3RhcnQoKSAmJiBzdGFydFBvcyA8
PSAoc3RhcnQoKSArIGxlbigpKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwpAQCAtMjU2LDggKzI1Niw4
IEBAIExheW91dFJlY3QgTGVnYWN5SW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVu
c2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlCiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QgeyBMYXlvdXRVbml0KGxvZ2ljYWxMZWZ0KCkpLCBzZWxlY3Rpb25Ub3AsIExheW91dFVuaXQo
bG9naWNhbFdpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQgfTsKICAgICAvLyBBdm9pZCBtZWFzdXJp
bmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9w
dGltaXphdGlvbi4KLSAgICBpZiAoc1BvcyB8fCBlUG9zICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0g
ICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2Vs
ZWN0aW9uUmVjdCwgc1BvcywgZVBvcyk7CisgICAgaWYgKGNsYW1wZWRTdGFydCB8fCBjbGFtcGVk
RW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCisgICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0LCBjbGFt
cGVkRW5kKTsKICAgICAvLyBGSVhNRTogVGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBzbmFwcGVkIHNl
bGVjdGlvbiByZWN0IGRpZmZlcnMgZnJvbSB0aGUgY29tcHV0YXRpb24gb2YgdGhpcyByZWN0CiAg
ICAgLy8gaW4gcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZCgpLiBTZWUgPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg5MTM+LgogICAgIHJldHVybiBzbmFwcGVkU2Vs
ZWN0aW9uUmVjdChzZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQoKSwgc2VsZWN0aW9uVG9wLCBz
ZWxlY3Rpb25IZWlnaHQsIGlzSG9yaXpvbnRhbCgpKTsKQEAgLTU1Myw3ICs1NTMsOCBAQCB2b2lk
IExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZgogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsK
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgewogICAg
ICAgICAvLyBUaGUgbWFya2VkIHRleHRzIGZvciB0aGUgZ2FwcyBiZXR3ZWVuIGRvY3VtZW50IG1h
cmtlcnMgYW5kIHNlbGVjdGlvbiBhcmUgaW1wbGljaXRseSBjcmVhdGVkIGJ5IHN1YmRpdmlkaW5n
IHRoZSBlbnRpcmUgbGluZS4KLSAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgY2xhbXBlZE9m
ZnNldChtX3N0YXJ0KSwgY2xhbXBlZE9mZnNldChlbmQoKSksIE1hcmtlZFRleHQ6OlVubWFya2Vk
IH0pOworICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVSYW5n
ZSgpOworICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAo
bV9zdGFydCksIHNlbGVjdGFibGVSYW5nZS5jbGFtcChlbmQoKSksIE1hcmtlZFRleHQ6OlVubWFy
a2VkIH0pOwogICAgICAgICBpZiAoIWlzUHJpbnRpbmcpIHsKICAgICAgICAgICAgIG1hcmtlZFRl
eHRzLmFwcGVuZFZlY3Rvcihjb2xsZWN0TWFya2VkVGV4dHNGb3JEb2N1bWVudE1hcmtlcnMoVGV4
dFBhaW50UGhhc2U6OkZvcmVncm91bmQpKTsKICAgICAgICAgICAgIGF1dG8gaGlnaGxpZ2h0TWFy
a2VkVGV4dHMgPSBjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRzKFRleHRQYWludFBoYXNl
OjpGb3JlZ3JvdW5kKTsKQEAgLTY0MCwzNSArNjQxLDQ1IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mCiAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJj
bG9ja3dpc2UpKTsKIH0KIAotdW5zaWduZWQgTGVnYWN5SW5saW5lVGV4dEJveDo6Y2xhbXBlZE9m
ZnNldCh1bnNpZ25lZCB4KSBjb25zdAorVGV4dEJveFNlbGVjdGFibGVSYW5nZSBMZWdhY3lJbmxp
bmVUZXh0Qm94OjpzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdAogewotICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHN0ZDo6bWF4KHN0ZDo6bWluKHgsIG1fc3RhcnQgKyBtX2xlbiksIG1fc3RhcnQpIC0gbV9z
dGFydDsKLSAgICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKLSAgICAgICAg
cmV0dXJuIG9mZnNldDsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pCi0g
ICAgICAgIG9mZnNldCA9IHN0ZDo6bWluPHVuc2lnbmVkPihvZmZzZXQsIG1fdHJ1bmNhdGlvbik7
Ci0gICAgZWxzZSBpZiAob2Zmc2V0ID09IG1fbGVuKSB7Ci0gICAgICAgIC8vIEZpeCB1cCB0aGUg
b2Zmc2V0IGlmIHdlIGFyZSBjb21iaW5lZCB0ZXh0IG9yIGhhdmUgYSBoeXBoZW4gYmVjYXVzZSB3
ZSBtYW5hZ2UgdGhlc2UgZW1iZWxsaXNobWVudHMuCi0gICAgICAgIC8vIFRoYXQgaXMsIHRoZXkg
YXJlIG5vdCByZWZsZWN0ZWQgaW4gcmVuZGVyZXIoKS50ZXh0KCkuIFdlIHRyZWF0IGNvbWJpbmVk
IHRleHQgYXMgYSBzaW5nbGUgdW5pdC4KLSAgICAgICAgLy8gV2UgYWxzbyB0cmVhdCB0aGUgbGFz
dCBjb2RlcG9pbnQgaW4gdGhpcyBib3ggYW5kIHRoZSBoeXBoZW4gYXMgYSBzaW5nbGUgdW5pdC4K
KyAgICAvLyBGaXggdXAgdGhlIG9mZnNldCBpZiB3ZSBhcmUgY29tYmluZWQgdGV4dCBvciBoYXZl
IGEgaHlwaGVuIGJlY2F1c2Ugd2UgbWFuYWdlIHRoZXNlIGVtYmVsbGlzaG1lbnRzLgorICAgIC8v
IFRoYXQgaXMsIHRoZXkgYXJlIG5vdCByZWZsZWN0ZWQgaW4gcmVuZGVyZXIoKS50ZXh0KCkuIFdl
IHRyZWF0IGNvbWJpbmVkIHRleHQgYXMgYSBzaW5nbGUgdW5pdC4KKyAgICAvLyBXZSBhbHNvIHRy
ZWF0IHRoZSBsYXN0IGNvZGVwb2ludCBpbiB0aGlzIGJveCBhbmQgdGhlIGh5cGhlbiBhcyBhIHNp
bmdsZSB1bml0LgorICAgIGF1dG8gYWRkaXRpb25hbExlbmd0aEF0RW5kID0gWyZdIHsKICAgICAg
ICAgaWYgKGF1dG8qIGNvbWJpbmVkVGV4dCA9IHRoaXMtPmNvbWJpbmVkVGV4dCgpKQotICAgICAg
ICAgICAgb2Zmc2V0ID0gY29tYmluZWRUZXh0LT5jb21iaW5lZFN0cmluZ0ZvclJlbmRlcmluZygp
Lmxlbmd0aCgpOwotICAgICAgICBlbHNlIGlmIChoYXNIeXBoZW4oKSkKLSAgICAgICAgICAgIG9m
ZnNldCArPSBsaW5lU3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5ndGgoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBjb21iaW5lZFRleHQtPmNvbWJpbmVk
U3RyaW5nRm9yUmVuZGVyaW5nKCkubGVuZ3RoKCkgLSBtX2xlbjsKKyAgICAgICAgaWYgKGhhc0h5
cGhlbigpKQorICAgICAgICAgICAgcmV0dXJuIGxpbmVTdHlsZSgpLmh5cGhlblN0cmluZygpLmxl
bmd0aCgpOworICAgICAgICByZXR1cm4gMHU7CisgICAgfSgpOworCisgICAgYXV0byB0cnVuY2F0
aW9uID0gWyZdKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICBpZiAobV90
cnVuY2F0aW9uID09IGNOb1RydW5jYXRpb24pCisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgIHJldHVy
biBtX3RydW5jYXRpb247CisgICAgfSgpOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgbV9zdGFy
dCwKKyAgICAgICAgbV9sZW4sCisgICAgICAgIGFkZGl0aW9uYWxMZW5ndGhBdEVuZCwKKyAgICAg
ICAgdHJ1bmNhdGlvbgorICAgIH07CiB9CiAKIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
IExlZ2FjeUlubGluZVRleHRCb3g6OmNsYW1wZWRTdGFydEVuZEZvclN0YXRlKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9u
U3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkKLSAgICAgICAgcmV0dXJuIHsgMCwgY2xhbXBlZE9mZnNl
dChtX3N0YXJ0ICsgbV9sZW4pIH07CisgICAgICAgIHJldHVybiB7IDAsIHNlbGVjdGFibGVSYW5n
ZSgpLmNsYW1wKG1fc3RhcnQgKyBtX2xlbikgfTsKICAgICAKICAgICBpZiAoc2VsZWN0aW9uU3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpCiAgICAgICAgIGVuZCA9
IHJlbmRlcmVyKCkudGV4dCgpLmxlbmd0aCgpOwogICAgIGVsc2UgaWYgKHNlbGVjdGlvblN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCkKICAgICAgICAgc3RhcnQgPSAw
OwotICAgIHJldHVybiB7IGNsYW1wZWRPZmZzZXQoc3RhcnQpLCBjbGFtcGVkT2Zmc2V0KGVuZCkg
fTsKKyAgICByZXR1cm4gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAoc3RhcnQsIGVuZCk7CiB9CiAK
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVj
dGlvblN0YXJ0RW5kKCkgY29uc3QKQEAgLTcxOSw3ICs3MzAsNyBAQCBGbG9hdFJlY3QgTGVnYWN5
SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTWFya2Vk
VGV4dCYgbQogICAgIGF1dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOwogCiAgICAgLy8g
QXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxl
Y3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCi0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQg
fHwgbWFya2VkVGV4dC5lbmRPZmZzZXQgIT0gY2xhbXBlZE9mZnNldChlbmQoKSkpIHsKKyAgICBp
ZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0LmVuZE9mZnNldCAhPSBzZWxl
Y3RhYmxlUmFuZ2UoKS5jbGFtcChlbmQoKSkpIHsKICAgICAgICAgVGV4dFJ1biBydW4gPSBjcmVh
dGVUZXh0UnVuKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJl
Y3QoMCwgeSwgMCwgaGVpZ2h0KTsKICAgICAgICAgbGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1h
cmtlZFRleHQuZW5kT2Zmc2V0KTsKQEAgLTc3MCw4ICs3ODEsMTAgQEAgVmVjdG9yPE1hcmtlZFRl
eHQ+IExlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250
ZW50KCkKIHsKICAgICB1c2luZyBEcmFnZ2VuZENvbnRlbnRSYW5nZSA9IHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+OwogICAgIGF1dG8gZHJhZ2dlZENvbnRlbnRSYW5nZXMgPSByZW5kZXJl
cigpLmRyYWdnZWRDb250ZW50UmFuZ2VzQmV0d2Vlbk9mZnNldHMobV9zdGFydCwgbV9zdGFydCAr
IG1fbGVuKTsKKwogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiByZXN1bHQgPSBkcmFnZ2VkQ29udGVu
dFJhbmdlcy5tYXAoW3RoaXNdIChjb25zdCBEcmFnZ2VuZENvbnRlbnRSYW5nZSYgcmFuZ2UpIC0+
IE1hcmtlZFRleHQgewotICAgICAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0KHJhbmdlLmZpcnN0
KSwgY2xhbXBlZE9mZnNldChyYW5nZS5zZWNvbmQpLCBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVu
dCB9OworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJs
ZVJhbmdlKCkuY2xhbXAocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7CisgICAgICAgIHJldHVy
biB7IGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQg
fTsKICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODY1LDkgKzg3OCwxMSBAQCBW
ZWN0b3I8TWFya2VkVGV4dD4gTGVnYWN5SW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRz
Rm9yRG9jdW1lbnRNYXJrZXJzKFRleAogICAgICAgICAvLyBGSVhNRTogU2VlIDxyZGFyOi8vcHJv
YmxlbS84OTMzMzUyPi4gQWxzbywgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1ndWFy
ZC4KICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlczoKICNlbmRpZgotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6
Ci0gICAgICAgICAgICBtYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQoeyBjbGFtcGVkT2Zmc2V0
KG1hcmtlci0+c3RhcnRPZmZzZXQoKSksIGNsYW1wZWRPZmZzZXQobWFya2VyLT5lbmRPZmZzZXQo
KSksIG1hcmtlZFRleHRUeXBlRm9yTWFya2VyVHlwZShtYXJrZXItPnR5cGUoKSksIG1hcmtlciB9
KTsKKyAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOiB7CisgICAgICAgICAg
ICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xh
bXAobWFya2VyLT5zdGFydE9mZnNldCgpLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgIG1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZCh7IGNsYW1wZWRTdGFydCwgY2xhbXBlZEVu
ZCwgbWFya2VkVGV4dFR5cGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSwgbWFya2VyIH0p
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pCkBAIC0xMTAxLDggKzExMTYsMTAgQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdAogCiB2b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25C
YWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4pCiB7CisgICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSB0aGlzLT5zZWxlY3RhYmxlUmFuZ2Uo
KTsKKwogICAgIGlmICghcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uVXNl
c0N1c3RvbUhpZ2hsaWdodHMoKSkgewotICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5k
KHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlvbkhpZ2hsaWdodDo6ZGVmYXVsdENvbXBv
c2l0aW9uRmlsbENvbG9yLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3Io
KS5jb21wb3NpdGlvblN0YXJ0KCkpLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5l
ZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7CisgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIHNlbGVjdGFibGVSYW5nZS5jbGFtcChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTExMTMsNyArMTEzMCw4IEBAIHZvaWQgTGVnYWN5SW5saW5l
VGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0CiAgICAgICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gZW5kKCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKHBhaW50
SW5mbywgYm94T3JpZ2luLCBoaWdobGlnaHQuY29sb3IsIGNsYW1wZWRPZmZzZXQoaGlnaGxpZ2h0
LnN0YXJ0T2Zmc2V0KSwgY2xhbXBlZE9mZnNldChoaWdobGlnaHQuZW5kT2Zmc2V0KSwgTWFya2Vk
VGV4dEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7CisgICAgICAgIGF1dG8gW2NsYW1wZWRTdGFy
dCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zm
c2V0LCBoaWdobGlnaHQuZW5kT2Zmc2V0KTsKKyAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dy
b3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkU3RhcnQs
IGNsYW1wZWRFbmQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwogCiAgICAg
ICAgIGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0ID4gZW5kKCkpCiAgICAgICAgICAgICBicmVhazsK
QEAgLTEyNDMsOSArMTI2MSw5IEBAIGZsb2F0IExlZ2FjeUlubGluZVRleHRCb3g6OnBvc2l0aW9u
Rm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7
CiAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICBzdGFydE9mZnNl
dCA9IDA7Ci0gICAgICAgIGVuZE9mZnNldCA9IGNsYW1wZWRPZmZzZXQob2Zmc2V0KTsKKyAgICAg
ICAgZW5kT2Zmc2V0ID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KTsKICAgICB9IGVs
c2UgewotICAgICAgICBzdGFydE9mZnNldCA9IGNsYW1wZWRPZmZzZXQob2Zmc2V0KTsKKyAgICAg
ICAgc3RhcnRPZmZzZXQgPSBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQpOwogICAgICAg
ICBlbmRPZmZzZXQgPSBtX2xlbjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCmluZGV4IGU1NzA2Njg2NjI5Ni4uNWFmYmI3NTNhYTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgK
QEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgVGV4dFBhaW50ZXI7CiBzdHJ1Y3QgQ29tcG9zaXRpb25V
bmRlcmxpbmU7CiBzdHJ1Y3QgTWFya2VkVGV4dDsKIHN0cnVjdCBTdHlsZWRNYXJrZWRUZXh0Owor
c3RydWN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2U7CiBzdHJ1Y3QgVGV4dFBhaW50U3R5bGU7CiAK
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBVU0hSVF9NQVg7CkBAIC03Nyw2
ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3RydW5jYXRpb247IH0KIAorICAgIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2Ug
c2VsZWN0YWJsZVJhbmdlKCkgY29uc3Q7CisKICAgICB2b2lkIG1hcmtEaXJ0eShib29sIGRpcnR5
ID0gdHJ1ZSkgZmluYWw7CiAKICAgICB1c2luZyBMZWdhY3lJbmxpbmVCb3g6Omhhc0h5cGhlbjsK
QEAgLTExOCw3ICsxMjEsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlv
dXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5k
UG9zKSBjb25zdDsKLSAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwg
dW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgaXNTZWxlY3RhYmxlKHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKSBjb25zdDsKICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0OwogICAg
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGhpZ2hsaWdodFN0YXJ0RW5kKEhpZ2hsaWdo
dERhdGEmKSBjb25zdDsKIApAQCAtMTI2LDggKzEyOSw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwogICAgIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZTsKIAotICAgIHVuc2lnbmVkIGNsYW1wZWRPZmZzZXQodW5zaWduZWQp
IGNvbnN0OwotCiBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlTGluZSgpIGZpbmFsOwogICAgIHZv
aWQgZXh0cmFjdExpbmUoKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAKaW5kZXggZWY5ODFhYTQ1MDY4Li40ODk3NWI3ZWNmYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zMjU5LDcgKzMy
NTksNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVu
ZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5bwogICAgICAgICAgICAgY2FzZSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRleHRCb3guaXNTZWxlY3RlZChzdGFydCwgZW5k
KSkKKyAgICAgICAgICAgIGlmICh0ZXh0Qm94LmlzU2VsZWN0YWJsZShzdGFydCwgZW5kKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFNlbGVjdGFi
bGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hTZWxlY3RhYmxlUmFu
Z2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBkYzM5YWY2Nzky
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94U2Vs
ZWN0YWJsZVJhbmdlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPG9wdGlvbmFsPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFydDsKKyAg
ICBjb25zdCB1bnNpZ25lZCBsZW5ndGg7CisgICAgY29uc3QgdW5zaWduZWQgYWRkaXRpb25hbExl
bmd0aEF0RW5kIHsgMCB9OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRydW5j
YXRpb24geyB9OworCisgICAgdW5zaWduZWQgY2xhbXAodW5zaWduZWQgb2Zmc2V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjpjbGFtcChvZmZzZXQsIHN0
YXJ0LCBzdGFydCArIGxlbmd0aCkgLSBzdGFydDsKKworICAgICAgICBpZiAodHJ1bmNhdGlvbikK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oY2xhbXBlZE9mZnNldCwgKnRy
dW5jYXRpb24pOworCisgICAgICAgIGlmIChjbGFtcGVkT2Zmc2V0ID09IGxlbmd0aCkKKyAgICAg
ICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gYWRkaXRpb25hbExlbmd0aEF0RW5kOworCisgICAgICAg
IHJldHVybiBjbGFtcGVkT2Zmc2V0OworICAgIH0KKworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+IGNsYW1wKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBjbGFtcChzdGFydE9mZnNldCksIGNsYW1w
KGVuZE9mZnNldCkgfTsKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdHModW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBjbGFtcChzdGFydE9mZnNldCkgPCBjbGFtcChlbmRPZmZzZXQpOworICAgIH0KK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CmluZGV4IGU1Njk5MWY3MGQwMy4uZDMwMzNkMTVmNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
Q2FjaGUuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiVGV4dEJv
eFNlbGVjdGFibGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTM0LDExICsxMzUsMTEgQEAgRmxvYXRSZWN0
IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZH
VGV4dEZyYWdtZW50JgogICAgIHJldHVybiBzbmFwcGVkU2VsZWN0aW9uUmVjdDsKIH0KIAotTGF5
b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0CitMYXlvdXRSZWN0IFNWR0lu
bGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kKSBjb25zdAogewotICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KHN0YXJ0UG9z
aXRpb24pOwotICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChlbmRQb3NpdGlvbik7Ci0g
ICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCisgICAgYXV0byBbY2xhbXBlZFN0
YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHN0YXJ0LCBlbmQpOwor
CisgICAgaWYgKGNsYW1wZWRTdGFydCA+PSBjbGFtcGVkRW5kKQogICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOwogCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLnN0eWxlKCk7CkBAIC0x
NTIsOCArMTUzLDggQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlv
blJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewogICAgICAgICBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkpOwogCi0gICAgICAg
IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAgICAgIGZyYWdtZW50
RW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKKyAgICAgICAgZnJhZ21lbnRTdGFydFBvc2l0aW9u
ID0gY2xhbXBlZFN0YXJ0OworICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gY2xhbXBlZEVu
ZDsKICAgICAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24p
KQogICAgICAgICAgICAgY29udGludWU7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>