<?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>211633</bug_id>
          
          <creation_ts>2020-05-08 11:06:15 -0700</creation_ts>
          <short_desc>bmalloc should have per-cpu locking mechanism</short_desc>
          <delta_ts>2020-06-02 06:57:12 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>211809</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650690</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-08 11:06:15 -0700</bug_when>
    <thetext>We are taking a global lock easily. We should not.
Talked with Phil, and current plan is introducing per-cpu locking mechanism.
Each SmallPage have Mutex*, which could point to per-cpu lock or SmallPage&apos;s fine-grained lock.
We switch them based on contention and keep deallocation fast without taking a global lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650700</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-08 12:00:36 -0700</bug_when>
    <thetext>This is awesome. I think this will help wasm compile times a lot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653862</commentid>
    <comment_count>2</comment_count>
      <attachid>399696</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-18 19:08:45 -0700</bug_when>
    <thetext>Created attachment 399696
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653865</commentid>
    <comment_count>3</comment_count>
      <attachid>399698</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-18 19:35:34 -0700</bug_when>
    <thetext>Created attachment 399698
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653932</commentid>
    <comment_count>4</comment_count>
      <attachid>399717</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-19 00:25:33 -0700</bug_when>
    <thetext>Created attachment 399717
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654701</commentid>
    <comment_count>5</comment_count>
      <attachid>399906</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-20 16:10:59 -0700</bug_when>
    <thetext>Created attachment 399906
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654756</commentid>
    <comment_count>6</comment_count>
      <attachid>399919</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-20 17:36:59 -0700</bug_when>
    <thetext>Created attachment 399919
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654761</commentid>
    <comment_count>7</comment_count>
      <attachid>399920</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-20 18:15:12 -0700</bug_when>
    <thetext>Created attachment 399920
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654764</commentid>
    <comment_count>8</comment_count>
      <attachid>399921</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-20 18:26:26 -0700</bug_when>
    <thetext>Created attachment 399921
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656115</commentid>
    <comment_count>9</comment_count>
      <attachid>400264</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-26 12:00:04 -0700</bug_when>
    <thetext>Created attachment 400264
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658275</commentid>
    <comment_count>10</comment_count>
      <attachid>400814</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-02 06:57:12 -0700</bug_when>
    <thetext>Created attachment 400814
Patch

WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399696</attachid>
            <date>2020-05-18 19:08:45 -0700</date>
            <delta_ts>2020-05-18 19:35:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200518190844.patch</filename>
            <type>text/plain</type>
            <size>40297</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uNmFmMDk1ZjUxNzc2ODVmYWY5ZjI1NjI1NTUyZTQz
OTMwY2IzNzhjOSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIwLTA1LTE4ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYyBzaG91bGQg
aGF2ZSBwZXItY3B1IGxvY2tpbmcgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIGJtYWxs
b2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dD
YXNlKToKKyAgICAgICAgKiBibWFsbG9jL0JDb21waWxlci5oOgorICAgICAgICAqIGJtYWxsb2Mv
Q1BVLmNwcDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4K
KyAgICAgICAgKGJtYWxsb2M6OkNQVTo6Q1BVKToKKyAgICAgICAgKiBibWFsbG9jL0NQVS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAo
Ym1hbGxvYzo6eDg2X3JkdHNjcCk6CisgICAgICAgIChibWFsbG9jOjpDUFU6OmN1cnJlbnQpOgor
ICAgICAgICAoYm1hbGxvYzo6Q1BVOjpjdXJyZW50SW5kZXgpOgorICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpDaHVuayk6CisgICAgICAgICogYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2Nh
dmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cp
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6Cisg
ICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OmxpbmVDYWNoZSk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9j
YXRlTG9ja2VkU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVT
bWFsbExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5n
ZXNCeU1ldGFkYXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlPYmplY3QpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2MvTGlzdC5oOgorICAgICAgICAo
Ym1hbGxvYzo6TGlzdE5vZGU6OmlzT25MaXN0IGNvbnN0KToKKyAgICAgICAgKiBibWFsbG9jL011
dGV4Lmg6CisgICAgICAgIChibWFsbG9jOjpNdXRleDo6aXNMb2NrZWQgY29uc3QpOgorICAgICAg
ICAoYm1hbGxvYzo6bG9ja1N3aXRjaCk6CisgICAgICAgICogYm1hbGxvYy9TbWFsbExpbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxMaW5lOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpkZXJlZik6
CisgICAgICAgICogYm1hbGxvYy9TbWFsbFBhZ2UuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpoYXNGcmVlTGlu
ZXMgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpzZXRIYXNGcmVlTGluZXMp
OgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0SGFzRnJlZUxpbmVzKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24pOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0aWFsaXplKToKKyAgICAgICAg
KGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6dW5sb2NrKToK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c3dpdGNoTG9jayk6CisgICAgICAgIChibWFs
bG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdl
OjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpkZXJlZik6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9j
L1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlN0YXRpY1BlclByb2Nlc3M6
OmdldCk6CisKIDIwMjAtMDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbYm1hbGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9ibWFs
bG9jL0NNYWtlTGlzdHMudHh0CmluZGV4IDNkOTkwZWI5YmE4ZDM4OWM0NjQzZDE4MDBmNTAzNTk4
NGJkN2E4NmQuLjFmOGZjYTBiZWVjOTIzMDc2YjkxMGI3MDE4ODcyZmIyZTE5OWE1NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9ibWFsbG9j
L0NNYWtlTGlzdHMudHh0CkBAIC04LDYgKzgsNyBAQCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAg
Ym1hbGxvYy9BbGxJc29IZWFwcy5jcHAKICAgICBibWFsbG9jL0FsbG9jYXRvci5jcHAKICAgICBi
bWFsbG9jL0F2YWlsYWJsZU1lbW9yeS5jcHAKKyAgICBibWFsbG9jL0NQVS5jcHAKICAgICBibWFs
bG9jL0NhY2hlLmNwcAogICAgIGJtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAogICAgIGJtYWxsb2Mv
RGVhbGxvY2F0b3IuY3BwCkBAIC01Miw2ICs1Myw3IEBAIHNldChibWFsbG9jX1BVQkxJQ19IRUFE
RVJTCiAgICAgYm1hbGxvYy9CdWxrRGVjb21taXQuaAogICAgIGJtYWxsb2MvQnVtcEFsbG9jYXRv
ci5oCiAgICAgYm1hbGxvYy9CdW1wUmFuZ2UuaAorICAgIGJtYWxsb2MvQ1BVLmgKICAgICBibWFs
bG9jL0NhY2hlLmgKICAgICBibWFsbG9jL0NodW5rLmgKICAgICBibWFsbG9jL0NyeXB0b1JhbmRv
bS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNWMyYzNkNTZkOTc1OWNjMTExZGIzYjNmOTRhZGQzNDg1Yzk2ZGM1YS4uYTQ2Y2Uw
NjU5MzAyODliNjc2YjdmNjVkMzRlOGM4YWM0NGU0NjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM5LDYgKzEzOSw4IEBA
CiAJCURFOEIxM0IzMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERThCMTNCMjIxQ0M1RDlGMDBBNjNGQ0Qg
LyogQlZNVGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzMUU3NDgwMjIzOENBNUMwMDVEMDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzFFNzQ3RjIyMzhD
QTVCMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMjhEODREMjNDRUIzODkwMDU0NUIxOCAvKiBQ
YWNrZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MjhEODRDMjNDRUIzODkwMDU0NUIxOCAvKiBQYWNrZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzUyMzkwMjI0NzM0QkU0MDAzQTEzQ0YgLyog
Q1BVLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NTIzOTAxMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuY3BwICovOyB9OworCQlFMzUyMzkwMzI0NzM0
QkU5MDAzQTEzQ0YgLyogQ1BVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM3OEE5REYyNDZCNjg3MjAw
MjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc4QTlERTI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlw
ZVRhYmxlLmNwcCAqLzsgfTsKIAkJRTM3OEE5RTAyNDZCNjg3NTAwMjlDMkJCIC8qIE9iamVjdFR5
cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM3OEE5REQyNDZCNjg2QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzQTQxM0M5MjI2MDYxMTQw
MDM3RjQ3MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBNDEzQzgyMjYwNjExNDAwMzdGNDcwIC8qIElzb1No
YXJlZFBhZ2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI5NSw2ICsyOTcsOCBAQAogCQlERThCMTNCMjIxQ0M1RDlGMDBBNjNGQ0Qg
LyogQlZNVGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCVk1UYWdzLmg7IHBhdGggPSBibWFsbG9jL0JW
TVRhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxRTc0N0YyMjM4Q0E1QjAw
NUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3RhdGljUGVyUHJvY2Vzcy5oOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjhEODRDMjNDRUIzODkwMDU0NUIx
OCAvKiBQYWNrZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFja2VkLmg7
IHBhdGggPSBibWFsbG9jL1BhY2tlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENQVS5oOyBw
YXRoID0gYm1hbGxvYy9DUFUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1MjM5
MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDUFUuY3Bw
OyBwYXRoID0gYm1hbGxvYy9DUFUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
Mzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9iamVjdFR5cGVUYWJsZS5oOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM3OEE5REUyNDZCNjg2QTAwMjlDMkJCIC8q
IE9iamVjdFR5cGVUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlVGFibGUu
Y3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0E0MTNDODIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSXNvU2hhcmVkUGFnZUlu
bGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvSXNvU2hhcmVkUGFnZUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3OSw2ICs0ODMsOCBAQAogCQkJCTc5Mzk4ODVBMjA3NkVF
QjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywKIAkJCQkxNDBGQTAwMjE5Q0U0MjlDMDBG
RkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3REM2RTIxQ0E1QjcwQjAwNzI0RThEIC8q
IENodW5rLmggKi8sCisJCQkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8s
CisJCQkJRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5oICovLAogCQkJCTE0MkI0NDM0
MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwICovLAogCQkJCTE0MkI0NDM1MUUyODM5
RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAqLywKIAkJCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIz
NUQgLyogRW52aXJvbm1lbnQuY3BwICovLApAQCAtNTkzLDYgKzU5OSw3IEBACiAJCQkJREU4QjEz
QjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3
ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3REM2
RTMxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzUyMzkw
MzI0NzM0QkU5MDAzQTEzQ0YgLyogQ1BVLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzRTFG
ODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERE
Nzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MkI0NDM3MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCBpbiBIZWFkZXJzICovLApA
QCAtNzY0LDYgKzc3MSw3IEBACiAJCQkJNjU5OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWls
YWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjUxNjc3NDFGQUQ2ODVDMDA4MjM2
QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNDE4RUEzOTdCMDA4
QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1MjM5MDIyNDczNEJFNDAw
M0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0QjkzRjFGODk3MTNFMDBC
OTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM1MThF
QTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJC
NDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCmluZGV4IDUwNmQyZDg3NmFlZDMyMDZkZTg5MjMw
Zjc1Mzc4ZDhhYmVmZDMwM2MuLjJlN2Q4YjE3MTgyMzNmNGYyYTg2OGIyZjllOTk5YzExYzI2MWJl
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKQEAgLTEyMiw5ICsxMjIsOCBA
QCBCTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1w
QWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpegogewogICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFu
Z2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAKLSAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2Jq
ZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBz
aXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNh
Y2hlKGxvY2spLCBhY3Rpb24pOworICAgIG1fZGVhbGxvY2F0b3IucHJvY2Vzc09iamVjdExvZygp
OworICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplQ2xhc3MsIGFsbG9jYXRv
ciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKCksIGFjdGlvbik7CiB9
CiAKIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9y
JiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaCBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKaW5kZXggY2RjNDdhYzlhMmVjNzBhZjdkNWZlNDhjZDc4
MWRkZmJkMGNjNTA0YS4uZjNkMDc0MzdmZTNlNjlmZDgwODE5NzYwZGI5ZWE2ZjBlNjM5ZmQ1MyAx
MDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaAorKysgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oCkBAIC03OSwzICs3OSwyMSBAQAogI2lmICFk
ZWZpbmVkKEJGQUxMVEhST1VHSCkKICNkZWZpbmUgQkZBTExUSFJPVUdICiAjZW5kaWYKKworLyog
QkxJS0VMWSBhbmQgQlVOTElLRUxZICovCisKKyNpZiAhZGVmaW5lZChCTElLRUxZKSAmJiBCQ09N
UElMRVIoR0NDX0NPTVBBVElCTEUpCisjZGVmaW5lIEJMSUtFTFkoeCkgX19idWlsdGluX2V4cGVj
dCghISh4KSwgMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQkxJS0VMWSkKKyNkZWZpbmUgQkxJ
S0VMWSh4KSAoeCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVOTElLRUxZKSAmJiBCQ09NUElM
RVIoR0NDX0NPTVBBVElCTEUpCisjZGVmaW5lIEJVTkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0
KCEhKHgpLCAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVU5MSUtFTFkpCisjZGVmaW5lIEJV
TkxJS0VMWSh4KSAoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DUFUuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
YTkzMWU2NTBlZTc1N2RhZmQyOWNkM2M1ZWMyOGM4NDlmNDQzNjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDUFUuaCIK
KworbmFtZXNwYWNlIGJtYWxsb2MgeworbmFtZXNwYWNlIENQVUludGVybmFsIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCitERUZJTkVfU1RBVElDX1BF
Ul9QUk9DRVNTX1NUT1JBR0UoQ1BVKTsKKworQ1BVOjpDUFUoY29uc3QgTG9ja0hvbGRlciYpCit7
CisjaWYgQk9TKERBUldJTikKKyAgICAvLyB1aW50OF90IG51bWJlck9mUGh5c2ljYWxDb3JlcyA9
ICoodWludDhfdCAqKSh1aW50cHRyX3QpX0NPTU1fUEFHRV9QSFlTSUNBTF9DUFVTOworICAgIC8v
IHVpbnQ4X3QgbnVtYmVyT2ZMb2dpY2FsQ29yZXMgPSAqKHVpbnQ4X3QgKikodWludHB0cl90KV9D
T01NX1BBR0VfTE9HSUNBTF9DUFVTOworICAgIC8vIEJBU1NFUlQobnVtYmVyT2ZMb2dpY2FsQ29y
ZXMgJSBudW1iZXJPZlBoeXNpY2FsQ29yZXMgPT0gMCk7CisgICAgLy8gQkFTU0VSVChpc1Bvd2Vy
T2ZUd28obnVtYmVyT2ZMb2dpY2FsQ29yZXMgLyBudW1iZXJPZlBoeXNpY2FsQ29yZXMpKTsKKyAg
ICAvLyBtX3NoaWZ0QW1vdW50ID0gZ2V0TFNCU2V0Tm9uWmVyb0NvbnN0ZXhwcihudW1iZXJPZkxv
Z2ljYWxDb3JlcyAvIG51bWJlck9mUGh5c2ljYWxDb3Jlcyk7CisgICAgLy8gaWYgKENQVUludGVy
bmFsOjp2ZXJib3NlKSB7CisgICAgLy8gICAgIHByaW50ZigiJXUgLyAldSAvICV1XG4iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obnVtYmVyT2ZQaHlzaWNhbENvcmVzKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bWJlck9mTG9naWNhbENvcmVzKSwgbV9zaGlmdEFtb3VudCk7CisgICAgLy8gfQor
ICAgIGlmIChDUFVJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgcHJpbnRmKCIldSIsIGN1cnJl
bnRJbmRleCgpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DUFUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NzdjYmM4ZjdmNzcxNzA4MDM1ZTgwODQ0ZjU1MTYzZmIyOGVi
NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNsdWRlICJNdXRl
eC5oIgorI2luY2x1ZGUgIlN0YXRpY1BlclByb2Nlc3MuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIK
KyNpbmNsdWRlIDxhcnJheT4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCisjaWYgQkNQVShYODYp
IHx8IEJDUFUoWDg2XzY0KQoraW5saW5lIHVpbnQ2NF90IHg4Nl9yZHRzY3AodWludDMyX3QmIGF1
eCkKK3sKKyAgICB1aW50NjRfdCByYXggPSAwOworICAgIHVpbnQ2NF90IHJkeCA9IDA7CisgICAg
YXNtIHZvbGF0aWxlKCJyZHRzY3AiIDogIj1hIiAocmF4KSwgIj1kIiAocmR4KSwgIj1jIiAoYXV4
KSA6IDogKTsKKyAgICByZXR1cm4gKHJkeCA8PCAzMikgKyByYXg7Cit9CisjZW5kaWYKKworY2xh
c3MgQ1BVIGZpbmFsIDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8Q1BVPiB7CitwdWJsaWM6Cisg
ICAgQ1BVKGNvbnN0IExvY2tIb2xkZXImKTsKKworICAgIE11dGV4KiBjdXJyZW50KCk7CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgY3VycmVudEluZGV4KCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjph
cnJheTxNdXRleCwgMjU2PiBtX211dGV4IHsgfTsKKyAgICAvKiB1bnNpZ25lZCBtX3NoaWZ0QW1v
dW50IHsgMCB9OyAqLworfTsKK0RFQ0xBUkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQ1BV
KTsKKworaW5saW5lIE11dGV4KiBDUFU6OmN1cnJlbnQoKQoreworICAgIHJldHVybiAmbV9tdXRl
eFtjdXJyZW50SW5kZXgoKV07Cit9CisKK2lubGluZSB1bnNpZ25lZCBDUFU6OmN1cnJlbnRJbmRl
eCgpCit7CisjaWYgQk9TKERBUldJTikKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZfNjQpCisg
ICAgc3RydWN0IHsgdWludHB0cl90IHAxLCBwMjsgfSBwOworICAgIGFzbSB2b2xhdGlsZSgic2lk
dCAlW3BdIiA6IFtwXSAiPSZtIiAocCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocC5wMSAmIDB4ZmYpOworI2VuZGlmCisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAppbmRleCAyMWZiYjhmZTc5OGRkOTc4MzVhMzhjY2Y4
ZjFhYjAwZTNkYjI3NDMyLi4zNDhjMjVkZTgzNmEzZDA2MTdiZDUyZmYwNmZmYTc1MTFjZWVmZmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCkBAIC05Myw5ICs5Myw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2hQYWdlKENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VT
aXplLCBGdW5jCiBpbmxpbmUgQ2h1bms6OkNodW5rKHNpemVfdCBwYWdlU2l6ZSkKIHsKICAgICBz
aXplX3Qgc21hbGxQYWdlQ291bnQgPSBwYWdlU2l6ZSAvIHNtYWxsUGFnZVNpemU7Ci0gICAgZm9y
RWFjaFBhZ2UodGhpcywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICBmb3JF
YWNoUGFnZSh0aGlzLCBwYWdlU2l6ZSwgWyZdKFNtYWxsUGFnZSogcGFnZXMpIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFBhZ2VDb3VudDsgKytpKQotICAgICAgICAgICAg
cGFnZVtpXS5zZXRTbGlkZShpKTsKKyAgICAgICAgICAgIHBhZ2VzW2ldLmluaXRpYWxpemUoaSk7
CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxv
Y2F0b3IuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXgg
N2QxZTM0ZTk3YTc3OTJkOGZkMzA2YWUyMDVkNmY3MDEyM2FjOGI0MS4uOTVhNTljMjczY2EwOWUx
OGRlNDg5ZGFlNzc1Zjk0NTI5OWFkZDI1YyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5jcHAKQEAgLTUwLDE2ICs1MCwxNiBAQCBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkK
ICAgICAKIHZvaWQgRGVhbGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBVbmlxdWVMb2NrSG9s
ZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0KLSAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwot
ICAgIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGxvY2ssIGxpbmVDYWNoZShsb2NrKSk7Cisg
ICAgcHJvY2Vzc09iamVjdExvZygpOworICAgIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGxp
bmVDYWNoZSgpKTsKIH0KIAotdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyhVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrKQordm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZygp
CiB7CisgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKICAgICBmb3IgKE9iamVjdCBvYmpl
Y3QgOiBtX29iamVjdExvZykKLSAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKGxvY2ssIG9i
amVjdCwgbGluZUNhY2hlKGxvY2spKTsKKyAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKCZo
ZWxkTG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUoKSk7CisgICAgbG9ja1N3aXRjaCgmaGVsZExvY2ss
IG51bGxwdHIpOwogICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7CiB9CiAKQEAgLTc0LDEwICs3NCw4
IEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1f
b2JqZWN0TG9nLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhl
YXA6Om11dGV4KCkpOwotICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIH0KKyAg
ICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpCisgICAg
ICAgIHByb2Nlc3NPYmplY3RMb2coKTsKIAogICAgIG1fb2JqZWN0TG9nLnB1c2gob2JqZWN0KTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAppbmRleCBmMTRmZWVhNWNjMGI1NjM5
YmZmY2FhNWRiZjdlMTgxYzJiNWMyZmUzLi5kZWVjMjYwOTBhZDUzZWZlZjY4Yzc0M2FkMDdiZmU4
ZjM3M2RkZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCkBAIC00Niw5ICs0
Niw5IEBAIGNsYXNzIERlYWxsb2NhdG9yIHsKICAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwog
ICAgIHZvaWQgc2NhdmVuZ2UoKTsKICAgICAKLSAgICB2b2lkIHByb2Nlc3NPYmplY3RMb2coVW5p
cXVlTG9ja0hvbGRlciYpOworICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZygpOwogICAgIAotICAg
IExpbmVDYWNoZSYgbGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX2xpbmVD
YWNoZTsgfQorICAgIExpbmVDYWNoZSYgbGluZUNhY2hlKCkgeyByZXR1cm4gbV9saW5lQ2FjaGU7
IH0KIAogcHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAppbmRleCA0OTRhMmI1NGNjYzEzOGE0ZGFkMDViZjY2ODE2YzM2Mzdm
NTRlNzE0Li5jOGE4OWM5YmI4ZmY1ZmFhNTNiN2RhOTI3YjFlYWFjMDcwZDk1YTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBdmFpbGFibGVN
ZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21taXQuaCIKICNpbmNsdWRlICJCdW1wQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJD
cnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKQEAgLTE4NSw4ICsxODYsOSBA
QCB2b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImIGxv
Y2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taQogfQogI2VuZGlmCiAKLXZvaWQgSGVhcDo6ZGVhbGxv
Y2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2
b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7Cisg
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwogICAgIGZvciAoYXV0byYg
bGlzdCA6IGxpbmVDYWNoZSkgewogICAgICAgICB3aGlsZSAoIWxpc3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAmbGluZUNhY2hlWzBdOwpAQCAt
MjIxLDcgKzIyMyw4IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAjaWYgIUJVU0UoUEFSVElB
TF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgp
OwogI2VuZGlmCi0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7
CisgICAgICAgICAgICBwYWdlLT5pbml0SGFzRnJlZUxpbmVzKCk7CisgICAgICAgICAgICBwYWdl
LT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKICAgICAgICAgICAgIGNodW5r
LT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwogICAgICAgICAgICAgYWNjb3VudGVkSW5GcmVlYWJs
ZSArPSBwYWdlU2l6ZTsKICAgICAgICAgfSk7CkBAIC0yNzAsMjEgKzI3MywyOCBAQCB2b2lkIEhl
YXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIENodW5rKiBj
aHVuaywgc2l6ZV90IHBhZwogICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBz
aXplLCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKIH0KIAotU21hbGxQ
YWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXpl
X3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24p
CitTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVfdCBzaXplQ2xh
c3MsIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBS
RUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIAotICAgIGlmICghbGlu
ZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGluZUNhY2hlW3Np
emVDbGFzc10ucG9wRnJvbnQoKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBTbWFs
bFBhZ2UqIHsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAg
ICBpZiAoIWxpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0
byogcGFnZSA9IGxpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAgICBw
YWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAgICAgICAgcmV0
dXJuIHBhZ2U7CisgICAgICAgIH0KIAotICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250
KCk7CisgICAgICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHBhZ2UgPSBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7
CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0KKworICAgICAgICBtX3NjYXZlbmdl
ci0+ZGlkU3RhcnRHcm93aW5nKCk7CiAKLSAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5n
KCk7Ci0gICAgCi0gICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CiAg
ICAgICAgIHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3Moc2l6ZUNsYXNz
KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0
eSgpKQogICAgICAgICAgICAgYWxsb2NhdGVTbWFsbENodW5rKGxvY2ssIHBhZ2VDbGFzcywgYWN0
aW9uKTsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsICYm
IG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0eSgpKQpAQCAtMzE0LDM4ICszMjQsNTAgQEAg
U21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2Nr
LCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW4KICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAg
ICAgICBwYWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKICNlbmRpZgotCisgICAgICAg
IHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24odHJ1ZSk7CiAgICAgICAgIHJldHVy
biBwYWdlOwogICAgIH0oKTsKKwogICAgIGlmICghcGFnZSkgewogICAgICAgICBCQVNTRVJUKGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCisgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICBwYWdlLT5s
b2NrQW5kVHJ5VG9UYWtlQmlhcygmaGVsZExvY2ssIENQVTo6Z2V0KCktPmN1cnJlbnQoKSk7CiAg
ICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7CiAgICAgcmV0dXJuIHBhZ2U7CiB9CiAK
LXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBP
YmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsTGluZShTbWFsbFBhZ2UqIHBhZ2UsIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGlu
ZUNhY2hlKQogewotICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KGxvY2spKTsK
LSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwotICAgIHBhZ2UtPmRlcmVmKGxv
Y2spOwotCi0gICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpIHsKLSAgICAgICAgcGFn
ZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwotICAgICAgICBsaW5lQ2FjaGVbcGFnZS0+
c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAgQlVOVVNFRChvYmplY3QpOworICAgIEJBU1NF
UlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKTsKKyAgICBwYWdlLT5kZXJlZigpOwor
CisgICAgaWYgKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKSB7CisgICAgICAgIHBhZ2UtPnNldEhhc0Zy
ZWVMaW5lcyh0cnVlKTsKKyAgICAgICAgaWYgKHBhZ2UtPnJlZkNvdW50KCkpIHsKKyAgICAgICAg
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKyAgICAgICAgICAgIC8vIFNvbWUg
ZnJlZSBsaW5lcyBleGlzdCwgYnV0IHRoZSBwYWdlIGlzIG5vdCBjaGFpbmVkIHRvIGFueSB0aHJl
YWQncyBMaW5lQ2FjaGUuCisgICAgICAgICAgICAvLyBMZXQncyBjaGFpbiBpdCB0byB0aGUgY3Vy
cmVudCBmcmVlaW5nIHRocmVhZCdzIExpbmVDYWNoZSBmb3IgcmV1c2luZy4KKyAgICAgICAgICAg
IGxpbmVDYWNoZVtwYWdlLT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwYWdlLT5yZWZDb3VudChsb2NrKSkK
KyAgICBpZiAocGFnZS0+cmVmQ291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVW5pcXVl
TG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworCisgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0Zv
ckFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHBhZ2VDbGFzcyA9
IG1fY29uc3RhbnRzLnBhZ2VDbGFzcyhwYWdlLT5zaXplQ2xhc3MoKSk7CiAKICAgICBtX2ZyZWVh
YmxlTWVtb3J5ICs9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4o
KSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CiAKLSAgICBMaXN0PFNtYWxsUGFnZT46OnJlbW92ZShw
YWdlKTsgLy8gJ3BhZ2UnIG1heSBiZSBpbiBhbnkgdGhyZWFkJ3MgbGluZSBjYWNoZS4KLSAgICAK
ICAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOwogICAgIGlmIChjaHVuay0+ZnJl
ZVBhZ2VzKCkuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2go
Y2h1bmspOwpAQCAtMzY1LDI1ICszODcsMjUgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxM
aW5lKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYKICAg
ICBtX3NjYXZlbmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7CiB9CiAKLXZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAotICAgIFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2Nh
dG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2FjaGUmIGxpbmVDYWNo
ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCit2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlNZXRhZGF0YShzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3Is
IEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVy
ZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFT
U0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAgU21hbGxQYWdlKiBwYWdlID0g
YWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUsIGFjdGlvbik7Cisg
ICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6ZUNsYXNzLCBs
aW5lQ2FjaGUsIGFjdGlvbik7CiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgQkFTU0VSVCghcGFnZS0+aXNP
bkxpc3QoKSk7CisKICAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKLSAgICBC
QVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7CisgICAgQkFTU0VSVChwYWdlLT5oYXNG
cmVlTGluZXMoKSk7CiAKICAgICBhdXRvIGZpbmRTbWFsbEJ1bXBSYW5nZSA9IFsmXShzaXplX3Qm
IGxpbmVOdW1iZXIpIHsKICAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbV9jb25zdGFudHMu
c21hbGxMaW5lQ291bnQoKTsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICBpZiAoIWxpbmVz
W2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKSB7CisgICAgICAgICAgICBpZiAoIWxpbmVzW2xp
bmVOdW1iZXJdLnJlZkNvdW50KHBhZ2UpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fY29uc3Rh
bnRzLm9iamVjdENvdW50KHNpemVDbGFzcywgbGluZU51bWJlcikpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzk2LDcgKzQxOCw3IEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBvYmplY3RDb3VudCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKCA7IGxpbmVO
dW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyArK2xpbmVOdW1iZXIpIHsKLSAg
ICAgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAgICAgICAg
ICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgYXV0byBsaW5lT2JqZWN0Q291bnQgPSBtX2NvbnN0YW50
cy5vYmplY3RDb3VudChzaXplQ2xhc3MsIGxpbmVOdW1iZXIpOwpAQCAtNDA0LDggKzQyNiw4IEBA
IHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBvYmplY3RDb3VudCArPSBsaW5lT2JqZWN0
Q291bnQ7Ci0gICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU9iamVj
dENvdW50KTsKLSAgICAgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgICAgIGxpbmVz
W2xpbmVOdW1iZXJdLnJlZihwYWdlLCBsaW5lT2JqZWN0Q291bnQpOworICAgICAgICAgICAgcGFn
ZS0+cmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHsgYmVnaW4sIG9iamVjdENvdW50
IH07CiAgICAgfTsKQEAgLTQxMywxNSArNDM1LDI0IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAgIHNpemVfdCBsaW5lTnVtYmVyID0gMDsKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIGlmICghZmluZFNtYWxsQnVtcFJhbmdlKGxpbmVOdW1iZXIpKSB7
Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgZmFsc2UpOworICAgICAg
ICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGZhbHNlKTsKKyAgICAgICAgICAgIEJBU1NFUlQo
IXBhZ2UtPmlzT25MaXN0KCkpOwogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVy
ZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAg
ICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAg
ICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90
IGZpdCBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5n
ZUNhY2hlLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1
c2gocGFnZSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRl
ciBsb2NrKG11dGV4KCkpOworICAgICAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1
c2gocGFnZSk7CisgICAgICAgICAgICAgICAgQkFTU0VSVChwYWdlLT5pc09uTGlzdCgpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246
OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpOworICAgICAgICAgICAgcGFn
ZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdl
LT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC00MzMsMjUg
KzQ2NCwyNCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgK
ICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgK
LSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBB
bGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGlu
ZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQordm9pZCBIZWFwOjphbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0
b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIExpbmVDYWNoZSYgbGlu
ZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBCVU5VU0VEKGFjdGlvbik7CiAg
ICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAKICAgICBzaXpl
X3Qgc2l6ZSA9IGFsbG9jYXRvci5zaXplKCk7Ci0gICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2Nh
dGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUsIGFjdGlvbik7CisgICAgU21h
bGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6ZUNsYXNzLCBsaW5lQ2Fj
aGUsIGFjdGlvbik7CiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09
IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlz
TG9ja2VkKCkpOworICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOworICAgIEJBU1NFUlQo
cGFnZS0+aGFzRnJlZUxpbmVzKCkpOwogCiAgICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBb
Jl0oT2JqZWN0JiBpdCwgT2JqZWN0JiBlbmQpIHsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUg
PD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkgewotICAgICAgICAgICAgaWYgKCFpdC5saW5lKCktPnJl
ZkNvdW50KGxvY2spKQorICAgICAgICAgICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KHBhZ2Up
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQ2MSwxMiArNDkxLDEyIEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1
bXBSYW5nZXNCeU9iamVjdCgKICAgICAgICAgY2hhciogYmVnaW4gPSBpdC5hZGRyZXNzKCk7CiAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gMDsKICAgICAgICAgZm9yICggOyBp
dCArIHNpemUgPD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkgewotICAgICAgICAgICAgaWYgKGl0Lmxp
bmUoKS0+cmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBpZiAoaXQubGluZSgpLT5yZWZDb3Vu
dChwYWdlKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgKytvYmplY3RD
b3VudDsKLSAgICAgICAgICAgIGl0LmxpbmUoKS0+cmVmKGxvY2spOwotICAgICAgICAgICAgaXQu
cGFnZSgpLT5yZWYobG9jayk7CisgICAgICAgICAgICBpdC5saW5lKCktPnJlZihwYWdlKTsKKyAg
ICAgICAgICAgIGl0LnBhZ2UoKS0+cmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHsg
YmVnaW4sIG9iamVjdENvdW50IH07CiAgICAgfTsKQEAgLTQ3NSwxNSArNTA1LDI0IEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKICAgICBPYmplY3QgZW5kKGl0
ICsgcGFnZVNpemUobV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKSkpOwog
ICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFmaW5kU21hbGxCdW1wUmFuZ2UoaXQsIGVuZCkp
IHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2NrLCBmYWxzZSk7CisgICAg
ICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMoZmFsc2UpOworICAgICAgICAgICAgQkFTU0VS
VCghcGFnZS0+aXNPbkxpc3QoKSk7CiAgICAgICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWls
dXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAg
ICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFsc2UpOworICAgICAg
ICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJhbmdlcyBtaWdodCBu
b3QgZml0IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHJhbmdlQ2FjaGUuc2l6ZSgpID09IHJh
bmdlQ2FjaGUuY2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbGluZUNhY2hlW3NpemVDbGFzc10u
cHVzaChwYWdlKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVbmlxdWVMb2NrSG9s
ZGVyIGxvY2sobXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgbGluZUNhY2hlW3NpemVDbGFzc10u
cHVzaChwYWdlKTsKKyAgICAgICAgICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlv
bjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBw
YWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBh
Z2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgKaW5kZXggNTQ5ZGQyNGY2YzU4OTY0NmNkMjI2MDRkOGM5YjQ5ZWYwYzc0NTA0My4u
NGVjMzkwNGEzMjMwNjNjNjk3NDhmMWEzMzg4ZDJiMjcxNDMzNGQzNSAxMDA2NDQKLS0tIGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmgKQEAgLTYyLDEwICs2Miw5IEBAIGNsYXNzIEhlYXAgewogICAgIAogICAgIEhlYXBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRl
U21hbGxCdW1wUmFuZ2VzKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAg
ICAgICBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJl
QWN0aW9uKTsKLSAgICB2b2lkIGRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImLCBPYmpl
Y3QsIExpbmVDYWNoZSYpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2Nr
SG9sZGVyJiwgTGluZUNhY2hlJik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2Fj
aGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGRlcmVmU21hbGxMaW5lKE11dGV4KiosIE9i
amVjdCwgTGluZUNhY2hlJik7CisgICAgdm9pZCBkZWFsbG9jYXRlTGluZUNhY2hlKExpbmVDYWNo
ZSYpOwogCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90LCBGYWlsdXJlQWN0aW9uKTsKICAgICB2b2lkIGRlYWxsb2NhdGVM
YXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCopOwpAQCAtMTA5LDEzICsxMDgsMTEgQEAgY2xh
c3MgSGVhcCB7CiAgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyKCk7IC8vIE1heSBjcmFzaCBpZiAh
dXNpbmdHaWdhY2FnZSgpLgogICAgIHNpemVfdCBnaWdhY2FnZVNpemUoKTsKIAotICAgIHZvaWQg
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKFVuaXF1ZUxvY2tIb2xkZXImLAotICAg
ICAgICBzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBM
aW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlPYmplY3QoVW5pcXVlTG9ja0hvbGRlciYsCi0gICAgICAgIHNpemVfdCBzaXplQ2xhc3Ms
IEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYsIEZhaWx1cmVBY3Rp
b24pOworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBz
aXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYsIEZh
aWx1cmVBY3Rpb24pOworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2Fj
aGUmLCBGYWlsdXJlQWN0aW9uKTsKIAotICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uo
VW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYsIEZhaWx1cmVB
Y3Rpb24pOwotICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiwg
T2JqZWN0LCBMaW5lQ2FjaGUmKTsKKyAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlTG9ja2VkU21hbGxQ
YWdlKHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZv
aWQgZGVhbGxvY2F0ZVNtYWxsTGluZShTbWFsbFBhZ2UqLCBPYmplY3QsIExpbmVDYWNoZSYpOwog
CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBw
YWdlQ2xhc3MsIEZhaWx1cmVBY3Rpb24pOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsQ2h1bmso
VW5pcXVlTG9ja0hvbGRlciYsIENodW5rKiwgc2l6ZV90IHBhZ2VDbGFzcyk7CkBAIC0xNTIsMjEg
KzE0OSwyMSBAQCBjbGFzcyBIZWFwIHsKICNlbmRpZgogfTsKIAotaW5saW5lIHZvaWQgSGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6
ZV90IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNh
Y2hlJiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9u
IGFjdGlvbikKK2lubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKHNpemVf
dCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJh
bmdlQ2FjaGUsIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsK
ICAgICBpZiAoc2l6ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQot
ICAgICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKGxvY2ssIHNp
emVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUsIGFjdGlvbik7Ci0gICAg
cmV0dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QobG9jaywgc2l6ZUNsYXNzLCBh
bGxvY2F0b3IsIHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICAgICAgcmV0dXJu
IGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplQ2xhc3MsIGFsbG9jYXRvciwg
cmFuZ2VDYWNoZSwgbGluZUNhY2hlLCBhY3Rpb24pOworICAgIHJldHVybiBhbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5T2JqZWN0KHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5l
Q2FjaGUsIGFjdGlvbik7CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKFVu
aXF1ZUxvY2tIb2xkZXImIGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hl
KQoraW5saW5lIHZvaWQgSGVhcDo6ZGVyZWZTbWFsbExpbmUoTXV0ZXgqKiBoZWxkTG9jaywgT2Jq
ZWN0IG9iamVjdCwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7Ci0gICAgaWYgKCFvYmplY3QubGlu
ZSgpLT5kZXJlZihsb2NrKSkKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwor
ICAgIHBhZ2UtPnN3aXRjaExvY2soaGVsZExvY2spOworICAgIEJBU1NFUlQocGFnZS0+aXNMb2Nr
ZWQoKSk7CisgICAgaWYgKCFvYmplY3QubGluZSgpLT5kZXJlZihwYWdlKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGRlYWxsb2NhdGVTbWFsbExpbmUobG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUpOwor
ICAgIGRlYWxsb2NhdGVTbWFsbExpbmUocGFnZSwgb2JqZWN0LCBsaW5lQ2FjaGUpOwogfQogCiBp
bmxpbmUgYm9vbCBIZWFwOjppc0xhcmdlKHZvaWQqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgK
aW5kZXggNjM5ZWRjOWU0ZjZlY2IzM2EzZmZiY2U1MzEzMGQyMmIyOThhYzJhNi4uM2RhNzViMzIy
YzQyMTc3NDgwNDRiZmQxNDQxYmYwNDAyZjUzOTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9MaXN0LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgKQEAg
LTMyLDYgKzMyLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTGlzdE5vZGUgewog
ICAgIExpc3ROb2RlPFQ+KiBwcmV2IHsgbnVsbHB0ciB9OwogICAgIExpc3ROb2RlPFQ+KiBuZXh0
IHsgbnVsbHB0ciB9OworCisgICAgYm9vbCBpc09uTGlzdCgpIGNvbnN0CisgICAgeworICAgICAg
ICBCQVNTRVJUKCEhcHJldiA9PSAhIW5leHQpOworICAgICAgICByZXR1cm4gISFwcmV2OworICAg
IH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL011dGV4LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKaW5kZXgg
ZjRjYzJhYTQxMWM5MjgzMjIxMjkxY2E4NTgwMjBkMzAxOGFhMjNhZC4uYmU2YTNmMWJjMWI5M2Qy
YTM2ZmE0OGQ4MmExOGEwYzllZTQxY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9NdXRleC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaApAQCAtNDgs
OSArNDgsMTIgQEAgY2xhc3MgTXV0ZXggewogICAgIGJvb2wgdHJ5X2xvY2soKTsKICAgICB2b2lk
IHVubG9jaygpOwogCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IEJFWFBPUlQgdm9pZCBsb2NrU2xvd0Nhc2UoKTsKIAorICAgIC8vIEVuc3VyZSB0aGF0IE11dGV4
IGlzIHplcm8taW5pdGlhbGl6ZWQuIFNtYWxsUGFnZSByZWxpZXMgb24gdGhhdC4KICAgICBzdGQ6
OmF0b21pYzxib29sPiBtX2ZsYWcgeyBmYWxzZSB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1f
aXNTcGlubmluZyB7IGZhbHNlIH07CiB9OwpAQCAtOTIsNCArOTUsMjAgQEAgaW5saW5lIHZvaWQg
TXV0ZXg6OnVubG9jaygpCiAgICAgbV9mbGFnLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxlYXNlKTsKIH0KIAoraW5saW5lIGJvb2wgTXV0ZXg6OmlzTG9ja2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9mbGFnOworfQorCitpbmxpbmUgdm9pZCBsb2NrU3dpdGNoKE11dGV4Kiog
aGVsZExvY2ssIE11dGV4KiBsb2NrKQoreworICAgIGlmIChCTElLRUxZKGxvY2sgPT0gKmhlbGRM
b2NrKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgqaGVsZExvY2spCisgICAgICAgICgqaGVs
ZExvY2spLT51bmxvY2soKTsKKyAgICAqaGVsZExvY2sgPSBsb2NrOworICAgIGlmIChsb2NrKQor
ICAgICAgICBsb2NrLT5sb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmggYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1NtYWxsTGluZS5oCmluZGV4IGQ5Yjc0YWI4YjlmZTM5ZTAwMDkyOGJmYjY2NTNl
NTA1Yjg5Y2ZkMjIuLmRlMjY3MjA1ZTgyYzc0ZDYxMDE1YzBhYjllYjIwOTZhNjVjMWI4YjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaApAQCAtMjksMTUgKzI5LDIxIEBACiAjaW5jbHVk
ZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5o
IgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2Ug
Ym1hbGxvYyB7CiAKIGNsYXNzIFNtYWxsTGluZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5p
cXVlTG9ja0hvbGRlciYsIHVuc2lnbmVkIGNoYXIgPSAxKTsKLSAgICBib29sIGRlcmVmKFVuaXF1
ZUxvY2tIb2xkZXImKTsKLSAgICB1bnNpZ25lZCByZWZDb3VudChVbmlxdWVMb2NrSG9sZGVyJikg
eyByZXR1cm4gbV9yZWZDb3VudDsgfQorICAgIHZvaWQgcmVmKFNtYWxsUGFnZSosIHVuc2lnbmVk
IGNoYXIgPSAxKTsKKyAgICBib29sIGRlcmVmKFNtYWxsUGFnZSopOworICAgIHVuc2lnbmVkIHJl
ZkNvdW50KFNtYWxsUGFnZSogcGFnZSkKKyAgICB7CisgICAgICAgIEJVTlVTRUQocGFnZSk7Cisg
ICAgICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgICAgIHJldHVybiBtX3JlZkNv
dW50OworICAgIH0KICAgICAKICAgICBjaGFyKiBiZWdpbigpOwogICAgIGNoYXIqIGVuZCgpOwpA
QCAtNTEsMTQgKzU3LDE4IEBAIHN0YXRpY19hc3NlcnQoCiAKIH07CiAKLWlubGluZSB2b2lkIFNt
YWxsTGluZTo6cmVmKFVuaXF1ZUxvY2tIb2xkZXImLCB1bnNpZ25lZCBjaGFyIHJlZkNvdW50KQor
aW5saW5lIHZvaWQgU21hbGxMaW5lOjpyZWYoU21hbGxQYWdlKiBwYWdlLCB1bnNpZ25lZCBjaGFy
IHJlZkNvdW50KQogeworICAgIEJVTlVTRUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xv
Y2tlZCgpKTsKICAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsKICAgICBtX3JlZkNvdW50ID0gcmVm
Q291bnQ7CiB9CiAKLWlubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYoVW5pcXVlTG9ja0hvbGRl
ciYpCitpbmxpbmUgYm9vbCBTbWFsbExpbmU6OmRlcmVmKFNtYWxsUGFnZSogcGFnZSkKIHsKKyAg
ICBCVU5VU0VEKHBhZ2UpOworICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CiAgICAgQkFT
U0VSVChtX3JlZkNvdW50KTsKICAgICAtLW1fcmVmQ291bnQ7CiAgICAgcmV0dXJuICFtX3JlZkNv
dW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKaW5kZXggNDM1ZTVmNzA5NzgwYjY2NzMy
NTA3ZGQ2ZmMxMjIxYjdjZWU2ZTdjOS4uMmQzMjkwYzczNzUyNTEyOGNkZDk5OTFjMDNmNzhkNjk1
Yjg4NWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAor
KysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCkBAIC0zOCwxNSArMzgsMjgg
QEAgY2xhc3MgU21hbGxMaW5lOwogCiBjbGFzcyBTbWFsbFBhZ2UgOiBwdWJsaWMgTGlzdE5vZGU8
U21hbGxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5pcXVlTG9ja0hvbGRlciYpOwot
ICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNvdW50
KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCByZWYo
KTsKKyAgICBib29sIGRlcmVmKCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQoKQorICAgIHsKKyAg
ICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7Cisg
ICAgfQogICAgIAogICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7IHJldHVybiBtX3NpemVDbGFzczsg
fQogICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXplQ2xhc3MpIHsgbV9zaXplQ2xhc3Mg
PSBzaXplQ2xhc3M7IH0KICAgICAKLSAgICBib29sIGhhc0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9s
ZGVyJikgY29uc3QgeyByZXR1cm4gbV9oYXNGcmVlTGluZXM7IH0KLSAgICB2b2lkIHNldEhhc0Zy
ZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJiwgYm9vbCBoYXNGcmVlTGluZXMpIHsgbV9oYXNGcmVl
TGluZXMgPSBoYXNGcmVlTGluZXM7IH0KKyAgICBib29sIGhhc0ZyZWVMaW5lcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV9oYXNG
cmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgc2V0SGFzRnJlZUxpbmVzKGJvb2wgaGFzRnJlZUxp
bmVzKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgbV9oYXNG
cmVlTGluZXMgPSBoYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgaW5pdEhhc0ZyZWVMaW5l
cygpIHsgbV9oYXNGcmVlTGluZXMgPSB0cnVlOyB9CiAgICAgCiAgICAgYm9vbCBoYXNQaHlzaWNh
bFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9CiAgICAgdm9pZCBzZXRIYXNQ
aHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBtX2hhc1BoeXNpY2FsUGFnZXMg
PSBoYXNQaHlzaWNhbFBhZ2VzOyB9CkBAIC02MCwxNyArNzMsOTQgQEAgY2xhc3MgU21hbGxQYWdl
IDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewogICAgIFNtYWxsTGluZSogYmVnaW4oKTsK
IAogICAgIHVuc2lnbmVkIGNoYXIgc2xpZGUoKSBjb25zdCB7IHJldHVybiBtX3NsaWRlOyB9Ci0g
ICAgdm9pZCBzZXRTbGlkZSh1bnNpZ25lZCBjaGFyIHNsaWRlKSB7IG1fc2xpZGUgPSBzbGlkZTsg
fQotICAgIAorCisgICAgYm9vbCBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRJbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uKGJvb2wgaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbikgeyBtX2lu
aXRpYWxpemluZ0ZvckFsbG9jYXRpb24gPSBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9CisK
KyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgY2hhciBzbGlkZSkKKyAgICB7CisgICAgICAg
IG1fc2xpZGUgPSBzbGlkZTsKKyAgICAgICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7
CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9tdXRleFB0ci0+aXNMb2NrZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQorICAg
IHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIE11dGV4KiBsb2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAgICAg
IGlmIChsb2NrV2l0aFVuYmlhcygmaGVsZExvY2ssIGxvY2spKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgbV9tdXRleFB0ci0+dW5sb2NrKCk7Cisg
ICAgfQorCisgICAgdm9pZCBzd2l0Y2hMb2NrKE11dGV4KiogaGVsZExvY2spCisgICAgeworICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7Cisg
ICAgICAgICAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAgICAgICAg
ICgqaGVsZExvY2spLT51bmxvY2soKTsKKworICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5iaWFz
KGhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGxvY2tXaXRoVW5iaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBs
b2NrKQorICAgIHsKKyAgICAgICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICAgICAgaWYgKEJMSUtF
TFkobG9jay0+dHJ5X2xvY2soKSkpCisgICAgICAgICAgICByZXR1cm4gbG9jayA9PSBtX211dGV4
UHRyOworCisgICAgICAgIC8vIFdlIGZvdW5kIHRoYXQgbG9jayBpcyBjb250ZW5kZWQgYmVjYXVz
ZSB0cnktbG9jayBmYWlsZWQuCisgICAgICAgIGxvY2stPmxvY2soKTsKKyAgICAgICAgaWYgKGxv
Y2sgIT0gbV9tdXRleFB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBp
ZiAobG9jayAhPSAmbV9mYWxsYmFja011dGV4KSB7CisgICAgICAgICAgICAvLyBDb250ZW5kZWQg
YW5kIHVzaW5nIHBlci1jcHUgbG9jay4gQ2hhbmdlIHRoaXMgU21hbGxQYWdlJ3MgbG9jayB0byBm
aW5lLWdyYWluZWQgZmFsbGJhY2sgbG9jay4KKyAgICAgICAgICAgIG1fZmFsbGJhY2tNdXRleC5s
b2NrKCk7CisgICAgICAgICAgICBtX211dGV4UHRyID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICAg
ICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICAgICAgKmhlbGRMb2NrID0gJm1fZmFsbGJh
Y2tNdXRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2
b2lkIGxvY2tBbmRUcnlUb1Rha2VCaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2NrVG9C
aWFzVG8pCisgICAgeworICAgICAgICBtX211dGV4UHRyID0gbG9ja1RvQmlhc1RvOworICAgICAg
ICBCQVNTRVJUKG1fbXV0ZXhQdHIgPT0gbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgbG9ja1N3aXRj
aChoZWxkTG9jaywgbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgQkFTU0VSVChtX211dGV4UHRyID09
IGxvY2tUb0JpYXNUbyk7CisgICAgfQorCiBwcml2YXRlOgorICAgIE11dGV4IG1fZmFsbGJhY2tN
dXRleDsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2lnbmVk
IGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0Up
CiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZTogMTsKICNlbmRpZgog
ICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3VudDogNzsKLSAgICB1bnNpZ25lZCBjaGFyIG1fc2l6
ZUNsYXNzOworICAgIHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3MgeyAwIH07CiAgICAgdW5zaWdu
ZWQgY2hhciBtX3NsaWRlOworICAgIHVuc2lnbmVkIGNoYXIgbV9pbml0aWFsaXppbmdGb3JBbGxv
Y2F0aW9uOworCisgICAgTXV0ZXgqIG1fbXV0ZXhQdHI7CiAKIHN0YXRpY19hc3NlcnQoCiAgICAg
c2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX3NpemVDbGFz
cyk+OjptYXgoKSwKQEAgLTc5LDE1ICsxNjksMTcgQEAgc3RhdGljX2Fzc2VydCgKIAogdXNpbmcg
TGluZUNhY2hlID0gc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PjsK
IAotaW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUg
dm9pZCBTbWFsbFBhZ2U6OnJlZigpCiB7CisgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKICAgICBC
QVNTRVJUKCFtX3NsaWRlKTsKICAgICArK21fcmVmQ291bnQ7CiAgICAgQkFTU0VSVChtX3JlZkNv
dW50KTsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxQYWdlOjpkZXJlZihVbmlxdWVMb2NrSG9sZGVy
JikKK2lubGluZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYoKQogeworICAgIEJBU1NFUlQoaXNMb2Nr
ZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50KTsK
ICAgICAtLW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0
YXRpY1BlclByb2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vz
cy5oCmluZGV4IDM2NmMxNTZkZmU0MjlhMTRiMjJhNWQ1ZDhhYjQ4NmRmNDZiYjk4NTkuLjk0MDVl
NjE0ZjcxMWRjZTI2ZGY3ZjFlZTAzMzRkNGU4MjA1NmNmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCkBAIC01OSw5ICs1OSw5IEBAIGNsYXNzIFN0YXRpY1Bl
clByb2Nlc3MgewogICAgIHN0YXRpYyBUKiBnZXQoKQogICAgIHsKICAgICAgICAgVCogb2JqZWN0
ID0gZ2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1
cm4gZ2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgaWYgKEJM
SUtFTFkob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIHJldHVy
biBnZXRTbG93Q2FzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBUKiBnZXRGYXN0Q2FzZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399698</attachid>
            <date>2020-05-18 19:35:34 -0700</date>
            <delta_ts>2020-05-19 00:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200518193534.patch</filename>
            <type>text/plain</type>
            <size>40439</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uNmFmMDk1ZjUxNzc2ODVmYWY5ZjI1NjI1NTUyZTQz
OTMwY2IzNzhjOSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIwLTA1LTE4ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYyBzaG91bGQg
aGF2ZSBwZXItY3B1IGxvY2tpbmcgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIGJtYWxs
b2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dD
YXNlKToKKyAgICAgICAgKiBibWFsbG9jL0JDb21waWxlci5oOgorICAgICAgICAqIGJtYWxsb2Mv
Q1BVLmNwcDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4K
KyAgICAgICAgKGJtYWxsb2M6OkNQVTo6Q1BVKToKKyAgICAgICAgKiBibWFsbG9jL0NQVS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAo
Ym1hbGxvYzo6eDg2X3JkdHNjcCk6CisgICAgICAgIChibWFsbG9jOjpDUFU6OmN1cnJlbnQpOgor
ICAgICAgICAoYm1hbGxvYzo6Q1BVOjpjdXJyZW50SW5kZXgpOgorICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpDaHVuayk6CisgICAgICAgICogYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2Nh
dmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cp
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6Cisg
ICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OmxpbmVDYWNoZSk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9j
YXRlTG9ja2VkU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVT
bWFsbExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5n
ZXNCeU1ldGFkYXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlPYmplY3QpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2MvTGlzdC5oOgorICAgICAgICAo
Ym1hbGxvYzo6TGlzdE5vZGU6OmlzT25MaXN0IGNvbnN0KToKKyAgICAgICAgKiBibWFsbG9jL011
dGV4Lmg6CisgICAgICAgIChibWFsbG9jOjpNdXRleDo6aXNMb2NrZWQgY29uc3QpOgorICAgICAg
ICAoYm1hbGxvYzo6bG9ja1N3aXRjaCk6CisgICAgICAgICogYm1hbGxvYy9TbWFsbExpbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxMaW5lOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpkZXJlZik6
CisgICAgICAgICogYm1hbGxvYy9TbWFsbFBhZ2UuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpoYXNGcmVlTGlu
ZXMgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpzZXRIYXNGcmVlTGluZXMp
OgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0SGFzRnJlZUxpbmVzKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24pOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0aWFsaXplKToKKyAgICAgICAg
KGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6dW5sb2NrKToK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c3dpdGNoTG9jayk6CisgICAgICAgIChibWFs
bG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdl
OjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpkZXJlZik6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9j
L1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlN0YXRpY1BlclByb2Nlc3M6
OmdldCk6CisKIDIwMjAtMDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbYm1hbGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9ibWFs
bG9jL0NNYWtlTGlzdHMudHh0CmluZGV4IDNkOTkwZWI5YmE4ZDM4OWM0NjQzZDE4MDBmNTAzNTk4
NGJkN2E4NmQuLjFmOGZjYTBiZWVjOTIzMDc2YjkxMGI3MDE4ODcyZmIyZTE5OWE1NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9ibWFsbG9j
L0NNYWtlTGlzdHMudHh0CkBAIC04LDYgKzgsNyBAQCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAg
Ym1hbGxvYy9BbGxJc29IZWFwcy5jcHAKICAgICBibWFsbG9jL0FsbG9jYXRvci5jcHAKICAgICBi
bWFsbG9jL0F2YWlsYWJsZU1lbW9yeS5jcHAKKyAgICBibWFsbG9jL0NQVS5jcHAKICAgICBibWFs
bG9jL0NhY2hlLmNwcAogICAgIGJtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAogICAgIGJtYWxsb2Mv
RGVhbGxvY2F0b3IuY3BwCkBAIC01Miw2ICs1Myw3IEBAIHNldChibWFsbG9jX1BVQkxJQ19IRUFE
RVJTCiAgICAgYm1hbGxvYy9CdWxrRGVjb21taXQuaAogICAgIGJtYWxsb2MvQnVtcEFsbG9jYXRv
ci5oCiAgICAgYm1hbGxvYy9CdW1wUmFuZ2UuaAorICAgIGJtYWxsb2MvQ1BVLmgKICAgICBibWFs
bG9jL0NhY2hlLmgKICAgICBibWFsbG9jL0NodW5rLmgKICAgICBibWFsbG9jL0NyeXB0b1JhbmRv
bS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNWMyYzNkNTZkOTc1OWNjMTExZGIzYjNmOTRhZGQzNDg1Yzk2ZGM1YS4uYTQ2Y2Uw
NjU5MzAyODliNjc2YjdmNjVkMzRlOGM4YWM0NGU0NjNmNCAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM5LDYgKzEzOSw4IEBA
CiAJCURFOEIxM0IzMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERThCMTNCMjIxQ0M1RDlGMDBBNjNGQ0Qg
LyogQlZNVGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzMUU3NDgwMjIzOENBNUMwMDVEMDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzFFNzQ3RjIyMzhD
QTVCMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMjhEODREMjNDRUIzODkwMDU0NUIxOCAvKiBQ
YWNrZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MjhEODRDMjNDRUIzODkwMDU0NUIxOCAvKiBQYWNrZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzUyMzkwMjI0NzM0QkU0MDAzQTEzQ0YgLyog
Q1BVLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NTIzOTAxMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuY3BwICovOyB9OworCQlFMzUyMzkwMzI0NzM0
QkU5MDAzQTEzQ0YgLyogQ1BVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM3OEE5REYyNDZCNjg3MjAw
MjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc4QTlERTI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlw
ZVRhYmxlLmNwcCAqLzsgfTsKIAkJRTM3OEE5RTAyNDZCNjg3NTAwMjlDMkJCIC8qIE9iamVjdFR5
cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM3OEE5REQyNDZCNjg2QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzQTQxM0M5MjI2MDYxMTQw
MDM3RjQ3MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBNDEzQzgyMjYwNjExNDAwMzdGNDcwIC8qIElzb1No
YXJlZFBhZ2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI5NSw2ICsyOTcsOCBAQAogCQlERThCMTNCMjIxQ0M1RDlGMDBBNjNGQ0Qg
LyogQlZNVGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCVk1UYWdzLmg7IHBhdGggPSBibWFsbG9jL0JW
TVRhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxRTc0N0YyMjM4Q0E1QjAw
NUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3RhdGljUGVyUHJvY2Vzcy5oOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjhEODRDMjNDRUIzODkwMDU0NUIx
OCAvKiBQYWNrZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFja2VkLmg7
IHBhdGggPSBibWFsbG9jL1BhY2tlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENQVS5oOyBw
YXRoID0gYm1hbGxvYy9DUFUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1MjM5
MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDUFUuY3Bw
OyBwYXRoID0gYm1hbGxvYy9DUFUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
Mzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9iamVjdFR5cGVUYWJsZS5oOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM3OEE5REUyNDZCNjg2QTAwMjlDMkJCIC8q
IE9iamVjdFR5cGVUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlVGFibGUu
Y3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0E0MTNDODIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSXNvU2hhcmVkUGFnZUlu
bGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvSXNvU2hhcmVkUGFnZUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3OSw2ICs0ODMsOCBAQAogCQkJCTc5Mzk4ODVBMjA3NkVF
QjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywKIAkJCQkxNDBGQTAwMjE5Q0U0MjlDMDBG
RkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3REM2RTIxQ0E1QjcwQjAwNzI0RThEIC8q
IENodW5rLmggKi8sCisJCQkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8s
CisJCQkJRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5oICovLAogCQkJCTE0MkI0NDM0
MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwICovLAogCQkJCTE0MkI0NDM1MUUyODM5
RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAqLywKIAkJCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIz
NUQgLyogRW52aXJvbm1lbnQuY3BwICovLApAQCAtNTkzLDYgKzU5OSw3IEBACiAJCQkJREU4QjEz
QjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3
ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3REM2
RTMxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzUyMzkw
MzI0NzM0QkU5MDAzQTEzQ0YgLyogQ1BVLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzRTFG
ODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERE
Nzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MkI0NDM3MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCBpbiBIZWFkZXJzICovLApA
QCAtNzY0LDYgKzc3MSw3IEBACiAJCQkJNjU5OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWls
YWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjUxNjc3NDFGQUQ2ODVDMDA4MjM2
QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNDE4RUEzOTdCMDA4
QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1MjM5MDIyNDczNEJFNDAw
M0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0QjkzRjFGODk3MTNFMDBC
OTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM1MThF
QTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJC
NDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCmluZGV4IDUwNmQyZDg3NmFlZDMyMDZkZTg5MjMw
Zjc1Mzc4ZDhhYmVmZDMwM2MuLjJlN2Q4YjE3MTgyMzNmNGYyYTg2OGIyZjllOTk5YzExYzI2MWJl
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKQEAgLTEyMiw5ICsxMjIsOCBA
QCBCTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1w
QWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpegogewogICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFu
Z2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAKLSAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2Jq
ZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBz
aXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNh
Y2hlKGxvY2spLCBhY3Rpb24pOworICAgIG1fZGVhbGxvY2F0b3IucHJvY2Vzc09iamVjdExvZygp
OworICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplQ2xhc3MsIGFsbG9jYXRv
ciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKCksIGFjdGlvbik7CiB9
CiAKIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9y
JiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaCBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKaW5kZXggY2RjNDdhYzlhMmVjNzBhZjdkNWZlNDhjZDc4
MWRkZmJkMGNjNTA0YS4uZjNkMDc0MzdmZTNlNjlmZDgwODE5NzYwZGI5ZWE2ZjBlNjM5ZmQ1MyAx
MDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaAorKysgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oCkBAIC03OSwzICs3OSwyMSBAQAogI2lmICFk
ZWZpbmVkKEJGQUxMVEhST1VHSCkKICNkZWZpbmUgQkZBTExUSFJPVUdICiAjZW5kaWYKKworLyog
QkxJS0VMWSBhbmQgQlVOTElLRUxZICovCisKKyNpZiAhZGVmaW5lZChCTElLRUxZKSAmJiBCQ09N
UElMRVIoR0NDX0NPTVBBVElCTEUpCisjZGVmaW5lIEJMSUtFTFkoeCkgX19idWlsdGluX2V4cGVj
dCghISh4KSwgMSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQkxJS0VMWSkKKyNkZWZpbmUgQkxJ
S0VMWSh4KSAoeCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVOTElLRUxZKSAmJiBCQ09NUElM
RVIoR0NDX0NPTVBBVElCTEUpCisjZGVmaW5lIEJVTkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0
KCEhKHgpLCAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVU5MSUtFTFkpCisjZGVmaW5lIEJV
TkxJS0VMWSh4KSAoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DUFUuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
YTkzMWU2NTBlZTc1N2RhZmQyOWNkM2M1ZWMyOGM4NDlmNDQzNjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDUFUuaCIK
KworbmFtZXNwYWNlIGJtYWxsb2MgeworbmFtZXNwYWNlIENQVUludGVybmFsIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCitERUZJTkVfU1RBVElDX1BF
Ul9QUk9DRVNTX1NUT1JBR0UoQ1BVKTsKKworQ1BVOjpDUFUoY29uc3QgTG9ja0hvbGRlciYpCit7
CisjaWYgQk9TKERBUldJTikKKyAgICAvLyB1aW50OF90IG51bWJlck9mUGh5c2ljYWxDb3JlcyA9
ICoodWludDhfdCAqKSh1aW50cHRyX3QpX0NPTU1fUEFHRV9QSFlTSUNBTF9DUFVTOworICAgIC8v
IHVpbnQ4X3QgbnVtYmVyT2ZMb2dpY2FsQ29yZXMgPSAqKHVpbnQ4X3QgKikodWludHB0cl90KV9D
T01NX1BBR0VfTE9HSUNBTF9DUFVTOworICAgIC8vIEJBU1NFUlQobnVtYmVyT2ZMb2dpY2FsQ29y
ZXMgJSBudW1iZXJPZlBoeXNpY2FsQ29yZXMgPT0gMCk7CisgICAgLy8gQkFTU0VSVChpc1Bvd2Vy
T2ZUd28obnVtYmVyT2ZMb2dpY2FsQ29yZXMgLyBudW1iZXJPZlBoeXNpY2FsQ29yZXMpKTsKKyAg
ICAvLyBtX3NoaWZ0QW1vdW50ID0gZ2V0TFNCU2V0Tm9uWmVyb0NvbnN0ZXhwcihudW1iZXJPZkxv
Z2ljYWxDb3JlcyAvIG51bWJlck9mUGh5c2ljYWxDb3Jlcyk7CisgICAgLy8gaWYgKENQVUludGVy
bmFsOjp2ZXJib3NlKSB7CisgICAgLy8gICAgIHByaW50ZigiJXUgLyAldSAvICV1XG4iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obnVtYmVyT2ZQaHlzaWNhbENvcmVzKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bWJlck9mTG9naWNhbENvcmVzKSwgbV9zaGlmdEFtb3VudCk7CisgICAgLy8gfQor
ICAgIGlmIChDUFVJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgcHJpbnRmKCIldSIsIGN1cnJl
bnRJbmRleCgpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DUFUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NzdjYmM4ZjdmNzcxNzA4MDM1ZTgwODQ0ZjU1MTYzZmIyOGVi
NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNsdWRlICJNdXRl
eC5oIgorI2luY2x1ZGUgIlN0YXRpY1BlclByb2Nlc3MuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIK
KyNpbmNsdWRlIDxhcnJheT4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCisjaWYgQkNQVShYODYp
IHx8IEJDUFUoWDg2XzY0KQoraW5saW5lIHVpbnQ2NF90IHg4Nl9yZHRzY3AodWludDMyX3QmIGF1
eCkKK3sKKyAgICB1aW50NjRfdCByYXggPSAwOworICAgIHVpbnQ2NF90IHJkeCA9IDA7CisgICAg
YXNtIHZvbGF0aWxlKCJyZHRzY3AiIDogIj1hIiAocmF4KSwgIj1kIiAocmR4KSwgIj1jIiAoYXV4
KSA6IDogKTsKKyAgICByZXR1cm4gKHJkeCA8PCAzMikgKyByYXg7Cit9CisjZW5kaWYKKworY2xh
c3MgQ1BVIGZpbmFsIDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8Q1BVPiB7CitwdWJsaWM6Cisg
ICAgQ1BVKGNvbnN0IExvY2tIb2xkZXImKTsKKworICAgIE11dGV4KiBjdXJyZW50KCk7CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgY3VycmVudEluZGV4KCk7CisKK3ByaXZhdGU6CisgICAgc3RkOjph
cnJheTxNdXRleCwgMjU2PiBtX211dGV4IHsgfTsKKyAgICAvKiB1bnNpZ25lZCBtX3NoaWZ0QW1v
dW50IHsgMCB9OyAqLworfTsKK0RFQ0xBUkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQ1BV
KTsKKworaW5saW5lIE11dGV4KiBDUFU6OmN1cnJlbnQoKQoreworICAgIHJldHVybiAmbV9tdXRl
eFtjdXJyZW50SW5kZXgoKV07Cit9CisKK2lubGluZSB1bnNpZ25lZCBDUFU6OmN1cnJlbnRJbmRl
eCgpCit7CisjaWYgQk9TKERBUldJTikKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZfNjQpCisg
ICAgc3RydWN0IHsgdWludHB0cl90IHAxLCBwMjsgfSBwOworICAgIGFzbSB2b2xhdGlsZSgic2lk
dCAlW3BdIiA6IFtwXSAiPSZtIiAocCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocC5wMSAmIDB4ZmYpOworI2VuZGlmCisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAppbmRleCAyMWZiYjhmZTc5OGRkOTc4MzVhMzhjY2Y4
ZjFhYjAwZTNkYjI3NDMyLi4zNDhjMjVkZTgzNmEzZDA2MTdiZDUyZmYwNmZmYTc1MTFjZWVmZmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCkBAIC05Myw5ICs5Myw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2hQYWdlKENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VT
aXplLCBGdW5jCiBpbmxpbmUgQ2h1bms6OkNodW5rKHNpemVfdCBwYWdlU2l6ZSkKIHsKICAgICBz
aXplX3Qgc21hbGxQYWdlQ291bnQgPSBwYWdlU2l6ZSAvIHNtYWxsUGFnZVNpemU7Ci0gICAgZm9y
RWFjaFBhZ2UodGhpcywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICBmb3JF
YWNoUGFnZSh0aGlzLCBwYWdlU2l6ZSwgWyZdKFNtYWxsUGFnZSogcGFnZXMpIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFBhZ2VDb3VudDsgKytpKQotICAgICAgICAgICAg
cGFnZVtpXS5zZXRTbGlkZShpKTsKKyAgICAgICAgICAgIHBhZ2VzW2ldLmluaXRpYWxpemUoaSk7
CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxv
Y2F0b3IuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXgg
N2QxZTM0ZTk3YTc3OTJkOGZkMzA2YWUyMDVkNmY3MDEyM2FjOGI0MS4uOTVhNTljMjczY2EwOWUx
OGRlNDg5ZGFlNzc1Zjk0NTI5OWFkZDI1YyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5jcHAKQEAgLTUwLDE2ICs1MCwxNiBAQCBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkK
ICAgICAKIHZvaWQgRGVhbGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBVbmlxdWVMb2NrSG9s
ZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0KLSAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwot
ICAgIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGxvY2ssIGxpbmVDYWNoZShsb2NrKSk7Cisg
ICAgcHJvY2Vzc09iamVjdExvZygpOworICAgIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGxp
bmVDYWNoZSgpKTsKIH0KIAotdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyhVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrKQordm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZygp
CiB7CisgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKICAgICBmb3IgKE9iamVjdCBvYmpl
Y3QgOiBtX29iamVjdExvZykKLSAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKGxvY2ssIG9i
amVjdCwgbGluZUNhY2hlKGxvY2spKTsKKyAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKCZo
ZWxkTG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUoKSk7CisgICAgbG9ja1N3aXRjaCgmaGVsZExvY2ss
IG51bGxwdHIpOwogICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7CiB9CiAKQEAgLTc0LDEwICs3NCw4
IEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1f
b2JqZWN0TG9nLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhl
YXA6Om11dGV4KCkpOwotICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIH0KKyAg
ICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpCisgICAg
ICAgIHByb2Nlc3NPYmplY3RMb2coKTsKIAogICAgIG1fb2JqZWN0TG9nLnB1c2gob2JqZWN0KTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAppbmRleCBmMTRmZWVhNWNjMGI1NjM5
YmZmY2FhNWRiZjdlMTgxYzJiNWMyZmUzLi5kZWVjMjYwOTBhZDUzZWZlZjY4Yzc0M2FkMDdiZmU4
ZjM3M2RkZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCkBAIC00Niw5ICs0
Niw5IEBAIGNsYXNzIERlYWxsb2NhdG9yIHsKICAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwog
ICAgIHZvaWQgc2NhdmVuZ2UoKTsKICAgICAKLSAgICB2b2lkIHByb2Nlc3NPYmplY3RMb2coVW5p
cXVlTG9ja0hvbGRlciYpOworICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZygpOwogICAgIAotICAg
IExpbmVDYWNoZSYgbGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX2xpbmVD
YWNoZTsgfQorICAgIExpbmVDYWNoZSYgbGluZUNhY2hlKCkgeyByZXR1cm4gbV9saW5lQ2FjaGU7
IH0KIAogcHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAppbmRleCA0OTRhMmI1NGNjYzEzOGE0ZGFkMDViZjY2ODE2YzM2Mzdm
NTRlNzE0Li5jODk2NTBlMjA0ZjVhZGU0OTBhODQyNjgzZjU0M2JlN2MzNDQ2NDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBdmFpbGFibGVN
ZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21taXQuaCIKICNpbmNsdWRlICJCdW1wQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJD
cnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKQEAgLTE4NSw4ICsxODYsOSBA
QCB2b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImIGxv
Y2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taQogfQogI2VuZGlmCiAKLXZvaWQgSGVhcDo6ZGVhbGxv
Y2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2
b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7Cisg
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwogICAgIGZvciAoYXV0byYgbGlzdCA6
IGxpbmVDYWNoZSkgewogICAgICAgICB3aGlsZSAoIWxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAmbGluZUNhY2hlWzBdOwpAQCAtMjIxLDcg
KzIyMyw4IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAjaWYgIUJVU0UoUEFSVElBTF9TQ0FW
RU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogI2Vu
ZGlmCi0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CisgICAg
ICAgICAgICBwYWdlLT5pbml0SGFzRnJlZUxpbmVzKCk7CisgICAgICAgICAgICBwYWdlLT5zZXRJ
bml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKICAgICAgICAgICAgIGNodW5rLT5mcmVl
UGFnZXMoKS5wdXNoKHBhZ2UpOwogICAgICAgICAgICAgYWNjb3VudGVkSW5GcmVlYWJsZSArPSBw
YWdlU2l6ZTsKICAgICAgICAgfSk7CkBAIC0yNzAsMjEgKzI3MywyOCBAQCB2b2lkIEhlYXA6OmRl
YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIENodW5rKiBjaHVuaywg
c2l6ZV90IHBhZwogICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBzaXplLCBz
dGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKIH0KIAotU21hbGxQYWdlKiBI
ZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6
ZUNsYXNzLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitTbWFs
bFBhZ2UqIEhlYXA6OmFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVfdCBzaXplQ2xhc3MsIExp
bmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBSRUxFQVNF
X0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIAotICAgIGlmICghbGluZUNhY2hl
W3NpemVDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGluZUNhY2hlW3NpemVDbGFz
c10ucG9wRnJvbnQoKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBTbWFsbFBhZ2Uq
IHsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAgICBpZiAo
IWxpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byogcGFn
ZSA9IGxpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAgICBwYWdlLT5z
ZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHBh
Z2U7CisgICAgICAgIH0KIAotICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7Cisg
ICAgICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8qIHBhZ2UgPSBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAg
ICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAg
ICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0KKworICAgICAgICBtX3NjYXZlbmdlci0+ZGlk
U3RhcnRHcm93aW5nKCk7CiAKLSAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0g
ICAgCi0gICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CiAgICAgICAg
IHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3Moc2l6ZUNsYXNzKTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0eSgpKQog
ICAgICAgICAgICAgYWxsb2NhdGVTbWFsbENodW5rKGxvY2ssIHBhZ2VDbGFzcywgYWN0aW9uKTsK
ICAgICAgICAgaWYgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsICYmIG1fZnJl
ZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0eSgpKQpAQCAtMzE0LDM4ICszMjQsNTcgQEAgU21hbGxQ
YWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXpl
X3Qgc2l6ZUNsYXNzLCBMaW4KICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICBw
YWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKICNlbmRpZgotCisgICAgICAgIHBhZ2Ut
PnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24odHJ1ZSk7CiAgICAgICAgIHJldHVybiBwYWdl
OwogICAgIH0oKTsKKwogICAgIGlmICghcGFnZSkgewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9
PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCisgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICBwYWdlLT5sb2NrQW5k
VHJ5VG9UYWtlQmlhcygmaGVsZExvY2ssIENQVTo6Z2V0KCktPmN1cnJlbnQoKSk7CiAgICAgcGFn
ZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7CiAgICAgcmV0dXJuIHBhZ2U7CiB9CiAKLXZvaWQg
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qg
b2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxs
TGluZShTbWFsbFBhZ2UqIHBhZ2UsIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hl
KQogewotICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KGxvY2spKTsKLSAgICBT
bWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwotICAgIHBhZ2UtPmRlcmVmKGxvY2spOwor
ICAgIEJVTlVTRUQob2JqZWN0KTsKKyAgICBCQVNTRVJUKCFvYmplY3QubGluZSgpLT5yZWZDb3Vu
dChwYWdlKSk7CisgICAgcGFnZS0+ZGVyZWYoKTsKKworICAgIGlmIChwYWdlLT5oYXNGcmVlTGlu
ZXMoKSkgeworICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXModHJ1ZSk7CisgICAgICAgIGlm
IChwYWdlLT5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
bXV0ZXgoKSk7CiAKLSAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewotICAgICAg
ICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7Ci0gICAgICAgIGxpbmVDYWNoZVtw
YWdlLT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIGlmIChwYWdlLT5pbml0
aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICAvLyBTb21lIGZyZWUgbGluZXMgZXhpc3QsIGJ1dCB0aGUgcGFnZSBpcyBub3QgY2hh
aW5lZCB0byBhbnkgdGhyZWFkJ3MgTGluZUNhY2hlLgorICAgICAgICAgICAgLy8gTGV0J3MgY2hh
aW4gaXQgdG8gdGhlIGN1cnJlbnQgZnJlZWluZyB0aHJlYWQncyBMaW5lQ2FjaGUgZm9yIHJldXNp
bmcuCisgICAgICAgICAgICBsaW5lQ2FjaGVbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocGFnZS0+
cmVmQ291bnQobG9jaykpCisgICAgaWYgKHBhZ2UtPnJlZkNvdW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKworICAgIGlmIChwYWdl
LT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNp
emVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+c2l6ZUNsYXNzKCkp
OwogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSArPSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHBhZ2Ut
PmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VDbGFzcykpOwogCi0gICAgTGlzdDxTbWFs
bFBhZ2U+OjpyZW1vdmUocGFnZSk7IC8vICdwYWdlJyBtYXkgYmUgaW4gYW55IHRocmVhZCdzIGxp
bmUgY2FjaGUuCi0gICAgCisgICAgaWYgKHBhZ2UtPmlzT25MaXN0KCkpCisgICAgICAgIExpc3Q8
U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2UpOworCiAgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6Omdl
dChwYWdlKTsKICAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygpLmlzRW1wdHkoKSkKICAgICAgICAg
bV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKQEAgLTM2NSwyNSArMzk0LDI1IEBA
IHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBP
YmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmCiAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHBhZ2VT
aXplKHBhZ2VDbGFzcykpOwogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlNZXRhZGF0YSgKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNz
LAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2Fj
aGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQordm9p
ZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoc2l6ZV90IHNpemVDbGFz
cywgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwg
TGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIEJVTlVT
RUQoYWN0aW9uKTsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQp
KTsKIAotICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVD
bGFzcywgbGluZUNhY2hlLCBhY3Rpb24pOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRl
TG9ja2VkU21hbGxQYWdlKHNpemVDbGFzcywgbGluZUNhY2hlLCBhY3Rpb24pOwogICAgIGlmICgh
cGFnZSkgewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5O
dWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2Vk
KCkpOworICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOworCiAgICAgU21hbGxMaW5lKiBs
aW5lcyA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMobG9j
aykpOworICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKCkpOwogCiAgICAgYXV0byBmaW5k
U21hbGxCdW1wUmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CiAgICAgICAgIGZvciAo
IDsgbGluZU51bWJlciA8IG1fY29uc3RhbnRzLnNtYWxsTGluZUNvdW50KCk7ICsrbGluZU51bWJl
cikgewotICAgICAgICAgICAgaWYgKCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkg
eworICAgICAgICAgICAgaWYgKCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChwYWdlKSkgewog
ICAgICAgICAgICAgICAgIGlmIChtX2NvbnN0YW50cy5vYmplY3RDb3VudChzaXplQ2xhc3MsIGxp
bmVOdW1iZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KQEAgLTM5Niw3ICs0MjUsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlNZXRhZGF0YSgKICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSAwOwogICAg
ICAgICAKICAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbV9jb25zdGFudHMuc21hbGxMaW5l
Q291bnQoKTsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJl
cl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVm
Q291bnQocGFnZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGF1dG8g
bGluZU9iamVjdENvdW50ID0gbV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5l
TnVtYmVyKTsKQEAgLTQwNCw4ICs0MzMsOCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlNZXRhZGF0YSgKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgb2JqZWN0Q291bnQgKz0gbGluZU9iamVjdENvdW50OwotICAgICAgICAgICAgbGluZXNbbGlu
ZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVPYmplY3RDb3VudCk7Ci0gICAgICAgICAgICBwYWdlLT5y
ZWYobG9jayk7CisgICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYocGFnZSwgbGluZU9i
amVjdENvdW50KTsKKyAgICAgICAgICAgIHBhZ2UtPnJlZigpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB7IGJlZ2luLCBvYmplY3RDb3VudCB9OwogICAgIH07CkBAIC00MTMsMTUgKzQ0Miwy
NCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICBz
aXplX3QgbGluZU51bWJlciA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoIWZpbmRT
bWFsbEJ1bXBSYW5nZShsaW5lTnVtYmVyKSkgewotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJl
ZUxpbmVzKGxvY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhm
YWxzZSk7CisgICAgICAgICAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKICAgICAgICAg
ICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2Nh
dG9yLmNhbkFsbG9jYXRlKCkpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9y
QWxsb2NhdGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdl
LCBzb21lIGZyZWUgcmFuZ2VzIG1pZ2h0IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBp
ZiAocmFuZ2VDYWNoZS5zaXplKCkgPT0gcmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAg
ICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKyAgICAgICAgICAg
ICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgICAgIEJB
U1NFUlQocGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBCQVNT
RVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5B
bGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtNDMzLDI1ICs0NzEsMjQgQEAgdm9pZCBIZWFwOjphbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywg
c2l6ZV90IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5n
ZUNhY2hlJiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0
aW9uIGFjdGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hl
JiByYW5nZUNhY2hlLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24p
CiB7CiAgICAgQlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhl
YXBLaW5kKG1fa2luZCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhbGxvY2F0b3Iuc2l6ZSgpOwot
ICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcywg
bGluZUNhY2hlLCBhY3Rpb24pOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlTG9ja2Vk
U21hbGxQYWdlKHNpemVDbGFzcywgbGluZUNhY2hlLCBhY3Rpb24pOwogICAgIGlmICghcGFnZSkg
ewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhs
b2NrKSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICBCQVNTRVJUKCFwYWdl
LT5pc09uTGlzdCgpKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAg
IGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKE9iamVjdCYgaXQsIE9iamVjdCYgZW5kKSB7
CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNpemUpIHsKLSAg
ICAgICAgICAgIGlmICghaXQubGluZSgpLT5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgIGlm
ICghaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjEsMTIgKzQ5OCwxMiBA
QCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCiAgICAgICAgIGNo
YXIqIGJlZ2luID0gaXQuYWRkcmVzcygpOwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RD
b3VudCA9IDA7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNp
emUpIHsKLSAgICAgICAgICAgIGlmIChpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQorICAgICAg
ICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICsrb2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICBpdC5saW5lKCkt
PnJlZihsb2NrKTsKLSAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVmKGxvY2spOworICAgICAgICAg
ICAgaXQubGluZSgpLT5yZWYocGFnZSk7CisgICAgICAgICAgICBpdC5wYWdlKCktPnJlZigpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB7IGJlZ2luLCBvYmplY3RDb3VudCB9OwogICAgIH07
CkBAIC00NzUsMTUgKzUxMiwyNCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlPYmplY3QoCiAgICAgT2JqZWN0IGVuZChpdCArIHBhZ2VTaXplKG1fY29uc3RhbnRzLnBhZ2VD
bGFzcyhwYWdlLT5zaXplQ2xhc3MoKSkpKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICgh
ZmluZFNtYWxsQnVtcFJhbmdlKGl0LCBlbmQpKSB7Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNG
cmVlTGluZXMobG9jaywgZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVz
KGZhbHNlKTsKKyAgICAgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOwogICAgICAg
ICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxv
Y2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdG
b3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBh
Z2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90IGZpdCBpbiB0aGUgY2FjaGUuCiAgICAgICAg
IGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5nZUNhY2hlLmNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAgICAg
ICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7CisgICAgICAgICAgICAgICAg
QkFTU0VSVChwYWdlLT5pc09uTGlzdCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJB
U1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNh
bkFsbG9jYXRlKCkpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCmluZGV4IDU0OWRkMjRmNmM1ODk2
NDZjZDIyNjA0ZDhjOWI0OWVmMGM3NDUwNDMuLjRlYzM5MDRhMzIzMDYzYzY5NzQ4ZjFhMzM4OGQy
YjI3MTQzMzRkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCisr
KyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCkBAIC02MiwxMCArNjIsOSBAQCBjbGFz
cyBIZWFwIHsKICAgICAKICAgICBIZWFwS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CiAgICAgCi0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhVbmlxdWVMb2NrSG9s
ZGVyJiwgc2l6ZV90IHNpemVDbGFzcywKLSAgICAgICAgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5n
ZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7Ci0gICAgdm9pZCBkZXJlZlNtYWxs
TGluZShVbmlxdWVMb2NrSG9sZGVyJiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRl
YWxsb2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYpOworICAgIHZv
aWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRv
ciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAgdm9p
ZCBkZXJlZlNtYWxsTGluZShNdXRleCoqLCBPYmplY3QsIExpbmVDYWNoZSYpOworICAgIHZvaWQg
ZGVhbGxvY2F0ZUxpbmVDYWNoZShMaW5lQ2FjaGUmKTsKIAogICAgIHZvaWQqIGFsbG9jYXRlTGFy
Z2UoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgRmFpbHVyZUFj
dGlvbik7CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQq
KTsKQEAgLTEwOSwxMyArMTA4LDExIEBAIGNsYXNzIEhlYXAgewogICAgIHZvaWQqIGdpZ2FjYWdl
QmFzZVB0cigpOyAvLyBNYXkgY3Jhc2ggaWYgIXVzaW5nR2lnYWNhZ2UoKS4KICAgICBzaXplX3Qg
Z2lnYWNhZ2VTaXplKCk7CiAKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRh
ZGF0YShVbmlxdWVMb2NrSG9sZGVyJiwKLSAgICAgICAgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFs
bG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7Ci0g
ICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KFVuaXF1ZUxvY2tIb2xkZXIm
LAotICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2Fj
aGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVt
cFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRv
ciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CiAKLSAgICBT
bWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6
ZUNsYXNzLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVT
bWFsbExpbmUoVW5pcXVlTG9ja0hvbGRlciYsIE9iamVjdCwgTGluZUNhY2hlJik7CisgICAgU21h
bGxQYWdlKiBhbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2Fj
aGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoU21hbGxQ
YWdlKiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKIAogICAgIHZvaWQgYWxsb2NhdGVTbWFsbENodW5r
KFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0aW9uKTsKICAg
ICB2b2lkIGRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImLCBDaHVuayosIHNp
emVfdCBwYWdlQ2xhc3MpOwpAQCAtMTUyLDIxICsxNDksMjEgQEAgY2xhc3MgSGVhcCB7CiAjZW5k
aWYKIH07CiAKLWlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKAotICAg
IFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2Fj
aGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitpbmxpbmUgdm9pZCBIZWFwOjph
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLCBMaW5lQ2FjaGUmIGxpbmVDYWNo
ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKHNpemVDbGFzcyA8IGJtYWxsb2M6
OnNpemVDbGFzcyhzbWFsbExpbmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzQnlNZXRhZGF0YShsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNo
ZSwgbGluZUNhY2hlLCBhY3Rpb24pOwotICAgIHJldHVybiBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
c0J5T2JqZWN0KGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5lQ2Fj
aGUsIGFjdGlvbik7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0
YWRhdGEoc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9u
KTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChzaXplQ2xhc3Ms
IGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgbGluZUNhY2hlLCBhY3Rpb24pOwogfQogCi1pbmxpbmUg
dm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qg
b2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK2lubGluZSB2b2lkIEhlYXA6OmRlcmVmU21h
bGxMaW5lKE11dGV4KiogaGVsZExvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNh
Y2hlKQogewotICAgIGlmICghb2JqZWN0LmxpbmUoKS0+ZGVyZWYobG9jaykpCisgICAgU21hbGxQ
YWdlKiBwYWdlID0gb2JqZWN0LnBhZ2UoKTsKKyAgICBwYWdlLT5zd2l0Y2hMb2NrKGhlbGRMb2Nr
KTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOworICAgIGlmICghb2JqZWN0LmxpbmUo
KS0+ZGVyZWYocGFnZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBkZWFsbG9jYXRlU21hbGxMaW5l
KGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKTsKKyAgICBkZWFsbG9jYXRlU21hbGxMaW5lKHBhZ2Us
IG9iamVjdCwgbGluZUNhY2hlKTsKIH0KIAogaW5saW5lIGJvb2wgSGVhcDo6aXNMYXJnZSh2b2lk
KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpc3QuaCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCmluZGV4IDYzOWVkYzllNGY2ZWNiMzNhM2ZmYmNl
NTMxMzBkMjJiMjk4YWMyYTYuLjNkYTc1YjMyMmM0MjE3NzQ4MDQ0YmZkMTQ0MWJmMDQwMmY1Mzk1
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCisrKyBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCkBAIC0zMiw2ICszMiwxMiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogc3RydWN0IExpc3ROb2RlIHsKICAgICBMaXN0Tm9kZTxUPiogcHJldiB7IG51bGxw
dHIgfTsKICAgICBMaXN0Tm9kZTxUPiogbmV4dCB7IG51bGxwdHIgfTsKKworICAgIGJvb2wgaXNP
bkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFTU0VSVCghIXByZXYgPT0gISFuZXh0KTsK
KyAgICAgICAgcmV0dXJuICEhcHJldjsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9NdXRleC5oCmluZGV4IGY0Y2MyYWE0MTFjOTI4MzIyMTI5MWNhODU4MDIw
ZDMwMThhYTIzYWQuLmJlNmEzZjFiYzFiOTNkMmEzNmZhNDhkODJhMThhMGM5ZWU0MWNmZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaAorKysgYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL011dGV4LmgKQEAgLTQ4LDkgKzQ4LDEyIEBAIGNsYXNzIE11dGV4IHsKICAg
ICBib29sIHRyeV9sb2NrKCk7CiAgICAgdm9pZCB1bmxvY2soKTsKIAorICAgIGJvb2wgaXNMb2Nr
ZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBCRVhQT1JUIHZvaWQgbG9ja1Nsb3dDYXNlKCk7
CiAKKyAgICAvLyBFbnN1cmUgdGhhdCBNdXRleCBpcyB6ZXJvLWluaXRpYWxpemVkLiBTbWFsbFBh
Z2UgcmVsaWVzIG9uIHRoYXQuCiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9mbGFnIHsgZmFsc2Ug
fTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2lzU3Bpbm5pbmcgeyBmYWxzZSB9OwogfTsKQEAg
LTkyLDQgKzk1LDIwIEBAIGlubGluZSB2b2lkIE11dGV4Ojp1bmxvY2soKQogICAgIG1fZmxhZy5z
dG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiB9CiAKK2lubGluZSBib29s
IE11dGV4Ojppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmxhZzsKK30KKworaW5s
aW5lIHZvaWQgbG9ja1N3aXRjaChNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKK3sKKyAg
ICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoKmhlbGRMb2NrKQorICAgICAgICAoKmhlbGRMb2NrKS0+dW5sb2NrKCk7CisgICAgKmhlbGRM
b2NrID0gbG9jazsKKyAgICBpZiAobG9jaykKKyAgICAgICAgbG9jay0+bG9jaygpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsTGluZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaAppbmRleCBk
OWI3NGFiOGI5ZmUzOWUwMDA5MjhiZmI2NjUzZTUwNWI4OWNmZDIyLi5kZTI2NzIwNWU4MmM3NGQ2
MTAxNWMwYWI5ZWIyMDk2YTY1YzFiOGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NtYWxsTGluZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgK
QEAgLTI5LDE1ICsyOSwyMSBAQAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKICNpbmNsdWRlICJNdXRl
eC5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKKyNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKICNp
bmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBTbWFsbExpbmUg
ewogcHVibGljOgotICAgIHZvaWQgcmVmKFVuaXF1ZUxvY2tIb2xkZXImLCB1bnNpZ25lZCBjaGFy
ID0gMSk7Ci0gICAgYm9vbCBkZXJlZihVbmlxdWVMb2NrSG9sZGVyJik7Ci0gICAgdW5zaWduZWQg
cmVmQ291bnQoVW5pcXVlTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KKyAgICB2
b2lkIHJlZihTbWFsbFBhZ2UqLCB1bnNpZ25lZCBjaGFyID0gMSk7CisgICAgYm9vbCBkZXJlZihT
bWFsbFBhZ2UqKTsKKyAgICB1bnNpZ25lZCByZWZDb3VudChTbWFsbFBhZ2UqIHBhZ2UpCisgICAg
eworICAgICAgICBCVU5VU0VEKHBhZ2UpOworICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2Vk
KCkpOworICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKKyAgICB9CiAgICAgCiAgICAgY2hhciog
YmVnaW4oKTsKICAgICBjaGFyKiBlbmQoKTsKQEAgLTUxLDE0ICs1NywxOCBAQCBzdGF0aWNfYXNz
ZXJ0KAogCiB9OwogCi1pbmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihVbmlxdWVMb2NrSG9sZGVy
JiwgdW5zaWduZWQgY2hhciByZWZDb3VudCkKK2lubGluZSB2b2lkIFNtYWxsTGluZTo6cmVmKFNt
YWxsUGFnZSogcGFnZSwgdW5zaWduZWQgY2hhciByZWZDb3VudCkKIHsKKyAgICBCVU5VU0VEKHBh
Z2UpOworICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9yZWZD
b3VudCk7CiAgICAgbV9yZWZDb3VudCA9IHJlZkNvdW50OwogfQogCi1pbmxpbmUgYm9vbCBTbWFs
bExpbmU6OmRlcmVmKFVuaXF1ZUxvY2tIb2xkZXImKQoraW5saW5lIGJvb2wgU21hbGxMaW5lOjpk
ZXJlZihTbWFsbFBhZ2UqIHBhZ2UpCiB7CisgICAgQlVOVVNFRChwYWdlKTsKKyAgICBCQVNTRVJU
KHBhZ2UtPmlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiAgICAgLS1tX3Jl
ZkNvdW50OwogICAgIHJldHVybiAhbV9yZWZDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvU21hbGxQYWdlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFn
ZS5oCmluZGV4IDQzNWU1ZjcwOTc4MGI2NjczMjUwN2RkNmZjMTIyMWI3Y2VlNmU3YzkuLjJkMzI5
MGM3Mzc1MjUxMjhjZGQ5OTkxYzAzZjc4ZDY5NWI4ODVlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
bWFsbFBhZ2UuaApAQCAtMzgsMTUgKzM4LDI4IEBAIGNsYXNzIFNtYWxsTGluZTsKIAogY2xhc3Mg
U21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewogcHVibGljOgotICAgIHZv
aWQgcmVmKFVuaXF1ZUxvY2tIb2xkZXImKTsKLSAgICBib29sIGRlcmVmKFVuaXF1ZUxvY2tIb2xk
ZXImKTsKLSAgICB1bnNpZ25lZCByZWZDb3VudChVbmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4g
bV9yZWZDb3VudDsgfQorICAgIHZvaWQgcmVmKCk7CisgICAgYm9vbCBkZXJlZigpOworICAgIHVu
c2lnbmVkIHJlZkNvdW50KCkKKyAgICB7CisgICAgICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50OworICAgIH0KICAgICAKICAgICBzaXplX3Qgc2l6ZUNs
YXNzKCkgeyByZXR1cm4gbV9zaXplQ2xhc3M7IH0KICAgICB2b2lkIHNldFNpemVDbGFzcyhzaXpl
X3Qgc2l6ZUNsYXNzKSB7IG1fc2l6ZUNsYXNzID0gc2l6ZUNsYXNzOyB9CiAgICAgCi0gICAgYm9v
bCBoYXNGcmVlTGluZXMoVW5pcXVlTG9ja0hvbGRlciYpIGNvbnN0IHsgcmV0dXJuIG1faGFzRnJl
ZUxpbmVzOyB9Ci0gICAgdm9pZCBzZXRIYXNGcmVlTGluZXMoVW5pcXVlTG9ja0hvbGRlciYsIGJv
b2wgaGFzRnJlZUxpbmVzKSB7IG1faGFzRnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOyB9CisgICAg
Ym9vbCBoYXNGcmVlTGluZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tl
ZCgpKTsKKyAgICAgICAgcmV0dXJuIG1faGFzRnJlZUxpbmVzOworICAgIH0KKyAgICB2b2lkIHNl
dEhhc0ZyZWVMaW5lcyhib29sIGhhc0ZyZWVMaW5lcykKKyAgICB7CisgICAgICAgIEJBU1NFUlQo
aXNMb2NrZWQoKSk7CisgICAgICAgIG1faGFzRnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOworICAg
IH0KKyAgICB2b2lkIGluaXRIYXNGcmVlTGluZXMoKSB7IG1faGFzRnJlZUxpbmVzID0gdHJ1ZTsg
fQogICAgIAogICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcygpIHsgcmV0dXJuIG1faGFzUGh5c2lj
YWxQYWdlczsgfQogICAgIHZvaWQgc2V0SGFzUGh5c2ljYWxQYWdlcyhib29sIGhhc1BoeXNpY2Fs
UGFnZXMpIHsgbV9oYXNQaHlzaWNhbFBhZ2VzID0gaGFzUGh5c2ljYWxQYWdlczsgfQpAQCAtNjAs
MTcgKzczLDk0IEBAIGNsYXNzIFNtYWxsUGFnZSA6IHB1YmxpYyBMaXN0Tm9kZTxTbWFsbFBhZ2U+
IHsKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7CiAKICAgICB1bnNpZ25lZCBjaGFyIHNsaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zbGlkZTsgfQotICAgIHZvaWQgc2V0U2xpZGUodW5zaWduZWQgY2hh
ciBzbGlkZSkgeyBtX3NsaWRlID0gc2xpZGU7IH0KLSAgICAKKworICAgIGJvb2wgaW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbjsgfQorICAgIHZvaWQgc2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihib29sIGluaXRp
YWxpemluZ0ZvckFsbG9jYXRpb24pIHsgbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uID0gaW5p
dGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsgfQorCisgICAgdm9pZCBpbml0aWFsaXplKHVuc2lnbmVk
IGNoYXIgc2xpZGUpCisgICAgeworICAgICAgICBtX3NsaWRlID0gc2xpZGU7CisgICAgICAgIG1f
bXV0ZXhQdHIgPSAmbV9mYWxsYmFja011dGV4OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbXV0ZXhQdHItPmlzTG9ja2VkKCk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgICAgICAgICBNdXRleCogbG9j
ayA9IG1fbXV0ZXhQdHI7CisgICAgICAgICAgICBpZiAobG9ja1dpdGhVbmJpYXMoJmhlbGRMb2Nr
LCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBsb2NrLT51bmxv
Y2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAg
ICAgIG1fbXV0ZXhQdHItPnVubG9jaygpOworICAgIH0KKworICAgIHZvaWQgc3dpdGNoTG9jayhN
dXRleCoqIGhlbGRMb2NrKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAg
TXV0ZXgqIGxvY2sgPSBtX211dGV4UHRyOworICAgICAgICAgICAgaWYgKEJMSUtFTFkobG9jayA9
PSAqaGVsZExvY2spKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KCpoZWxkTG9jaykKKyAgICAgICAgICAgICAgICAoKmhlbGRMb2NrKS0+dW5sb2NrKCk7CisKKyAg
ICAgICAgICAgIGlmIChsb2NrV2l0aFVuYmlhcyhoZWxkTG9jaywgbG9jaykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBsb2NrV2l0aFVuYmlh
cyhNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKKyAgICB7CisgICAgICAgICpoZWxkTG9j
ayA9IGxvY2s7CisgICAgICAgIGlmIChCTElLRUxZKGxvY2stPnRyeV9sb2NrKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIGxvY2sgPT0gbV9tdXRleFB0cjsKKworICAgICAgICAvLyBXZSBmb3VuZCB0
aGF0IGxvY2sgaXMgY29udGVuZGVkIGJlY2F1c2UgdHJ5LWxvY2sgZmFpbGVkLgorICAgICAgICBs
b2NrLT5sb2NrKCk7CisgICAgICAgIGlmIChsb2NrICE9IG1fbXV0ZXhQdHIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGxvY2sgIT0gJm1fZmFsbGJhY2tNdXRleCkg
eworICAgICAgICAgICAgLy8gQ29udGVuZGVkIGFuZCB1c2luZyBwZXItY3B1IGxvY2suIENoYW5n
ZSB0aGlzIFNtYWxsUGFnZSdzIGxvY2sgdG8gZmluZS1ncmFpbmVkIGZhbGxiYWNrIGxvY2suCisg
ICAgICAgICAgICBtX2ZhbGxiYWNrTXV0ZXgubG9jaygpOworICAgICAgICAgICAgbV9tdXRleFB0
ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgICAgICAgICBsb2NrLT51bmxvY2soKTsKKyAgICAg
ICAgICAgICpoZWxkTG9jayA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBsb2NrQW5kVHJ5VG9UYWtlQmlhcyhNdXRl
eCoqIGhlbGRMb2NrLCBNdXRleCogbG9ja1RvQmlhc1RvKQorICAgIHsKKyAgICAgICAgbV9tdXRl
eFB0ciA9IGxvY2tUb0JpYXNUbzsKKyAgICAgICAgQkFTU0VSVChtX211dGV4UHRyID09IGxvY2tU
b0JpYXNUbyk7CisgICAgICAgIGxvY2tTd2l0Y2goaGVsZExvY2ssIGxvY2tUb0JpYXNUbyk7Cisg
ICAgICAgIEJBU1NFUlQobV9tdXRleFB0ciA9PSBsb2NrVG9CaWFzVG8pOworICAgIH0KKwogcHJp
dmF0ZToKKyAgICBNdXRleCBtX2ZhbGxiYWNrTXV0ZXg7CiAgICAgdW5zaWduZWQgY2hhciBtX2hh
c0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzUGh5c2ljYWxQYWdlczogMTsK
ICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIHVuc2lnbmVkIGNoYXIgbV91c2VkU2lu
Y2VMYXN0U2NhdmVuZ2U6IDE7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ6
IDc7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFzczsKKyAgICB1bnNpZ25lZCBjaGFyIG1f
c2l6ZUNsYXNzIHsgMCB9OwogICAgIHVuc2lnbmVkIGNoYXIgbV9zbGlkZTsKKyAgICB1bnNpZ25l
ZCBjaGFyIG1faW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsKKworICAgIE11dGV4KiBtX211dGV4
UHRyOwogCiBzdGF0aWNfYXNzZXJ0KAogICAgIHNpemVDbGFzc0NvdW50IDw9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZGVjbHR5cGUobV9zaXplQ2xhc3MpPjo6bWF4KCksCkBAIC03OSwxNSArMTY5LDE3
IEBAIHN0YXRpY19hc3NlcnQoCiAKIHVzaW5nIExpbmVDYWNoZSA9IHN0ZDo6YXJyYXk8TGlzdDxT
bWFsbFBhZ2U+LCBzaXplQ2xhc3NDb3VudD47CiAKLWlubGluZSB2b2lkIFNtYWxsUGFnZTo6cmVm
KFVuaXF1ZUxvY2tIb2xkZXImKQoraW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoKQogeworICAg
IEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgKyttX3Jl
ZkNvdW50OwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiB9CiAKLWlubGluZSBib29sIFNtYWxs
UGFnZTo6ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUgYm9vbCBTbWFsbFBhZ2U6OmRl
cmVmKCkKIHsKKyAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQoIW1fc2xpZGUp
OwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiAgICAgLS1tX3JlZkNvdW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmggYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaAppbmRleCAzNjZjMTU2ZGZlNDI5YTE0YjIy
YTVkNWQ4YWI0ODZkZjQ2YmI5ODU5Li45NDA1ZTYxNGY3MTFkY2UyNmRmN2YxZWUwMzM0ZDRlODIw
NTZjZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaApAQCAt
NTksOSArNTksOSBAQCBjbGFzcyBTdGF0aWNQZXJQcm9jZXNzIHsKICAgICBzdGF0aWMgVCogZ2V0
KCkKICAgICB7CiAgICAgICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7Ci0gICAgICAgIGlm
ICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgICAgIGlmIChCTElLRUxZKG9iamVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgICByZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgVCogZ2V0RmFzdENhc2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399717</attachid>
            <date>2020-05-19 00:25:33 -0700</date>
            <delta_ts>2020-05-20 16:10:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200519002532.patch</filename>
            <type>text/plain</type>
            <size>59740</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uZGFhMjA3NzY1YzBhZDM4YjRjNmMzYmM5ODYwNTYz
YjAyODRkYmQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDIwLTA1LTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYyBzaG91bGQg
aGF2ZSBwZXItY3B1IGxvY2tpbmcgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIGJtYWxs
b2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dD
YXNlKToKKyAgICAgICAgKiBibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjpnZXRTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9BcHBy
b3hQZXJDUFVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OmluaXRpYWxpemUp
OgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OmxpbmVDYWNoZSk6CisgICAg
ICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6aW5kZXggY29uc3QpOgorICAgICAgICAo
Ym1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OnBhZ2VNdXRleCk6CisgICAgICAgIChibWFsbG9j
OjpBcHByb3hQZXJDUFVDYWNoZTo6bXV0ZXgpOgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVy
Q1BVQ2FjaGU6OmdldEZhc3RDYXNlKToKKyAgICAgICAgKiBibWFsbG9jL0FyZW5hLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFyZW5hOjpBcmVuYSk6CisgICAgICAgIChibWFsbG9jOjpBcmVuYTo6YWxsb2NhdGUp
OgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuaDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKiBibWFsbG9jL0JDb21waWxlci5oOgorICAg
ICAgICAqIGJtYWxsb2MvQ1BVLmNwcDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJtYWxsb2M6OkNQVTo6Q1BVKToKKyAgICAgICAgKiBi
bWFsbG9jL0NQVS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGlu
ZS5oLgorICAgICAgICAoYm1hbGxvYzo6eDg2X3JkdHNjcCk6CisgICAgICAgIChibWFsbG9jOjpD
UFU6OmN1cnJlbnRJbmRleCk6CisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAgICAo
Ym1hbGxvYzo6Q2h1bms6OkNodW5rKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcik6CisgICAgICAg
IChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6RGVh
bGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0
b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5o
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnBlckNQVUNhY2hlKToKKyAgICAgICAg
KGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpsaW5lQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAqIGJt
YWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpudW1iZXJPZlByb2Nlc3NvckNvcmVz
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUpOgorICAgICAg
ICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6
OmRlYWxsb2NhdGVTbWFsbExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxs
b2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAg
ICAgICAoYm1hbGxvYzo6SGVhcDo6Z2V0Q3VycmVudENQVUNhY2hlKToKKyAgICAgICAgKGJtYWxs
b2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKToKKyAgICAgICAgKGJtYWxsb2M6Okhl
YXA6OmRlcmVmU21hbGxMaW5lKToKKyAgICAgICAgKiBibWFsbG9jL0xpc3QuaDoKKyAgICAgICAg
KGJtYWxsb2M6Okxpc3ROb2RlOjppc09uTGlzdCBjb25zdCk6CisgICAgICAgICogYm1hbGxvYy9N
dXRleC5oOgorICAgICAgICAoYm1hbGxvYzo6TXV0ZXg6OmlzTG9ja2VkIGNvbnN0KToKKyAgICAg
ICAgKGJtYWxsb2M6OmxvY2tTd2l0Y2gpOgorICAgICAgICAqIGJtYWxsb2MvUGVyUHJvY2Vzcy5j
cHA6CisgICAgICAgIChibWFsbG9jOjpnZXRQZXJQcm9jZXNzRGF0YSk6CisgICAgICAgIChibWFs
bG9jOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TbWFsbExpbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxMaW5lOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpkZXJlZik6
CisgICAgICAgICogYm1hbGxvYy9TbWFsbFBhZ2UuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpoYXNGcmVlTGlu
ZXMgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpzZXRIYXNGcmVlTGluZXMp
OgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0SGFzRnJlZUxpbmVzKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiBjb25zdCk6
CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24pOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0aWFsaXplKToKKyAgICAgICAg
KGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6dW5sb2NrKToK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c3dpdGNoTG9jayk6CisgICAgICAgIChibWFs
bG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdl
OjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpkZXJlZik6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9j
L1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlN0YXRpY1BlclByb2Nlc3M6
OmdldCk6CisgICAgICAgICogYm1hbGxvYy9WZWN0b3IuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZl
Y3RvcjxUPjo6cHVzaCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OmVtcGxhY2UpOgor
CiAyMDIwLTA1LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2JtYWxsb2NdIEludHJvZHVjZSBsb2NrLWxlc3MgT2JqZWN0VHlwZSBxdWVyeQpkaWZmIC0t
Z2l0IGEvU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvYm1hbGxvYy9DTWFr
ZUxpc3RzLnR4dAppbmRleCAzZDk5MGViOWJhOGQzODljNDY0M2QxODAwZjUwMzU5ODRiZDdhODZk
Li4xZjhmY2EwYmVlYzkyMzA3NmI5MTBiNzAxODg3MmZiMmUxOTlhNTQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxp
c3RzLnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2Mv
QWxsSXNvSGVhcHMuY3BwCiAgICAgYm1hbGxvYy9BbGxvY2F0b3IuY3BwCiAgICAgYm1hbGxvYy9B
dmFpbGFibGVNZW1vcnkuY3BwCisgICAgYm1hbGxvYy9DUFUuY3BwCiAgICAgYm1hbGxvYy9DYWNo
ZS5jcHAKICAgICBibWFsbG9jL0NyeXB0b1JhbmRvbS5jcHAKICAgICBibWFsbG9jL0RlYWxsb2Nh
dG9yLmNwcApAQCAtNTIsNiArNTMsNyBAQCBzZXQoYm1hbGxvY19QVUJMSUNfSEVBREVSUwogICAg
IGJtYWxsb2MvQnVsa0RlY29tbWl0LmgKICAgICBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAogICAg
IGJtYWxsb2MvQnVtcFJhbmdlLmgKKyAgICBibWFsbG9jL0NQVS5oCiAgICAgYm1hbGxvYy9DYWNo
ZS5oCiAgICAgYm1hbGxvYy9DaHVuay5oCiAgICAgYm1hbGxvYy9DcnlwdG9SYW5kb20uaApkaWZm
IC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDVjMmMzZDU2ZDk3NTljYzExMWRiM2IzZjk0YWRkMzQ4NWM5NmRjNWEuLjQxZGYwOWEyZTUwY2Uy
NjIzZWRjMjM3YzI4MzdjNmFkZjg0OTJmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOSw2ICsxMzksMTIgQEAKIAkJREU4
QjEzQjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFOEIxM0IyMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1U
YWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTMxRTc0ODAyMjM4Q0E1QzAwNUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMUU3NDdGMjIzOENBNUIwMDVE
MDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMyOEQ4NEQyM0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyOEQ4NEMy
M0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUUzNTIzOTAyMjQ3MzRCRTQwMDNBMTNDRiAvKiBDUFUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1MjM5MDEy
NDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi87IH07CisJCUUzNTIzOTAzMjQ3MzRCRTkwMDNB
MTNDRiAvKiBDUFUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzZDNzAzQjI0NzNBMUNGMDAzQ0FEMDcg
LyogQXBwcm94UGVyQ1BVQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUz
NkM3MDNFMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2QzcwM0MyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5h
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM2
QzcwM0YyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkM3MDNEMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVu
YS5jcHAgKi87IH07CisJCUUzNkM3MDQxMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVD
YWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzZDNzA0MDI0NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuY3BwICovOyB9Owog
CQlFMzc4QTlERjI0NkI2ODcyMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzhBOURFMjQ2QjY4NkEw
MDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuY3BwICovOyB9OwogCQlFMzc4QTlFMDI0NkI2ODc1
MDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlw
ZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTNBNDEzQzkyMjYwNjExNDAwMzdGNDcwIC8qIElzb1NoYXJlZFBhZ2VJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0E0MTNDODIyNjA2
MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjk1LDYgKzMwMSwxMiBAQAogCQlERThC
MTNCMjIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCVk1UYWdz
Lmg7IHBhdGggPSBibWFsbG9jL0JWTVRhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTMxRTc0N0YyMjM4Q0E1QjAwNUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RhdGljUGVyUHJvY2Vzcy5oOyBwYXRoID0gYm1h
bGxvYy9TdGF0aWNQZXJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
MjhEODRDMjNDRUIzODkwMDU0NUIxOCAvKiBQYWNrZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGFja2VkLmg7IHBhdGggPSBibWFsbG9jL1BhY2tlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IENQVS5oOyBwYXRoID0gYm1hbGxvYy9DUFUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBDUFUuY3BwOyBwYXRoID0gYm1hbGxvYy9DUFUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzZDNzAzQTI0NzNBMUNGMDAzQ0FEMDcgLyogQXBwcm94UGVy
Q1BVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXBwcm94UGVyQ1BV
Q2FjaGUuaDsgcGF0aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwM0MyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFyZW5hLmg7IHBhdGggPSBibWFsbG9jL0Fy
ZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNkM3MDNEMjQ3M0I1OUQwMDND
QUQwNyAvKiBBcmVuYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
cmVuYS5jcHA7IHBhdGggPSBibWFsbG9jL0FyZW5hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFwcHJveFBlckNQVUNhY2hl
LmNwcDsgcGF0aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRh
YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9iamVjdFR5cGVUYWJsZS5oOyBwYXRoID0gYm1hbGxvYy9P
YmplY3RUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM3OEE5REUy
NDZCNjg2QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBPYmplY3RUeXBlVGFibGUuY3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0E0MTNDODIyNjA2MTE0MDAzN0Y0NzAg
LyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSXNvU2hhcmVkUGFnZUlubGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvSXNvU2hhcmVkUGFnZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Niw5ICs0ODgsMTUgQEAK
IAkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUzNkM3MDQwMjQ3M0I2RDEwMDNDQUQwNyAvKiBB
cHByb3hQZXJDUFVDYWNoZS5jcHAgKi8sCisJCQkJRTM2QzcwM0EyNDczQTFDRjAwM0NBRDA3IC8q
IEFwcHJveFBlckNQVUNhY2hlLmggKi8sCisJCQkJRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8q
IEFyZW5hLmNwcCAqLywKKwkJCQlFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAq
LywKIAkJCQk3OTM5ODg1QTIwNzZFRUI1MDA3NEEyRTcgLyogQnVsa0RlY29tbWl0LmggKi8sCiAJ
CQkJMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovLAogCQkJCTE0N0RD
NkUyMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oICovLAorCQkJCUUzNTIzOTAxMjQ3MzRCRTAw
MDNBMTNDRiAvKiBDUFUuY3BwICovLAorCQkJCUUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBD
UFUuaCAqLywKIAkJCQkxNDJCNDQzNDFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCAq
LywKIAkJCQkxNDJCNDQzNTFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmggKi8sCiAJCQkJ
MTQ4OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLywKQEAgLTU3Nyw2
ICs1OTUsOCBAQAogCQkJCTBGN0VCODM0MUY5NTQxQjAwMEYxQUJDQiAvKiBBbGxJc29IZWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3RUI4NEYxRjk1NEQ0RTAwRjFBQkNCIC8qIEFsbElzb0hl
YXBzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTgxOEY0OEQ0QTAwOTUwNzAy
IC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM2QzcwM0IyNDczQTFDRjAwM0NB
RDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzZDNzAzRTI0
NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OTlDNUNEMUVD
M0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDA5MzQzMzFGQ0Y0MDZEMDBFODVFQjUgLyogQkNvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTU5Myw2ICs2MTMsNyBAQAogCQkJCURFOEIxM0IzMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0RDNkUzMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTM1MjM5MDMyNDczNEJFOTAwM0ExM0NGIC8qIENQVS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3NEI5M0UxRjg5NzEzRTAwQjkzNUQzIC8qIENyeXB0b1JhbmRv
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJCNDQzNzFFMjgzOUU3MDAxREE2RTkgLyog
RGVidWdIZWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MSw5ICs3ODIsMTIgQEAKIAkJCWZpbGVz
ID0gKAogCQkJCTBGN0VCODJGMUY5NTQxQjAwMEYxQUJDQiAvKiBBbGxJc29IZWFwcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUUzNkM3MDQxMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQ
ZXJDUFVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzZDNzAzRjI0NzNCNTlEMDAzQ0FE
MDcgLyogQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5OUM1Q0MxRUMzRjE1OTAwQTJG
N0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjUxNjc3NDFG
QUQ2ODVDMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFD
NDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1MjM5
MDIyNDczNEJFNDAwM0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0Qjkz
RjFGODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0RjI3MUM1MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDJCNDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCmluZGV4IDUwNmQyZDg3NmFl
ZDMyMDZkZTg5MjMwZjc1Mzc4ZDhhYmVmZDMwM2MuLmMxMTVhN2JkZjhlZDVkNTRkNmEyNTE3ZWZj
YzU2YmNkNDA4YTFmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKQEAgLTEy
Miw5ICsxMjIsOCBAQCBCTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JT
bG93Q2FzZShCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpegogewogICAgIEJ1bXBSYW5nZUNh
Y2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAKLSAg
ICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgbV9kZWFsbG9jYXRv
ci5wcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxv
Y2F0b3IubGluZUNhY2hlKGxvY2spLCBhY3Rpb24pOworICAgIG1fZGVhbGxvY2F0b3IucHJvY2Vz
c09iamVjdExvZygpOworICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplQ2xh
c3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IucGVyQ1BVQ2FjaGUo
KSwgYWN0aW9uKTsKIH0KIAogQklOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9y
KEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcywgRmFpbHVyZUFjdGlv
biBhY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQ
VUNhY2hlLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQyMTZiZDAxYTg0ZDYwZGM2N2UwODdkNmQ3OWJiYjQ2ZjA3MTIxMzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hl
LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIkFwcHJveFBlckNQVUNhY2hlLmgiCisKKyNpbmNsdWRlICJB
cmVuYS5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK0xpbmVDYWNoZSogQXBwcm94UGVyQ1BV
Q2FjaGU6OmdldFNsb3dDYXNlKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7Cisg
ICAgaWYgKCFtX2xpbmVDYWNoZS5sb2FkKCkpIHsKKyAgICAgICAgdm9pZCogbWVtb3J5ID0gQXJl
bmE6OmdldCgpLT5hbGxvY2F0ZShzaXplb2YoTGluZUNhY2hlKSwgYWxpZ25vZihMaW5lQ2FjaGUp
KTsKKyAgICAgICAgYXV0byogdCA9IG5ldyAobWVtb3J5KSBMaW5lQ2FjaGUoKTsKKyAgICAgICAg
bV9saW5lQ2FjaGUuc3RvcmUodCk7CisgICAgfQorICAgIHJldHVybiBtX2xpbmVDYWNoZS5sb2Fk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QXBwcm94UGVyQ1BVQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjRiMWNiYTFkY2FkOGQ3ZjI4Mjg1MDc3
ZTI2YjRmM2QyMjc2YWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BcHByb3hQZXJDUFVDYWNoZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNQ
VS5oIgorI2luY2x1ZGUgIlNpemVzLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5jbHVk
ZSA8YXJyYXk+CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworLy8gQXBwcm94UGVyQ1BVQ2FjaGUg
aXMgKmFwcHJveGltYXRlKiBwZXItQ1BVIGNhY2hlLiBUaGUgZ29hbCBvZiB0aGlzIGNhY2hlIGlz
IG5vdCBwcmVjaXNlbHkgY29uc3RydWN0aW5nIHBlci1DUFUgY2FjaGUsCisvLyByYXRoZXIgaXQg
aXMgb2ZmZXJpbmcgcGVyLUNQVSBhZmZpbml0eSB0byBTbWFsbFBhZ2VzIGFzIG9wdGltaXphdGlv
bi4KK2NsYXNzIEFwcHJveFBlckNQVUNhY2hlIHsKK3B1YmxpYzoKKyAgICBBcHByb3hQZXJDUFVD
YWNoZSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAgICB9CisKKyAgICBMaW5lQ2FjaGUm
IGxpbmVDYWNoZSgpCisgICAgeworICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gZ2V0RmFzdENh
c2UoKSkKKyAgICAgICAgICAgIHJldHVybiAqb2JqZWN0OworICAgICAgICByZXR1cm4gKmdldFNs
b3dDYXNlKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CisgICAgTXV0ZXgmIHBhZ2VNdXRleCgpIHsgcmV0dXJuIG1fcGFnZU11dGV4OyB9
CisgICAgTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gbV9tdXRleDsgfQorCitwcml2YXRlOgorICAg
IExpbmVDYWNoZSogZ2V0RmFzdENhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGluZUNh
Y2hlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorCisgICAgQk5PX0lO
TElORSBMaW5lQ2FjaGUqIGdldFNsb3dDYXNlKCk7CisKKyAgICBzdGQ6OmF0b21pYzxMaW5lQ2Fj
aGUqPiBtX2xpbmVDYWNoZSB7IG51bGxwdHIgfTsKKyAgICBNdXRleCBtX211dGV4OworICAgIE11
dGV4IG1fcGFnZU11dGV4OworICAgIHVuc2lnbmVkIG1faW5kZXggeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fy
ZW5hLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5
NmM3M2U5Y2EwNGVkN2Q5ZDE3Njc5YTAyMDFmYWU1ODk0NmU2YTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkFyZW5h
LmgiCisKKyNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCitERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJl
bmEpOworCitBcmVuYTo6QXJlbmEoY29uc3QgTG9ja0hvbGRlciYpCit7Cit9CisKKy8vIFJldHVy
bnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KK3Zv
aWQqIEFyZW5hOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihBcmVuYTo6bXV0ZXgoKSk7CisgICAgCisgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgbV9idW1wT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1l
bnQsIG1fYnVtcE9mZnNldCk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fYnVtcEJhc2UgKyBt
X2J1bXBPZmZzZXQ7CisgICAgICAgIG1fYnVtcE9mZnNldCArPSBzaXplOworICAgICAgICBpZiAo
bV9idW1wT2Zmc2V0IDw9IG1fYnVtcExpbWl0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUpOworICAgICAgICB2
b2lkKiBhbGxvY2F0aW9uID0gdm1BbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIG1f
YnVtcEJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbik7CisgICAgICAgIG1fYnVt
cE9mZnNldCA9IDA7CisgICAgICAgIG1fYnVtcExpbWl0ID0gYWxsb2NhdGlvblNpemU7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FyZW5hLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmU5MDg0NGNlN2VjZDE0YzAzMGU2YWQyZDhhN2FlZDkxNmQ0NWIwYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCisKK25hbWVzcGFjZSBibWFsbG9j
IHsKKworY2xhc3MgQXJlbmEgOiBwdWJsaWMgU3RhdGljUGVyUHJvY2VzczxBcmVuYT4geworcHVi
bGljOgorICAgIEJFWFBPUlQgQXJlbmEoY29uc3QgTG9ja0hvbGRlciYpOworCisgICAgLy8gUmV0
dXJucyB6ZXJvLWZpbGxlZCBtZW1vcnkgYnkgdmlydHVhbCBvZiB1c2luZyB2bUFsbG9jYXRlLgor
ICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KTsKKworcHJp
dmF0ZToKKyAgICBjaGFyKiBtX2J1bXBCYXNlIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2J1
bXBPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fYnVtcExpbWl0IHsgMCB9OworfTsKK0RFQ0xB
UkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJlbmEpOworCit9IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaAppbmRleCBjZGM0N2FjOWEyZWM3MGFm
N2Q1ZmU0OGNkNzgxZGRmYmQwY2M1MDRhLi5mM2QwNzQzN2ZlM2U2OWZkODA4MTk3NjBkYjllYTZm
MGU2MzlmZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5o
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKQEAgLTc5LDMgKzc5LDIx
IEBACiAjaWYgIWRlZmluZWQoQkZBTExUSFJPVUdIKQogI2RlZmluZSBCRkFMTFRIUk9VR0gKICNl
bmRpZgorCisvKiBCTElLRUxZIGFuZCBCVU5MSUtFTFkgKi8KKworI2lmICFkZWZpbmVkKEJMSUtF
TFkpICYmIEJDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyNkZWZpbmUgQkxJS0VMWSh4KSBfX2J1
aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCTElLRUxZKQor
I2RlZmluZSBCTElLRUxZKHgpICh4KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVU5MSUtFTFkp
ICYmIEJDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyNkZWZpbmUgQlVOTElLRUxZKHgpIF9fYnVp
bHRpbl9leHBlY3QoISEoeCksIDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVTkxJS0VMWSkK
KyNkZWZpbmUgQlVOTElLRUxZKHgpICh4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0NQVS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWY5MTNmOTVjOGY5NjZiZDQ0ZDk2OWZiOTQ5NGI3OTZhYzFkODFkZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcApAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIkNQVS5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK0RFRklORV9TVEFUSUNfUEVSX1BS
T0NFU1NfU1RPUkFHRShDUFUpOworCitDUFU6OkNQVShjb25zdCBMb2NrSG9sZGVyJikKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9DUFUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJk
NTE4MDE0MmM3YzdmN2UxYWNkMDdmZjE1ODU1ZDA3ZWFjNWRkMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQlBsYXRmb3JtLmgiCisjaW5jbHVkZSAiTXV0ZXguaCIKKyNpbmNsdWRlICJTdGF0aWNQ
ZXJQcm9jZXNzLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSA8YXJyYXk+CisKK25h
bWVzcGFjZSBibWFsbG9jIHsKKworI2lmIEJDUFUoWDg2KSB8fCBCQ1BVKFg4Nl82NCkKK2lubGlu
ZSB1aW50NjRfdCB4ODZfcmR0c2NwKHVpbnQzMl90JiBhdXgpCit7CisgICAgdWludDY0X3QgcmF4
ID0gMDsKKyAgICB1aW50NjRfdCByZHggPSAwOworICAgIGFzbSB2b2xhdGlsZSgicmR0c2NwIiA6
ICI9YSIgKHJheCksICI9ZCIgKHJkeCksICI9YyIgKGF1eCkgOiA6ICk7CisgICAgcmV0dXJuIChy
ZHggPDwgMzIpICsgcmF4OworfQorI2VuZGlmCisKK2NsYXNzIENQVSBmaW5hbCA6IHB1YmxpYyBT
dGF0aWNQZXJQcm9jZXNzPENQVT4geworcHVibGljOgorICAgIENQVShjb25zdCBMb2NrSG9sZGVy
Jik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY3VycmVudEluZGV4KCk7Cit9OworREVDTEFSRV9T
VEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShDUFUpOworCitpbmxpbmUgdW5zaWduZWQgQ1BVOjpj
dXJyZW50SW5kZXgoKQoreworI2lmIEJPUyhEQVJXSU4pCisjaWYgQkNQVShYODYpIHx8IEJDUFUo
WDg2XzY0KQorICAgIHN0cnVjdCB7IHVpbnRwdHJfdCBwMSwgcDI7IH0gcDsKKyAgICBhc20gdm9s
YXRpbGUoInNpZHQgJVtwXSIgOiBbcF0gIj0mbSIgKHApKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHAucDEgJiAweGZmKTsKKyNlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gMDsK
KyNlbmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5r
LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKaW5kZXggMjFmYmI4ZmU3OThkZDk3
ODM1YTM4Y2NmOGYxYWIwMGUzZGIyNzQzMi4uMzQ4YzI1ZGU4MzZhM2QwNjE3YmQ1MmZmMDZmZmE3
NTExY2VlZmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCisr
KyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaApAQCAtOTMsOSArOTMsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoUGFnZShDaHVuayogY2h1bmssIHNp
emVfdCBwYWdlU2l6ZSwgRnVuYwogaW5saW5lIENodW5rOjpDaHVuayhzaXplX3QgcGFnZVNpemUp
CiB7CiAgICAgc2l6ZV90IHNtYWxsUGFnZUNvdW50ID0gcGFnZVNpemUgLyBzbWFsbFBhZ2VTaXpl
OwotICAgIGZvckVhY2hQYWdlKHRoaXMsIHBhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7
CisgICAgZm9yRWFjaFBhZ2UodGhpcywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2VzKSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc21hbGxQYWdlQ291bnQ7ICsraSkKLSAg
ICAgICAgICAgIHBhZ2VbaV0uc2V0U2xpZGUoaSk7CisgICAgICAgICAgICBwYWdlc1tpXS5pbml0
aWFsaXplKGkpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3Iu
Y3BwCmluZGV4IDdkMWUzNGU5N2E3NzkyZDhmZDMwNmFlMjA1ZDZmNzAxMjNhYzhiNDEuLjYxY2Mx
MWE2ZWU3Y2I1NDQ5NDEzYTU5MDYxODg1NjgxMzExMTU4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwCkBAIC00MSw2ICs0MSw3IEBAIERlYWxsb2NhdG9yOjpEZWFsbG9j
YXRvcihIZWFwJiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCiB7CiAgICAgQkFTU0VSVCghRW52
aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CisgICAgbV9wZXJDUFVDYWNo
ZSA9ICZtX2hlYXAuZ2V0Q3VycmVudENQVUNhY2hlKCk7CiB9CiAKIERlYWxsb2NhdG9yOjp+RGVh
bGxvY2F0b3IoKQpAQCAtNTAsMTYgKzUxLDE3IEBAIERlYWxsb2NhdG9yOjp+RGVhbGxvY2F0b3Io
KQogICAgIAogdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLQotICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7
Ci0gICAgbV9oZWFwLmRlYWxsb2NhdGVMaW5lQ2FjaGUobG9jaywgbGluZUNhY2hlKGxvY2spKTsK
KyAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgLy8gbV9oZWFwLmRlYWxsb2NhdGVMaW5lQ2Fj
aGUoY2FjaGUoKSk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2coVW5p
cXVlTG9ja0hvbGRlciYgbG9jaykKK3ZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2co
KQogeworICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgYXV0byYgY2FjaGUgPSBw
ZXJDUFVDYWNoZSgpOwogICAgIGZvciAoT2JqZWN0IG9iamVjdCA6IG1fb2JqZWN0TG9nKQotICAg
ICAgICBtX2hlYXAuZGVyZWZTbWFsbExpbmUobG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUobG9jaykp
OworICAgICAgICBtX2hlYXAuZGVyZWZTbWFsbExpbmUoJmhlbGRMb2NrLCBvYmplY3QsIGNhY2hl
KTsKKyAgICBsb2NrU3dpdGNoKCZoZWxkTG9jaywgbnVsbHB0cik7CiAgICAgbV9vYmplY3RMb2cu
Y2xlYXIoKTsKIH0KIApAQCAtNzQsMTAgKzc2LDggQEAgdm9pZCBEZWFsbG9jYXRvcjo6ZGVhbGxv
Y2F0ZVNsb3dDYXNlKHZvaWQqIG9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkgewotICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIHByb2Nl
c3NPYmplY3RMb2cobG9jayk7Ci0gICAgfQorICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0g
bV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKKyAgICAgICAgcHJvY2Vzc09iamVjdExvZygpOwogCiAg
ICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5oCmluZGV4IGYxNGZlZWE1Y2MwYjU2MzliZmZjYWE1ZGJmN2UxODFjMmI1YzJmZTMuLmJj
ZGFiZGJiNzRiNzRjMTU5MDEyNjU0N2MxYjc4NWEzNTMwZmJjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmgKQEAgLTI2LDEwICsyNiwxMyBAQAogI2lmbmRlZiBEZWFsbG9jYXRv
cl9oCiAjZGVmaW5lIERlYWxsb2NhdG9yX2gKIAorI2luY2x1ZGUgIkFwcHJveFBlckNQVUNhY2hl
LmgiCiAjaW5jbHVkZSAiQkV4cG9ydC5oIgogI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIApAQCAt
NDYsOSArNDksMTcgQEAgY2xhc3MgRGVhbGxvY2F0b3IgewogICAgIHZvaWQgZGVhbGxvY2F0ZSh2
b2lkKik7CiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogICAgIAotICAgIHZvaWQgcHJvY2Vzc09iamVj
dExvZyhVbmlxdWVMb2NrSG9sZGVyJik7CisgICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKCk7CiAg
ICAgCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYpIHsgcmV0dXJu
IG1fbGluZUNhY2hlOyB9CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKCkKKyAg
ICB7CisgICAgICAgIHVpbnQ2NF90IHRpbWUgPSBtYWNoX2FwcHJveGltYXRlX3RpbWUoKTsKKyAg
ICAgICAgaWYgKHRpbWUgLSBtX2NhY2hlVGltZSA+ICgxICogMTAwMCAqIDEwMDApKSB7CisgICAg
ICAgICAgICBtX3BlckNQVUNhY2hlID0gJm1faGVhcC5nZXRDdXJyZW50Q1BVQ2FjaGUoKTsKKyAg
ICAgICAgICAgIG1fY2FjaGVUaW1lID0gdGltZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Km1fcGVyQ1BVQ2FjaGU7CisgICAgfQogCiBwcml2YXRlOgogICAgIGJvb2wgZGVhbGxvY2F0ZUZh
c3RDYXNlKHZvaWQqKTsKQEAgLTU2LDcgKzY3LDggQEAgY2xhc3MgRGVhbGxvY2F0b3IgewogCiAg
ICAgSGVhcCYgbV9oZWFwOwogICAgIEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFsbG9jYXRvckxvZ0Nh
cGFjaXR5PiBtX29iamVjdExvZzsKLSAgICBMaW5lQ2FjaGUgbV9saW5lQ2FjaGU7IC8vIFRoZSBI
ZWFwIHJlbW92ZXMgaXRlbXMgZnJvbSB0aGlzIGNhY2hlLgorICAgIHVpbnQ2NF90IG1fY2FjaGVU
aW1lIHsgMCB9OworICAgIEFwcHJveFBlckNQVUNhY2hlKiBtX3BlckNQVUNhY2hlIHsgbnVsbHB0
ciB9OwogfTsKIAogaW5saW5lIGJvb2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2
b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAppbmRleCA0OTRhMmI1NGNjYzEzOGE0
ZGFkMDViZjY2ODE2YzM2MzdmNTRlNzE0Li45OThlNWQyNDNlYzMxODNlNjAzYzgyYjI5ZTA0YWZi
Y2M2MGZjYTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCisr
KyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJBdmFpbGFibGVNZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21taXQuaCIKICNp
bmNsdWRlICJCdW1wQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5jbHVkZSAiQ2h1
bmsuaCIKICNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIK
QEAgLTQ2LDggKzQ3LDUxIEBACiAjaW5jbHVkZSAiWm9uZS5oIgogI2VuZGlmCiAKKyNpZiBCT1Mo
REFSV0lOKQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9T
KEZSRUVCU0QpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIGJtYWxs
b2MgewogCitzdGF0aWMgaW50IG51bWJlck9mUHJvY2Vzc29yQ29yZXMoKQoreworICAgIGNvbnN0
IGludCBkZWZhdWx0SWZVbmF2YWlsYWJsZSA9IDE7CisgICAgc3RhdGljIGludCBzX251bWJlck9m
Q29yZXMgPSAtMTsKKworICAgIGlmIChzX251bWJlck9mQ29yZXMgPiAwKQorICAgICAgICByZXR1
cm4gc19udW1iZXJPZkNvcmVzOworCisgICAgaWYgKGNvbnN0IGNoYXIqIGNvcmVzRW52ID0gZ2V0
ZW52KCJXVEZfbnVtYmVyT2ZQcm9jZXNzb3JDb3JlcyIpKSB7CisgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQ29yZXM7CisgICAgICAgIGlmIChzc2NhbmYoY29yZXNFbnYsICIldSIsICZudW1iZXJP
ZkNvcmVzKSA9PSAxKSB7CisgICAgICAgICAgICBzX251bWJlck9mQ29yZXMgPSBudW1iZXJPZkNv
cmVzOworICAgICAgICAgICAgcmV0dXJuIHNfbnVtYmVyT2ZDb3JlczsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSBX
VEZfbnVtYmVyT2ZQcm9jZXNzb3JDb3Jlcz0lc1xuIiwgY29yZXNFbnYpOworICAgIH0KKworI2lm
IEJPUyhEQVJXSU4pCisgICAgdW5zaWduZWQgcmVzdWx0OworICAgIHNpemVfdCBsZW5ndGggPSBz
aXplb2YocmVzdWx0KTsKKyAgICBpbnQgbmFtZVtdID0geworICAgICAgICAgICAgQ1RMX0hXLAor
ICAgICAgICAgICAgSFdfQVZBSUxDUFUKKyAgICB9OworICAgIGludCBzeXNjdGxSZXN1bHQgPSBz
eXNjdGwobmFtZSwgc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKGludCksICZyZXN1bHQsICZsZW5ndGgs
IDAsIDApOworCisgICAgc19udW1iZXJPZkNvcmVzID0gc3lzY3RsUmVzdWx0IDwgMCA/IGRlZmF1
bHRJZlVuYXZhaWxhYmxlIDogcmVzdWx0OworI2VsaWYgQk9TKExJTlVYKSB8fCBCT1MoRlJFRUJT
RCkKKyAgICBsb25nIHN5c2NvbmZSZXN1bHQgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxO
KTsKKworICAgIHNfbnVtYmVyT2ZDb3JlcyA9IHN5c2NvbmZSZXN1bHQgPCAwID8gZGVmYXVsdElm
VW5hdmFpbGFibGUgOiBzdGF0aWNfY2FzdDxpbnQ+KHN5c2NvbmZSZXN1bHQpOworI2Vsc2UKKyAg
ICBzX251bWJlck9mQ29yZXMgPSBkZWZhdWx0SWZVbmF2YWlsYWJsZTsKKyNlbmRpZgorICAgIHJl
dHVybiBzX251bWJlck9mQ29yZXM7Cit9CisKIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgTG9j
a0hvbGRlciYpCiAgICAgOiBtX2tpbmQgeyBraW5kIH0sIG1fY29uc3RhbnRzIHsgKkhlYXBDb25z
dGFudHM6OmdldCgpIH0KIHsKQEAgLTY1LDYgKzEwOSwxMCBAQCBIZWFwOjpIZWFwKEhlYXBLaW5k
IGtpbmQsIExvY2tIb2xkZXImKQogICAgICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShi
YXNlLCBzaXplLCAwLCAwKSk7CiAgICAgfQogI2VuZGlmCisgICAgdW5zaWduZWQgY29yZXMgPSBz
dGQ6Om1pbjx1bnNpZ25lZD4ocm91bmRVcFRvUG93ZXJPZlR3byhudW1iZXJPZlByb2Nlc3NvckNv
cmVzKCkpLCBtX2NhY2hlLnNpemUoKSk7CisgICAgbV9jb3JlTWFzayA9IGNvcmVzIC0gMTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3JlczsgKytpbmRleCkKKyAgICAg
ICAgbV9jYWNoZVtpbmRleF0uaW5pdGlhbGl6ZShpbmRleCk7CiAgICAgCiAgICAgbV9zY2F2ZW5n
ZXIgPSBTY2F2ZW5nZXI6OmdldCgpOwogfQpAQCAtMTg1LDggKzIzMyw5IEBAIHZvaWQgSGVhcDo6
c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29t
bWl0JiBkZWNvbW1pCiB9CiAjZW5kaWYKIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hl
KFVuaXF1ZUxvY2tIb2xkZXImLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK3ZvaWQgSGVhcDo6ZGVh
bGxvY2F0ZUxpbmVDYWNoZShMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKIHsKKyAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2sobXV0ZXgoKSk7CiAgICAgZm9yIChhdXRvJiBsaXN0IDogbGluZUNhY2hlKSB7
CiAgICAgICAgIHdoaWxlICghbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBz
aXplQ2xhc3MgPSAmbGlzdCAtICZsaW5lQ2FjaGVbMF07CkBAIC0yMjEsNyArMjcwLDggQEAgdm9p
ZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90
IHBhZ2VDbGFzcywgRmFpbHVyZUEKICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAg
ICAgICAgcGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2NrLCB0cnVlKTsKKyAgICAgICAgICAgIHBhZ2Ut
PmluaXRIYXNGcmVlTGluZXMoKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0Zv
ckFsbG9jYXRpb24oZmFsc2UpOwogICAgICAgICAgICAgY2h1bmstPmZyZWVQYWdlcygpLnB1c2go
cGFnZSk7CiAgICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVhYmxlICs9IHBhZ2VTaXplOwogICAg
ICAgICB9KTsKQEAgLTI3MCwyMSArMzIwLDMyIEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxs
Q2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQ2h1bmsqIGNodW5rLCBzaXplX3QgcGFnCiAg
ICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoY2h1bmssIHNpemUsIHN0YXJ0UGh5c2ljYWxT
aXplLCB0b3RhbFBoeXNpY2FsU2l6ZSkpOwogfQogCi1TbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRl
U21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIExpbmVD
YWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK1NtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6ZV90IHNpemVDbGFzcywgQXBwcm94UGVyQ1BVQ2Fj
aGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBSRUxFQVNFX0JB
U1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIAotICAgIGlmICghbGluZUNhY2hlW3Np
emVDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGluZUNhY2hlW3NpemVDbGFzc10u
cG9wRnJvbnQoKTsKLQotICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAg
TGluZUNhY2hlJiBsaW5lQ2FjaGUgPSBwZXJDUFVDYWNoZS5saW5lQ2FjaGUoKTsKIAotICAgIG1f
c2NhdmVuZ2VyLT5kaWRTdGFydEdyb3dpbmcoKTsKLSAgICAKKyAgICBib29sIGlzRW1wdHkgPSBm
YWxzZTsKICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBTbWFsbFBhZ2UqIHsKKyAgICAg
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAgICBpZiAoIWxpbmVDYWNo
ZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byogcGFnZSA9IGxpbmVD
YWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW1fbGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBhdXRvKiBwYWdlID0gbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5wb3BGcm9u
dCgpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVl
KTsKKyAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9CisKKyAgICAgICAgbV9zY2F2
ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOworCisgICAgICAgIGlzRW1wdHkgPSB0cnVlOwogICAg
ICAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHNpemVDbGFzcyk7
Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBwYWdlQ2xhc3MsIGFjdGlv
bik7CiAgICAgICAgIGlmIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCAmJiBt
X2ZyZWVQYWdlc1twYWdlQ2xhc3NdLmlzRW1wdHkoKSkKQEAgLTMxNCwzOCArMzc1LDYwIEBAIFNt
YWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywg
c2l6ZV90IHNpemVDbGFzcywgTGluCiAjaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAg
ICAgcGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAjZW5kaWYKLQorICAgICAgICBw
YWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOwogICAgICAgICByZXR1cm4g
cGFnZTsKICAgICB9KCk7CisKICAgICBpZiAoIXBhZ2UpIHsKICAgICAgICAgQkFTU0VSVChhY3Rp
b24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAorICAgIGlmIChpc0VtcHR5KSB7CisgICAgICAgIE11dGV4KiBoZWxkTG9jayA9
IG51bGxwdHI7CisgICAgICAgIHBhZ2UtPmxvY2tBbmRUcnlUb1Rha2VCaWFzKCZoZWxkTG9jaywg
JnBlckNQVUNhY2hlLnBhZ2VNdXRleCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFnZS0+bG9j
aygpOwogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwogICAgIHJldHVybiBwYWdl
OwogfQogCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoVW5pcXVlTG9ja0hvbGRlciYg
bG9jaywgT2JqZWN0IG9iamVjdCwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2b2lkIEhlYXA6OmRl
YWxsb2NhdGVTbWFsbExpbmUoU21hbGxQYWdlKiBwYWdlLCBPYmplY3Qgb2JqZWN0LCBBcHByb3hQ
ZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUpCiB7Ci0gICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+
cmVmQ291bnQobG9jaykpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0g
ICAgcGFnZS0+ZGVyZWYobG9jayk7CisgICAgQlVOVVNFRChvYmplY3QpOworICAgIEJBU1NFUlQo
IW9iamVjdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKTsKKyAgICBwYWdlLT5kZXJlZigpOworCisg
ICAgaWYgKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKSB7CisgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVM
aW5lcyh0cnVlKTsKKyAgICAgICAgaWYgKHBhZ2UtPnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKworICAgICAgICAgICAgaWYgKHBhZ2Ut
PmluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewotICAgICAgICBwYWdlLT5zZXRI
YXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7Ci0gICAgICAgIGxpbmVDYWNoZVtwYWdlLT5zaXplQ2xh
c3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIC8vIFNvbWUgZnJlZSBsaW5lcyBleGlzdCwg
YnV0IHRoZSBwYWdlIGlzIG5vdCBjaGFpbmVkIHRvIGFueSB0aHJlYWQncyBMaW5lQ2FjaGUuCisg
ICAgICAgICAgICAvLyBMZXQncyBjaGFpbiBpdCB0byB0aGUgY3VycmVudCBmcmVlaW5nIHRocmVh
ZCdzIExpbmVDYWNoZSBmb3IgcmV1c2luZy4KKyAgICAgICAgICAgIHBlckNQVUNhY2hlLmxpbmVD
YWNoZSgpW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBhZ2UtPnJlZkNvdW50KGxvY2spKQorICAg
IGlmIChwYWdlLT5yZWZDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2sobXV0ZXgoKSk7CisKKyAgICBpZiAocGFnZS0+aW5pdGlhbGl6aW5nRm9yQWxs
b2NhdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9j
b25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKTsKIAogICAgIG1fZnJlZWFibGVN
ZW1vcnkgKz0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBw
YWdlU2l6ZShwYWdlQ2xhc3MpKTsKIAotICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2Up
OyAvLyAncGFnZScgbWF5IGJlIGluIGFueSB0aHJlYWQncyBsaW5lIGNhY2hlLgotICAgIAorICAg
IGlmIChwYWdlLT5pc09uTGlzdCgpKQorICAgICAgICBMaXN0PFNtYWxsUGFnZT46OnJlbW92ZShw
YWdlKTsKKwogICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQocGFnZSk7CiAgICAgaWYgKGNo
dW5rLT5mcmVlUGFnZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFz
c10ucHVzaChjaHVuayk7CkBAIC0zNjUsMjUgKzQ0OCwyNSBAQCB2b2lkIEhlYXA6OmRlYWxsb2Nh
dGVTbWFsbExpbmUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgT2JqZWN0IG9iamVjdCwgTGluZUNh
Y2hlJgogICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKIH0K
IAotdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCi0gICAgVW5p
cXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9y
JiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYg
bGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFs
bG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIEFwcHJveFBlckNQVUNhY2hlJiBw
ZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQlVOVVNFRChhY3Rpb24p
OwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAg
U21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5l
Q2FjaGUsIGFjdGlvbik7CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2NrZWRTbWFs
bFBhZ2Uoc2l6ZUNsYXNzLCBwZXJDUFVDYWNoZSwgYWN0aW9uKTsKICAgICBpZiAoIXBhZ2UpIHsK
ICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAg
ICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKwogICAgIFNtYWxsTGluZSogbGluZXMgPSBw
YWdlLT5iZWdpbigpOwotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKKyAg
ICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAgIGF1dG8gZmluZFNtYWxsQnVt
cFJhbmdlID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewogICAgICAgICBmb3IgKCA7IGxpbmVO
dW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyArK2xpbmVOdW1iZXIpIHsKLSAg
ICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpIHsKKyAgICAg
ICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQocGFnZSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5lTnVtYmVy
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0z
OTYsNyArNDc5LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRh
dGEoCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gMDsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1fY29uc3RhbnRzLnNtYWxsTGluZUNvdW50KCk7
ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNv
dW50KGxvY2spKQorICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KHBh
Z2UpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBhdXRvIGxpbmVPYmpl
Y3RDb3VudCA9IG1fY29uc3RhbnRzLm9iamVjdENvdW50KHNpemVDbGFzcywgbGluZU51bWJlcik7
CkBAIC00MDQsOCArNDg3LDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5
TWV0YWRhdGEoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIG9iamVj
dENvdW50ICs9IGxpbmVPYmplY3RDb3VudDsKLSAgICAgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJd
LnJlZihsb2NrLCBsaW5lT2JqZWN0Q291bnQpOwotICAgICAgICAgICAgcGFnZS0+cmVmKGxvY2sp
OworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKHBhZ2UsIGxpbmVPYmplY3RDb3Vu
dCk7CisgICAgICAgICAgICBwYWdlLT5yZWYoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
eyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKICAgICB9OwpAQCAtNDEzLDE1ICs0OTYsMjQgQEAgdm9p
ZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgc2l6ZV90IGxp
bmVOdW1iZXIgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFmaW5kU21hbGxCdW1w
UmFuZ2UobGluZU51bWJlcikpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhs
b2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMoZmFsc2UpOwor
ICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CiAgICAgICAgICAgICBCQVNT
RVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5B
bGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBm
cmVlIHJhbmdlcyBtaWdodCBub3QgZml0IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHJhbmdl
Q2FjaGUuc2l6ZSgpID09IHJhbmdlQ2FjaGUuY2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbGlu
ZUNhY2hlW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgcGVy
Q1BVQ2FjaGUubGluZUNhY2hlKClbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAg
ICAgIEJBU1NFUlQocGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRv
ci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFs
bG9jYXRpb24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNDMzLDI1ICs1MjUsMjQgQEAgdm9pZCBIZWFwOjph
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgfQogfQogCi12b2lkIEhlYXA6
OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYg
bG9jaywgc2l6ZV90IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1
bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWls
dXJlQWN0aW9uIGFjdGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9i
amVjdChzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5n
ZUNhY2hlJiByYW5nZUNhY2hlLCBBcHByb3hQZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIEZhaWx1
cmVBY3Rpb24gYWN0aW9uKQogewogICAgIEJVTlVTRUQoYWN0aW9uKTsKICAgICBSRUxFQVNFX0JB
U1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIAogICAgIHNpemVfdCBzaXplID0gYWxs
b2NhdG9yLnNpemUoKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShs
b2NrLCBzaXplQ2xhc3MsIGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2Ug
PSBhbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplQ2xhc3MsIHBlckNQVUNhY2hlLCBhY3Rpb24p
OwogICAgIGlmICghcGFnZSkgewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0
aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBCQVNTRVJUKHBh
Z2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsK
KyAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0Zy
ZWVMaW5lcygpKTsKIAogICAgIGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKE9iamVjdCYg
aXQsIE9iamVjdCYgZW5kKSB7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQg
PSBpdCArIHNpemUpIHsKLSAgICAgICAgICAgIGlmICghaXQubGluZSgpLT5yZWZDb3VudChsb2Nr
KSkKKyAgICAgICAgICAgIGlmICghaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00NjEsMTIgKzU1MiwxMiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlP
YmplY3QoCiAgICAgICAgIGNoYXIqIGJlZ2luID0gaXQuYWRkcmVzcygpOwogICAgICAgICB1bnNp
Z25lZCBzaG9ydCBvYmplY3RDb3VudCA9IDA7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9
IGVuZDsgaXQgPSBpdCArIHNpemUpIHsKLSAgICAgICAgICAgIGlmIChpdC5saW5lKCktPnJlZkNv
dW50KGxvY2spKQorICAgICAgICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICsrb2JqZWN0Q291bnQ7Ci0gICAg
ICAgICAgICBpdC5saW5lKCktPnJlZihsb2NrKTsKLSAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVm
KGxvY2spOworICAgICAgICAgICAgaXQubGluZSgpLT5yZWYocGFnZSk7CisgICAgICAgICAgICBp
dC5wYWdlKCktPnJlZigpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7IGJlZ2luLCBvYmpl
Y3RDb3VudCB9OwogICAgIH07CkBAIC00NzUsMTUgKzU2NiwyNCBAQCB2b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCiAgICAgT2JqZWN0IGVuZChpdCArIHBhZ2VTaXpl
KG1fY29uc3RhbnRzLnBhZ2VDbGFzcyhwYWdlLT5zaXplQ2xhc3MoKSkpKTsKICAgICBmb3IgKDs7
KSB7CiAgICAgICAgIGlmICghZmluZFNtYWxsQnVtcFJhbmdlKGl0LCBlbmQpKSB7Ci0gICAgICAg
ICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgZmFsc2UpOworICAgICAgICAgICAgcGFn
ZS0+c2V0SGFzRnJlZUxpbmVzKGZhbHNlKTsKKyAgICAgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlz
T25MaXN0KCkpOwogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6
UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdl
LT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2Ut
PnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
SW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90IGZpdCBpbiB0
aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5nZUNhY2hlLmNh
cGFjaXR5KCkpIHsKLSAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11
dGV4KCkpOworICAgICAgICAgICAgICAgIHBlckNQVUNhY2hlLmxpbmVDYWNoZSgpW3NpemVDbGFz
c10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAg
ICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAg
IHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oIGIvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmgKaW5kZXggNTQ5ZGQyNGY2YzU4OTY0NmNkMjI2MDRkOGM5YjQ5ZWYwYzc0NTA0
My4uMzYyNGFmNjZkOTFiNjI5YzhiZDU5MTU4NjNiY2VkNWQwZmRmODFiNCAxMDA2NDQKLS0tIGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBf
aAogCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKICNpbmNsdWRlICJCdW1wUmFuZ2Uu
aCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkZhaWx1cmVBY3Rpb24uaCIKQEAgLTYy
LDEwICs2Myw5IEBAIGNsYXNzIEhlYXAgewogICAgIAogICAgIEhlYXBLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgICAgICBCdW1wQWxs
b2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAg
ICB2b2lkIGRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImLCBPYmplY3QsIExpbmVDYWNo
ZSYpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGlu
ZUNhY2hlJik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNs
YXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBBcHByb3hQZXJDUFVDYWNoZSYs
IEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoTXV0ZXgqKiwgT2JqZWN0
LCBBcHByb3hQZXJDUFVDYWNoZSYpOworICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShMaW5l
Q2FjaGUmKTsKIAogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCwgRmFpbHVyZUFjdGlvbik7CiAgICAgdm9pZCBkZWFsbG9j
YXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqKTsKQEAgLTkyLDYgKzkyLDEyIEBAIGNs
YXNzIEhlYXAgewogCiAgICAgdm9pZCBtYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShjb25zdCBMb2Nr
SG9sZGVyJik7CiAKKyAgICBBcHByb3hQZXJDUFVDYWNoZSYgZ2V0Q3VycmVudENQVUNhY2hlKCkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQ1BVOjpjdXJyZW50SW5kZXgoKSAmIG1f
Y29yZU1hc2s7CisgICAgICAgIHJldHVybiBtX2NhY2hlW2luZGV4XTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgdm9pZCBkZWNvbW1pdExhcmdlUmFuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIExhcmdl
UmFuZ2UmLCBCdWxrRGVjb21taXQmKTsKIApAQCAtMTA5LDEzICsxMTUsMTEgQEAgY2xhc3MgSGVh
cCB7CiAgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyKCk7IC8vIE1heSBjcmFzaCBpZiAhdXNpbmdH
aWdhY2FnZSgpLgogICAgIHNpemVfdCBnaWdhY2FnZVNpemUoKTsKIAotICAgIHZvaWQgYWxsb2Nh
dGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKFVuaXF1ZUxvY2tIb2xkZXImLAotICAgICAgICBz
aXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2Fj
aGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlP
YmplY3QoVW5pcXVlTG9ja0hvbGRlciYsCi0gICAgICAgIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBB
bGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOwor
ICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xh
c3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIEFwcHJveFBlckNQVUNhY2hlJiwg
RmFpbHVyZUFjdGlvbik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0
KHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIEFwcHJv
eFBlckNQVUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CiAKLSAgICBTbWFsbFBhZ2UqIGFsbG9jYXRl
U21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUm
LCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoVW5pcXVlTG9j
a0hvbGRlciYsIE9iamVjdCwgTGluZUNhY2hlJik7CisgICAgU21hbGxQYWdlKiBhbGxvY2F0ZUxv
Y2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBBcHByb3hQZXJDUFVDYWNoZSYsIEZhaWx1
cmVBY3Rpb24pOworICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShTbWFsbFBhZ2UqLCBPYmpl
Y3QsIEFwcHJveFBlckNQVUNhY2hlJik7CiAKICAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhV
bmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUFjdGlvbik7CiAgICAg
dm9pZCBkZWFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiwgQ2h1bmsqLCBzaXpl
X3QgcGFnZUNsYXNzKTsKQEAgLTE0Myw2ICsxNDcsOSBAQCBjbGFzcyBIZWFwIHsKICAgICBzaXpl
X3QgbV9mb290cHJpbnQgeyAwIH07CiAgICAgc2l6ZV90IG1fZnJlZWFibGVNZW1vcnkgeyAwIH07
CiAKKyAgICBzdGQ6OmFycmF5PEFwcHJveFBlckNQVUNhY2hlLCAxMjg+IG1fY2FjaGU7CisgICAg
dW5zaWduZWQgbV9jb3JlTWFzayB7IDAgfTsKKwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01B
UCAKICAgICBQaHlzaWNhbFBhZ2VNYXAgbV9waHlzaWNhbFBhZ2VNYXA7CiAjZW5kaWYKQEAgLTE1
MiwyMSArMTU5LDIxIEBAIGNsYXNzIEhlYXAgewogI2VuZGlmCiB9OwogCi1pbmxpbmUgdm9pZCBI
ZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcygKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2Nr
LCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJh
bmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVB
Y3Rpb24gYWN0aW9uKQoraW5saW5lIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMo
c2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNo
ZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0
aW9uIGFjdGlvbikKIHsKICAgICBpZiAoc2l6ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNt
YWxsTGluZVNpemUpKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1l
dGFkYXRhKGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUs
IGFjdGlvbik7Ci0gICAgcmV0dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QobG9j
aywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplQ2xh
c3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CisgICAgcmV0
dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qoc2l6ZUNsYXNzLCBhbGxvY2F0b3Is
IHJhbmdlQ2FjaGUsIHBlckNQVUNhY2hlLCBhY3Rpb24pOwogfQogCi1pbmxpbmUgdm9pZCBIZWFw
OjpkZXJlZlNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBM
aW5lQ2FjaGUmIGxpbmVDYWNoZSkKK2lubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKE11
dGV4KiogaGVsZExvY2ssIE9iamVjdCBvYmplY3QsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVD
YWNoZSkKIHsKLSAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVmKGxvY2spKQorICAgIFNtYWxs
UGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7CisgICAgcGFnZS0+c3dpdGNoTG9jayhoZWxkTG9j
ayk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICBpZiAoIW9iamVjdC5saW5l
KCktPmRlcmVmKHBhZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgZGVhbGxvY2F0ZVNtYWxsTGlu
ZShsb2NrLCBvYmplY3QsIGxpbmVDYWNoZSk7CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShwYWdl
LCBvYmplY3QsIHBlckNQVUNhY2hlKTsKIH0KIAogaW5saW5lIGJvb2wgSGVhcDo6aXNMYXJnZSh2
b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpc3QuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCmluZGV4IDYzOWVkYzllNGY2ZWNiMzNhM2Zm
YmNlNTMxMzBkMjJiMjk4YWMyYTYuLjNkYTc1YjMyMmM0MjE3NzQ4MDQ0YmZkMTQ0MWJmMDQwMmY1
Mzk1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCkBAIC0zMiw2ICszMiwxMiBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogc3RydWN0IExpc3ROb2RlIHsKICAgICBMaXN0Tm9kZTxUPiogcHJldiB7IG51
bGxwdHIgfTsKICAgICBMaXN0Tm9kZTxUPiogbmV4dCB7IG51bGxwdHIgfTsKKworICAgIGJvb2wg
aXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFTU0VSVCghIXByZXYgPT0gISFuZXh0
KTsKKyAgICAgICAgcmV0dXJuICEhcHJldjsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oCmluZGV4IGY0Y2MyYWE0MTFjOTI4MzIyMTI5MWNhODU4
MDIwZDMwMThhYTIzYWQuLmJlNmEzZjFiYzFiOTNkMmEzNmZhNDhkODJhMThhMGM5ZWU0MWNmZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaAorKysgYi9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL011dGV4LmgKQEAgLTQ4LDkgKzQ4LDEyIEBAIGNsYXNzIE11dGV4IHsK
ICAgICBib29sIHRyeV9sb2NrKCk7CiAgICAgdm9pZCB1bmxvY2soKTsKIAorICAgIGJvb2wgaXNM
b2NrZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBCRVhQT1JUIHZvaWQgbG9ja1Nsb3dDYXNl
KCk7CiAKKyAgICAvLyBFbnN1cmUgdGhhdCBNdXRleCBpcyB6ZXJvLWluaXRpYWxpemVkLiBTbWFs
bFBhZ2UgcmVsaWVzIG9uIHRoYXQuCiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9mbGFnIHsgZmFs
c2UgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2lzU3Bpbm5pbmcgeyBmYWxzZSB9OwogfTsK
QEAgLTkyLDQgKzk1LDIwIEBAIGlubGluZSB2b2lkIE11dGV4Ojp1bmxvY2soKQogICAgIG1fZmxh
Zy5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiB9CiAKK2lubGluZSBi
b29sIE11dGV4Ojppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmxhZzsKK30KKwor
aW5saW5lIHZvaWQgbG9ja1N3aXRjaChNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKK3sK
KyAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAoKmhlbGRMb2NrKS0+dW5sb2NrKCk7CisgICAgKmhl
bGRMb2NrID0gbG9jazsKKyAgICBpZiAobG9jaykKKyAgICAgICAgbG9jay0+bG9jaygpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1BlclByb2Nlc3MuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNw
cAppbmRleCBkODJmMjViNWU5OGRkYTljYTZmMGUzM2FkNDgxNTJjODFkY2QyZGY3Li44NTM3OGU5
YmEyNDRkYTI2NGM5OGI0YzEyNTJhZWFjMDY2ZDM2Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
UGVyUHJvY2Vzcy5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlBlclByb2Nlc3Mu
aCIKIAotI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKKyNpbmNsdWRlICJBcmVuYS5oIgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTM1LDI5ICszNSw4IEBAIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHN0YXRpYyBNdXRleCBzX211
dGV4OwogCi1zdGF0aWMgY2hhciogc19idW1wQmFzZTsKLXN0YXRpYyBzaXplX3Qgc19idW1wT2Zm
c2V0Owotc3RhdGljIHNpemVfdCBzX2J1bXBMaW1pdDsKLQogc3RhdGljIFBlclByb2Nlc3NEYXRh
KiBzX3RhYmxlW3RhYmxlU2l6ZV07CiAKLS8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5
IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KLXN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKLXsKLSAgICBzX2J1bXBPZmZzZXQgPSByb3VuZFVw
VG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc19idW1wT2Zmc2V0KTsKLSAgICB2b2lkKiByZXN1bHQg
PSBzX2J1bXBCYXNlICsgc19idW1wT2Zmc2V0OwotICAgIHNfYnVtcE9mZnNldCArPSBzaXplOwot
ICAgIGlmIChzX2J1bXBPZmZzZXQgPD0gc19idW1wTGltaXQpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgCi0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUpOwotICAg
IHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKLSAgICBzX2J1
bXBCYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pOwotICAgIHNfYnVtcE9mZnNl
dCA9IDA7Ci0gICAgc19idW1wTGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsKLSAgICByZXR1cm4gYWxs
b2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQogUGVyUHJvY2Vzc0RhdGEqIGdldFBlclByb2Nl
c3NEYXRhKHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNpemVfdCBz
aXplLCBzaXplX3QgYWxpZ25tZW50KQogewogICAgIExvY2tIb2xkZXIgbG9jayhzX211dGV4KTsK
QEAgLTc2LDEwICs1NSwxMSBAQCBQZXJQcm9jZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEodW5z
aWduZWQgaGFzaCwgY29uc3QgY2hhciogZGlzYW1iaWd1YXRvciwgc2l6ZQogICAgIAogICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBDcmVhdGluZyBuZXcgJXNc
biIsIGdldHBpZCgpLCBkaXNhbWJpZ3VhdG9yKTsKLSAgICB2b2lkKiByYXdEYXRhUHRyID0gYWxs
b2NhdGUoc2l6ZW9mKFBlclByb2Nlc3NEYXRhKSwgc3RkOjphbGlnbm1lbnRfb2Y8UGVyUHJvY2Vz
c0RhdGE+Ojp2YWx1ZSk7CisgICAgYXV0byogYXJlbmEgPSBBcmVuYTo6Z2V0KCk7CisgICAgdm9p
ZCogcmF3RGF0YVB0ciA9IGFyZW5hLT5hbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vzc0RhdGEpLCBz
dGQ6OmFsaWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKICAgICBQZXJQcm9jZXNz
RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFBlclByb2Nlc3NEYXRhKj4ocmF3RGF0YVB0cik7CiAg
ICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRpc2FtYmlndWF0b3I7Ci0gICAgZGF0YS0+bWVtb3J5
ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKKyAgICBkYXRhLT5tZW1vcnkgPSBhcmVuYS0+
YWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKICAgICBkYXRhLT5zaXplID0gc2l6ZTsKICAgICBk
YXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiAgICAgZGF0YS0+bmV4dCA9IGJ1Y2tldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmggYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oCmluZGV4IGQ5Yjc0YWI4YjlmZTM5ZTAwMDkyOGJmYjY2
NTNlNTA1Yjg5Y2ZkMjIuLmRlMjY3MjA1ZTgyYzc0ZDYxMDE1YzBhYjllYjIwOTZhNjVjMWI4YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKKysrIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaApAQCAtMjksMTUgKzI5LDIxIEBACiAjaW5j
bHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlw
ZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3Bh
Y2UgYm1hbGxvYyB7CiAKIGNsYXNzIFNtYWxsTGluZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYo
VW5pcXVlTG9ja0hvbGRlciYsIHVuc2lnbmVkIGNoYXIgPSAxKTsKLSAgICBib29sIGRlcmVmKFVu
aXF1ZUxvY2tIb2xkZXImKTsKLSAgICB1bnNpZ25lZCByZWZDb3VudChVbmlxdWVMb2NrSG9sZGVy
JikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQorICAgIHZvaWQgcmVmKFNtYWxsUGFnZSosIHVuc2ln
bmVkIGNoYXIgPSAxKTsKKyAgICBib29sIGRlcmVmKFNtYWxsUGFnZSopOworICAgIHVuc2lnbmVk
IHJlZkNvdW50KFNtYWxsUGFnZSogcGFnZSkKKyAgICB7CisgICAgICAgIEJVTlVTRUQocGFnZSk7
CisgICAgICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgICAgIHJldHVybiBtX3Jl
ZkNvdW50OworICAgIH0KICAgICAKICAgICBjaGFyKiBiZWdpbigpOwogICAgIGNoYXIqIGVuZCgp
OwpAQCAtNTEsMTQgKzU3LDE4IEBAIHN0YXRpY19hc3NlcnQoCiAKIH07CiAKLWlubGluZSB2b2lk
IFNtYWxsTGluZTo6cmVmKFVuaXF1ZUxvY2tIb2xkZXImLCB1bnNpZ25lZCBjaGFyIHJlZkNvdW50
KQoraW5saW5lIHZvaWQgU21hbGxMaW5lOjpyZWYoU21hbGxQYWdlKiBwYWdlLCB1bnNpZ25lZCBj
aGFyIHJlZkNvdW50KQogeworICAgIEJVTlVTRUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdlLT5p
c0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsKICAgICBtX3JlZkNvdW50ID0g
cmVmQ291bnQ7CiB9CiAKLWlubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYoVW5pcXVlTG9ja0hv
bGRlciYpCitpbmxpbmUgYm9vbCBTbWFsbExpbmU6OmRlcmVmKFNtYWxsUGFnZSogcGFnZSkKIHsK
KyAgICBCVU5VU0VEKHBhZ2UpOworICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CiAgICAg
QkFTU0VSVChtX3JlZkNvdW50KTsKICAgICAtLW1fcmVmQ291bnQ7CiAgICAgcmV0dXJuICFtX3Jl
ZkNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKaW5kZXggNDM1ZTVmNzA5NzgwYjY2
NzMyNTA3ZGQ2ZmMxMjIxYjdjZWU2ZTdjOS4uMmQzMjkwYzczNzUyNTEyOGNkZDk5OTFjMDNmNzhk
Njk1Yjg4NWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2Uu
aAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCkBAIC0zOCwxNSArMzgs
MjggQEAgY2xhc3MgU21hbGxMaW5lOwogCiBjbGFzcyBTbWFsbFBhZ2UgOiBwdWJsaWMgTGlzdE5v
ZGU8U21hbGxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5pcXVlTG9ja0hvbGRlciYp
OwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNv
dW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCBy
ZWYoKTsKKyAgICBib29sIGRlcmVmKCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQoKQorICAgIHsK
KyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7
CisgICAgfQogICAgIAogICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7IHJldHVybiBtX3NpemVDbGFz
czsgfQogICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXplQ2xhc3MpIHsgbV9zaXplQ2xh
c3MgPSBzaXplQ2xhc3M7IH0KICAgICAKLSAgICBib29sIGhhc0ZyZWVMaW5lcyhVbmlxdWVMb2Nr
SG9sZGVyJikgY29uc3QgeyByZXR1cm4gbV9oYXNGcmVlTGluZXM7IH0KLSAgICB2b2lkIHNldEhh
c0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJiwgYm9vbCBoYXNGcmVlTGluZXMpIHsgbV9oYXNG
cmVlTGluZXMgPSBoYXNGcmVlTGluZXM7IH0KKyAgICBib29sIGhhc0ZyZWVMaW5lcygpIGNvbnN0
CisgICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV9o
YXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgc2V0SGFzRnJlZUxpbmVzKGJvb2wgaGFzRnJl
ZUxpbmVzKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgbV9o
YXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgaW5pdEhhc0ZyZWVM
aW5lcygpIHsgbV9oYXNGcmVlTGluZXMgPSB0cnVlOyB9CiAgICAgCiAgICAgYm9vbCBoYXNQaHlz
aWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9CiAgICAgdm9pZCBzZXRI
YXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBtX2hhc1BoeXNpY2FsUGFn
ZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9CkBAIC02MCwxNyArNzMsOTQgQEAgY2xhc3MgU21hbGxQ
YWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewogICAgIFNtYWxsTGluZSogYmVnaW4o
KTsKIAogICAgIHVuc2lnbmVkIGNoYXIgc2xpZGUoKSBjb25zdCB7IHJldHVybiBtX3NsaWRlOyB9
Ci0gICAgdm9pZCBzZXRTbGlkZSh1bnNpZ25lZCBjaGFyIHNsaWRlKSB7IG1fc2xpZGUgPSBzbGlk
ZTsgfQotICAgIAorCisgICAgYm9vbCBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRJbml0
aWFsaXppbmdGb3JBbGxvY2F0aW9uKGJvb2wgaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbikgeyBt
X2luaXRpYWxpemluZ0ZvckFsbG9jYXRpb24gPSBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9
CisKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgY2hhciBzbGlkZSkKKyAgICB7CisgICAg
ICAgIG1fc2xpZGUgPSBzbGlkZTsKKyAgICAgICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0
ZXg7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tdXRleFB0ci0+aXNMb2NrZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIE11dGV4KiBsb2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAg
ICAgIGlmIChsb2NrV2l0aFVuYmlhcygmaGVsZExvY2ssIGxvY2spKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgbV9tdXRleFB0ci0+dW5sb2NrKCk7
CisgICAgfQorCisgICAgdm9pZCBzd2l0Y2hMb2NrKE11dGV4KiogaGVsZExvY2spCisgICAgewor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7
CisgICAgICAgICAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAgICAg
ICAgICgqaGVsZExvY2spLT51bmxvY2soKTsKKworICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5i
aWFzKGhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBib29sIGxvY2tXaXRoVW5iaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4
KiBsb2NrKQorICAgIHsKKyAgICAgICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICAgICAgaWYgKEJM
SUtFTFkobG9jay0+dHJ5X2xvY2soKSkpCisgICAgICAgICAgICByZXR1cm4gbG9jayA9PSBtX211
dGV4UHRyOworCisgICAgICAgIC8vIFdlIGZvdW5kIHRoYXQgbG9jayBpcyBjb250ZW5kZWQgYmVj
YXVzZSB0cnktbG9jayBmYWlsZWQuCisgICAgICAgIGxvY2stPmxvY2soKTsKKyAgICAgICAgaWYg
KGxvY2sgIT0gbV9tdXRleFB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAobG9jayAhPSAmbV9mYWxsYmFja011dGV4KSB7CisgICAgICAgICAgICAvLyBDb250ZW5k
ZWQgYW5kIHVzaW5nIHBlci1jcHUgbG9jay4gQ2hhbmdlIHRoaXMgU21hbGxQYWdlJ3MgbG9jayB0
byBmaW5lLWdyYWluZWQgZmFsbGJhY2sgbG9jay4KKyAgICAgICAgICAgIG1fZmFsbGJhY2tNdXRl
eC5sb2NrKCk7CisgICAgICAgICAgICBtX211dGV4UHRyID0gJm1fZmFsbGJhY2tNdXRleDsKKyAg
ICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICAgICAgKmhlbGRMb2NrID0gJm1fZmFs
bGJhY2tNdXRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvY2tBbmRUcnlUb1Rha2VCaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2Nr
VG9CaWFzVG8pCisgICAgeworICAgICAgICBtX211dGV4UHRyID0gbG9ja1RvQmlhc1RvOworICAg
ICAgICBCQVNTRVJUKG1fbXV0ZXhQdHIgPT0gbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgbG9ja1N3
aXRjaChoZWxkTG9jaywgbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgQkFTU0VSVChtX211dGV4UHRy
ID09IGxvY2tUb0JpYXNUbyk7CisgICAgfQorCiBwcml2YXRlOgorICAgIE11dGV4IG1fZmFsbGJh
Y2tNdXRleDsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2ln
bmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZTogMTsKICNlbmRp
ZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3VudDogNzsKLSAgICB1bnNpZ25lZCBjaGFyIG1f
c2l6ZUNsYXNzOworICAgIHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3MgeyAwIH07CiAgICAgdW5z
aWduZWQgY2hhciBtX3NsaWRlOworICAgIHVuc2lnbmVkIGNoYXIgbV9pbml0aWFsaXppbmdGb3JB
bGxvY2F0aW9uOworCisgICAgTXV0ZXgqIG1fbXV0ZXhQdHI7CiAKIHN0YXRpY19hc3NlcnQoCiAg
ICAgc2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX3NpemVD
bGFzcyk+OjptYXgoKSwKQEAgLTc5LDE1ICsxNjksMTcgQEAgc3RhdGljX2Fzc2VydCgKIAogdXNp
bmcgTGluZUNhY2hlID0gc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50
PjsKIAotaW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxp
bmUgdm9pZCBTbWFsbFBhZ2U6OnJlZigpCiB7CisgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKICAg
ICBCQVNTRVJUKCFtX3NsaWRlKTsKICAgICArK21fcmVmQ291bnQ7CiAgICAgQkFTU0VSVChtX3Jl
ZkNvdW50KTsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxQYWdlOjpkZXJlZihVbmlxdWVMb2NrSG9s
ZGVyJikKK2lubGluZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYoKQogeworICAgIEJBU1NFUlQoaXNM
b2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50
KTsKICAgICAtLW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1N0YXRpY1BlclByb2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJv
Y2Vzcy5oCmluZGV4IDM2NmMxNTZkZmU0MjlhMTRiMjJhNWQ1ZDhhYjQ4NmRmNDZiYjk4NTkuLjk0
MDVlNjE0ZjcxMWRjZTI2ZGY3ZjFlZTAzMzRkNGU4MjA1NmNmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCkBAIC01OSw5ICs1OSw5IEBAIGNsYXNzIFN0YXRp
Y1BlclByb2Nlc3MgewogICAgIHN0YXRpYyBUKiBnZXQoKQogICAgIHsKICAgICAgICAgVCogb2Jq
ZWN0ID0gZ2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgaWYg
KEJMSUtFTFkob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIHJl
dHVybiBnZXRTbG93Q2FzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBUKiBnZXRGYXN0Q2FzZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9WZWN0b3IuaAppbmRleCBkODQwOWIwNTcyZDc3MmY5ZjBkOWRlZTk4NjA4
YWRiMDk3M2M3ZDgxLi42YmIwODQzYzhkY2JkZTcyZTQ5YmU3Mzc1MjgwODQxZjBmNGY1NzE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKQEAgLTU2LDcgKzU2LDExIEBAIGNsYXNzIFZlY3RvciB7
CiAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QpOwogICAgIFQmIGxhc3QoKSB7IHJldHVybiBtX2J1
ZmZlclttX3NpemUgLSAxXTsgfQogCi0gICAgdm9pZCBwdXNoKGNvbnN0IFQmKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgcHVzaChVJiYpOworICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLik7CiAKICAgICBU
IHBvcCgpOwogICAgIFQgcG9wKHNpemVfdCk7CkBAIC0xMTksMTEgKzEyMywyMSBAQCBpbmxpbmUg
VCYgVmVjdG9yPFQ+OjpvcGVyYXRvcltdKHNpemVfdCBpKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChjb25zdCBUJiB2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFU+CitCSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjpwdXNoKFUmJiB2YWx1ZSkK
K3sKKyAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCisgICAgICAgIGdyb3dDYXBhY2l0eSgp
OworICAgIG5ldyAoJm1fYnVmZmVyW21fc2l6ZSsrXSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
CitCSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjplbXBsYWNlKEFyZ3MmJi4uLiBhcmdzKQogewogICAg
IGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKICAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7Ci0gICAg
bV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7CisgICAgbmV3ICgmbV9idWZmZXJbbV9zaXplKytd
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399906</attachid>
            <date>2020-05-20 16:10:59 -0700</date>
            <delta_ts>2020-05-20 17:36:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200520161057.patch</filename>
            <type>text/plain</type>
            <size>50873</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAKaW5kZXggNTA2ZDJkODc2YWVkMzIwNmRlODkyMzBmNzUzNzhkOGFiZWZkMzAzYy4uYzExNWE3
YmRmOGVkNWQ1NGQ2YTI1MTdlZmNjNTZiY2Q0MDhhMWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxsb2NhdG9yLmNwcApAQCAtMTIyLDkgKzEyMiw4IEBAIEJOT19JTkxJTkUgdm9pZCBBbGxvY2F0
b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6
CiB7CiAgICAgQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNo
ZXNbc2l6ZUNsYXNzXTsKIAotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgp
KTsKLSAgICBtX2RlYWxsb2NhdG9yLnByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAgbV9oZWFw
LmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9yLCBidW1w
UmFuZ2VDYWNoZSwgbV9kZWFsbG9jYXRvci5saW5lQ2FjaGUobG9jayksIGFjdGlvbik7CisgICAg
bV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9oZWFwLmFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzKHNpemVDbGFzcywgYWxsb2NhdG9yLCBidW1wUmFuZ2VDYWNoZSwgbV9kZWFs
bG9jYXRvci5wZXJDUFVDYWNoZSgpLCBhY3Rpb24pOwogfQogCiBCSU5MSU5FIHZvaWQgQWxsb2Nh
dG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6
ZUNsYXNzLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
cHByb3hQZXJDUFVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I4ZTc5NzlkMjhiOTlhMzJmOGUyNGJm
MzU2MjM0MTYzYWU4NjIyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2Fj
aGUuaCIKKworI2luY2x1ZGUgIkFyZW5hLmgiCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworTGlu
ZUNhY2hlKiBBcHByb3hQZXJDUFVDYWNoZTo6Z2V0U2xvd0Nhc2UoY29uc3QgTG9ja0hvbGRlciYp
Cit7CisgICAgaWYgKCFtX2xpbmVDYWNoZS5sb2FkKCkpIHsKKyAgICAgICAgdm9pZCogbWVtb3J5
ID0gQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXplb2YoTGluZUNhY2hlKSwgYWxpZ25vZihMaW5l
Q2FjaGUpKTsKKyAgICAgICAgYXV0byogdCA9IG5ldyAobWVtb3J5KSBMaW5lQ2FjaGUoKTsKKyAg
ICAgICAgbV9saW5lQ2FjaGUuc3RvcmUodCk7CisgICAgfQorICAgIHJldHVybiBtX2xpbmVDYWNo
ZS5sb2FkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGM0MGRiNDExY2I0MjI0YzE2
NjhiMWQ0MDM3YTQ2OTliYjg1ZTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNQVS5oIgorI2luY2x1ZGUgIlNpemVzLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisj
aW5jbHVkZSA8YXJyYXk+CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworLy8gQXBwcm94UGVyQ1BV
Q2FjaGUgaXMgKmFwcHJveGltYXRlKiBwZXItQ1BVIGNhY2hlLiBUaGUgZ29hbCBvZiB0aGlzIGNh
Y2hlIGlzIG5vdCBwcmVjaXNlbHkgY29uc3RydWN0aW5nIHBlci1DUFUgY2FjaGUsCisvLyByYXRo
ZXIgaXQgaXMgb2ZmZXJpbmcgcGVyLUNQVSBhZmZpbml0eSB0byBTbWFsbFBhZ2VzIGFzIG9wdGlt
aXphdGlvbi4KK2NsYXNzIEFwcHJveFBlckNQVUNhY2hlIHsKK3B1YmxpYzoKKyAgICBBcHByb3hQ
ZXJDUFVDYWNoZSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAgICB9CisKKyAgICBMaW5l
Q2FjaGUmIGxpbmVDYWNoZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCisgICAgeworICAgICAg
ICBpZiAoYXV0byogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKSkKKyAgICAgICAgICAgIHJldHVybiAq
b2JqZWN0OworICAgICAgICByZXR1cm4gKmdldFNsb3dDYXNlKGxvY2tlcik7CisgICAgfQorCisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTXV0ZXgm
IHBhZ2VNdXRleCgpIHsgcmV0dXJuIG1fcGFnZU11dGV4OyB9CisgICAgTXV0ZXgmIG11dGV4KCkg
eyByZXR1cm4gbV9tdXRleDsgfQorCisgICAgTGluZUNhY2hlKiBnZXRGYXN0Q2FzZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9saW5lQ2FjaGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGluZUNhY2hlKiBnZXRTbG93Q2FzZShjb25z
dCBMb2NrSG9sZGVyJik7CisKKyAgICBzdGQ6OmF0b21pYzxMaW5lQ2FjaGUqPiBtX2xpbmVDYWNo
ZSB7IG51bGxwdHIgfTsKKyAgICBNdXRleCBtX211dGV4OworICAgIE11dGV4IG1fcGFnZU11dGV4
OworICAgIHVuc2lnbmVkIG1faW5kZXggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFs
bG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMTJkMWQyZTg0NWM1YjRi
ZjRmNWQ0MDI3ZjU5NmFiNjhkZjQ0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FyZW5hLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkFyZW5hLmgiCisKKyNpbmNsdWRl
ICJWTUFsbG9jYXRlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIGJtYWxsb2Mg
eworCitERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJlbmEpOworCitBcmVuYTo6
QXJlbmEoY29uc3QgTG9ja0hvbGRlciYpCit7Cit9CisKKy8vIFJldHVybnMgemVyby1maWxsZWQg
bWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KK3ZvaWQqIEFyZW5hOjphbGxv
Y2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihBcmVuYTo6bXV0ZXgoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBtX2J1
bXBPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9idW1wT2Zmc2V0KTsK
KyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9idW1wQmFzZSArIG1fYnVtcE9mZnNldDsKKyAgICAg
ICAgbV9idW1wT2Zmc2V0ICs9IHNpemU7CisgICAgICAgIGlmIChtX2J1bXBPZmZzZXQgPD0gbV9i
dW1wTGltaXQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBzaXplX3QgYWxs
b2NhdGlvblNpemUgPSB2bVNpemUoc2l6ZSk7CisgICAgICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2
bUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgbV9idW1wQmFzZSA9IHN0YXRpY19j
YXN0PGNoYXIqPihhbGxvY2F0aW9uKTsKKyAgICAgICAgbV9idW1wT2Zmc2V0ID0gMDsKKyAgICAg
ICAgbV9idW1wTGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTkwODQ0Y2U3ZWNk
MTRjMDMwZTZhZDJkOGE3YWVkOTE2ZDQ1YjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BcmVuYS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
YXRpY1BlclByb2Nlc3MuaCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBBcmVuYSA6
IHB1YmxpYyBTdGF0aWNQZXJQcm9jZXNzPEFyZW5hPiB7CitwdWJsaWM6CisgICAgQkVYUE9SVCBB
cmVuYShjb25zdCBMb2NrSG9sZGVyJik7CisKKyAgICAvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1l
bW9yeSBieSB2aXJ0dWFsIG9mIHVzaW5nIHZtQWxsb2NhdGUuCisgICAgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpOworCitwcml2YXRlOgorICAgIGNoYXIqIG1f
YnVtcEJhc2UgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1fYnVtcE9mZnNldCB7IDAgfTsKKyAg
ICBzaXplX3QgbV9idW1wTGltaXQgeyAwIH07Cit9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NF
U1NfU1RPUkFHRShBcmVuYSk7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVyLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0JDb21waWxlci5oCmluZGV4IGNkYzQ3YWM5YTJlYzcwYWY3ZDVmZTQ4Y2Q3ODFkZGZiZDBj
YzUwNGEuLmYzZDA3NDM3ZmUzZTY5ZmQ4MDgxOTc2MGRiOWVhNmYwZTYzOWZkNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKKysrIGIvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9CQ29tcGlsZXIuaApAQCAtNzksMyArNzksMjEgQEAKICNpZiAhZGVmaW5lZChC
RkFMTFRIUk9VR0gpCiAjZGVmaW5lIEJGQUxMVEhST1VHSAogI2VuZGlmCisKKy8qIEJMSUtFTFkg
YW5kIEJVTkxJS0VMWSAqLworCisjaWYgIWRlZmluZWQoQkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdD
Q19DT01QQVRJQkxFKQorI2RlZmluZSBCTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCks
IDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJMSUtFTFkpCisjZGVmaW5lIEJMSUtFTFkoeCkg
KHgpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVTkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19D
T01QQVRJQkxFKQorI2RlZmluZSBCVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwg
MCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVOTElLRUxZKQorI2RlZmluZSBCVU5MSUtFTFko
eCkgKHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNw
cCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGVkMTQwZTVl
NGRhNDFkZTJiZDAzMDMzOGE1ZjYwNWQ1NWI0ODcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DUFUuY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ1BVLmgiCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWY0ZGRjODY3MjY5YjdjOWM3YjQ5NGQzYTkwODFkNWQ1Y2EzYmEyMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCisjaW5jbHVkZSA8Y3N0ZGludD4KKwor
bmFtZXNwYWNlIGJtYWxsb2MgeworCisjaWYgQkNQVShYODYpIHx8IEJDUFUoWDg2XzY0KQoraW5s
aW5lIHVpbnQ2NF90IHg4Nl9yZHRzY3AodWludDMyX3QmIGF1eCkKK3sKKyAgICB1aW50NjRfdCBy
YXggPSAwOworICAgIHVpbnQ2NF90IHJkeCA9IDA7CisgICAgYXNtIHZvbGF0aWxlKCJyZHRzY3Ai
IDogIj1hIiAocmF4KSwgIj1kIiAocmR4KSwgIj1jIiAoYXV4KSA6IDogKTsKKyAgICByZXR1cm4g
KHJkeCA8PCAzMikgKyByYXg7Cit9CisjZW5kaWYKKworaW5saW5lIHVuc2lnbmVkIGN1cnJlbnRD
UFVJbmRleCgpCit7CisjaWYgQk9TKERBUldJTikKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZf
NjQpCisgICAgc3RydWN0IHsgdWludHB0cl90IHAxLCBwMjsgfSBwOworICAgIGFzbSB2b2xhdGls
ZSgic2lkdCAlW3BdIiA6IFtwXSAiPSZtIiAocCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocC5wMSAmIDB4ZmYpOworI2VuZGlmCisjZWxzZQorICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAppbmRleCAyMWZiYjhmZTc5OGRkOTc4MzVh
MzhjY2Y4ZjFhYjAwZTNkYjI3NDMyLi4zNDhjMjVkZTgzNmEzZDA2MTdiZDUyZmYwNmZmYTc1MTFj
ZWVmZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKKysrIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCkBAIC05Myw5ICs5Myw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIGZvckVhY2hQYWdlKENodW5rKiBjaHVuaywgc2l6ZV90
IHBhZ2VTaXplLCBGdW5jCiBpbmxpbmUgQ2h1bms6OkNodW5rKHNpemVfdCBwYWdlU2l6ZSkKIHsK
ICAgICBzaXplX3Qgc21hbGxQYWdlQ291bnQgPSBwYWdlU2l6ZSAvIHNtYWxsUGFnZVNpemU7Ci0g
ICAgZm9yRWFjaFBhZ2UodGhpcywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAg
ICBmb3JFYWNoUGFnZSh0aGlzLCBwYWdlU2l6ZSwgWyZdKFNtYWxsUGFnZSogcGFnZXMpIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFBhZ2VDb3VudDsgKytpKQotICAgICAg
ICAgICAgcGFnZVtpXS5zZXRTbGlkZShpKTsKKyAgICAgICAgICAgIHBhZ2VzW2ldLmluaXRpYWxp
emUoaSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
RGVhbGxvY2F0b3IuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAK
aW5kZXggN2QxZTM0ZTk3YTc3OTJkOGZkMzA2YWUyMDVkNmY3MDEyM2FjOGI0MS4uNDhjODM0NzIw
MzE2NzViOTE0N2Q4NmE4MTY3OWUwODAyMjk3ODBlZiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9E
ZWFsbG9jYXRvci5jcHAKQEAgLTQxLDYgKzQxLDggQEAgRGVhbGxvY2F0b3I6OkRlYWxsb2NhdG9y
KEhlYXAmIGhlYXApCiAgICAgOiBtX2hlYXAoaGVhcCkKIHsKICAgICBCQVNTRVJUKCFFbnZpcm9u
bWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKKyAgICBtX3BlckNQVUNhY2hlID0g
Jm1faGVhcC5nZXRDdXJyZW50Q1BVQ2FjaGUoKTsKKyAgICBtX2NhY2hlVGltZSA9IG1hY2hfYXBw
cm94aW1hdGVfdGltZSgpOwogfQogCiBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKQEAgLTUw
LDE2ICs1MiwxNyBAQCBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKICAgICAKIHZvaWQgRGVh
bGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6
bXV0ZXgoKSk7Ci0KLSAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5kZWFs
bG9jYXRlTGluZUNhY2hlKGxvY2ssIGxpbmVDYWNoZShsb2NrKSk7CisgICAgcHJvY2Vzc09iamVj
dExvZygpOworICAgIC8vIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGNhY2hlKCkpOwogfQog
Ci12b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKFVuaXF1ZUxvY2tIb2xkZXImIGxv
Y2spCit2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKCkKIHsKKyAgICBNdXRleCog
aGVsZExvY2sgPSBudWxscHRyOworICAgIGF1dG8mIGNhY2hlID0gcGVyQ1BVQ2FjaGUoKTsKICAg
ICBmb3IgKE9iamVjdCBvYmplY3QgOiBtX29iamVjdExvZykKLSAgICAgICAgbV9oZWFwLmRlcmVm
U21hbGxMaW5lKGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKGxvY2spKTsKKyAgICAgICAgbV9oZWFw
LmRlcmVmU21hbGxMaW5lKCZoZWxkTG9jaywgb2JqZWN0LCBjYWNoZSk7CisgICAgbG9ja1N3aXRj
aCgmaGVsZExvY2ssIG51bGxwdHIpOwogICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7CiB9CiAKQEAg
LTc0LDEwICs3Nyw4IEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lk
KiBvYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9vYmplY3RMb2cu
c2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgVW5pcXVlTG9ja0hv
bGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2sp
OwotICAgIH0KKyAgICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFj
aXR5KCkpCisgICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKIAogICAgIG1fb2JqZWN0TG9nLnB1
c2gob2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxv
Y2F0b3IuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAppbmRleCBmMTRm
ZWVhNWNjMGI1NjM5YmZmY2FhNWRiZjdlMTgxYzJiNWMyZmUzLi4wYjljOGM0OWJiMjM5MzM3NDY1
MzJkZWM1ZGE4ZGM3YzdlNTdmZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0RlYWxsb2NhdG9yLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5o
CkBAIC0yNiwxMCArMjYsMTMgQEAKICNpZm5kZWYgRGVhbGxvY2F0b3JfaAogI2RlZmluZSBEZWFs
bG9jYXRvcl9oCiAKKyNpbmNsdWRlICJBcHByb3hQZXJDUFVDYWNoZS5oIgogI2luY2x1ZGUgIkJF
eHBvcnQuaCIKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKICNp
bmNsdWRlICJTbWFsbFBhZ2UuaCIKICNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxtYWNoL21h
Y2hfdGltZS5oPgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKQEAgLTQ2LDkgKzQ5LDE3IEBAIGNs
YXNzIERlYWxsb2NhdG9yIHsKICAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAgIHZvaWQg
c2NhdmVuZ2UoKTsKICAgICAKLSAgICB2b2lkIHByb2Nlc3NPYmplY3RMb2coVW5pcXVlTG9ja0hv
bGRlciYpOworICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZygpOwogICAgIAotICAgIExpbmVDYWNo
ZSYgbGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX2xpbmVDYWNoZTsgfQor
ICAgIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSgpCisgICAgeworICAgICAgICB1aW50
NjRfdCB0aW1lID0gbWFjaF9hcHByb3hpbWF0ZV90aW1lKCk7CisgICAgICAgIGlmICh0aW1lIC0g
bV9jYWNoZVRpbWUgPiBtX2hlYXAub25lU2Vjb25kKCkpIHsKKyAgICAgICAgICAgIG1fcGVyQ1BV
Q2FjaGUgPSAmbV9oZWFwLmdldEN1cnJlbnRDUFVDYWNoZSgpOworICAgICAgICAgICAgbV9jYWNo
ZVRpbWUgPSB0aW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqbV9wZXJDUFVDYWNoZTsK
KyAgICB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCopOwpA
QCAtNTYsNyArNjcsOCBAQCBjbGFzcyBEZWFsbG9jYXRvciB7CiAKICAgICBIZWFwJiBtX2hlYXA7
CiAgICAgRml4ZWRWZWN0b3I8dm9pZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0
TG9nOwotICAgIExpbmVDYWNoZSBtX2xpbmVDYWNoZTsgLy8gVGhlIEhlYXAgcmVtb3ZlcyBpdGVt
cyBmcm9tIHRoaXMgY2FjaGUuCisgICAgdWludDY0X3QgbV9jYWNoZVRpbWUgeyAwIH07CisgICAg
QXBwcm94UGVyQ1BVQ2FjaGUqIG1fcGVyQ1BVQ2FjaGUgeyBudWxscHRyIH07CiB9OwogCiBpbmxp
bmUgYm9vbCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZUZhc3RDYXNlKHZvaWQqIG9iamVjdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuY3BwCmluZGV4IDQ5NGEyYjU0Y2NjMTM4YTRkYWQwNWJmNjY4MTZjMzYz
N2Y1NGU3MTQuLjY5MTdlNGViNzcwMDc0Y2FjOWNiZDhhODVlZTNmNzU5ZWUwMWEyYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKKysrIGIvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkF2YWlsYWJs
ZU1lbW9yeS5oIgogI2luY2x1ZGUgIkJ1bGtEZWNvbW1pdC5oIgogI2luY2x1ZGUgIkJ1bXBBbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJDUFUuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUg
IkNyeXB0b1JhbmRvbS5oIgogI2luY2x1ZGUgIkRlYnVnSGVhcC5oIgpAQCAtNDYsOCArNDcsNTEg
QEAKICNpbmNsdWRlICJab25lLmgiCiAjZW5kaWYKIAorI2lmIEJPUyhEQVJXSU4pCisjaW5jbHVk
ZSA8c3lzL3N5c2N0bC5oPgorI2VsaWYgQk9TKExJTlVYKSB8fCBCT1MoRlJFRUJTRCkKKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK3N0YXRpYyBp
bnQgbnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpCit7CisgICAgY29uc3QgaW50IGRlZmF1bHRJZlVu
YXZhaWxhYmxlID0gMTsKKyAgICBzdGF0aWMgaW50IHNfbnVtYmVyT2ZDb3JlcyA9IC0xOworCisg
ICAgaWYgKHNfbnVtYmVyT2ZDb3JlcyA+IDApCisgICAgICAgIHJldHVybiBzX251bWJlck9mQ29y
ZXM7CisKKyAgICBpZiAoY29uc3QgY2hhciogY29yZXNFbnYgPSBnZXRlbnYoIldURl9udW1iZXJP
ZlByb2Nlc3NvckNvcmVzIikpIHsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb3JlczsKKyAg
ICAgICAgaWYgKHNzY2FuZihjb3Jlc0VudiwgIiV1IiwgJm51bWJlck9mQ29yZXMpID09IDEpIHsK
KyAgICAgICAgICAgIHNfbnVtYmVyT2ZDb3JlcyA9IG51bWJlck9mQ29yZXM7CisgICAgICAgICAg
ICByZXR1cm4gc19udW1iZXJPZkNvcmVzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlIFdURl9udW1iZXJPZlByb2Nl
c3NvckNvcmVzPSVzXG4iLCBjb3Jlc0Vudik7CisgICAgfQorCisjaWYgQk9TKERBUldJTikKKyAg
ICB1bnNpZ25lZCByZXN1bHQ7CisgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihyZXN1bHQpOwor
ICAgIGludCBuYW1lW10gPSB7CisgICAgICAgICAgICBDVExfSFcsCisgICAgICAgICAgICBIV19B
VkFJTENQVQorICAgIH07CisgICAgaW50IHN5c2N0bFJlc3VsdCA9IHN5c2N0bChuYW1lLCBzaXpl
b2YobmFtZSkgLyBzaXplb2YoaW50KSwgJnJlc3VsdCwgJmxlbmd0aCwgMCwgMCk7CisKKyAgICBz
X251bWJlck9mQ29yZXMgPSBzeXNjdGxSZXN1bHQgPCAwID8gZGVmYXVsdElmVW5hdmFpbGFibGUg
OiByZXN1bHQ7CisjZWxpZiBCT1MoTElOVVgpIHx8IEJPUyhGUkVFQlNEKQorICAgIGxvbmcgc3lz
Y29uZlJlc3VsdCA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworCisgICAgc19udW1i
ZXJPZkNvcmVzID0gc3lzY29uZlJlc3VsdCA8IDAgPyBkZWZhdWx0SWZVbmF2YWlsYWJsZSA6IHN0
YXRpY19jYXN0PGludD4oc3lzY29uZlJlc3VsdCk7CisjZWxzZQorICAgIHNfbnVtYmVyT2ZDb3Jl
cyA9IGRlZmF1bHRJZlVuYXZhaWxhYmxlOworI2VuZGlmCisgICAgcmV0dXJuIHNfbnVtYmVyT2ZD
b3JlczsKK30KKwogSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBMb2NrSG9sZGVyJikKICAgICA6
IG1fa2luZCB7IGtpbmQgfSwgbV9jb25zdGFudHMgeyAqSGVhcENvbnN0YW50czo6Z2V0KCkgfQog
ewpAQCAtNjUsNiArMTA5LDE3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgTG9ja0hvbGRl
ciYpCiAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDAp
KTsKICAgICB9CiAjZW5kaWYKKyAgICB1bnNpZ25lZCBjb3JlcyA9IHN0ZDo6bWluPHVuc2lnbmVk
Pihyb3VuZFVwVG9Qb3dlck9mVHdvKG51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSksIG1fY2FjaGUu
c2l6ZSgpKTsKKyAgICBtX2NvcmVNYXNrID0gY29yZXMgLSAxOworICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IGNvcmVzOyArK2luZGV4KQorICAgICAgICBtX2NhY2hlW2luZGV4
XS5pbml0aWFsaXplKGluZGV4KTsKKworICAgIHN0YXRpYyBtYWNoX3RpbWViYXNlX2luZm9fZGF0
YV90IHRpbWViYXNlSW5mbzsKKyAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF90aW1lYmFzZV9p
bmZvKCZ0aW1lYmFzZUluZm8pOworICAgIEJBU1NFUlQoa3IgPT0gS0VSTl9TVUNDRVNTKTsKKyAg
ICBCQVNTRVJUKHRpbWViYXNlSW5mby5kZW5vbSk7CisgICAgQlVOVVNFRChrcik7CisgICAgbV9v
bmVTZWNvbmQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMS4wICogKDEuMGU5ICogdGltZWJhc2VJ
bmZvLmRlbm9tKSAvIHRpbWViYXNlSW5mby5udW1lcik7CiAgICAgCiAgICAgbV9zY2F2ZW5nZXIg
PSBTY2F2ZW5nZXI6OmdldCgpOwogfQpAQCAtMTIyLDYgKzE3NywyNyBAQCB2b2lkIEhlYXA6OnNj
YXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIp
CiB2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1p
dCYgZGVjb21taXR0ZXIsIHNpemVfdCYgZGVmZXJyZWREZWNvbW1pdHMpCiAjZW5kaWYKIHsKKyNp
ZiAwCisgICAgdWludDY0X3QgdGltZSA9IG1hY2hfYXBwcm94aW1hdGVfdGltZSgpOworICAgIGZv
ciAoYXV0byYgcGVyQ1BVQ2FjaGUgOiBtX2NhY2hlKSB7CisgICAgICAgIGF1dG8qIGxpbmVDYWNo
ZSA9IHBlckNQVUNhY2hlLmdldEZhc3RDYXNlKCk7CisgICAgICAgIGlmICghbGluZUNhY2hlKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBXaWxsIGNoYW5nZSBpdCB0
byBiZSBwZXIgY2FjaGUuCisgICAgICAgIGZvciAoYXV0byYgbGlzdCA6ICpsaW5lQ2FjaGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBzaXplQ2xhc3MgPSAmbGlzdCAtICYoKmxpbmVDYWNoZSlbMF07
CisgICAgICAgICAgICBmb3IgKFNtYWxsUGFnZSogY3VycmVudCA9ICpsaXN0LmJlZ2luKCk7IGN1
cnJlbnQgIT0gKmxpc3QuZW5kKCk7KSB7CisgICAgICAgICAgICAgICAgYXV0byogbmV4dCA9IHN0
YXRpY19jYXN0PFNtYWxsUGFnZSo+KGN1cnJlbnQtPm5leHQpOworICAgICAgICAgICAgICAgIGlm
ICgodGltZSAtIGN1cnJlbnQtPmxhc3RDaGFpbmVkKCkpID4gbV9vbmVTZWNvbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgTGlzdDxTbWFsbFBhZ2U+OjpyZW1vdmUoY3VycmVudCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fbGluZUNhY2hlW3NpemVDbGFzc10ucHVzaChjdXJyZW50KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIGZvciAoYXV0byYgbGlzdCA6IG1f
ZnJlZVBhZ2VzKSB7CiAgICAgICAgIGZvciAoYXV0byogY2h1bmsgOiBsaXN0KSB7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8qIHBhZ2UgOiBjaHVuay0+ZnJlZVBhZ2VzKCkpIHsKQEAgLTE4NSw4ICsy
NjEsOSBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xk
ZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taQogfQogI2VuZGlmCiAKLXZvaWQgSGVhcDo6
ZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2Fj
aGUpCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoTGluZUNhY2hlJiBsaW5lQ2FjaGUp
CiB7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwogICAgIGZvciAoYXV0byYg
bGlzdCA6IGxpbmVDYWNoZSkgewogICAgICAgICB3aGlsZSAoIWxpc3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAmbGluZUNhY2hlWzBdOwpAQCAt
MjIxLDcgKzI5OCw4IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAjaWYgIUJVU0UoUEFSVElB
TF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgp
OwogI2VuZGlmCi0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7
CisgICAgICAgICAgICBwYWdlLT5pbml0SGFzRnJlZUxpbmVzKCk7CisgICAgICAgICAgICBwYWdl
LT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKICAgICAgICAgICAgIGNodW5r
LT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwogICAgICAgICAgICAgYWNjb3VudGVkSW5GcmVlYWJs
ZSArPSBwYWdlU2l6ZTsKICAgICAgICAgfSk7CkBAIC0yNzAsMjMgKzM0OCwzNCBAQCB2b2lkIEhl
YXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIENodW5rKiBj
aHVuaywgc2l6ZV90IHBhZwogICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBz
aXplLCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKIH0KIAotU21hbGxQ
YWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXpl
X3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24p
CitTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVfdCBzaXplQ2xh
c3MsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24p
CiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAKLSAg
ICBpZiAoIWxpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGxp
bmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgYm9vbCBpc0VtcHR5ID0gZmFsc2U7
CisgICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CisgICAgICAgIExv
Y2tIb2xkZXIgcGVyQ1BVQ2FjaGVMb2NrKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICBM
aW5lQ2FjaGUmIGxpbmVDYWNoZSA9IHBlckNQVUNhY2hlLmxpbmVDYWNoZShwZXJDUFVDYWNoZUxv
Y2spOworICAgICAgICBpZiAoIWxpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgYXV0byogcGFnZSA9IGxpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7Cisg
ICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAg
ICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0KIAotICAgIGlmICghbV9saW5lQ2FjaGVb
c2l6ZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xh
c3NdLnBvcEZyb250KCk7CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2sobXV0ZXgo
KSk7CisgICAgICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHBhZ2UgPSBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7
CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0KIAotICAgIG1fc2NhdmVuZ2VyLT5k
aWRTdGFydEdyb3dpbmcoKTsKLSAgICAKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBT
bWFsbFBhZ2UqIHsKKyAgICAgICAgbV9zY2F2ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOworCisg
ICAgICAgIGlzRW1wdHkgPSB0cnVlOwogICAgICAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25z
dGFudHMucGFnZUNsYXNzKHNpemVDbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX2Zy
ZWVQYWdlc1twYWdlQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFsbG9jYXRlU21hbGxD
aHVuayhsb2NrLCBwYWdlQ2xhc3MsIGFjdGlvbik7CisgICAgICAgICAgICBhbGxvY2F0ZVNtYWxs
Q2h1bmsoaGVhcExvY2ssIHBhZ2VDbGFzcywgYWN0aW9uKTsKICAgICAgICAgaWYgKGFjdGlvbiA9
PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsICYmIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxNCw3NiArNDAzLDEx
MCBAQCBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIExpbgogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0Up
CiAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogI2VuZGlmCi0KKyAg
ICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKICAgICAgICAg
cmV0dXJuIHBhZ2U7CiAgICAgfSgpOworCiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NF
UlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoaXNFbXB0eSkgeworICAgICAgICBNdXRleCogaGVs
ZExvY2sgPSBudWxscHRyOworICAgICAgICBwYWdlLT5sb2NrQW5kVHJ5VG9UYWtlQmlhcygmaGVs
ZExvY2ssICZwZXJDUFVDYWNoZS5wYWdlTXV0ZXgoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBh
Z2UtPmxvY2soKTsKICAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsKICAgICByZXR1
cm4gcGFnZTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQordm9pZCBI
ZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKFNtYWxsUGFnZSogcGFnZSwgT2JqZWN0IG9iamVjdCwg
QXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKQogewotICAgIEJBU1NFUlQoIW9iamVjdC5s
aW5lKCktPnJlZkNvdW50KGxvY2spKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFn
ZSgpOwotICAgIHBhZ2UtPmRlcmVmKGxvY2spOwotCi0gICAgaWYgKCFwYWdlLT5oYXNGcmVlTGlu
ZXMobG9jaykpIHsKLSAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwot
ICAgICAgICBsaW5lQ2FjaGVbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAgQlVO
VVNFRChvYmplY3QpOworICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KHBhZ2Up
KTsKKyAgICBwYWdlLT5kZXJlZigpOworCisgICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMoKSkg
eworICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXModHJ1ZSk7CisgICAgICAgIGlmIChwYWdl
LT5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwZXJDUFVDYWNo
ZS5tdXRleCgpKTsKKworICAgICAgICAgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0ZvckFsbG9j
YXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIFNvbWUg
ZnJlZSBsaW5lcyBleGlzdCwgYnV0IHRoZSBwYWdlIGlzIG5vdCBjaGFpbmVkIHRvIGFueSB0aHJl
YWQncyBMaW5lQ2FjaGUuCisgICAgICAgICAgICAvLyBMZXQncyBjaGFpbiBpdCB0byB0aGUgY3Vy
cmVudCBmcmVlaW5nIHRocmVhZCdzIExpbmVDYWNoZSBmb3IgcmV1c2luZy4KKyAgICAgICAgICAg
IHBlckNQVUNhY2hlLmxpbmVDYWNoZShsb2NrZXIpW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBh
Z2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUoJnBlckNQVUNhY2hlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwYWdlLT5yZWZDb3VudChs
b2NrKSkKKyAgICBpZiAocGFnZS0+cmVmQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c2l6ZV90IHBhZ2VDbGFzcyA9IG1fY29uc3RhbnRzLnBhZ2VDbGFzcyhwYWdlLT5zaXplQ2xhc3Mo
KSk7CisgICAgYXV0byByZXR1cm5TbWFsbFBhZ2UgPSBbJl0geworICAgICAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2sobXV0ZXgoKSk7CiAKLSAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHBoeXNpY2Fs
UGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNz
KSk7CisgICAgICAgIGlmIChwYWdlLT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICBMaXN0PFNtYWxsUGFnZT46OnJlbW92ZShwYWdlKTsgLy8g
J3BhZ2UnIG1heSBiZSBpbiBhbnkgdGhyZWFkJ3MgbGluZSBjYWNoZS4KLSAgICAKLSAgICBDaHVu
ayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOwotICAgIGlmIChjaHVuay0+ZnJlZVBhZ2VzKCku
aXNFbXB0eSgpKQotICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmspOwot
ICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOworICAgICAgICBzaXplX3QgcGFnZUNs
YXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKTsKIAotICAgIGNo
dW5rLT5kZXJlZigpOworICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHBoeXNpY2FsUGFnZVNp
emVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CiAK
LSAgICBpZiAoIWNodW5rLT5yZWZDb3VudCgpKSB7Ci0gICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VD
bGFzc10ucmVtb3ZlKGNodW5rKTsKKyAgICAgICAgaWYgKHBhZ2UtPmlzT25MaXN0KCkpCisgICAg
ICAgICAgICBMaXN0PFNtYWxsUGFnZT46OnJlbW92ZShwYWdlKTsKIAotICAgICAgICBpZiAoIW1f
Y2h1bmtDYWNoZVtwYWdlQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGVT
bWFsbENodW5rKGxvY2ssIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnBvcCgpLCBwYWdlQ2xhc3Mp
OworICAgICAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOworICAgICAgICBpZiAo
Y2h1bmstPmZyZWVQYWdlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3Bh
Z2VDbGFzc10ucHVzaChjaHVuayk7CisgICAgICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBh
Z2UpOwogCi0gICAgICAgIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnB1c2goY2h1bmspOwotICAg
IH0KLSAgICAKLSAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7
CisgICAgICAgIGNodW5rLT5kZXJlZigpOworCisgICAgICAgIGlmICghY2h1bmstPnJlZkNvdW50
KCkpIHsKKyAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsobG9jaywgbV9jaHVua0NhY2hlW3Bh
Z2VDbGFzc10ucG9wKCksIHBhZ2VDbGFzcyk7CisKKyAgICAgICAgICAgIG1fY2h1bmtDYWNoZVtw
YWdlQ2xhc3NdLnB1c2goY2h1bmspOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3Nj
YXZlbmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7CisgICAgfTsKKworICAgIEFw
cHJveFBlckNQVUNhY2hlKiBjYWNoZSA9IHBhZ2UtPmNhY2hlKCk7CisgICAgaWYgKGNhY2hlKSB7
CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhjYWNoZS0+bXV0ZXgoKSk7CisgICAgICAg
IGlmIChwYWdlLT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVyblNtYWxsUGFnZSgpOworICAgIH0gZWxzZQorICAgICAgICByZXR1
cm5TbWFsbFBhZ2UoKTsKIH0KIAotdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5
TWV0YWRhdGEoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywK
LSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hl
LAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3ZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xhc3Ms
IEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIEFw
cHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAg
ICAgQlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5k
KG1fa2luZCkpOwogCi0gICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9j
aywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUsIGFjdGlvbik7CisgICAgU21hbGxQYWdlKiBwYWdlID0g
YWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6ZUNsYXNzLCBwZXJDUFVDYWNoZSwgYWN0aW9uKTsK
ICAgICBpZiAoIXBhZ2UpIHsKICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlv
bjo6UmV0dXJuTnVsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgQkFTU0VSVChwYWdl
LT5pc0xvY2tlZCgpKTsKKyAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKwogICAgIFNt
YWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOwotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJl
ZUxpbmVzKGxvY2spKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAg
IGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewogICAg
ICAgICBmb3IgKCA7IGxpbmVOdW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyAr
K2xpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291
bnQobG9jaykpIHsKKyAgICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQo
cGFnZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6
ZUNsYXNzLCBsaW5lTnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CkBAIC0zOTYsNyArNTE5LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50
ID0gMDsKICAgICAgICAgCiAgICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1fY29uc3RhbnRz
LnNtYWxsTGluZUNvdW50KCk7ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGxpbmVz
W2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVO
dW1iZXJdLnJlZkNvdW50KHBhZ2UpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBhdXRvIGxpbmVPYmplY3RDb3VudCA9IG1fY29uc3RhbnRzLm9iamVjdENvdW50KHNpemVD
bGFzcywgbGluZU51bWJlcik7CkBAIC00MDQsOCArNTI3LDggQEAgdm9pZCBIZWFwOjphbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgIG9iamVjdENvdW50ICs9IGxpbmVPYmplY3RDb3VudDsKLSAgICAgICAgICAg
IGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lT2JqZWN0Q291bnQpOwotICAgICAgICAg
ICAgcGFnZS0+cmVmKGxvY2spOworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKHBh
Z2UsIGxpbmVPYmplY3RDb3VudCk7CisgICAgICAgICAgICBwYWdlLT5yZWYoKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4geyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKICAgICB9OwpAQCAtNDEz
LDE1ICs1MzYsMjYgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRh
dGEoCiAgICAgc2l6ZV90IGxpbmVOdW1iZXIgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAg
aWYgKCFmaW5kU21hbGxCdW1wUmFuZ2UobGluZU51bWJlcikpIHsKLSAgICAgICAgICAgIHBhZ2Ut
PnNldEhhc0ZyZWVMaW5lcyhsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNG
cmVlTGluZXMoZmFsc2UpOworICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7
CiAgICAgICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxs
IHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldENhY2hl
KG51bGxwdHIpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlv
bihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZy
ZWUgcmFuZ2VzIG1pZ2h0IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBpZiAocmFuZ2VD
YWNoZS5zaXplKCkgPT0gcmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5l
Q2FjaGVbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAgICAg
ICAgIHBlckNQVUNhY2hlLmxpbmVDYWNoZShsb2NrZXIpW3NpemVDbGFzc10ucHVzaChwYWdlKTsK
KyAgICAgICAgICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVs
bCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRDYWNo
ZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxs
b2NhdGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC00MzMsMjUgKzU2NywyNCBAQCB2b2lkIEhlYXA6OmFs
bG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBs
b2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVt
cFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1
cmVBY3Rpb24gYWN0aW9uKQordm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2Jq
ZWN0KHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdl
Q2FjaGUmIHJhbmdlQ2FjaGUsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgRmFpbHVy
ZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFT
U0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhbGxv
Y2F0b3Iuc2l6ZSgpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxv
Y2ssIHNpemVDbGFzcywgbGluZUNhY2hlLCBhY3Rpb24pOworICAgIFNtYWxsUGFnZSogcGFnZSA9
IGFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVDbGFzcywgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7
CiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rp
b246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEJBU1NFUlQocGFn
ZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOwor
ICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOworICAgIEJBU1NFUlQocGFnZS0+aGFzRnJl
ZUxpbmVzKCkpOwogCiAgICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oT2JqZWN0JiBp
dCwgT2JqZWN0JiBlbmQpIHsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9
IGl0ICsgc2l6ZSkgewotICAgICAgICAgICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KGxvY2sp
KQorICAgICAgICAgICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTQ2MSwxMiArNTk0LDEyIEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9i
amVjdCgKICAgICAgICAgY2hhciogYmVnaW4gPSBpdC5hZGRyZXNzKCk7CiAgICAgICAgIHVuc2ln
bmVkIHNob3J0IG9iamVjdENvdW50ID0gMDsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUgPD0g
ZW5kOyBpdCA9IGl0ICsgc2l6ZSkgewotICAgICAgICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291
bnQobG9jaykpCisgICAgICAgICAgICBpZiAoaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgKytvYmplY3RDb3VudDsKLSAgICAg
ICAgICAgIGl0LmxpbmUoKS0+cmVmKGxvY2spOwotICAgICAgICAgICAgaXQucGFnZSgpLT5yZWYo
bG9jayk7CisgICAgICAgICAgICBpdC5saW5lKCktPnJlZihwYWdlKTsKKyAgICAgICAgICAgIGl0
LnBhZ2UoKS0+cmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHsgYmVnaW4sIG9iamVj
dENvdW50IH07CiAgICAgfTsKQEAgLTQ3NSwxNSArNjA4LDI2IEBAIHZvaWQgSGVhcDo6YWxsb2Nh
dGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKICAgICBPYmplY3QgZW5kKGl0ICsgcGFnZVNpemUo
bV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKSkpOwogICAgIGZvciAoOzsp
IHsKICAgICAgICAgaWYgKCFmaW5kU21hbGxCdW1wUmFuZ2UoaXQsIGVuZCkpIHsKLSAgICAgICAg
ICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdl
LT5zZXRIYXNGcmVlTGluZXMoZmFsc2UpOworICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNP
bkxpc3QoKSk7CiAgICAgICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpS
ZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2Ut
PnNldENhY2hlKG51bGxwdHIpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9y
QWxsb2NhdGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdl
LCBzb21lIGZyZWUgcmFuZ2VzIG1pZ2h0IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBp
ZiAocmFuZ2VDYWNoZS5zaXplKCkgPT0gcmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAg
ICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAg
ICAgICAgICAgICAgIHBlckNQVUNhY2hlLmxpbmVDYWNoZShsb2NrZXIpW3NpemVDbGFzc10ucHVz
aChwYWdlKTsKKyAgICAgICAgICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6
UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdl
LT5zZXRDYWNoZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCmluZGV4IDU0
OWRkMjRmNmM1ODk2NDZjZDIyNjA0ZDhjOWI0OWVmMGM3NDUwNDMuLmI4ZDBmNjUwMzI5ZjMzODAz
ODk3ZmQ3NGJkZTZhN2ZkMWZiOGM2YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjaWZuZGVmIEhlYXBfaAogI2RlZmluZSBIZWFwX2gKIAorI2luY2x1ZGUgIkFwcHJv
eFBlckNQVUNhY2hlLmgiCiAjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiQ2h1bmsu
aCIKICNpbmNsdWRlICJGYWlsdXJlQWN0aW9uLmgiCkBAIC02MiwxMCArNjMsOSBAQCBjbGFzcyBI
ZWFwIHsKICAgICAKICAgICBIZWFwS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CiAgICAgCi0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhVbmlxdWVMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVDbGFzcywKLSAgICAgICAgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNh
Y2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7Ci0gICAgdm9pZCBkZXJlZlNtYWxsTGlu
ZShVbmlxdWVMb2NrSG9sZGVyJiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRlYWxs
b2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYpOworICAgIHZvaWQg
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYs
IEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVyQ1BVQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAg
ICB2b2lkIGRlcmVmU21hbGxMaW5lKE11dGV4KiosIE9iamVjdCwgQXBwcm94UGVyQ1BVQ2FjaGUm
KTsKKyAgICB2b2lkIGRlYWxsb2NhdGVMaW5lQ2FjaGUoTGluZUNhY2hlJik7CiAKICAgICB2b2lk
KiBhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3QsIEZhaWx1cmVBY3Rpb24pOwogICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tI
b2xkZXImLCB2b2lkKik7CkBAIC05Miw2ICs5MiwxNiBAQCBjbGFzcyBIZWFwIHsKIAogICAgIHZv
aWQgbWFya0FsbExhcmdlQXNFbGlnaWJpbGUoY29uc3QgTG9ja0hvbGRlciYpOwogCisgICAgQXBw
cm94UGVyQ1BVQ2FjaGUmIGdldEN1cnJlbnRDUFVDYWNoZSgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGN1cnJlbnRDUFVJbmRleCgpICYgbV9jb3JlTWFzazsKKyAgICAgICAgcmV0
dXJuIG1fY2FjaGVbaW5kZXhdOworICAgIH0KKyAgICB1aW50NjRfdCBvbmVTZWNvbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb25lU2Vjb25kOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGRlY29tbWl0TGFyZ2VSYW5nZShVbmlxdWVMb2NrSG9sZGVyJiwgTGFyZ2VSYW5n
ZSYsIEJ1bGtEZWNvbW1pdCYpOwogCkBAIC0xMDksMTMgKzExOSwxMSBAQCBjbGFzcyBIZWFwIHsK
ICAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsgLy8gTWF5IGNyYXNoIGlmICF1c2luZ0dpZ2Fj
YWdlKCkuCiAgICAgc2l6ZV90IGdpZ2FjYWdlU2l6ZSgpOwogCi0gICAgdm9pZCBhbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoVW5pcXVlTG9ja0hvbGRlciYsCi0gICAgICAgIHNpemVf
dCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYs
IEZhaWx1cmVBY3Rpb24pOwotICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVj
dChVbmlxdWVMb2NrSG9sZGVyJiwKLSAgICAgICAgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9j
YXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAg
dm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoc2l6ZV90IHNpemVDbGFzcywg
QnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVyQ1BVQ2FjaGUmLCBGYWls
dXJlQWN0aW9uKTsKKyAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qoc2l6
ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVy
Q1BVQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKIAotICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFs
bFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYsIEZh
aWx1cmVBY3Rpb24pOwotICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9s
ZGVyJiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKKyAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlTG9ja2Vk
U21hbGxQYWdlKHNpemVfdCBzaXplQ2xhc3MsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFj
dGlvbik7CisgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKFNtYWxsUGFnZSosIE9iamVjdCwg
QXBwcm94UGVyQ1BVQ2FjaGUmKTsKIAogICAgIHZvaWQgYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1
ZUxvY2tIb2xkZXImLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0aW9uKTsKICAgICB2b2lk
IGRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImLCBDaHVuayosIHNpemVfdCBw
YWdlQ2xhc3MpOwpAQCAtMTQzLDYgKzE1MSwxMCBAQCBjbGFzcyBIZWFwIHsKICAgICBzaXplX3Qg
bV9mb290cHJpbnQgeyAwIH07CiAgICAgc2l6ZV90IG1fZnJlZWFibGVNZW1vcnkgeyAwIH07CiAK
KyAgICBzdGQ6OmFycmF5PEFwcHJveFBlckNQVUNhY2hlLCAxMjg+IG1fY2FjaGU7CisgICAgdW5z
aWduZWQgbV9jb3JlTWFzayB7IDAgfTsKKyAgICB1aW50NjRfdCBtX29uZVNlY29uZCB7IDAgfTsK
KwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICBQaHlzaWNhbFBhZ2VNYXAgbV9w
aHlzaWNhbFBhZ2VNYXA7CiAjZW5kaWYKQEAgLTE1MiwyMSArMTY0LDIxIEBAIGNsYXNzIEhlYXAg
ewogI2VuZGlmCiB9OwogCi1pbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
cygKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1
bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAg
TGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQoraW5saW5lIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVyQ1BV
Q2FjaGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoc2l6
ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQotICAgICAgICByZXR1
cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKGxvY2ssIHNpemVDbGFzcywgYWxs
b2NhdG9yLCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUsIGFjdGlvbik7Ci0gICAgcmV0dXJuIGFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJh
bmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwg
cGVyQ1BVQ2FjaGUsIGFjdGlvbik7CisgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlPYmplY3Qoc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2FjaGUsIHBlckNQVUNhY2hlLCBh
Y3Rpb24pOwogfQogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShVbmlxdWVMb2Nr
SG9sZGVyJiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK2lubGlu
ZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKE11dGV4KiogaGVsZExvY2ssIE9iamVjdCBvYmpl
Y3QsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSkKIHsKLSAgICBpZiAoIW9iamVjdC5s
aW5lKCktPmRlcmVmKGxvY2spKQorICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7
CisgICAgcGFnZS0+c3dpdGNoTG9jayhoZWxkTG9jayk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xv
Y2tlZCgpKTsKKyAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVmKHBhZ2UpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBvYmplY3QsIGxpbmVDYWNoZSk7
CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShwYWdlLCBvYmplY3QsIHBlckNQVUNhY2hlKTsKIH0K
IAogaW5saW5lIGJvb2wgSGVhcDo6aXNMYXJnZSh2b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpc3QuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlz
dC5oCmluZGV4IDYzOWVkYzllNGY2ZWNiMzNhM2ZmYmNlNTMxMzBkMjJiMjk4YWMyYTYuLjNkYTc1
YjMyMmM0MjE3NzQ4MDQ0YmZkMTQ0MWJmMDQwMmY1Mzk1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvTGlzdC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5o
CkBAIC0zMiw2ICszMiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IExpc3ROb2Rl
IHsKICAgICBMaXN0Tm9kZTxUPiogcHJldiB7IG51bGxwdHIgfTsKICAgICBMaXN0Tm9kZTxUPiog
bmV4dCB7IG51bGxwdHIgfTsKKworICAgIGJvb2wgaXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQkFTU0VSVCghIXByZXYgPT0gISFuZXh0KTsKKyAgICAgICAgcmV0dXJuICEhcHJldjsK
KyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9NdXRleC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oCmlu
ZGV4IGY0Y2MyYWE0MTFjOTI4MzIyMTI5MWNhODU4MDIwZDMwMThhYTIzYWQuLmJlNmEzZjFiYzFi
OTNkMmEzNmZhNDhkODJhMThhMGM5ZWU0MWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTXV0ZXguaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKQEAg
LTQ4LDkgKzQ4LDEyIEBAIGNsYXNzIE11dGV4IHsKICAgICBib29sIHRyeV9sb2NrKCk7CiAgICAg
dm9pZCB1bmxvY2soKTsKIAorICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKKwogcHJpdmF0ZToK
ICAgICBCRVhQT1JUIHZvaWQgbG9ja1Nsb3dDYXNlKCk7CiAKKyAgICAvLyBFbnN1cmUgdGhhdCBN
dXRleCBpcyB6ZXJvLWluaXRpYWxpemVkLiBTbWFsbFBhZ2UgcmVsaWVzIG9uIHRoYXQuCiAgICAg
c3RkOjphdG9taWM8Ym9vbD4gbV9mbGFnIHsgZmFsc2UgfTsKICAgICBzdGQ6OmF0b21pYzxib29s
PiBtX2lzU3Bpbm5pbmcgeyBmYWxzZSB9OwogfTsKQEAgLTkyLDQgKzk1LDIwIEBAIGlubGluZSB2
b2lkIE11dGV4Ojp1bmxvY2soKQogICAgIG1fZmxhZy5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSk7CiB9CiAKK2lubGluZSBib29sIE11dGV4Ojppc0xvY2tlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZmxhZzsKK30KKworaW5saW5lIHZvaWQgbG9ja1N3aXRjaChNdXRl
eCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKK3sKKyAgICBpZiAoQkxJS0VMWShsb2NrID09ICpo
ZWxkTG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAo
KmhlbGRMb2NrKS0+dW5sb2NrKCk7CisgICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICBpZiAobG9j
aykKKyAgICAgICAgbG9jay0+bG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNwcAppbmRleCBkODJmMjViNWU5OGRkYTljYTZm
MGUzM2FkNDgxNTJjODFkY2QyZGY3Li44NTM3OGU5YmEyNDRkYTI2NGM5OGI0YzEyNTJhZWFjMDY2
ZDM2Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKQEAgLTI1LDcgKzI1
LDcgQEAKIAogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAotI2luY2x1ZGUgIlZNQWxsb2NhdGUu
aCIKKyNpbmNsdWRlICJBcmVuYS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBi
bWFsbG9jIHsKQEAgLTM1LDI5ICszNSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAKIHN0YXRpYyBNdXRleCBzX211dGV4OwogCi1zdGF0aWMgY2hhciogc19idW1w
QmFzZTsKLXN0YXRpYyBzaXplX3Qgc19idW1wT2Zmc2V0Owotc3RhdGljIHNpemVfdCBzX2J1bXBM
aW1pdDsKLQogc3RhdGljIFBlclByb2Nlc3NEYXRhKiBzX3RhYmxlW3RhYmxlU2l6ZV07CiAKLS8v
IFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0
ZS4KLXN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkK
LXsKLSAgICBzX2J1bXBPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc19i
dW1wT2Zmc2V0KTsKLSAgICB2b2lkKiByZXN1bHQgPSBzX2J1bXBCYXNlICsgc19idW1wT2Zmc2V0
OwotICAgIHNfYnVtcE9mZnNldCArPSBzaXplOwotICAgIGlmIChzX2J1bXBPZmZzZXQgPD0gc19i
dW1wTGltaXQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gdm1TaXplKHNpemUpOwotICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9j
YXRlKGFsbG9jYXRpb25TaXplKTsKLSAgICBzX2J1bXBCYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGFsbG9jYXRpb24pOwotICAgIHNfYnVtcE9mZnNldCA9IDA7Ci0gICAgc19idW1wTGltaXQgPSBh
bGxvY2F0aW9uU2l6ZTsKLSAgICByZXR1cm4gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKLX0K
LQogUGVyUHJvY2Vzc0RhdGEqIGdldFBlclByb2Nlc3NEYXRhKHVuc2lnbmVkIGhhc2gsIGNvbnN0
IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQogewog
ICAgIExvY2tIb2xkZXIgbG9jayhzX211dGV4KTsKQEAgLTc2LDEwICs1NSwxMSBAQCBQZXJQcm9j
ZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEodW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciogZGlz
YW1iaWd1YXRvciwgc2l6ZQogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVkOiBDcmVhdGluZyBuZXcgJXNcbiIsIGdldHBpZCgpLCBkaXNhbWJpZ3VhdG9y
KTsKLSAgICB2b2lkKiByYXdEYXRhUHRyID0gYWxsb2NhdGUoc2l6ZW9mKFBlclByb2Nlc3NEYXRh
KSwgc3RkOjphbGlnbm1lbnRfb2Y8UGVyUHJvY2Vzc0RhdGE+Ojp2YWx1ZSk7CisgICAgYXV0byog
YXJlbmEgPSBBcmVuYTo6Z2V0KCk7CisgICAgdm9pZCogcmF3RGF0YVB0ciA9IGFyZW5hLT5hbGxv
Y2F0ZShzaXplb2YoUGVyUHJvY2Vzc0RhdGEpLCBzdGQ6OmFsaWdubWVudF9vZjxQZXJQcm9jZXNz
RGF0YT46OnZhbHVlKTsKICAgICBQZXJQcm9jZXNzRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFBl
clByb2Nlc3NEYXRhKj4ocmF3RGF0YVB0cik7CiAgICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRp
c2FtYmlndWF0b3I7Ci0gICAgZGF0YS0+bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50
KTsKKyAgICBkYXRhLT5tZW1vcnkgPSBhcmVuYS0+YWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsK
ICAgICBkYXRhLT5zaXplID0gc2l6ZTsKICAgICBkYXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
CiAgICAgZGF0YS0+bmV4dCA9IGJ1Y2tldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oCmlu
ZGV4IGQ5Yjc0YWI4YjlmZTM5ZTAwMDkyOGJmYjY2NTNlNTA1Yjg5Y2ZkMjIuLmRlMjY3MjA1ZTgy
Yzc0ZDYxMDE1YzBhYjllYjIwOTZhNjVjMWI4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvU21hbGxMaW5lLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExp
bmUuaApAQCAtMjksMTUgKzI5LDIxIEBACiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUg
Ik11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5o
IgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIFNtYWxs
TGluZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5pcXVlTG9ja0hvbGRlciYsIHVuc2lnbmVk
IGNoYXIgPSAxKTsKLSAgICBib29sIGRlcmVmKFVuaXF1ZUxvY2tIb2xkZXImKTsKLSAgICB1bnNp
Z25lZCByZWZDb3VudChVbmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQor
ICAgIHZvaWQgcmVmKFNtYWxsUGFnZSosIHVuc2lnbmVkIGNoYXIgPSAxKTsKKyAgICBib29sIGRl
cmVmKFNtYWxsUGFnZSopOworICAgIHVuc2lnbmVkIHJlZkNvdW50KFNtYWxsUGFnZSogcGFnZSkK
KyAgICB7CisgICAgICAgIEJVTlVTRUQocGFnZSk7CisgICAgICAgIEJBU1NFUlQocGFnZS0+aXNM
b2NrZWQoKSk7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50OworICAgIH0KICAgICAKICAgICBj
aGFyKiBiZWdpbigpOwogICAgIGNoYXIqIGVuZCgpOwpAQCAtNTEsMTQgKzU3LDE4IEBAIHN0YXRp
Y19hc3NlcnQoCiAKIH07CiAKLWlubGluZSB2b2lkIFNtYWxsTGluZTo6cmVmKFVuaXF1ZUxvY2tI
b2xkZXImLCB1bnNpZ25lZCBjaGFyIHJlZkNvdW50KQoraW5saW5lIHZvaWQgU21hbGxMaW5lOjpy
ZWYoU21hbGxQYWdlKiBwYWdlLCB1bnNpZ25lZCBjaGFyIHJlZkNvdW50KQogeworICAgIEJVTlVT
RUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFt
X3JlZkNvdW50KTsKICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CiB9CiAKLWlubGluZSBib29s
IFNtYWxsTGluZTo6ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUgYm9vbCBTbWFsbExp
bmU6OmRlcmVmKFNtYWxsUGFnZSogcGFnZSkKIHsKKyAgICBCVU5VU0VEKHBhZ2UpOworICAgIEJB
U1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50KTsKICAgICAt
LW1fcmVmQ291bnQ7CiAgICAgcmV0dXJuICFtX3JlZkNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxQYWdlLmgKaW5kZXggNDM1ZTVmNzA5NzgwYjY2NzMyNTA3ZGQ2ZmMxMjIxYjdjZWU2ZTdjOS4u
ZDc3NTIxOGFmOWE3ZGM2MjBiMjJhMDY3NDYxMWNkMTRjYzhlODM2NiAxMDA2NDQKLS0tIGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NtYWxsUGFnZS5oCkBAIC0zNCwxOSArMzQsMzMgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2Mg
ewogCitjbGFzcyBBcHByb3hQZXJDUFVDYWNoZTsKIGNsYXNzIFNtYWxsTGluZTsKIAogY2xhc3Mg
U21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewogcHVibGljOgotICAgIHZv
aWQgcmVmKFVuaXF1ZUxvY2tIb2xkZXImKTsKLSAgICBib29sIGRlcmVmKFVuaXF1ZUxvY2tIb2xk
ZXImKTsKLSAgICB1bnNpZ25lZCByZWZDb3VudChVbmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4g
bV9yZWZDb3VudDsgfQorICAgIHZvaWQgcmVmKCk7CisgICAgYm9vbCBkZXJlZigpOworICAgIHVu
c2lnbmVkIHJlZkNvdW50KCkKKyAgICB7CisgICAgICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50OworICAgIH0KICAgICAKICAgICBzaXplX3Qgc2l6ZUNs
YXNzKCkgeyByZXR1cm4gbV9zaXplQ2xhc3M7IH0KICAgICB2b2lkIHNldFNpemVDbGFzcyhzaXpl
X3Qgc2l6ZUNsYXNzKSB7IG1fc2l6ZUNsYXNzID0gc2l6ZUNsYXNzOyB9CiAgICAgCi0gICAgYm9v
bCBoYXNGcmVlTGluZXMoVW5pcXVlTG9ja0hvbGRlciYpIGNvbnN0IHsgcmV0dXJuIG1faGFzRnJl
ZUxpbmVzOyB9Ci0gICAgdm9pZCBzZXRIYXNGcmVlTGluZXMoVW5pcXVlTG9ja0hvbGRlciYsIGJv
b2wgaGFzRnJlZUxpbmVzKSB7IG1faGFzRnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOyB9CisgICAg
Ym9vbCBoYXNGcmVlTGluZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tl
ZCgpKTsKKyAgICAgICAgcmV0dXJuIG1faGFzRnJlZUxpbmVzOworICAgIH0KKyAgICB2b2lkIHNl
dEhhc0ZyZWVMaW5lcyhib29sIGhhc0ZyZWVMaW5lcykKKyAgICB7CisgICAgICAgIEJBU1NFUlQo
aXNMb2NrZWQoKSk7CisgICAgICAgIG1faGFzRnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOworICAg
IH0KKyAgICB2b2lkIGluaXRIYXNGcmVlTGluZXMoKSB7IG1faGFzRnJlZUxpbmVzID0gdHJ1ZTsg
fQogICAgIAogICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcygpIHsgcmV0dXJuIG1faGFzUGh5c2lj
YWxQYWdlczsgfQogICAgIHZvaWQgc2V0SGFzUGh5c2ljYWxQYWdlcyhib29sIGhhc1BoeXNpY2Fs
UGFnZXMpIHsgbV9oYXNQaHlzaWNhbFBhZ2VzID0gaGFzUGh5c2ljYWxQYWdlczsgfQpAQCAtNjAs
MTcgKzc0LDk4IEBAIGNsYXNzIFNtYWxsUGFnZSA6IHB1YmxpYyBMaXN0Tm9kZTxTbWFsbFBhZ2U+
IHsKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7CiAKICAgICB1bnNpZ25lZCBjaGFyIHNsaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zbGlkZTsgfQotICAgIHZvaWQgc2V0U2xpZGUodW5zaWduZWQgY2hh
ciBzbGlkZSkgeyBtX3NsaWRlID0gc2xpZGU7IH0KLSAgICAKKworICAgIGJvb2wgaW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbjsgfQorICAgIHZvaWQgc2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihib29sIGluaXRp
YWxpemluZ0ZvckFsbG9jYXRpb24pIHsgbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uID0gaW5p
dGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsgfQorCisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIGNhY2hl
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZTsgfQorICAgIHZvaWQgc2V0Q2FjaGUoQXBwcm94UGVy
Q1BVQ2FjaGUqIGNhY2hlKSB7IG1fY2FjaGUgPSBjYWNoZTsgfQorCisgICAgdm9pZCBpbml0aWFs
aXplKHVuc2lnbmVkIGNoYXIgc2xpZGUpCisgICAgeworICAgICAgICBtX3NsaWRlID0gc2xpZGU7
CisgICAgICAgIG1fbXV0ZXhQdHIgPSAmbV9mYWxsYmFja011dGV4OworICAgIH0KKworICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbXV0ZXhQdHItPmlz
TG9ja2VkKCk7CisgICAgfQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgICAgICAg
ICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7CisgICAgICAgICAgICBpZiAobG9ja1dpdGhVbmJp
YXMoJmhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBsb2NrLT51bmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkK
KyAgICB7CisgICAgICAgIG1fbXV0ZXhQdHItPnVubG9jaygpOworICAgIH0KKworICAgIHZvaWQg
c3dpdGNoTG9jayhNdXRleCoqIGhlbGRMb2NrKQorICAgIHsKKyAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgTXV0ZXgqIGxvY2sgPSBtX211dGV4UHRyOworICAgICAgICAgICAgaWYgKEJM
SUtFTFkobG9jayA9PSAqaGVsZExvY2spKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgaWYgKCpoZWxkTG9jaykKKyAgICAgICAgICAgICAgICAoKmhlbGRMb2NrKS0+dW5s
b2NrKCk7CisKKyAgICAgICAgICAgIGlmIChsb2NrV2l0aFVuYmlhcyhoZWxkTG9jaywgbG9jaykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBs
b2NrV2l0aFVuYmlhcyhNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKKyAgICB7CisgICAg
ICAgICpoZWxkTG9jayA9IGxvY2s7CisgICAgICAgIGlmIChCTElLRUxZKGxvY2stPnRyeV9sb2Nr
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGxvY2sgPT0gbV9tdXRleFB0cjsKKworICAgICAgICAv
LyBXZSBmb3VuZCB0aGF0IGxvY2sgaXMgY29udGVuZGVkIGJlY2F1c2UgdHJ5LWxvY2sgZmFpbGVk
LgorICAgICAgICBsb2NrLT5sb2NrKCk7CisgICAgICAgIGlmIChsb2NrICE9IG1fbXV0ZXhQdHIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGxvY2sgIT0gJm1fZmFs
bGJhY2tNdXRleCkgeworICAgICAgICAgICAgLy8gQ29udGVuZGVkIGFuZCB1c2luZyBwZXItY3B1
IGxvY2suIENoYW5nZSB0aGlzIFNtYWxsUGFnZSdzIGxvY2sgdG8gZmluZS1ncmFpbmVkIGZhbGxi
YWNrIGxvY2suCisgICAgICAgICAgICBtX2ZhbGxiYWNrTXV0ZXgubG9jaygpOworICAgICAgICAg
ICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgICAgICAgICBsb2NrLT51bmxv
Y2soKTsKKyAgICAgICAgICAgICpoZWxkTG9jayA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBsb2NrQW5kVHJ5VG9U
YWtlQmlhcyhNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9ja1RvQmlhc1RvKQorICAgIHsKKyAg
ICAgICAgbV9tdXRleFB0ciA9IGxvY2tUb0JpYXNUbzsKKyAgICAgICAgQkFTU0VSVChtX211dGV4
UHRyID09IGxvY2tUb0JpYXNUbyk7CisgICAgICAgIGxvY2tTd2l0Y2goaGVsZExvY2ssIGxvY2tU
b0JpYXNUbyk7CisgICAgICAgIEJBU1NFUlQobV9tdXRleFB0ciA9PSBsb2NrVG9CaWFzVG8pOwor
ICAgIH0KKwogcHJpdmF0ZToKKyAgICBNdXRleCBtX2ZhbGxiYWNrTXV0ZXg7CiAgICAgdW5zaWdu
ZWQgY2hhciBtX2hhc0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzUGh5c2lj
YWxQYWdlczogMTsKICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIHVuc2lnbmVkIGNo
YXIgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U6IDE7CiAjZW5kaWYKICAgICB1bnNpZ25lZCBjaGFy
IG1fcmVmQ291bnQ6IDc7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFzczsKKyAgICB1bnNp
Z25lZCBjaGFyIG1fc2l6ZUNsYXNzIHsgMCB9OwogICAgIHVuc2lnbmVkIGNoYXIgbV9zbGlkZTsK
KyAgICB1bnNpZ25lZCBjaGFyIG1faW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsKKworICAgIE11
dGV4KiBtX211dGV4UHRyOworICAgIEFwcHJveFBlckNQVUNhY2hlKiBtX2NhY2hlIHsgbnVsbHB0
ciB9OwogCiBzdGF0aWNfYXNzZXJ0KAogICAgIHNpemVDbGFzc0NvdW50IDw9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZGVjbHR5cGUobV9zaXplQ2xhc3MpPjo6bWF4KCksCkBAIC03OSwxNSArMTc0LDE3
IEBAIHN0YXRpY19hc3NlcnQoCiAKIHVzaW5nIExpbmVDYWNoZSA9IHN0ZDo6YXJyYXk8TGlzdDxT
bWFsbFBhZ2U+LCBzaXplQ2xhc3NDb3VudD47CiAKLWlubGluZSB2b2lkIFNtYWxsUGFnZTo6cmVm
KFVuaXF1ZUxvY2tIb2xkZXImKQoraW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoKQogeworICAg
IEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgKyttX3Jl
ZkNvdW50OwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiB9CiAKLWlubGluZSBib29sIFNtYWxs
UGFnZTo6ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUgYm9vbCBTbWFsbFBhZ2U6OmRl
cmVmKCkKIHsKKyAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQoIW1fc2xpZGUp
OwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiAgICAgLS1tX3JlZkNvdW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmggYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaAppbmRleCAzNjZjMTU2ZGZlNDI5YTE0YjIy
YTVkNWQ4YWI0ODZkZjQ2YmI5ODU5Li45NDA1ZTYxNGY3MTFkY2UyNmRmN2YxZWUwMzM0ZDRlODIw
NTZjZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaApAQCAt
NTksOSArNTksOSBAQCBjbGFzcyBTdGF0aWNQZXJQcm9jZXNzIHsKICAgICBzdGF0aWMgVCogZ2V0
KCkKICAgICB7CiAgICAgICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7Ci0gICAgICAgIGlm
ICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgICAgIGlmIChCTElLRUxZKG9iamVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgICByZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgVCogZ2V0RmFzdENhc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9WZWN0b3IuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKaW5kZXggZDg0
MDliMDU3MmQ3NzJmOWYwZDlkZWU5ODYwOGFkYjA5NzNjN2Q4MS4uNmJiMDg0M2M4ZGNiZGU3MmU0
OWJlNzM3NTI4MDg0MWYwZjRmNTcxNiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9WZWN0b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCkBAIC01Niw3
ICs1NiwxMSBAQCBjbGFzcyBWZWN0b3IgewogICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90KTsKICAg
ICBUJiBsYXN0KCkgeyByZXR1cm4gbV9idWZmZXJbbV9zaXplIC0gMV07IH0KIAotICAgIHZvaWQg
cHVzaChjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHB1c2go
VSYmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgZW1w
bGFjZShBcmdzJiYuLi4pOwogCiAgICAgVCBwb3AoKTsKICAgICBUIHBvcChzaXplX3QpOwpAQCAt
MTE5LDExICsxMjMsMjEgQEAgaW5saW5lIFQmIFZlY3RvcjxUPjo6b3BlcmF0b3JbXShzaXplX3Qg
aSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUJJTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1
c2goY29uc3QgVCYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQklOTElORSB2b2lkIFZl
Y3RvcjxUPjo6cHVzaChVJiYgdmFsdWUpCit7CisgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5
KQorICAgICAgICBncm93Q2FwYWNpdHkoKTsKKyAgICBuZXcgKCZtX2J1ZmZlclttX3NpemUrK10p
IFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorQklOTElORSB2b2lkIFZlY3RvcjxUPjo6ZW1wbGFj
ZShBcmdzJiYuLi4gYXJncykKIHsKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCiAgICAg
ICAgIGdyb3dDYXBhY2l0eSgpOwotICAgIG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOworICAg
IG5ldyAoJm1fYnVmZmVyW21fc2l6ZSsrXSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399919</attachid>
            <date>2020-05-20 17:36:59 -0700</date>
            <delta_ts>2020-05-20 18:15:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200520173657.patch</filename>
            <type>text/plain</type>
            <size>63802</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uZDVmZTI2ZDhhNWQ2NTI0NzJmZjU2ZmQ2OTdhYTFl
N2QwZjcwMDg0MyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDIwLTA1LTIwICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYyBzaG91bGQg
aGF2ZSBwZXItY3B1IGxvY2tpbmcgbWVjaGFuaXNtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIGJtYWxs
b2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRv
ci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dD
YXNlKToKKyAgICAgICAgKiBibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjpnZXRTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9BcHBy
b3hQZXJDUFVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OmluaXRpYWxpemUp
OgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OmxpbmVDYWNoZSk6CisgICAg
ICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6aW5kZXggY29uc3QpOgorICAgICAgICAo
Ym1hbGxvYzo6QXBwcm94UGVyQ1BVQ2FjaGU6OnBhZ2VNdXRleCk6CisgICAgICAgIChibWFsbG9j
OjpBcHByb3hQZXJDUFVDYWNoZTo6bXV0ZXgpOgorICAgICAgICAoYm1hbGxvYzo6QXBwcm94UGVy
Q1BVQ2FjaGU6OmdldEZhc3RDYXNlKToKKyAgICAgICAgKiBibWFsbG9jL0FyZW5hLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFyZW5hOjpBcmVuYSk6CisgICAgICAgIChibWFsbG9jOjpBcmVuYTo6YWxsb2NhdGUp
OgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuaDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKiBibWFsbG9jL0JDb21waWxlci5oOgorICAg
ICAgICAqIGJtYWxsb2MvQ1BVLmNwcDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TbWFsbExpbmUuaC4KKyAgICAgICAgKiBibWFsbG9jL0NQVS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6eDg2X3Jk
dHNjcCk6CisgICAgICAgIChibWFsbG9jOjpjdXJyZW50Q1BVSW5kZXgpOgorICAgICAgICAqIGJt
YWxsb2MvQ2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpDaHVuayk6CisgICAgICAg
ICogYm1hbGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRv
cjo6RGVhbGxvY2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnNjYXZlbmdl
KToKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKToKKyAg
ICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAg
ICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuaDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9y
OjpwZXJDUFVDYWNoZSk6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6bGluZUNhY2hl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxv
Yzo6bnVtYmVyT2ZQcm9jZXNzb3JDb3Jlcyk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2
ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFs
bG9jOjpIZWFwOjphbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjph
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6
OmFsbG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmdldEN1cnJlbnRDUFVDYWNoZSk6CisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjpvbmVTZWNvbmQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZT
bWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2MvTGlzdC5oOgorICAgICAgICAoYm1hbGxvYzo6
TGlzdE5vZGU6OmlzT25MaXN0IGNvbnN0KToKKyAgICAgICAgKiBibWFsbG9jL011dGV4Lmg6Cisg
ICAgICAgIChibWFsbG9jOjpNdXRleDo6aXNMb2NrZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxv
Yzo6bG9ja1N3aXRjaCk6CisgICAgICAgICogYm1hbGxvYy9QZXJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKGJtYWxsb2M6OmdldFBlclByb2Nlc3NEYXRhKToKKyAgICAgICAgKGJtYWxsb2M6OmFsbG9j
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1NtYWxsTGluZS5oOgorICAgICAgICAo
Ym1hbGxvYzo6U21hbGxMaW5lOjpyZWZDb3VudCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbExp
bmU6OnJlZik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbExpbmU6OmRlcmVmKToKKyAgICAgICAg
KiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpyZWZD
b3VudCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6Omhhc0ZyZWVMaW5lcyBjb25zdCk6
CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEhhc0ZyZWVMaW5lcyk6CisgICAgICAg
IChibWFsbG9jOjpTbWFsbFBhZ2U6OmluaXRIYXNGcmVlTGluZXMpOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxQYWdlOjppbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAg
KGJtYWxsb2M6OlNtYWxsUGFnZTo6c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbik6CisgICAg
ICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmNhY2hlIGNvbnN0KToKKyAgICAgICAgKGJtYWxsb2M6
OlNtYWxsUGFnZTo6c2V0Q2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0
aWFsaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQgY29uc3QpOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNt
YWxsUGFnZTo6dW5sb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c3dpdGNoTG9j
ayk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFzKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgorICAgICAgICAo
Ym1hbGxvYzo6U21hbGxQYWdlOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpk
ZXJlZik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6
OlN0YXRpY1BlclByb2Nlc3M6OmdldCk6CisgICAgICAgICogYm1hbGxvYy9WZWN0b3IuaDoKKyAg
ICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6cHVzaCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0
b3I8VD46OmVtcGxhY2UpOgorCiAyMDIwLTA1LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CiAKICAgICAgICAgW2JtYWxsb2NdIEludHJvZHVjZSBsb2NrLWxlc3MgT2JqZWN0
VHlwZSBxdWVyeQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAppbmRleCAzZDk5MGViOWJhOGQzODljNDY0M2Qx
ODAwZjUwMzU5ODRiZDdhODZkLi4xZjhmY2EwYmVlYzkyMzA3NmI5MTBiNzAxODg3MmZiMmUxOTlh
NTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KGJtYWxsb2NfU09V
UkNFUwogICAgIGJtYWxsb2MvQWxsSXNvSGVhcHMuY3BwCiAgICAgYm1hbGxvYy9BbGxvY2F0b3Iu
Y3BwCiAgICAgYm1hbGxvYy9BdmFpbGFibGVNZW1vcnkuY3BwCisgICAgYm1hbGxvYy9DUFUuY3Bw
CiAgICAgYm1hbGxvYy9DYWNoZS5jcHAKICAgICBibWFsbG9jL0NyeXB0b1JhbmRvbS5jcHAKICAg
ICBibWFsbG9jL0RlYWxsb2NhdG9yLmNwcApAQCAtNTIsNiArNTMsNyBAQCBzZXQoYm1hbGxvY19Q
VUJMSUNfSEVBREVSUwogICAgIGJtYWxsb2MvQnVsa0RlY29tbWl0LmgKICAgICBibWFsbG9jL0J1
bXBBbGxvY2F0b3IuaAogICAgIGJtYWxsb2MvQnVtcFJhbmdlLmgKKyAgICBibWFsbG9jL0NQVS5o
CiAgICAgYm1hbGxvYy9DYWNoZS5oCiAgICAgYm1hbGxvYy9DaHVuay5oCiAgICAgYm1hbGxvYy9D
cnlwdG9SYW5kb20uaApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDVjMmMzZDU2ZDk3NTljYzExMWRiM2IzZjk0YWRkMzQ4NWM5NmRj
NWEuLjQxZGYwOWEyZTUwY2UyNjIzZWRjMjM3YzI4MzdjNmFkZjg0OTJmMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOSw2
ICsxMzksMTIgQEAKIAkJREU4QjEzQjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFOEIxM0IyMjFDQzVE
OUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMxRTc0ODAyMjM4Q0E1QzAwNUQwODRBIC8qIFN0YXRpY1BlclBy
b2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MUU3NDdGMjIzOENBNUIwMDVEMDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMyOEQ4NEQyM0NFQjM4OTAw
NTQ1QjE4IC8qIFBhY2tlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTMyOEQ4NEMyM0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNTIzOTAyMjQ3MzRCRTQw
MDNBMTNDRiAvKiBDUFUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi87IH07CisJCUUz
NTIzOTAzMjQ3MzRCRTkwMDNBMTNDRiAvKiBDUFUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzZDNzAz
QjI0NzNBMUNGMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAv
KiBBcHByb3hQZXJDUFVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUUzNkM3MDNFMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2QzcwM0MyNDczQjU5
RDAwM0NBRDA3IC8qIEFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRTM2QzcwM0YyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkM3MDNEMjQ3M0I1
OUQwMDNDQUQwNyAvKiBBcmVuYS5jcHAgKi87IH07CisJCUUzNkM3MDQxMjQ3M0I2RDEwMDNDQUQw
NyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzZDNzA0MDI0NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BV
Q2FjaGUuY3BwICovOyB9OwogCQlFMzc4QTlERjI0NkI2ODcyMDAyOUMyQkIgLyogT2JqZWN0VHlw
ZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNzhBOURFMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuY3BwICovOyB9Owog
CQlFMzc4QTlFMDI0NkI2ODc1MDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc4QTlERDI0NkI2ODZBMDAy
OUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNBNDEzQzkyMjYwNjExNDAwMzdGNDcwIC8qIElzb1NoYXJl
ZFBhZ2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MTNDODIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjk1LDYg
KzMwMSwxMiBAQAogCQlERThCMTNCMjIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCVk1UYWdzLmg7IHBhdGggPSBibWFsbG9jL0JWTVRhZ3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxRTc0N0YyMjM4Q0E1QjAwNUQwODRBIC8qIFN0YXRpY1Bl
clByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RhdGljUGVyUHJv
Y2Vzcy5oOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzMjhEODRDMjNDRUIzODkwMDU0NUIxOCAvKiBQYWNrZWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFja2VkLmg7IHBhdGggPSBibWFsbG9jL1Bh
Y2tlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzUyMzkwMDI0NzM0QkUwMDAz
QTEzQ0YgLyogQ1BVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENQVS5oOyBwYXRoID0gYm1hbGxvYy9DUFUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NG
IC8qIENQVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDUFUuY3BwOyBwYXRoID0gYm1hbGxvYy9D
UFUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzZDNzAzQTI0NzNBMUNGMDAz
Q0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQXBwcm94UGVyQ1BVQ2FjaGUuaDsgcGF0aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwM0MyNDczQjU5RDAwM0NB
RDA3IC8qIEFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFyZW5hLmg7
IHBhdGggPSBibWFsbG9jL0FyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
NkM3MDNEMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBcmVuYS5jcHA7IHBhdGggPSBibWFsbG9jL0FyZW5hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8qIEFw
cHJveFBlckNQVUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFwcHJveFBlckNQVUNhY2hlLmNwcDsgcGF0aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc4QTlERDI0NkI2ODZBMDAyOUMy
QkIgLyogT2JqZWN0VHlwZVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9iamVjdFR5cGVUYWJsZS5o
OyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTM3OEE5REUyNDZCNjg2QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlVGFibGUuY3BwOyBwYXRoID0gYm1hbGxvYy9P
YmplY3RUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0E0MTND
ODIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSXNvU2hhcmVkUGFnZUlubGluZXMuaDsgcGF0aCA9IGJtYWxs
b2MvSXNvU2hhcmVkUGFnZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ3Niw5ICs0ODgsMTUgQEAKIAkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUzNkM3MDQwMjQ3
M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgKi8sCisJCQkJRTM2QzcwM0Ey
NDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmggKi8sCisJCQkJRTM2QzcwM0Qy
NDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNwcCAqLywKKwkJCQlFMzZDNzAzQzI0NzNCNTlEMDAz
Q0FEMDcgLyogQXJlbmEuaCAqLywKIAkJCQk3OTM5ODg1QTIwNzZFRUI1MDA3NEEyRTcgLyogQnVs
a0RlY29tbWl0LmggKi8sCiAJCQkJMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5n
ZS5oICovLAogCQkJCTE0N0RDNkUyMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oICovLAorCQkJ
CUUzNTIzOTAxMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuY3BwICovLAorCQkJCUUzNTIzOTAwMjQ3
MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAqLywKIAkJCQkxNDJCNDQzNDFFMjgzOUU3MDAxREE2RTkg
LyogRGVidWdIZWFwLmNwcCAqLywKIAkJCQkxNDJCNDQzNTFFMjgzOUU3MDAxREE2RTkgLyogRGVi
dWdIZWFwLmggKi8sCiAJCQkJMTQ4OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50
LmNwcCAqLywKQEAgLTU3Nyw2ICs1OTUsOCBAQAogCQkJCTBGN0VCODM0MUY5NTQxQjAwMEYxQUJD
QiAvKiBBbGxJc29IZWFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3RUI4NEYxRjk1NEQ0RTAw
RjFBQkNCIC8qIEFsbElzb0hlYXBzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4
OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM2
QzcwM0IyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMzZDNzAzRTI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1OTlDNUNEMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDA5MzQzMzFGQ0Y0MDZEMDBFODVFQjUgLyogQkNvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTU5Myw2ICs2MTMsNyBAQAogCQkJCURFOEIxM0IzMjFDQzVEOUYw
MEE2M0ZDRCAvKiBCVk1UYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5OTE4RjQ4RDRB
MDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0RDNkUzMUNBNUI3MEIw
MDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1MjM5MDMyNDczNEJFOTAw
M0ExM0NGIC8qIENQVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NEI5M0UxRjg5NzEzRTAwQjkz
NUQzIC8qIENyeXB0b1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUExOEY0OEQ0
QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJCNDQzNzFF
MjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MSw5ICs3
ODIsMTIgQEAKIAkJCWZpbGVzID0gKAogCQkJCTBGN0VCODJGMUY5NTQxQjAwMEYxQUJDQiAvKiBB
bGxJc29IZWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1
MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNkM3MDQxMjQ3M0I2RDEw
MDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzZD
NzAzRjI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5
OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjUxNjc3NDFGQUQ2ODVDMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTM1MjM5MDIyNDczNEJFNDAwM0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjc0QjkzRjFGODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM1MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJCNDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVi
dWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
CmluZGV4IDUwNmQyZDg3NmFlZDMyMDZkZTg5MjMwZjc1Mzc4ZDhhYmVmZDMwM2MuLmMxMTVhN2Jk
ZjhlZDVkNTRkNmEyNTE3ZWZjYzU2YmNkNDA4YTFmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5jcHAKQEAgLTEyMiw5ICsxMjIsOCBAQCBCTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9y
OjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpegog
ewogICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVz
W3NpemVDbGFzc107CiAKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7
Ci0gICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5h
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJh
bmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKGxvY2spLCBhY3Rpb24pOworICAgIG1f
ZGVhbGxvY2F0b3IucHJvY2Vzc09iamVjdExvZygpOworICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlcyhzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxv
Y2F0b3IucGVyQ1BVQ2FjaGUoKSwgYWN0aW9uKTsKIH0KIAogQklOTElORSB2b2lkIEFsbG9jYXRv
cjo6cmVmaWxsQWxsb2NhdG9yKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVD
bGFzcywgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBw
cm94UGVyQ1BVQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiOGU3OTc5ZDI4Yjk5YTMyZjhlMjRiZjM1
NjIzNDE2M2FlODYyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FwcHJveFBlckNQVUNhY2hlLmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkFwcHJveFBlckNQVUNhY2hl
LmgiCisKKyNpbmNsdWRlICJBcmVuYS5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK0xpbmVD
YWNoZSogQXBwcm94UGVyQ1BVQ2FjaGU6OmdldFNsb3dDYXNlKGNvbnN0IExvY2tIb2xkZXImKQor
eworICAgIGlmICghbV9saW5lQ2FjaGUubG9hZCgpKSB7CisgICAgICAgIHZvaWQqIG1lbW9yeSA9
IEFyZW5hOjpnZXQoKS0+YWxsb2NhdGUoc2l6ZW9mKExpbmVDYWNoZSksIGFsaWdub2YoTGluZUNh
Y2hlKSk7CisgICAgICAgIGF1dG8qIHQgPSBuZXcgKG1lbW9yeSkgTGluZUNhY2hlKCk7CisgICAg
ICAgIG1fbGluZUNhY2hlLnN0b3JlKHQpOworICAgIH0KKyAgICByZXR1cm4gbV9saW5lQ2FjaGUu
bG9hZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FwcHJveFBlckNQVUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRjNDBkYjQxMWNiNDIyNGMxNjY4
YjFkNDAzN2E0Njk5YmI4NWUzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDUFUuaCIKKyNpbmNsdWRlICJTaXplcy5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2lu
Y2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKKy8vIEFwcHJveFBlckNQVUNh
Y2hlIGlzICphcHByb3hpbWF0ZSogcGVyLUNQVSBjYWNoZS4gVGhlIGdvYWwgb2YgdGhpcyBjYWNo
ZSBpcyBub3QgcHJlY2lzZWx5IGNvbnN0cnVjdGluZyBwZXItQ1BVIGNhY2hlLAorLy8gcmF0aGVy
IGl0IGlzIG9mZmVyaW5nIHBlci1DUFUgYWZmaW5pdHkgdG8gU21hbGxQYWdlcyBhcyBvcHRpbWl6
YXRpb24uCitjbGFzcyBBcHByb3hQZXJDUFVDYWNoZSB7CitwdWJsaWM6CisgICAgQXBwcm94UGVy
Q1BVQ2FjaGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgaW5k
ZXgpCisgICAgeworICAgICAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgfQorCisgICAgTGluZUNh
Y2hlJiBsaW5lQ2FjaGUoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIG9iamVjdCA9IGdldEZhc3RDYXNlKCkpCisgICAgICAgICAgICByZXR1cm4gKm9i
amVjdDsKKyAgICAgICAgcmV0dXJuICpnZXRTbG93Q2FzZShsb2NrZXIpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIE11dGV4JiBw
YWdlTXV0ZXgoKSB7IHJldHVybiBtX3BhZ2VNdXRleDsgfQorICAgIE11dGV4JiBtdXRleCgpIHsg
cmV0dXJuIG1fbXV0ZXg7IH0KKworICAgIExpbmVDYWNoZSogZ2V0RmFzdENhc2UoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbGluZUNhY2hlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIExpbmVDYWNoZSogZ2V0U2xvd0Nhc2UoY29uc3Qg
TG9ja0hvbGRlciYpOworCisgICAgc3RkOjphdG9taWM8TGluZUNhY2hlKj4gbV9saW5lQ2FjaGUg
eyBudWxscHRyIH07CisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBNdXRleCBtX3BhZ2VNdXRleDsK
KyAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcmVuYS5jcHAgYi9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzEyZDFkMmU4NDVjNWI0YmY0
ZjVkNDAyN2Y1OTZhYjY4ZGY0NGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BcmVuYS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJBcmVuYS5oIgorCisjaW5jbHVkZSAi
Vk1BbGxvY2F0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBibWFsbG9jIHsK
KworREVGSU5FX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKEFyZW5hKTsKKworQXJlbmE6OkFy
ZW5hKGNvbnN0IExvY2tIb2xkZXImKQoreworfQorCisvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1l
bW9yeSBieSB2aXJ0dWFsIG9mIHVzaW5nIHZtQWxsb2NhdGUuCit2b2lkKiBBcmVuYTo6YWxsb2Nh
dGUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoQXJlbmE6Om11dGV4KCkpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbV9idW1w
T2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIG1fYnVtcE9mZnNldCk7Cisg
ICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fYnVtcEJhc2UgKyBtX2J1bXBPZmZzZXQ7CisgICAgICAg
IG1fYnVtcE9mZnNldCArPSBzaXplOworICAgICAgICBpZiAobV9idW1wT2Zmc2V0IDw9IG1fYnVt
cExpbWl0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gdm1TaXplKHNpemUpOworICAgICAgICB2b2lkKiBhbGxvY2F0aW9uID0gdm1B
bGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIG1fYnVtcEJhc2UgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oYWxsb2NhdGlvbik7CisgICAgICAgIG1fYnVtcE9mZnNldCA9IDA7CisgICAgICAg
IG1fYnVtcExpbWl0ID0gYWxsb2NhdGlvblNpemU7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmggYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmU5MDg0NGNlN2VjZDE0
YzAzMGU2YWQyZDhhN2FlZDkxNmQ0NWIwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQXJlbmEuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdGF0
aWNQZXJQcm9jZXNzLmgiCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworY2xhc3MgQXJlbmEgOiBw
dWJsaWMgU3RhdGljUGVyUHJvY2VzczxBcmVuYT4geworcHVibGljOgorICAgIEJFWFBPUlQgQXJl
bmEoY29uc3QgTG9ja0hvbGRlciYpOworCisgICAgLy8gUmV0dXJucyB6ZXJvLWZpbGxlZCBtZW1v
cnkgYnkgdmlydHVhbCBvZiB1c2luZyB2bUFsbG9jYXRlLgorICAgIHZvaWQqIGFsbG9jYXRlKHNp
emVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KTsKKworcHJpdmF0ZToKKyAgICBjaGFyKiBtX2J1
bXBCYXNlIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2J1bXBPZmZzZXQgeyAwIH07CisgICAg
c2l6ZV90IG1fYnVtcExpbWl0IHsgMCB9OworfTsKK0RFQ0xBUkVfU1RBVElDX1BFUl9QUk9DRVNT
X1NUT1JBR0UoQXJlbmEpOworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9CQ29tcGlsZXIuaAppbmRleCBjZGM0N2FjOWEyZWM3MGFmN2Q1ZmU0OGNkNzgxZGRmYmQwY2M1
MDRhLi5mM2QwNzQzN2ZlM2U2OWZkODA4MTk3NjBkYjllYTZmMGU2MzlmZDUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oCisrKyBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQkNvbXBpbGVyLmgKQEAgLTc5LDMgKzc5LDIxIEBACiAjaWYgIWRlZmluZWQoQkZB
TExUSFJPVUdIKQogI2RlZmluZSBCRkFMTFRIUk9VR0gKICNlbmRpZgorCisvKiBCTElLRUxZIGFu
ZCBCVU5MSUtFTFkgKi8KKworI2lmICFkZWZpbmVkKEJMSUtFTFkpICYmIEJDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkKKyNkZWZpbmUgQkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAx
KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCTElLRUxZKQorI2RlZmluZSBCTElLRUxZKHgpICh4
KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVU5MSUtFTFkpICYmIEJDT01QSUxFUihHQ0NfQ09N
UEFUSUJMRSkKKyNkZWZpbmUgQlVOTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDAp
CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVTkxJS0VMWSkKKyNkZWZpbmUgQlVOTElLRUxZKHgp
ICh4KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRlZDE0MGU1ZTRk
YTQxZGUyYmQwMzAzMzhhNWY2MDVkNTViNDg3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ1BVLmNwcApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNQVS5oIgorCituYW1lc3Bh
Y2UgYm1hbGxvYyB7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFmNGRkYzg2NzI2OWI3YzljN2I0OTRkM2E5MDgxZDVkNWNhM2JhMjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5oCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKK25h
bWVzcGFjZSBibWFsbG9jIHsKKworI2lmIEJDUFUoWDg2KSB8fCBCQ1BVKFg4Nl82NCkKK2lubGlu
ZSB1aW50NjRfdCB4ODZfcmR0c2NwKHVpbnQzMl90JiBhdXgpCit7CisgICAgdWludDY0X3QgcmF4
ID0gMDsKKyAgICB1aW50NjRfdCByZHggPSAwOworICAgIGFzbSB2b2xhdGlsZSgicmR0c2NwIiA6
ICI9YSIgKHJheCksICI9ZCIgKHJkeCksICI9YyIgKGF1eCkgOiA6ICk7CisgICAgcmV0dXJuIChy
ZHggPDwgMzIpICsgcmF4OworfQorI2VuZGlmCisKK2lubGluZSB1bnNpZ25lZCBjdXJyZW50Q1BV
SW5kZXgoKQoreworI2lmIEJPUyhEQVJXSU4pCisjaWYgQkNQVShYODYpIHx8IEJDUFUoWDg2XzY0
KQorICAgIHN0cnVjdCB7IHVpbnRwdHJfdCBwMSwgcDI7IH0gcDsKKyAgICBhc20gdm9sYXRpbGUo
InNpZHQgJVtwXSIgOiBbcF0gIj0mbSIgKHApKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHAucDEgJiAweGZmKTsKKyNlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmggYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKaW5kZXggMjFmYmI4ZmU3OThkZDk3ODM1YTM4
Y2NmOGYxYWIwMGUzZGIyNzQzMi4uMzQ4YzI1ZGU4MzZhM2QwNjE3YmQ1MmZmMDZmZmE3NTExY2Vl
ZmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaApAQCAtOTMsOSArOTMsOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JFYWNoUGFnZShDaHVuayogY2h1bmssIHNpemVfdCBw
YWdlU2l6ZSwgRnVuYwogaW5saW5lIENodW5rOjpDaHVuayhzaXplX3QgcGFnZVNpemUpCiB7CiAg
ICAgc2l6ZV90IHNtYWxsUGFnZUNvdW50ID0gcGFnZVNpemUgLyBzbWFsbFBhZ2VTaXplOwotICAg
IGZvckVhY2hQYWdlKHRoaXMsIHBhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CisgICAg
Zm9yRWFjaFBhZ2UodGhpcywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2VzKSB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc21hbGxQYWdlQ291bnQ7ICsraSkKLSAgICAgICAg
ICAgIHBhZ2VbaV0uc2V0U2xpZGUoaSk7CisgICAgICAgICAgICBwYWdlc1tpXS5pbml0aWFsaXpl
KGkpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Rl
YWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCmlu
ZGV4IDdkMWUzNGU5N2E3NzkyZDhmZDMwNmFlMjA1ZDZmNzAxMjNhYzhiNDEuLjQ4YzgzNDcyMDMx
Njc1YjkxNDdkODZhODE2NzllMDgwMjI5NzgwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVh
bGxvY2F0b3IuY3BwCkBAIC00MSw2ICs0MSw4IEBAIERlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcihI
ZWFwJiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCiB7CiAgICAgQkFTU0VSVCghRW52aXJvbm1l
bnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CisgICAgbV9wZXJDUFVDYWNoZSA9ICZt
X2hlYXAuZ2V0Q3VycmVudENQVUNhY2hlKCk7CisgICAgbV9jYWNoZVRpbWUgPSBtYWNoX2FwcHJv
eGltYXRlX3RpbWUoKTsKIH0KIAogRGVhbGxvY2F0b3I6On5EZWFsbG9jYXRvcigpCkBAIC01MCwx
NiArNTIsMTcgQEAgRGVhbGxvY2F0b3I6On5EZWFsbG9jYXRvcigpCiAgICAgCiB2b2lkIERlYWxs
b2NhdG9yOjpzY2F2ZW5nZSgpCiB7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11
dGV4KCkpOwotCi0gICAgcHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICBtX2hlYXAuZGVhbGxv
Y2F0ZUxpbmVDYWNoZShsb2NrLCBsaW5lQ2FjaGUobG9jaykpOworICAgIHByb2Nlc3NPYmplY3RM
b2coKTsKKyAgICAvLyBtX2hlYXAuZGVhbGxvY2F0ZUxpbmVDYWNoZShjYWNoZSgpKTsKIH0KIAot
dm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyhVbmlxdWVMb2NrSG9sZGVyJiBsb2Nr
KQordm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZygpCiB7CisgICAgTXV0ZXgqIGhl
bGRMb2NrID0gbnVsbHB0cjsKKyAgICBhdXRvJiBjYWNoZSA9IHBlckNQVUNhY2hlKCk7CiAgICAg
Zm9yIChPYmplY3Qgb2JqZWN0IDogbV9vYmplY3RMb2cpCi0gICAgICAgIG1faGVhcC5kZXJlZlNt
YWxsTGluZShsb2NrLCBvYmplY3QsIGxpbmVDYWNoZShsb2NrKSk7CisgICAgICAgIG1faGVhcC5k
ZXJlZlNtYWxsTGluZSgmaGVsZExvY2ssIG9iamVjdCwgY2FjaGUpOworICAgIGxvY2tTd2l0Y2go
JmhlbGRMb2NrLCBudWxscHRyKTsKICAgICBtX29iamVjdExvZy5jbGVhcigpOwogfQogCkBAIC03
NCwxMCArNzcsOCBAQCB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCog
b2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fb2JqZWN0TG9nLnNp
emUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKSB7Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgcHJvY2Vzc09iamVjdExvZyhsb2NrKTsK
LSAgICB9CisgICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0
eSgpKQorICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CiAKICAgICBtX29iamVjdExvZy5wdXNo
KG9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2Nh
dG9yLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgKaW5kZXggZjE0ZmVl
YTVjYzBiNTYzOWJmZmNhYTVkYmY3ZTE4MWMyYjVjMmZlMy4uNjMzMGZmNzE2MDQzNmE4Njk5NDc2
YzRiNzU0ZWU2ODY3ZDZiOGU2NCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9E
ZWFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaApA
QCAtMjYsOSArMjYsMTIgQEAKICNpZm5kZWYgRGVhbGxvY2F0b3JfaAogI2RlZmluZSBEZWFsbG9j
YXRvcl9oCiAKKyNpbmNsdWRlICJBcHByb3hQZXJDUFVDYWNoZS5oIgogI2luY2x1ZGUgIkJFeHBv
cnQuaCIKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJTbWFsbFBhZ2UuaCIKKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgogI2luY2x1ZGUg
PG11dGV4PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CkBAIC00Niw5ICs0OSwxNyBAQCBjbGFzcyBE
ZWFsbG9jYXRvciB7CiAgICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKICAgICB2b2lkIHNjYXZl
bmdlKCk7CiAgICAgCi0gICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKFVuaXF1ZUxvY2tIb2xkZXIm
KTsKKyAgICB2b2lkIHByb2Nlc3NPYmplY3RMb2coKTsKICAgICAKLSAgICBMaW5lQ2FjaGUmIGxp
bmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4gbV9saW5lQ2FjaGU7IH0KKyAgICBB
cHByb3hQZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUoKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qg
dGltZSA9IG1hY2hfYXBwcm94aW1hdGVfdGltZSgpOworICAgICAgICBpZiAodGltZSAtIG1fY2Fj
aGVUaW1lID4gbV9oZWFwLm9uZVNlY29uZCgpKSB7CisgICAgICAgICAgICBtX3BlckNQVUNhY2hl
ID0gJm1faGVhcC5nZXRDdXJyZW50Q1BVQ2FjaGUoKTsKKyAgICAgICAgICAgIG1fY2FjaGVUaW1l
ID0gdGltZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm1fcGVyQ1BVQ2FjaGU7CisgICAg
fQogCiBwcml2YXRlOgogICAgIGJvb2wgZGVhbGxvY2F0ZUZhc3RDYXNlKHZvaWQqKTsKQEAgLTU2
LDcgKzY3LDggQEAgY2xhc3MgRGVhbGxvY2F0b3IgewogCiAgICAgSGVhcCYgbV9oZWFwOwogICAg
IEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5PiBtX29iamVjdExvZzsK
LSAgICBMaW5lQ2FjaGUgbV9saW5lQ2FjaGU7IC8vIFRoZSBIZWFwIHJlbW92ZXMgaXRlbXMgZnJv
bSB0aGlzIGNhY2hlLgorICAgIHVpbnQ2NF90IG1fY2FjaGVUaW1lIHsgMCB9OworICAgIEFwcHJv
eFBlckNQVUNhY2hlKiBtX3BlckNQVUNhY2hlIHsgbnVsbHB0ciB9OwogfTsKIAogaW5saW5lIGJv
b2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBvYmplY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmNwcAppbmRleCA0OTRhMmI1NGNjYzEzOGE0ZGFkMDViZjY2ODE2YzM2MzdmNTRl
NzE0Li43MWExOWQzMDBiZTUyZjczZDAyZjVhZDEzOTU5NjJmYjY5MjNjNDI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBdmFpbGFibGVNZW1v
cnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21taXQuaCIKICNpbmNsdWRlICJCdW1wQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJDcnlw
dG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKQEAgLTQ2LDggKzQ3LDUxIEBACiAj
aW5jbHVkZSAiWm9uZS5oIgogI2VuZGlmCiAKKyNpZiBCT1MoREFSV0lOKQorI2luY2x1ZGUgPHN5
cy9zeXNjdGwuaD4KKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9TKEZSRUVCU0QpCisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIGJtYWxsb2MgewogCitzdGF0aWMgaW50IG51
bWJlck9mUHJvY2Vzc29yQ29yZXMoKQoreworICAgIGNvbnN0IGludCBkZWZhdWx0SWZVbmF2YWls
YWJsZSA9IDE7CisgICAgc3RhdGljIGludCBzX251bWJlck9mQ29yZXMgPSAtMTsKKworICAgIGlm
IChzX251bWJlck9mQ29yZXMgPiAwKQorICAgICAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOwor
CisgICAgaWYgKGNvbnN0IGNoYXIqIGNvcmVzRW52ID0gZ2V0ZW52KCJXVEZfbnVtYmVyT2ZQcm9j
ZXNzb3JDb3JlcyIpKSB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29yZXM7CisgICAgICAg
IGlmIChzc2NhbmYoY29yZXNFbnYsICIldSIsICZudW1iZXJPZkNvcmVzKSA9PSAxKSB7CisgICAg
ICAgICAgICBzX251bWJlck9mQ29yZXMgPSBudW1iZXJPZkNvcmVzOworICAgICAgICAgICAgcmV0
dXJuIHNfbnVtYmVyT2ZDb3JlczsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSBXVEZfbnVtYmVyT2ZQcm9jZXNzb3JD
b3Jlcz0lc1xuIiwgY29yZXNFbnYpOworICAgIH0KKworI2lmIEJPUyhEQVJXSU4pCisgICAgdW5z
aWduZWQgcmVzdWx0OworICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YocmVzdWx0KTsKKyAgICBp
bnQgbmFtZVtdID0geworICAgICAgICAgICAgQ1RMX0hXLAorICAgICAgICAgICAgSFdfQVZBSUxD
UFUKKyAgICB9OworICAgIGludCBzeXNjdGxSZXN1bHQgPSBzeXNjdGwobmFtZSwgc2l6ZW9mKG5h
bWUpIC8gc2l6ZW9mKGludCksICZyZXN1bHQsICZsZW5ndGgsIDAsIDApOworCisgICAgc19udW1i
ZXJPZkNvcmVzID0gc3lzY3RsUmVzdWx0IDwgMCA/IGRlZmF1bHRJZlVuYXZhaWxhYmxlIDogcmVz
dWx0OworI2VsaWYgQk9TKExJTlVYKSB8fCBCT1MoRlJFRUJTRCkKKyAgICBsb25nIHN5c2NvbmZS
ZXN1bHQgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKworICAgIHNfbnVtYmVyT2ZD
b3JlcyA9IHN5c2NvbmZSZXN1bHQgPCAwID8gZGVmYXVsdElmVW5hdmFpbGFibGUgOiBzdGF0aWNf
Y2FzdDxpbnQ+KHN5c2NvbmZSZXN1bHQpOworI2Vsc2UKKyAgICBzX251bWJlck9mQ29yZXMgPSBk
ZWZhdWx0SWZVbmF2YWlsYWJsZTsKKyNlbmRpZgorICAgIHJldHVybiBzX251bWJlck9mQ29yZXM7
Cit9CisKIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgTG9ja0hvbGRlciYpCiAgICAgOiBtX2tp
bmQgeyBraW5kIH0sIG1fY29uc3RhbnRzIHsgKkhlYXBDb25zdGFudHM6OmdldCgpIH0KIHsKQEAg
LTY1LDYgKzEwOSwxNyBAQCBIZWFwOjpIZWFwKEhlYXBLaW5kIGtpbmQsIExvY2tIb2xkZXImKQog
ICAgICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShiYXNlLCBzaXplLCAwLCAwKSk7CiAg
ICAgfQogI2VuZGlmCisgICAgdW5zaWduZWQgY29yZXMgPSBzdGQ6Om1pbjx1bnNpZ25lZD4ocm91
bmRVcFRvUG93ZXJPZlR3byhudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkpLCBtX2NhY2hlLnNpemUo
KSk7CisgICAgbV9jb3JlTWFzayA9IGNvcmVzIC0gMTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3JlczsgKytpbmRleCkKKyAgICAgICAgbV9jYWNoZVtpbmRleF0uaW5p
dGlhbGl6ZShpbmRleCk7CisKKyAgICBzdGF0aWMgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0
aW1lYmFzZUluZm87CisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfdGltZWJhc2VfaW5mbygm
dGltZWJhc2VJbmZvKTsKKyAgICBCQVNTRVJUKGtyID09IEtFUk5fU1VDQ0VTUyk7CisgICAgQkFT
U0VSVCh0aW1lYmFzZUluZm8uZGVub20pOworICAgIEJVTlVTRUQoa3IpOworICAgIG1fb25lU2Vj
b25kID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEuMCAqICgxLjBlOSAqIHRpbWViYXNlSW5mby5k
ZW5vbSkgLyB0aW1lYmFzZUluZm8ubnVtZXIpOwogICAgIAogICAgIG1fc2NhdmVuZ2VyID0gU2Nh
dmVuZ2VyOjpnZXQoKTsKIH0KQEAgLTEyMiw2ICsxNzcsMjcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5n
ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQogdm9p
ZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRl
Y29tbWl0dGVyLCBzaXplX3QmIGRlZmVycmVkRGVjb21taXRzKQogI2VuZGlmCiB7CisjaWYgMAor
ICAgIHVpbnQ2NF90IHRpbWUgPSBtYWNoX2FwcHJveGltYXRlX3RpbWUoKTsKKyAgICBmb3IgKGF1
dG8mIHBlckNQVUNhY2hlIDogbV9jYWNoZSkgeworICAgICAgICBhdXRvKiBsaW5lQ2FjaGUgPSBw
ZXJDUFVDYWNoZS5nZXRGYXN0Q2FzZSgpOworICAgICAgICBpZiAoIWxpbmVDYWNoZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBGSVhNRTogV2lsbCBjaGFuZ2UgaXQgdG8gYmUg
cGVyIGNhY2hlLgorICAgICAgICBmb3IgKGF1dG8mIGxpc3QgOiAqbGluZUNhY2hlKSB7CisgICAg
ICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAmKCpsaW5lQ2FjaGUpWzBdOworICAg
ICAgICAgICAgZm9yIChTbWFsbFBhZ2UqIGN1cnJlbnQgPSAqbGlzdC5iZWdpbigpOyBjdXJyZW50
ICE9ICpsaXN0LmVuZCgpOykgeworICAgICAgICAgICAgICAgIGF1dG8qIG5leHQgPSBzdGF0aWNf
Y2FzdDxTbWFsbFBhZ2UqPihjdXJyZW50LT5uZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoKHRp
bWUgLSBjdXJyZW50LT5sYXN0Q2hhaW5lZCgpKSA+IG1fb25lU2Vjb25kKSB7CisgICAgICAgICAg
ICAgICAgICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKGN1cnJlbnQpOworICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2goY3VycmVudCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2ZyZWVQ
YWdlcykgewogICAgICAgICBmb3IgKGF1dG8qIGNodW5rIDogbGlzdCkgewogICAgICAgICAgICAg
Zm9yIChhdXRvKiBwYWdlIDogY2h1bmstPmZyZWVQYWdlcygpKSB7CkBAIC0xODUsOCArMjYxLDkg
QEAgdm9pZCBIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhVbmlxdWVMb2NrSG9sZGVyJiBs
b2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWkKIH0KICNlbmRpZgogCi12b2lkIEhlYXA6OmRlYWxs
b2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYgbGluZUNhY2hlKQor
dm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKExpbmVDYWNoZSYgbGluZUNhY2hlKQogewor
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKICAgICBmb3IgKGF1dG8mIGxpc3Qg
OiBsaW5lQ2FjaGUpIHsKICAgICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgc2l6ZV90IHNpemVDbGFzcyA9ICZsaXN0IC0gJmxpbmVDYWNoZVswXTsKQEAgLTIyMSw3
ICsyOTgsOCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVy
JiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQQogI2lmICFCVVNFKFBBUlRJQUxfU0NB
VkVOR0UpCiAgICAgICAgICAgICBwYWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKICNl
bmRpZgotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOworICAg
ICAgICAgICAgcGFnZS0+aW5pdEhhc0ZyZWVMaW5lcygpOworICAgICAgICAgICAgcGFnZS0+c2V0
SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7CiAgICAgICAgICAgICBjaHVuay0+ZnJl
ZVBhZ2VzKCkucHVzaChwYWdlKTsKICAgICAgICAgICAgIGFjY291bnRlZEluRnJlZWFibGUgKz0g
cGFnZVNpemU7CiAgICAgICAgIH0pOwpAQCAtMjcwLDIzICszNDgsMzYgQEAgdm9pZCBIZWFwOjpk
ZWFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBDaHVuayogY2h1bmss
IHNpemVfdCBwYWcKICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShjaHVuaywgc2l6ZSwg
c3RhcnRQaHlzaWNhbFNpemUsIHRvdGFsUGh5c2ljYWxTaXplKSk7CiB9CiAKLVNtYWxsUGFnZSog
SGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNp
emVDbGFzcywgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQorU21h
bGxQYWdlKiBIZWFwOjphbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBB
cHByb3hQZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewog
ICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAgaWYg
KCFsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQ2Fj
aGVbc2l6ZUNsYXNzXS5wb3BGcm9udCgpOworICAgIGJvb2wgaXNFbXB0eSA9IGZhbHNlOworICAg
IFNtYWxsUGFnZSogcGFnZSA9IFsmXSgpIC0+IFNtYWxsUGFnZSogeworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrSG9sZGVyIHBlckNQVUNhY2hlTG9jayhwZXJDUFVDYWNoZS5tdXRleCgpKTsK
KyAgICAgICAgICAgIExpbmVDYWNoZSYgbGluZUNhY2hlID0gcGVyQ1BVQ2FjaGUubGluZUNhY2hl
KHBlckNQVUNhY2hlTG9jayk7CisgICAgICAgICAgICBpZiAoIWxpbmVDYWNoZVtzaXplQ2xhc3Nd
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHBhZ2UgPSBsaW5lQ2FjaGVbc2l6
ZUNsYXNzXS5wb3BGcm9udCgpOworICAgICAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemlu
Z0ZvckFsbG9jYXRpb24odHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250
KCk7CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2sobXV0ZXgoKSk7CisgICAgICAg
IGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1
dG8qIHBhZ2UgPSBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAg
ICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAgICAgICAg
cmV0dXJuIHBhZ2U7CisgICAgICAgIH0KIAotICAgIG1fc2NhdmVuZ2VyLT5kaWRTdGFydEdyb3dp
bmcoKTsKLSAgICAKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBTbWFsbFBhZ2UqIHsK
KyAgICAgICAgbV9zY2F2ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOworCisgICAgICAgIGlzRW1w
dHkgPSB0cnVlOwogICAgICAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNs
YXNzKHNpemVDbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX2ZyZWVQYWdlc1twYWdl
Q2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBw
YWdlQ2xhc3MsIGFjdGlvbik7CisgICAgICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVhcExv
Y2ssIHBhZ2VDbGFzcywgYWN0aW9uKTsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBGYWlsdXJlQWN0
aW9uOjpSZXR1cm5OdWxsICYmIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxNCw3NiArNDA1LDEyMCBAQCBTbWFsbFBh
Z2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVf
dCBzaXplQ2xhc3MsIExpbgogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgIHBh
Z2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogI2VuZGlmCi0KKyAgICAgICAgcGFnZS0+
c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKICAgICAgICAgcmV0dXJuIHBhZ2U7
CiAgICAgfSgpOworCiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09
IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKKyAgICBpZiAoaXNFbXB0eSkgeworICAgICAgICBNdXRleCogaGVsZExvY2sgPSBudWxs
cHRyOworICAgICAgICBwYWdlLT5sb2NrQW5kVHJ5VG9UYWtlQmlhcygmaGVsZExvY2ssICZwZXJD
UFVDYWNoZS5wYWdlTXV0ZXgoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBhZ2UtPmxvY2soKTsK
ICAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsKICAgICByZXR1cm4gcGFnZTsKIH0K
IAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQordm9pZCBIZWFwOjpkZWFsbG9j
YXRlU21hbGxMaW5lKFNtYWxsUGFnZSogcGFnZSwgT2JqZWN0IG9iamVjdCwgQXBwcm94UGVyQ1BV
Q2FjaGUmIHBlckNQVUNhY2hlKQogewotICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNv
dW50KGxvY2spKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwotICAgIHBh
Z2UtPmRlcmVmKGxvY2spOwotCi0gICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpIHsK
LSAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwotICAgICAgICBsaW5l
Q2FjaGVbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAgQlVOVVNFRChvYmplY3Qp
OworICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKTsKKyAgICBwYWdl
LT5kZXJlZigpOworCisgICAgYm9vbCBjb21wbGV0ZWx5RmxvYXRpbmdQYWdlID0gZmFsc2U7Cisg
ICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMoKSkgeworICAgICAgICBwYWdlLT5zZXRIYXNGcmVl
TGluZXModHJ1ZSk7CisgICAgICAgIC8vIHBhZ2UtPmlzT25MaXN0KCkgY2FuIGJlIGNoYW5nZWQg
ZnJvbSB0cnVlIHRvIGZhbHNlIHdpdGhvdXQgdGFraW5nIGEgcGFnZS1sb2NrLgorICAgICAgICAv
LyBCdXQgZmFsc2UgdG8gdHJ1ZSB0cmFuc2l0aW9uIGhhcHBlbnMgb25seSB3aGVuIHRoZW4gcGFn
ZS1sb2NrIGlzIGhlbGQuCisgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOworICAg
ICAgICBpZiAocGFnZS0+cmVmQ291bnQoKSkgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIocGVyQ1BVQ2FjaGUubXV0ZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChwYWdlLT5pbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAvLyBTb21lIGZyZWUgbGluZXMgZXhpc3QsIGJ1dCB0aGUgcGFnZSBpcyBub3QgY2hhaW5l
ZCB0byBhbnkgdGhyZWFkJ3MgTGluZUNhY2hlLgorICAgICAgICAgICAgLy8gTGV0J3MgY2hhaW4g
aXQgdG8gdGhlIGN1cnJlbnQgZnJlZWluZyB0aHJlYWQncyBMaW5lQ2FjaGUgZm9yIHJldXNpbmcu
CisgICAgICAgICAgICBwZXJDUFVDYWNoZS5saW5lQ2FjaGUobG9ja2VyKVtwYWdlLT5zaXplQ2xh
c3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldENhY2hlKCZwZXJDUFVDYWNo
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGVseUZs
b2F0aW5nUGFnZSA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKHBhZ2UtPnJlZkNvdW50KGxvY2sp
KQorICAgIGlmIChwYWdlLT5yZWZDb3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXpl
X3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKTsK
KyAgICBhdXRvIHJldHVyblNtYWxsUGFnZSA9IFsmXSB7CisgICAgICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhtdXRleCgpKTsKIAotICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gcGh5c2ljYWxQYWdl
U2l6ZVNsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3MpKTsK
KyAgICAgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybjsKIAotICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2UpOyAvLyAncGFn
ZScgbWF5IGJlIGluIGFueSB0aHJlYWQncyBsaW5lIGNhY2hlLgotICAgIAotICAgIENodW5rKiBj
aHVuayA9IENodW5rOjpnZXQocGFnZSk7Ci0gICAgaWYgKGNodW5rLT5mcmVlUGFnZXMoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7Ci0gICAg
Y2h1bmstPmZyZWVQYWdlcygpLnB1c2gocGFnZSk7CisgICAgICAgIHNpemVfdCBwYWdlQ2xhc3Mg
PSBtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+c2l6ZUNsYXNzKCkpOwogCi0gICAgY2h1bmst
PmRlcmVmKCk7CisgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gcGh5c2ljYWxQYWdlU2l6ZVNs
b3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKIAotICAg
IGlmICghY2h1bmstPnJlZkNvdW50KCkpIHsKLSAgICAgICAgbV9mcmVlUGFnZXNbcGFnZUNsYXNz
XS5yZW1vdmUoY2h1bmspOworICAgICAgICBpZiAocGFnZS0+aXNPbkxpc3QoKSkKKyAgICAgICAg
ICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2UpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBCQVNTRVJUKGNvbXBsZXRlbHlGbG9hdGluZ1BhZ2UpOworICAgICAgICBwYWdlLT5zZXRD
YWNoZShudWxscHRyKTsKIAotICAgICAgICBpZiAoIW1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGVTbWFsbENodW5rKGxvY2ssIG1fY2h1bmtD
YWNoZVtwYWdlQ2xhc3NdLnBvcCgpLCBwYWdlQ2xhc3MpOworICAgICAgICBDaHVuayogY2h1bmsg
PSBDaHVuazo6Z2V0KHBhZ2UpOworICAgICAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7Cisg
ICAgICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwogCi0gICAgICAgIG1fY2h1bmtD
YWNoZVtwYWdlQ2xhc3NdLnB1c2goY2h1bmspOwotICAgIH0KLSAgICAKLSAgICBtX3NjYXZlbmdl
ci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7CisgICAgICAgIGNodW5rLT5kZXJlZigp
OworCisgICAgICAgIGlmICghY2h1bmstPnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgIG1fZnJl
ZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsKKworICAgICAgICAgICAgaWYgKCFtX2No
dW5rQ2FjaGVbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVhbGxvY2F0
ZVNtYWxsQ2h1bmsobG9jaywgbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10ucG9wKCksIHBhZ2VDbGFz
cyk7CisKKyAgICAgICAgICAgIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnB1c2goY2h1bmspOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUocGFnZVNp
emUocGFnZUNsYXNzKSk7CisgICAgfTsKKworICAgIC8vIENhY2hlIHBvaW50ZXIgaXMgdXBkYXRl
ZCB3aGVuIHBhZ2UgaXMgbG9ja2VkLiBTaW5jZSB3ZSBhcmUgaG9sZGluZyBwYWdlJ3MgbG9jaywg
dGhpcyBpcyBwb2ludGluZyB3aGV0aGVyIHRoZSBjdXJyZW50bHkgY2hhaW5lZCBjYWNoZSBvciBw
cmV2aW91c2x5IGNoYWluZWQgY2FjaGUuCisgICAgLy8gSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMg
ZmluZS4gaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiBmbGFnIHRlbGxzIHVzIHdoZXRoZXIgdGhp
cyBwb2ludGVyIGlzIG9sZCBvciB1cC10by1kYXRlLgorICAgIEFwcHJveFBlckNQVUNhY2hlKiBj
YWNoZSA9IHBhZ2UtPmNhY2hlKCk7CisgICAgaWYgKGNhY2hlKSB7CisgICAgICAgIFVuaXF1ZUxv
Y2tIb2xkZXIgbG9jayhjYWNoZS0+bXV0ZXgoKSk7CisgICAgICAgIGlmIChwYWdlLT5pbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
blNtYWxsUGFnZSgpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm5TbWFsbFBhZ2UoKTsKIH0K
IAotdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCi0gICAgVW5p
cXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9y
JiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYg
bGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFs
bG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIEFwcHJveFBlckNQVUNhY2hlJiBw
ZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQlVOVVNFRChhY3Rpb24p
OwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAg
U21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5l
Q2FjaGUsIGFjdGlvbik7CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2NrZWRTbWFs
bFBhZ2Uoc2l6ZUNsYXNzLCBwZXJDUFVDYWNoZSwgYWN0aW9uKTsKICAgICBpZiAoIXBhZ2UpIHsK
ICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAg
ICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKwogICAgIFNtYWxsTGluZSogbGluZXMgPSBw
YWdlLT5iZWdpbigpOwotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsKKyAg
ICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAgIGF1dG8gZmluZFNtYWxsQnVt
cFJhbmdlID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewogICAgICAgICBmb3IgKCA7IGxpbmVO
dW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyArK2xpbmVOdW1iZXIpIHsKLSAg
ICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpIHsKKyAgICAg
ICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQocGFnZSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5lTnVtYmVy
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0z
OTYsNyArNTMxLDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRh
dGEoCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gMDsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1fY29uc3RhbnRzLnNtYWxsTGluZUNvdW50KCk7
ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNv
dW50KGxvY2spKQorICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KHBh
Z2UpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBhdXRvIGxpbmVPYmpl
Y3RDb3VudCA9IG1fY29uc3RhbnRzLm9iamVjdENvdW50KHNpemVDbGFzcywgbGluZU51bWJlcik7
CkBAIC00MDQsOCArNTM5LDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5
TWV0YWRhdGEoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIG9iamVj
dENvdW50ICs9IGxpbmVPYmplY3RDb3VudDsKLSAgICAgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJd
LnJlZihsb2NrLCBsaW5lT2JqZWN0Q291bnQpOwotICAgICAgICAgICAgcGFnZS0+cmVmKGxvY2sp
OworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKHBhZ2UsIGxpbmVPYmplY3RDb3Vu
dCk7CisgICAgICAgICAgICBwYWdlLT5yZWYoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
eyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKICAgICB9OwpAQCAtNDEzLDE1ICs1NDgsMjYgQEAgdm9p
ZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgc2l6ZV90IGxp
bmVOdW1iZXIgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFmaW5kU21hbGxCdW1w
UmFuZ2UobGluZU51bWJlcikpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhs
b2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMoZmFsc2UpOwor
ICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CiAgICAgICAgICAgICBCQVNT
RVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5B
bGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUobnVsbHB0cik7CisgICAgICAg
ICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZyZWUgcmFuZ2VzIG1pZ2h0IG5v
dCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBpZiAocmFuZ2VDYWNoZS5zaXplKCkgPT0gcmFu
Z2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5w
dXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAgICAgICAgIHBlckNQVUNhY2hlLmxp
bmVDYWNoZShsb2NrZXIpW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgICAgICBw
YWdlLT5zZXRDYWNoZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAgICAgIEJBU1NFUlQocGFn
ZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBCQVNTRVJUKGFjdGlv
biA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgp
KTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFsc2Up
OworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtNDMzLDI1ICs1NzksMjQgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVt
cFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzQnlPYmplY3QoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNp
emVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiBy
YW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlv
bikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChzaXplX3Qgc2l6
ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNh
Y2hlLCBBcHByb3hQZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9u
KQogewogICAgIEJVTlVTRUQoYWN0aW9uKTsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVI
ZWFwS2luZChtX2tpbmQpKTsKIAogICAgIHNpemVfdCBzaXplID0gYWxsb2NhdG9yLnNpemUoKTsK
LSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBzaXplQ2xhc3Ms
IGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZUxvY2tl
ZFNtYWxsUGFnZShzaXplQ2xhc3MsIHBlckNQVUNhY2hlLCBhY3Rpb24pOwogICAgIGlmICghcGFn
ZSkgewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxs
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5l
cyhsb2NrKSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICBCQVNTRVJUKCFw
YWdlLT5pc09uTGlzdCgpKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAog
ICAgIGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKE9iamVjdCYgaXQsIE9iamVjdCYgZW5k
KSB7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNpemUpIHsK
LSAgICAgICAgICAgIGlmICghaXQubGluZSgpLT5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAg
IGlmICghaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjEsMTIgKzYwNiwx
MiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCiAgICAgICAg
IGNoYXIqIGJlZ2luID0gaXQuYWRkcmVzcygpOwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmpl
Y3RDb3VudCA9IDA7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCAr
IHNpemUpIHsKLSAgICAgICAgICAgIGlmIChpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQorICAg
ICAgICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICsrb2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICBpdC5saW5l
KCktPnJlZihsb2NrKTsKLSAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVmKGxvY2spOworICAgICAg
ICAgICAgaXQubGluZSgpLT5yZWYocGFnZSk7CisgICAgICAgICAgICBpdC5wYWdlKCktPnJlZigp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7IGJlZ2luLCBvYmplY3RDb3VudCB9OwogICAg
IH07CkBAIC00NzUsMTUgKzYyMCwyNiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlPYmplY3QoCiAgICAgT2JqZWN0IGVuZChpdCArIHBhZ2VTaXplKG1fY29uc3RhbnRzLnBh
Z2VDbGFzcyhwYWdlLT5zaXplQ2xhc3MoKSkpKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlm
ICghZmluZFNtYWxsQnVtcFJhbmdlKGl0LCBlbmQpKSB7Ci0gICAgICAgICAgICBwYWdlLT5zZXRI
YXNGcmVlTGluZXMobG9jaywgZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxp
bmVzKGZhbHNlKTsKKyAgICAgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOwogICAg
ICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBh
bGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXpp
bmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldENhY2hlKG51bGxw
dHIpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJh
bmdlcyBtaWdodCBub3QgZml0IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHJhbmdlQ2FjaGUu
c2l6ZSgpID09IHJhbmdlQ2FjaGUuY2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbGluZUNhY2hl
W3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihwZXJDUFVDYWNoZS5tdXRleCgpKTsKKyAgICAgICAgICAgICAgICBw
ZXJDUFVDYWNoZS5saW5lQ2FjaGUobG9ja2VyKVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7CisgICAg
ICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUoJnBlckNQVUNhY2hlKTsKKyAgICAgICAgICAgICAg
ICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
QkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3Iu
Y2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxv
Y2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SGVhcC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKaW5kZXggNTQ5ZGQyNGY2YzU4
OTY0NmNkMjI2MDRkOGM5YjQ5ZWYwYzc0NTA0My4uYjhkMGY2NTAzMjlmMzM4MDM4OTdmZDc0YmRl
NmE3ZmQxZmI4YzZhOCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2Fj
aGUuaCIKICNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1
ZGUgIkZhaWx1cmVBY3Rpb24uaCIKQEAgLTYyLDEwICs2Myw5IEBAIGNsYXNzIEhlYXAgewogICAg
IAogICAgIEhlYXBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKLSAg
ICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qg
c2l6ZUNsYXNzLAotICAgICAgICBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5l
Q2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGRlcmVmU21hbGxMaW5lKFVuaXF1ZUxv
Y2tIb2xkZXImLCBPYmplY3QsIExpbmVDYWNoZSYpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVD
YWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJik7CisgICAgdm9pZCBhbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdl
Q2FjaGUmLCBBcHByb3hQZXJDUFVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgZGVy
ZWZTbWFsbExpbmUoTXV0ZXgqKiwgT2JqZWN0LCBBcHByb3hQZXJDUFVDYWNoZSYpOworICAgIHZv
aWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShMaW5lQ2FjaGUmKTsKIAogICAgIHZvaWQqIGFsbG9jYXRl
TGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgRmFpbHVy
ZUFjdGlvbik7CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZv
aWQqKTsKQEAgLTkyLDYgKzkyLDE2IEBAIGNsYXNzIEhlYXAgewogCiAgICAgdm9pZCBtYXJrQWxs
TGFyZ2VBc0VsaWdpYmlsZShjb25zdCBMb2NrSG9sZGVyJik7CiAKKyAgICBBcHByb3hQZXJDUFVD
YWNoZSYgZ2V0Q3VycmVudENQVUNhY2hlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gY3VycmVudENQVUluZGV4KCkgJiBtX2NvcmVNYXNrOworICAgICAgICByZXR1cm4gbV9jYWNo
ZVtpbmRleF07CisgICAgfQorICAgIHVpbnQ2NF90IG9uZVNlY29uZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vbmVTZWNvbmQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQg
ZGVjb21taXRMYXJnZVJhbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBMYXJnZVJhbmdlJiwgQnVsa0Rl
Y29tbWl0Jik7CiAKQEAgLTEwOSwxMyArMTE5LDExIEBAIGNsYXNzIEhlYXAgewogICAgIHZvaWQq
IGdpZ2FjYWdlQmFzZVB0cigpOyAvLyBNYXkgY3Jhc2ggaWYgIXVzaW5nR2lnYWNhZ2UoKS4KICAg
ICBzaXplX3QgZ2lnYWNhZ2VTaXplKCk7CiAKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlNZXRhZGF0YShVbmlxdWVMb2NrSG9sZGVyJiwKLSAgICAgICAgc2l6ZV90IHNpemVDbGFz
cywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFj
dGlvbik7Ci0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KFVuaXF1ZUxv
Y2tIb2xkZXImLAotICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVt
cFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2Nh
dG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBBcHByb3hQZXJDUFVDYWNoZSYsIEZhaWx1cmVBY3Rpb24p
OworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChzaXplX3Qgc2l6ZUNs
YXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBBcHByb3hQZXJDUFVDYWNoZSYs
IEZhaWx1cmVBY3Rpb24pOwogCi0gICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZShVbmlx
dWVMb2NrSG9sZGVyJiwgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlv
bik7Ci0gICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImLCBPYmpl
Y3QsIExpbmVDYWNoZSYpOworICAgIFNtYWxsUGFnZSogYWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uo
c2l6ZV90IHNpemVDbGFzcywgQXBwcm94UGVyQ1BVQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAg
ICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoU21hbGxQYWdlKiwgT2JqZWN0LCBBcHByb3hQZXJD
UFVDYWNoZSYpOwogCiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRl
ciYsIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBY3Rpb24pOwogICAgIHZvaWQgZGVhbGxvY2F0
ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYsIENodW5rKiwgc2l6ZV90IHBhZ2VDbGFzcyk7
CkBAIC0xNDMsNiArMTUxLDEwIEBAIGNsYXNzIEhlYXAgewogICAgIHNpemVfdCBtX2Zvb3Rwcmlu
dCB7IDAgfTsKICAgICBzaXplX3QgbV9mcmVlYWJsZU1lbW9yeSB7IDAgfTsKIAorICAgIHN0ZDo6
YXJyYXk8QXBwcm94UGVyQ1BVQ2FjaGUsIDEyOD4gbV9jYWNoZTsKKyAgICB1bnNpZ25lZCBtX2Nv
cmVNYXNrIHsgMCB9OworICAgIHVpbnQ2NF90IG1fb25lU2Vjb25kIHsgMCB9OworCiAjaWYgRU5B
QkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAogICAgIFBoeXNpY2FsUGFnZU1hcCBtX3BoeXNpY2FsUGFn
ZU1hcDsKICNlbmRpZgpAQCAtMTUyLDIxICsxNjQsMjEgQEAgY2xhc3MgSGVhcCB7CiAjZW5kaWYK
IH07CiAKLWlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKAotICAgIFVu
aXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9jYXRv
ciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2FjaGUm
IGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitpbmxpbmUgdm9pZCBIZWFwOjphbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxv
Y2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLCBBcHByb3hQZXJDUFVDYWNoZSYgcGVy
Q1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIGlmIChzaXplQ2xhc3MgPCBi
bWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJh
bmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1
bXBSYW5nZXNCeU9iamVjdChsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwg
bGluZUNhY2hlLCBhY3Rpb24pOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5n
ZXNCeU1ldGFkYXRhKHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBwZXJDUFVDYWNo
ZSwgYWN0aW9uKTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChz
aXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CiB9
CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImIGxv
Y2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQoraW5saW5lIHZvaWQgSGVh
cDo6ZGVyZWZTbWFsbExpbmUoTXV0ZXgqKiBoZWxkTG9jaywgT2JqZWN0IG9iamVjdCwgQXBwcm94
UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKQogewotICAgIGlmICghb2JqZWN0LmxpbmUoKS0+ZGVy
ZWYobG9jaykpCisgICAgU21hbGxQYWdlKiBwYWdlID0gb2JqZWN0LnBhZ2UoKTsKKyAgICBwYWdl
LT5zd2l0Y2hMb2NrKGhlbGRMb2NrKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOwor
ICAgIGlmICghb2JqZWN0LmxpbmUoKS0+ZGVyZWYocGFnZSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBkZWFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKTsKKyAgICBkZWFs
bG9jYXRlU21hbGxMaW5lKHBhZ2UsIG9iamVjdCwgcGVyQ1BVQ2FjaGUpOwogfQogCiBpbmxpbmUg
Ym9vbCBIZWFwOjppc0xhcmdlKHZvaWQqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvTGlzdC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgKaW5kZXgg
NjM5ZWRjOWU0ZjZlY2IzM2EzZmZiY2U1MzEzMGQyMmIyOThhYzJhNi4uM2RhNzViMzIyYzQyMTc3
NDgwNDRiZmQxNDQxYmYwNDAyZjUzOTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9MaXN0LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgKQEAgLTMyLDYg
KzMyLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTGlzdE5vZGUgewogICAgIExp
c3ROb2RlPFQ+KiBwcmV2IHsgbnVsbHB0ciB9OwogICAgIExpc3ROb2RlPFQ+KiBuZXh0IHsgbnVs
bHB0ciB9OworCisgICAgYm9vbCBpc09uTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBCQVNT
RVJUKCEhcHJldiA9PSAhIW5leHQpOworICAgICAgICByZXR1cm4gISFwcmV2OworICAgIH0KIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL011dGV4LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKaW5kZXggZjRjYzJh
YTQxMWM5MjgzMjIxMjkxY2E4NTgwMjBkMzAxOGFhMjNhZC4uYmU2YTNmMWJjMWI5M2QyYTM2ZmE0
OGQ4MmExOGEwYzllZTQxY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9N
dXRleC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaApAQCAtNDgsOSArNDgs
MTIgQEAgY2xhc3MgTXV0ZXggewogICAgIGJvb2wgdHJ5X2xvY2soKTsKICAgICB2b2lkIHVubG9j
aygpOwogCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJFWFBP
UlQgdm9pZCBsb2NrU2xvd0Nhc2UoKTsKIAorICAgIC8vIEVuc3VyZSB0aGF0IE11dGV4IGlzIHpl
cm8taW5pdGlhbGl6ZWQuIFNtYWxsUGFnZSByZWxpZXMgb24gdGhhdC4KICAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX2ZsYWcgeyBmYWxzZSB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1faXNTcGlu
bmluZyB7IGZhbHNlIH07CiB9OwpAQCAtOTIsNCArOTUsMjAgQEAgaW5saW5lIHZvaWQgTXV0ZXg6
OnVubG9jaygpCiAgICAgbV9mbGFnLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxl
YXNlKTsKIH0KIAoraW5saW5lIGJvb2wgTXV0ZXg6OmlzTG9ja2VkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9mbGFnOworfQorCitpbmxpbmUgdm9pZCBsb2NrU3dpdGNoKE11dGV4KiogaGVsZExv
Y2ssIE11dGV4KiBsb2NrKQoreworICAgIGlmIChCTElLRUxZKGxvY2sgPT0gKmhlbGRMb2NrKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICgqaGVsZExvY2spCisgICAgICAgICgqaGVsZExvY2sp
LT51bmxvY2soKTsKKyAgICAqaGVsZExvY2sgPSBsb2NrOworICAgIGlmIChsb2NrKQorICAgICAg
ICBsb2NrLT5sb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1BlclByb2Nlc3MuY3BwCmluZGV4IGQ4MmYyNWI1ZTk4ZGRhOWNhNmYwZTMzYWQ0ODE1
MmM4MWRjZDJkZjcuLjg1Mzc4ZTliYTI0NGRhMjY0Yzk4YjRjMTI1MmFlYWMwNjZkMzZjZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAj
aW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgorI2luY2x1
ZGUgIkFyZW5hLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewpA
QCAtMzUsMjkgKzM1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IAogc3RhdGljIE11dGV4IHNfbXV0ZXg7CiAKLXN0YXRpYyBjaGFyKiBzX2J1bXBCYXNlOwotc3Rh
dGljIHNpemVfdCBzX2J1bXBPZmZzZXQ7Ci1zdGF0aWMgc2l6ZV90IHNfYnVtcExpbWl0OwotCiBz
dGF0aWMgUGVyUHJvY2Vzc0RhdGEqIHNfdGFibGVbdGFibGVTaXplXTsKIAotLy8gUmV0dXJucyB6
ZXJvLWZpbGxlZCBtZW1vcnkgYnkgdmlydHVhbCBvZiB1c2luZyB2bUFsbG9jYXRlLgotc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQotewotICAgIHNf
YnVtcE9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzX2J1bXBPZmZzZXQp
OwotICAgIHZvaWQqIHJlc3VsdCA9IHNfYnVtcEJhc2UgKyBzX2J1bXBPZmZzZXQ7Ci0gICAgc19i
dW1wT2Zmc2V0ICs9IHNpemU7Ci0gICAgaWYgKHNfYnVtcE9mZnNldCA8PSBzX2J1bXBMaW1pdCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSB2bVNpemUoc2l6ZSk7Ci0gICAgdm9pZCogYWxsb2NhdGlvbiA9IHZtQWxsb2NhdGUoYWxsb2Nh
dGlvblNpemUpOwotICAgIHNfYnVtcEJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlv
bik7Ci0gICAgc19idW1wT2Zmc2V0ID0gMDsKLSAgICBzX2J1bXBMaW1pdCA9IGFsbG9jYXRpb25T
aXplOwotICAgIHJldHVybiBhbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOwotfQotCiBQZXJQcm9j
ZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEodW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciogZGlz
YW1iaWd1YXRvciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrKHNfbXV0ZXgpOwpAQCAtNzYsMTAgKzU1LDExIEBAIFBlclByb2Nlc3NEYXRhKiBn
ZXRQZXJQcm9jZXNzRGF0YSh1bnNpZ25lZCBoYXNoLCBjb25zdCBjaGFyKiBkaXNhbWJpZ3VhdG9y
LCBzaXplCiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JWQ6IENyZWF0aW5nIG5ldyAlc1xuIiwgZ2V0cGlkKCksIGRpc2FtYmlndWF0b3IpOwotICAgIHZv
aWQqIHJhd0RhdGFQdHIgPSBhbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vzc0RhdGEpLCBzdGQ6OmFs
aWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKKyAgICBhdXRvKiBhcmVuYSA9IEFy
ZW5hOjpnZXQoKTsKKyAgICB2b2lkKiByYXdEYXRhUHRyID0gYXJlbmEtPmFsbG9jYXRlKHNpemVv
ZihQZXJQcm9jZXNzRGF0YSksIHN0ZDo6YWxpZ25tZW50X29mPFBlclByb2Nlc3NEYXRhPjo6dmFs
dWUpOwogICAgIFBlclByb2Nlc3NEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8UGVyUHJvY2Vzc0Rh
dGEqPihyYXdEYXRhUHRyKTsKICAgICBkYXRhLT5kaXNhbWJpZ3VhdG9yID0gZGlzYW1iaWd1YXRv
cjsKLSAgICBkYXRhLT5tZW1vcnkgPSBhbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOworICAgIGRh
dGEtPm1lbW9yeSA9IGFyZW5hLT5hbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOwogICAgIGRhdGEt
PnNpemUgPSBzaXplOwogICAgIGRhdGEtPmFsaWdubWVudCA9IGFsaWdubWVudDsKICAgICBkYXRh
LT5uZXh0ID0gYnVja2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFs
bExpbmUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKaW5kZXggZDliNzRh
YjhiOWZlMzllMDAwOTI4YmZiNjY1M2U1MDViODljZmQyMi4uZGUyNjcyMDVlODJjNzRkNjEwMTVj
MGFiOWViMjA5NmE2NWMxYjhiMCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
bWFsbExpbmUuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oCkBAIC0y
OSwxNSArMjksMjEgQEAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIK
ICNpbmNsdWRlICJPYmplY3RUeXBlLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVk
ZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU21hbGxMaW5lIHsKIHB1
YmxpYzoKLSAgICB2b2lkIHJlZihVbmlxdWVMb2NrSG9sZGVyJiwgdW5zaWduZWQgY2hhciA9IDEp
OwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNv
dW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCBy
ZWYoU21hbGxQYWdlKiwgdW5zaWduZWQgY2hhciA9IDEpOworICAgIGJvb2wgZGVyZWYoU21hbGxQ
YWdlKik7CisgICAgdW5zaWduZWQgcmVmQ291bnQoU21hbGxQYWdlKiBwYWdlKQorICAgIHsKKyAg
ICAgICAgQlVOVVNFRChwYWdlKTsKKyAgICAgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAgIAogICAgIGNoYXIqIGJlZ2lu
KCk7CiAgICAgY2hhciogZW5kKCk7CkBAIC01MSwxNCArNTcsMTggQEAgc3RhdGljX2Fzc2VydCgK
IAogfTsKIAotaW5saW5lIHZvaWQgU21hbGxMaW5lOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYsIHVu
c2lnbmVkIGNoYXIgcmVmQ291bnQpCitpbmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihTbWFsbFBh
Z2UqIHBhZ2UsIHVuc2lnbmVkIGNoYXIgcmVmQ291bnQpCiB7CisgICAgQlVOVVNFRChwYWdlKTsK
KyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQoIW1fcmVmQ291bnQp
OwogICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxMaW5l
OjpkZXJlZihVbmlxdWVMb2NrSG9sZGVyJikKK2lubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYo
U21hbGxQYWdlKiBwYWdlKQogeworICAgIEJVTlVTRUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdl
LT5pc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKG1fcmVmQ291bnQpOwogICAgIC0tbV9yZWZDb3Vu
dDsKICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1NtYWxsUGFnZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaApp
bmRleCA0MzVlNWY3MDk3ODBiNjY3MzI1MDdkZDZmYzEyMjFiN2NlZTZlN2M5Li5kNzc1MjE4YWY5
YTdkYzYyMGIyMmEwNjc0NjExY2QxNGNjOGU4MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1NtYWxsUGFnZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQ
YWdlLmgKQEAgLTM0LDE5ICszNCwzMyBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK2NsYXNz
IEFwcHJveFBlckNQVUNhY2hlOwogY2xhc3MgU21hbGxMaW5lOwogCiBjbGFzcyBTbWFsbFBhZ2Ug
OiBwdWJsaWMgTGlzdE5vZGU8U21hbGxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5p
cXVlTG9ja0hvbGRlciYpOwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAg
IHVuc2lnbmVkIHJlZkNvdW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50
OyB9CisgICAgdm9pZCByZWYoKTsKKyAgICBib29sIGRlcmVmKCk7CisgICAgdW5zaWduZWQgcmVm
Q291bnQoKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAgIAogICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7IHJl
dHVybiBtX3NpemVDbGFzczsgfQogICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXplQ2xh
c3MpIHsgbV9zaXplQ2xhc3MgPSBzaXplQ2xhc3M7IH0KICAgICAKLSAgICBib29sIGhhc0ZyZWVM
aW5lcyhVbmlxdWVMb2NrSG9sZGVyJikgY29uc3QgeyByZXR1cm4gbV9oYXNGcmVlTGluZXM7IH0K
LSAgICB2b2lkIHNldEhhc0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJiwgYm9vbCBoYXNGcmVl
TGluZXMpIHsgbV9oYXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7IH0KKyAgICBib29sIGhhc0Zy
ZWVMaW5lcygpIGNvbnN0CisgICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAg
ICAgICByZXR1cm4gbV9oYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgc2V0SGFzRnJlZUxp
bmVzKGJvb2wgaGFzRnJlZUxpbmVzKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgp
KTsKKyAgICAgICAgbV9oYXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZv
aWQgaW5pdEhhc0ZyZWVMaW5lcygpIHsgbV9oYXNGcmVlTGluZXMgPSB0cnVlOyB9CiAgICAgCiAg
ICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9
CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBt
X2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9CkBAIC02MCwxNyArNzQsOTgg
QEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewogICAgIFNt
YWxsTGluZSogYmVnaW4oKTsKIAogICAgIHVuc2lnbmVkIGNoYXIgc2xpZGUoKSBjb25zdCB7IHJl
dHVybiBtX3NsaWRlOyB9Ci0gICAgdm9pZCBzZXRTbGlkZSh1bnNpZ25lZCBjaGFyIHNsaWRlKSB7
IG1fc2xpZGUgPSBzbGlkZTsgfQotICAgIAorCisgICAgYm9vbCBpbml0aWFsaXppbmdGb3JBbGxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9Cisg
ICAgdm9pZCBzZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGJvb2wgaW5pdGlhbGl6aW5nRm9y
QWxsb2NhdGlvbikgeyBtX2luaXRpYWxpemluZ0ZvckFsbG9jYXRpb24gPSBpbml0aWFsaXppbmdG
b3JBbGxvY2F0aW9uOyB9CisKKyAgICBBcHByb3hQZXJDUFVDYWNoZSogY2FjaGUoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlOyB9CisgICAgdm9pZCBzZXRDYWNoZShBcHByb3hQZXJDUFVDYWNoZSog
Y2FjaGUpIHsgbV9jYWNoZSA9IGNhY2hlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWdu
ZWQgY2hhciBzbGlkZSkKKyAgICB7CisgICAgICAgIG1fc2xpZGUgPSBzbGlkZTsKKyAgICAgICAg
bV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tdXRleFB0ci0+aXNMb2NrZWQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIE11dGV4KiBs
b2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAgICAgIGlmIChsb2NrV2l0aFVuYmlhcygmaGVsZExv
Y2ssIGxvY2spKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGxvY2stPnVu
bG9jaygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAg
ICAgICAgbV9tdXRleFB0ci0+dW5sb2NrKCk7CisgICAgfQorCisgICAgdm9pZCBzd2l0Y2hMb2Nr
KE11dGV4KiogaGVsZExvY2spCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7CisgICAgICAgICAgICBpZiAoQkxJS0VMWShsb2Nr
ID09ICpoZWxkTG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoKmhlbGRMb2NrKQorICAgICAgICAgICAgICAgICgqaGVsZExvY2spLT51bmxvY2soKTsKKwor
ICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5iaWFzKGhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGxvY2tXaXRoVW5i
aWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2NrKQorICAgIHsKKyAgICAgICAgKmhlbGRM
b2NrID0gbG9jazsKKyAgICAgICAgaWYgKEJMSUtFTFkobG9jay0+dHJ5X2xvY2soKSkpCisgICAg
ICAgICAgICByZXR1cm4gbG9jayA9PSBtX211dGV4UHRyOworCisgICAgICAgIC8vIFdlIGZvdW5k
IHRoYXQgbG9jayBpcyBjb250ZW5kZWQgYmVjYXVzZSB0cnktbG9jayBmYWlsZWQuCisgICAgICAg
IGxvY2stPmxvY2soKTsKKyAgICAgICAgaWYgKGxvY2sgIT0gbV9tdXRleFB0cikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobG9jayAhPSAmbV9mYWxsYmFja011dGV4
KSB7CisgICAgICAgICAgICAvLyBDb250ZW5kZWQgYW5kIHVzaW5nIHBlci1jcHUgbG9jay4gQ2hh
bmdlIHRoaXMgU21hbGxQYWdlJ3MgbG9jayB0byBmaW5lLWdyYWluZWQgZmFsbGJhY2sgbG9jay4K
KyAgICAgICAgICAgIG1fZmFsbGJhY2tNdXRleC5sb2NrKCk7CisgICAgICAgICAgICBtX211dGV4
UHRyID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAg
ICAgICAgICAgKmhlbGRMb2NrID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2tBbmRUcnlUb1Rha2VCaWFzKE11
dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2NrVG9CaWFzVG8pCisgICAgeworICAgICAgICBtX211
dGV4UHRyID0gbG9ja1RvQmlhc1RvOworICAgICAgICBCQVNTRVJUKG1fbXV0ZXhQdHIgPT0gbG9j
a1RvQmlhc1RvKTsKKyAgICAgICAgbG9ja1N3aXRjaChoZWxkTG9jaywgbG9ja1RvQmlhc1RvKTsK
KyAgICAgICAgQkFTU0VSVChtX211dGV4UHRyID09IGxvY2tUb0JpYXNUbyk7CisgICAgfQorCiBw
cml2YXRlOgorICAgIE11dGV4IG1fZmFsbGJhY2tNdXRleDsKICAgICB1bnNpZ25lZCBjaGFyIG1f
aGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAx
OwogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRT
aW5jZUxhc3RTY2F2ZW5nZTogMTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3Vu
dDogNzsKLSAgICB1bnNpZ25lZCBjaGFyIG1fc2l6ZUNsYXNzOworICAgIHVuc2lnbmVkIGNoYXIg
bV9zaXplQ2xhc3MgeyAwIH07CiAgICAgdW5zaWduZWQgY2hhciBtX3NsaWRlOworICAgIHVuc2ln
bmVkIGNoYXIgbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOworCisgICAgTXV0ZXgqIG1fbXV0
ZXhQdHI7CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIG1fY2FjaGUgeyBudWxscHRyIH07CiAKIHN0
YXRpY19hc3NlcnQoCiAgICAgc2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxk
ZWNsdHlwZShtX3NpemVDbGFzcyk+OjptYXgoKSwKQEAgLTc5LDE1ICsxNzQsMTcgQEAgc3RhdGlj
X2Fzc2VydCgKIAogdXNpbmcgTGluZUNhY2hlID0gc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4s
IHNpemVDbGFzc0NvdW50PjsKIAotaW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoVW5pcXVlTG9j
a0hvbGRlciYpCitpbmxpbmUgdm9pZCBTbWFsbFBhZ2U6OnJlZigpCiB7CisgICAgQkFTU0VSVChp
c0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFtX3NsaWRlKTsKICAgICArK21fcmVmQ291bnQ7CiAg
ICAgQkFTU0VSVChtX3JlZkNvdW50KTsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxQYWdlOjpkZXJl
ZihVbmlxdWVMb2NrSG9sZGVyJikKK2lubGluZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYoKQogewor
ICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgQkFT
U0VSVChtX3JlZkNvdW50KTsKICAgICAtLW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU3RhdGljUGVyUHJvY2Vzcy5oCmluZGV4IDM2NmMxNTZkZmU0MjlhMTRiMjJhNWQ1ZDhhYjQ4
NmRmNDZiYjk4NTkuLjk0MDVlNjE0ZjcxMWRjZTI2ZGY3ZjFlZTAzMzRkNGU4MjA1NmNmZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCkBAIC01OSw5ICs1OSw5
IEBAIGNsYXNzIFN0YXRpY1BlclByb2Nlc3MgewogICAgIHN0YXRpYyBUKiBnZXQoKQogICAgIHsK
ICAgICAgICAgVCogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICAgICAgaWYgKEJMSUtFTFkob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgICAgIHJldHVybiBnZXRTbG93Q2FzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBU
KiBnZXRGYXN0Q2FzZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rv
ci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAppbmRleCBkODQwOWIwNTcyZDc3
MmY5ZjBkOWRlZTk4NjA4YWRiMDk3M2M3ZDgxLi42YmIwODQzYzhkY2JkZTcyZTQ5YmU3Mzc1Mjgw
ODQxZjBmNGY1NzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5o
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKQEAgLTU2LDcgKzU2LDExIEBA
IGNsYXNzIFZlY3RvciB7CiAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QpOwogICAgIFQmIGxhc3Qo
KSB7IHJldHVybiBtX2J1ZmZlclttX3NpemUgLSAxXTsgfQogCi0gICAgdm9pZCBwdXNoKGNvbnN0
IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgcHVzaChVJiYpOworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBlbXBsYWNlKEFyZ3Mm
Ji4uLik7CiAKICAgICBUIHBvcCgpOwogICAgIFQgcG9wKHNpemVfdCk7CkBAIC0xMTksMTEgKzEy
MywyMSBAQCBpbmxpbmUgVCYgVmVjdG9yPFQ+OjpvcGVyYXRvcltdKHNpemVfdCBpKQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChjb25zdCBU
JiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitCSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpw
dXNoKFUmJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCisgICAgICAg
IGdyb3dDYXBhY2l0eSgpOworICAgIG5ldyAoJm1fYnVmZmVyW21fc2l6ZSsrXSkgVChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+CitCSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjplbXBsYWNlKEFyZ3MmJi4u
LiBhcmdzKQogewogICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKICAgICAgICAgZ3Jvd0Nh
cGFjaXR5KCk7Ci0gICAgbV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7CisgICAgbmV3ICgmbV9i
dWZmZXJbbV9zaXplKytdKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399920</attachid>
            <date>2020-05-20 18:15:12 -0700</date>
            <delta_ts>2020-05-20 18:26:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200520181511.patch</filename>
            <type>text/plain</type>
            <size>85478</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uN2ZmZGI5NjZkMTY3YTRhNjk5YjNhZmM4M2Q0MDhm
Mjk5N2ViNWEwZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAorMjAyMC0wNS0yMCAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGhhdmUgcGVyLWNwdSBsb2NraW5nIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBibWFs
bG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0
b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlSW1wbCk6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1h
bGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6
Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFwcHJveFBlckNQVUNhY2hlOjpBcHByb3hQZXJDUFVDYWNoZSk6CisgICAgICAgIChi
bWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6bGluZUNhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjppbmRleCBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpBcHBy
b3hQZXJDUFVDYWNoZTo6cGFnZU11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OkFwcHJveFBlckNQ
VUNhY2hlOjptdXRleCk6CisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
RmFzdENhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXJlbmE6
OkFyZW5hKToKKyAgICAgICAgKGJtYWxsb2M6OkFyZW5hOjphbGxvY2F0ZSk6CisgICAgICAgICog
Ym1hbGxvYy9BcmVuYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAqIGJtYWxsb2MvQkNvbXBpbGVyLmg6CisgICAgICAgICogYm1hbGxv
Yy9DUFUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcC4KKyAgICAgICAgKGJtYWxsb2M6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMpOgorICAgICAg
ICAqIGJtYWxsb2MvQ1BVLmg6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjp4ODZfcmR0c2NwKToKKyAgICAgICAgKGJtYWxs
b2M6OmN1cnJlbnRDUFVJbmRleCk6CisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAg
ICAoYm1hbGxvYzo6Q2h1bms6OkNodW5rKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcik6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6
RGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRv
ci5oOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnBlckNQVUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpsaW5lQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAq
IGJtYWxsb2MvR2lnYWNhZ2UuY3BwOgorICAgICAgICAoR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRp
dmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sp
OgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpz
Y2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFy
ayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjph
bGxvY2F0ZUxvY2tlZFNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9j
YXRlU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5T2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxs
b2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpzaHJpbmtMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpl
eHRlcm5hbENvbW1pdCk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpleHRlcm5hbERlY29tbWl0
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmdldEN1
cnJlbnRDUFVDYWNoZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpvbmVTZWNvbmQgY29uc3Qp
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAg
ICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2Mv
TGlzdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGlzdE5vZGU6OmlzT25MaXN0IGNvbnN0KToKKyAg
ICAgICAgKiBibWFsbG9jL011dGV4Lmg6CisgICAgICAgIChibWFsbG9jOjpNdXRleDo6aXNMb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6bG9ja1N3aXRjaCk6CisgICAgICAgICogYm1h
bGxvYy9QZXJQcm9jZXNzLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OmdldFBlclByb2Nlc3NEYXRh
KToKKyAgICAgICAgKGJtYWxsb2M6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFs
bG9jL1NjYXZlbmdlci5jcHA6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1bik6Cisg
ICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1blNvb24pOgorICAgICAgICAoYm1hbGxvYzo6
U2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChibWFs
bG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6
dGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6
OnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVu
Z2VyOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2
ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KToKKyAg
ICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCk6CisgICAgICAgICogYm1h
bGxvYy9TbWFsbExpbmUuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6cmVmQ291bnQp
OgorICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxMaW5lOjpkZXJlZik6CisgICAgICAgICogYm1hbGxvYy9TbWFsbFBhZ2UuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpoYXNGcmVlTGluZXMgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdl
OjpzZXRIYXNGcmVlTGluZXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0SGFz
RnJlZUxpbmVzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6aW5nRm9y
QWxsb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEluaXRp
YWxpemluZ0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpjYWNo
ZSBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldENhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChibWFsbG9jOjpT
bWFsbFBhZ2U6OmlzTG9ja2VkIGNvbnN0KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6
bG9jayk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnVubG9jayk6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OnN3aXRjaExvY2spOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjpsb2NrV2l0aFVuYmlhcyk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmxvY2tB
bmRUcnlUb1Rha2VCaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6cmVmKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6ZGVyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpzZXRTbGlkZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TdGF0aWNQZXJQ
cm9jZXNzLmg6CisgICAgICAgIChibWFsbG9jOjpTdGF0aWNQZXJQcm9jZXNzOjpnZXQpOgorICAg
ICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnB1
c2gpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjplbXBsYWNlKToKKyAgICAgICAgKiBi
bWFsbG9jL2JtYWxsb2MuY3BwOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlMYXJnZVplcm9l
ZE1lbWFsaWduVmlydHVhbCk6CisgICAgICAgIChibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1
YWwpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyk6
CisKIDIwMjAtMDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbYm1hbGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9ibWFsbG9jL0NN
YWtlTGlzdHMudHh0CmluZGV4IDNkOTkwZWI5YmE4ZDM4OWM0NjQzZDE4MDBmNTAzNTk4NGJkN2E4
NmQuLjFmOGZjYTBiZWVjOTIzMDc2YjkxMGI3MDE4ODcyZmIyZTE5OWE1NDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9ibWFsbG9jL0NNYWtl
TGlzdHMudHh0CkBAIC04LDYgKzgsNyBAQCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAgYm1hbGxv
Yy9BbGxJc29IZWFwcy5jcHAKICAgICBibWFsbG9jL0FsbG9jYXRvci5jcHAKICAgICBibWFsbG9j
L0F2YWlsYWJsZU1lbW9yeS5jcHAKKyAgICBibWFsbG9jL0NQVS5jcHAKICAgICBibWFsbG9jL0Nh
Y2hlLmNwcAogICAgIGJtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAogICAgIGJtYWxsb2MvRGVhbGxv
Y2F0b3IuY3BwCkBAIC01Miw2ICs1Myw3IEBAIHNldChibWFsbG9jX1BVQkxJQ19IRUFERVJTCiAg
ICAgYm1hbGxvYy9CdWxrRGVjb21taXQuaAogICAgIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oCiAg
ICAgYm1hbGxvYy9CdW1wUmFuZ2UuaAorICAgIGJtYWxsb2MvQ1BVLmgKICAgICBibWFsbG9jL0Nh
Y2hlLmgKICAgICBibWFsbG9jL0NodW5rLmgKICAgICBibWFsbG9jL0NyeXB0b1JhbmRvbS5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNWMyYzNkNTZkOTc1OWNjMTExZGIzYjNmOTRhZGQzNDg1Yzk2ZGM1YS4uNDFkZjA5YTJlNTBj
ZTI2MjNlZGMyMzdjMjgzN2M2YWRmODQ5MmYxNCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM5LDYgKzEzOSwxMiBAQAogCQlE
RThCMTNCMzIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU4QjEzQjIyMUNDNUQ5RjAwQTYzRkNEIC8qIEJW
TVRhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMzFFNzQ4MDIyMzhDQTVDMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxRTc0N0YyMjM4Q0E1QjAw
NUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzI4RDg0RDIzQ0VCMzg5MDA1NDVCMTggLyogUGFja2Vk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzI4RDg0
QzIzQ0VCMzg5MDA1NDVCMTggLyogUGFja2VkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM1MjM5MDIyNDczNEJFNDAwM0ExM0NGIC8qIENQVS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzUyMzkw
MTI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmNwcCAqLzsgfTsKKwkJRTM1MjM5MDMyNDczNEJFOTAw
M0ExM0NGIC8qIENQVS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNkM3MDNCMjQ3M0ExQ0YwMDNDQUQw
NyAvKiBBcHByb3hQZXJDUFVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM2QzcwM0EyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RTM2QzcwM0UyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJl
bmEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlF
MzZDNzAzRjI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8qIEFy
ZW5hLmNwcCAqLzsgfTsKKwkJRTM2QzcwNDEyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQ
VUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNkM3MDQwMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgKi87IH07
CiAJCUUzNzhBOURGMjQ2QjY4NzIwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OEE5REUyNDZCNjg2
QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgKi87IH07CiAJCUUzNzhBOUUwMjQ2QjY4
NzUwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RU
eXBlVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFM0E0MTNDOTIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTQxM0M4MjI2
MDYxMTQwMDM3RjQ3MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTUsNiArMzAxLDEyIEBACiAJCURF
OEIxM0IyMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJWTVRh
Z3MuaDsgcGF0aCA9IGJtYWxsb2MvQlZNVGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzFFNzQ3RjIyMzhDQTVCMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdGF0aWNQZXJQcm9jZXNzLmg7IHBhdGggPSBi
bWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTMyOEQ4NEMyM0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQYWNrZWQuaDsgcGF0aCA9IGJtYWxsb2MvUGFja2VkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ1BVLmg7IHBhdGggPSBibWFsbG9jL0NQVS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzUyMzkwMTI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IENQVS5jcHA7IHBhdGggPSBibWFsbG9jL0NQVS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQ
ZXJDUFVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcHByb3hQZXJD
UFVDYWNoZS5oOyBwYXRoID0gYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXJlbmEuaDsgcGF0aCA9IGJtYWxsb2Mv
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwM0QyNDczQjU5RDAw
M0NBRDA3IC8qIEFyZW5hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFyZW5hLmNwcDsgcGF0aCA9IGJtYWxsb2MvQXJlbmEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzZDNzA0MDI0NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXBwcm94UGVyQ1BVQ2Fj
aGUuY3BwOyBwYXRoID0gYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RUeXBl
VGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT2JqZWN0VHlwZVRhYmxlLmg7IHBhdGggPSBibWFsbG9j
L09iamVjdFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc4QTlE
RTI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE9iamVjdFR5cGVUYWJsZS5jcHA7IHBhdGggPSBibWFsbG9jL09iamVjdFR5cGVUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTQxM0M4MjI2MDYxMTQwMDM3RjQ3
MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJc29TaGFyZWRQYWdlSW5saW5lcy5oOyBwYXRoID0gYm1hbGxvYy9Jc29TaGFyZWRQYWdl
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc2LDkgKzQ4OCwxNSBA
QAogCQkxNEQ5REI0RTE3RjI4NjZFMDBFQUFCNzkgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8q
IEFwcHJveFBlckNQVUNhY2hlLmNwcCAqLywKKwkJCQlFMzZDNzAzQTI0NzNBMUNGMDAzQ0FEMDcg
LyogQXBwcm94UGVyQ1BVQ2FjaGUuaCAqLywKKwkJCQlFMzZDNzAzRDI0NzNCNTlEMDAzQ0FEMDcg
LyogQXJlbmEuY3BwICovLAorCQkJCUUzNkM3MDNDMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5o
ICovLAogCQkJCTc5Mzk4ODVBMjA3NkVFQjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywK
IAkJCQkxNDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3
REM2RTIxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggKi8sCisJCQkJRTM1MjM5MDEyNDczNEJF
MDAwM0ExM0NGIC8qIENQVS5jcHAgKi8sCisJCQkJRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8q
IENQVS5oICovLAogCQkJCTE0MkI0NDM0MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3Bw
ICovLAogCQkJCTE0MkI0NDM1MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAqLywKIAkJ
CQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovLApAQCAtNTc3
LDYgKzU5NSw4IEBACiAJCQkJMEY3RUI4MzQxRjk1NDFCMDAwRjFBQkNCIC8qIEFsbElzb0hlYXBz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdFQjg0RjFGOTU0RDRFMDBGMUFCQ0IgLyogQWxsSXNv
SGVhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3
MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzZDNzAzQjI0NzNBMUNGMDAz
Q0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNkM3MDNF
MjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5OUM1Q0Qx
RUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFEMDkzNDMzMUZDRjQwNkQwMEU4NUVCNSAvKiBCQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNTkzLDYgKzYxMyw3IEBACiAJCQkJREU4QjEzQjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRh
Z3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3REM2RTMxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5r
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzUyMzkwMzI0NzM0QkU5MDAzQTEzQ0YgLyogQ1BVLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzRTFGODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFu
ZG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVh
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkI0NDM3MUUyODM5RTcwMDFEQTZFOSAv
KiBEZWJ1Z0hlYXAuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxLDkgKzc4MiwxMiBAQAogCQkJZmls
ZXMgPSAoCiAJCQkJMEY3RUI4MkYxRjk1NDFCMDAwRjFBQkNCIC8qIEFsbElzb0hlYXBzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM2QzcwNDEyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJv
eFBlckNQVUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNkM3MDNGMjQ3M0I1OUQwMDND
QUQwNyAvKiBBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTk5QzVDQzFFQzNGMTU5MDBB
MkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTE2Nzc0
MUZBRDY4NUMwMDgyMzZBOCAvKiBibWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3
MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzUy
MzkwMjI0NzM0QkU0MDAzQTEzQ0YgLyogQ1BVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzRC
OTNGMUY4OTcxM0UwMEI5MzVEMyAvKiBDcnlwdG9SYW5kb20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKaW5kZXggNTA2ZDJkODc2
YWVkMzIwNmRlODkyMzBmNzUzNzhkOGFiZWZkMzAzYy4uYTRhNjVmNmQzMTljOGQ2NzVjYTg2YzJm
MTI2YTU3MzU5ZTdjNWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxv
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcApAQCAt
NzYsMTEgKzc2LDExIEBAIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZUltcGwodm9pZCogb2Jq
ZWN0LCBzaXplX3QgbmV3U2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3RpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIE9iamVjdFR5cGU6OkxhcmdlOiB7Ci0gICAgICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJn
ZVNpemUobG9jaywgb2JqZWN0KTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2Vy
KEhlYXA6Om11dGV4KCkpOworICAgICAgICBvbGRTaXplID0gbV9oZWFwLmxhcmdlU2l6ZShoZWFw
TG9ja2VyLCBvYmplY3QpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdT
aXplID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG1faGVhcC5zaHJpbmtMYXJnZShsb2NrLCBS
YW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKKyAgICAgICAgICAgIG1faGVhcC5zaHJp
bmtMYXJnZShoZWFwTG9ja2VyLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
MjIsOSArMTIyLDggQEAgQk5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9y
U2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXoKIHsKICAgICBCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCi0g
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0
b3IucHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXMobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxs
b2NhdG9yLmxpbmVDYWNoZShsb2NrKSwgYWN0aW9uKTsKKyAgICBtX2RlYWxsb2NhdG9yLnByb2Nl
c3NPYmplY3RMb2coKTsKKyAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZUNs
YXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxsb2NhdG9yLnBlckNQVUNhY2hl
KCksIGFjdGlvbik7CiB9CiAKIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRv
cihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MsIEZhaWx1cmVBY3Rp
b24gYWN0aW9uKQpAQCAtMTM3LDggKzEzNiw4IEBAIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJl
ZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhCiAK
IEJOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplLCBG
YWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6
bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVu
dCwgc2l6ZSwgYWN0aW9uKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6
bXV0ZXgoKSk7CisgICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIGFs
aWdubWVudCwgc2l6ZSwgYWN0aW9uKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2I4ZTc5NzlkMjhiOTlhMzJmOGUyNGJmMzU2MjM0MTYzYWU4NjIyMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKKworI2luY2x1ZGUgIkFyZW5hLmgiCisK
K25hbWVzcGFjZSBibWFsbG9jIHsKKworTGluZUNhY2hlKiBBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
U2xvd0Nhc2UoY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgaWYgKCFtX2xpbmVDYWNoZS5sb2Fk
KCkpIHsKKyAgICAgICAgdm9pZCogbWVtb3J5ID0gQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXpl
b2YoTGluZUNhY2hlKSwgYWxpZ25vZihMaW5lQ2FjaGUpKTsKKyAgICAgICAgYXV0byogdCA9IG5l
dyAobWVtb3J5KSBMaW5lQ2FjaGUoKTsKKyAgICAgICAgbV9saW5lQ2FjaGUuc3RvcmUodCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2xpbmVDYWNoZS5sb2FkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BV
Q2FjaGUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzA4MmYxZDM2ZGE1NDZiZjZjYTI5ODdhY2Y5YTQ5Y2I3N2E1ZTExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIlNpemVzLmgi
CisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSA8YXJyYXk+CisKK25hbWVzcGFjZSBi
bWFsbG9jIHsKKworLy8gQXBwcm94UGVyQ1BVQ2FjaGUgaXMgKmFwcHJveGltYXRlKiBwZXItQ1BV
IGNhY2hlLiBUaGUgZ29hbCBvZiB0aGlzIGNhY2hlIGlzIG5vdCBwcmVjaXNlbHkgY29uc3RydWN0
aW5nIHBlci1DUFUgY2FjaGUsCisvLyByYXRoZXIgaXQgaXMgb2ZmZXJpbmcgcGVyLUNQVSBhZmZp
bml0eSB0byBTbWFsbFBhZ2VzIGFzIG9wdGltaXphdGlvbi4KK2NsYXNzIEFwcHJveFBlckNQVUNh
Y2hlIHsKK3B1YmxpYzoKKyAgICBBcHByb3hQZXJDUFVDYWNoZSh1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBMaW5lQ2FjaGUmIGxp
bmVDYWNoZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCisgICAgeworICAgICAgICBpZiAoYXV0
byogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKSkKKyAgICAgICAgICAgIHJldHVybiAqb2JqZWN0Owor
ICAgICAgICByZXR1cm4gKmdldFNsb3dDYXNlKGxvY2tlcik7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTXV0ZXgmIHBhZ2VNdXRl
eCgpIHsgcmV0dXJuIG1fcGFnZU11dGV4OyB9CisgICAgTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4g
bV9tdXRleDsgfQorCisgICAgTGluZUNhY2hlKiBnZXRGYXN0Q2FzZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9saW5lQ2FjaGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTGluZUNhY2hlKiBnZXRTbG93Q2FzZShjb25zdCBMb2NrSG9s
ZGVyJik7CisKKyAgICBzdGQ6OmF0b21pYzxMaW5lQ2FjaGUqPiBtX2xpbmVDYWNoZSB7IG51bGxw
dHIgfTsKKyAgICBNdXRleCBtX211dGV4OworICAgIE11dGV4IG1fcGFnZU11dGV4OworICAgIHVu
c2lnbmVkIG1faW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQXJlbmEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMTJkMWQyZTg0NWM1YjRiZjRmNWQ0MDI3ZjU5NmFi
NjhkZjQ0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5h
LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIkFyZW5hLmgiCisKKyNpbmNsdWRlICJWTUFsbG9jYXRlLmgi
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitERUZJTkVfU1RB
VElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJlbmEpOworCitBcmVuYTo6QXJlbmEoY29uc3QgTG9j
a0hvbGRlciYpCit7Cit9CisKKy8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1
YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KK3ZvaWQqIEFyZW5hOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihBcmVuYTo6bXV0
ZXgoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBtX2J1bXBPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9idW1wT2Zmc2V0KTsKKyAgICAgICAgdm9pZCog
cmVzdWx0ID0gbV9idW1wQmFzZSArIG1fYnVtcE9mZnNldDsKKyAgICAgICAgbV9idW1wT2Zmc2V0
ICs9IHNpemU7CisgICAgICAgIGlmIChtX2J1bXBPZmZzZXQgPD0gbV9idW1wTGltaXQpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSB2
bVNpemUoc2l6ZSk7CisgICAgICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgbV9idW1wQmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihhbGxv
Y2F0aW9uKTsKKyAgICAgICAgbV9idW1wT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9idW1wTGltaXQg
PSBhbGxvY2F0aW9uU2l6ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaCBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQXJlbmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTkwODQ0Y2U3ZWNkMTRjMDMwZTZhZDJkOGE3
YWVkOTE2ZDQ1YjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
cmVuYS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0YXRpY1BlclByb2Nlc3Mu
aCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBBcmVuYSA6IHB1YmxpYyBTdGF0aWNQ
ZXJQcm9jZXNzPEFyZW5hPiB7CitwdWJsaWM6CisgICAgQkVYUE9SVCBBcmVuYShjb25zdCBMb2Nr
SG9sZGVyJik7CisKKyAgICAvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1lbW9yeSBieSB2aXJ0dWFs
IG9mIHVzaW5nIHZtQWxsb2NhdGUuCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUsIHNp
emVfdCBhbGlnbm1lbnQpOworCitwcml2YXRlOgorICAgIGNoYXIqIG1fYnVtcEJhc2UgeyBudWxs
cHRyIH07CisgICAgc2l6ZV90IG1fYnVtcE9mZnNldCB7IDAgfTsKKyAgICBzaXplX3QgbV9idW1w
TGltaXQgeyAwIH07Cit9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShBcmVu
YSk7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQkNvbXBpbGVyLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5o
CmluZGV4IGNkYzQ3YWM5YTJlYzcwYWY3ZDVmZTQ4Y2Q3ODFkZGZiZDBjYzUwNGEuLmYzZDA3NDM3
ZmUzZTY5ZmQ4MDgxOTc2MGRiOWVhNmYwZTYzOWZkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29t
cGlsZXIuaApAQCAtNzksMyArNzksMjEgQEAKICNpZiAhZGVmaW5lZChCRkFMTFRIUk9VR0gpCiAj
ZGVmaW5lIEJGQUxMVEhST1VHSAogI2VuZGlmCisKKy8qIEJMSUtFTFkgYW5kIEJVTkxJS0VMWSAq
LworCisjaWYgIWRlZmluZWQoQkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQor
I2RlZmluZSBCTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEJMSUtFTFkpCisjZGVmaW5lIEJMSUtFTFkoeCkgKHgpCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEJVTkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQorI2Rl
ZmluZSBCVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbmRpZgorCisj
aWYgIWRlZmluZWQoQlVOTElLRUxZKQorI2RlZmluZSBCVU5MSUtFTFkoeCkgKHgpCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcCBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQ1BVLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmU0N2EyNzBkODdjOTE4NzM2Y2YwOWEz
ZjYyYTM0NzRkNTJiYTYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9DUFUuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ1BVLmgiCisKKyNpbmNsdWRlICJCUGxhdGZvcm0u
aCIKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2lmIEJPUyhEQVJX
SU4pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VsaWYgQk9TKExJTlVYKSB8fCBCT1MoRlJF
RUJTRCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgYm1hbGxvYyB7
CisKK2ludCBudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkKK3sKKyAgICBjb25zdCBpbnQgZGVmYXVs
dElmVW5hdmFpbGFibGUgPSAxOworICAgIHN0YXRpYyBpbnQgc19udW1iZXJPZkNvcmVzID0gLTE7
CisKKyAgICBpZiAoc19udW1iZXJPZkNvcmVzID4gMCkKKyAgICAgICAgcmV0dXJuIHNfbnVtYmVy
T2ZDb3JlczsKKworICAgIGlmIChjb25zdCBjaGFyKiBjb3Jlc0VudiA9IGdldGVudigiYm1hbGxv
Y19udW1iZXJPZlByb2Nlc3NvckNvcmVzIikpIHsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
b3JlczsKKyAgICAgICAgaWYgKHNzY2FuZihjb3Jlc0VudiwgIiV1IiwgJm51bWJlck9mQ29yZXMp
ID09IDEpIHsKKyAgICAgICAgICAgIHNfbnVtYmVyT2ZDb3JlcyA9IG51bWJlck9mQ29yZXM7Cisg
ICAgICAgICAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOworICAgICAgICB9CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlIGJtYWxsb2NfbnVtYmVyT2ZQ
cm9jZXNzb3JDb3Jlcz0lc1xuIiwgY29yZXNFbnYpOworICAgIH0KKworI2lmIEJPUyhEQVJXSU4p
CisgICAgdW5zaWduZWQgcmVzdWx0OworICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YocmVzdWx0
KTsKKyAgICBpbnQgbmFtZVtdID0geworICAgICAgICBDVExfSFcsCisgICAgICAgIEhXX0FWQUlM
Q1BVCisgICAgfTsKKyAgICBpbnQgc3lzY3RsUmVzdWx0ID0gc3lzY3RsKG5hbWUsIHNpemVvZihu
YW1lKSAvIHNpemVvZihpbnQpLCAmcmVzdWx0LCAmbGVuZ3RoLCAwLCAwKTsKKworICAgIHNfbnVt
YmVyT2ZDb3JlcyA9IHN5c2N0bFJlc3VsdCA8IDAgPyBkZWZhdWx0SWZVbmF2YWlsYWJsZSA6IHJl
c3VsdDsKKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9TKEZSRUVCU0QpCisgICAgbG9uZyBzeXNjb25m
UmVzdWx0ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisKKyAgICBzX251bWJlck9m
Q29yZXMgPSBzeXNjb25mUmVzdWx0IDwgMCA/IGRlZmF1bHRJZlVuYXZhaWxhYmxlIDogc3RhdGlj
X2Nhc3Q8aW50PihzeXNjb25mUmVzdWx0KTsKKyNlbHNlCisgICAgc19udW1iZXJPZkNvcmVzID0g
ZGVmYXVsdElmVW5hdmFpbGFibGU7CisjZW5kaWYKKyAgICByZXR1cm4gc19udW1iZXJPZkNvcmVz
OworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0NQVS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43ZDAyZTg3MmNmMDk0YjUyZjQ3OGJhZGY2OWEwNGRjZDE2OGFiOTkwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNsdWRlIDxjc3RkaW50PgorCituYW1lc3BhY2Ug
Ym1hbGxvYyB7CisKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZfNjQpCitpbmxpbmUgdWludDY0
X3QgeDg2X3JkdHNjcCh1aW50MzJfdCYgYXV4KQoreworICAgIHVpbnQ2NF90IHJheCA9IDA7Cisg
ICAgdWludDY0X3QgcmR4ID0gMDsKKyAgICBhc20gdm9sYXRpbGUoInJkdHNjcCIgOiAiPWEiIChy
YXgpLCAiPWQiIChyZHgpLCAiPWMiIChhdXgpIDogOiApOworICAgIHJldHVybiAocmR4IDw8IDMy
KSArIHJheDsKK30KKyNlbmRpZgorCitpbmxpbmUgdW5zaWduZWQgY3VycmVudENQVUluZGV4KCkK
K3sKKyNpZiBCT1MoREFSV0lOKQorI2lmIEJDUFUoWDg2KSB8fCBCQ1BVKFg4Nl82NCkKKyAgICBz
dHJ1Y3QgeyB1aW50cHRyX3QgcDEsIHAyOyB9IHA7CisgICAgYXNtIHZvbGF0aWxlKCJzaWR0ICVb
cF0iIDogW3BdICI9Jm0iIChwKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihw
LnAxICYgMHhmZik7CisjZW5kaWYKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwor
aW50IG51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9DaHVuay5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCmlu
ZGV4IDIxZmJiOGZlNzk4ZGQ5NzgzNWEzOGNjZjhmMWFiMDBlM2RiMjc0MzIuLjM0OGMyNWRlODM2
YTNkMDYxN2JkNTJmZjA2ZmZhNzUxMWNlZWZmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ2h1bmsuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKQEAg
LTkzLDkgKzkzLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHZvaWQgZm9yRWFjaFBh
Z2UoQ2h1bmsqIGNodW5rLCBzaXplX3QgcGFnZVNpemUsIEZ1bmMKIGlubGluZSBDaHVuazo6Q2h1
bmsoc2l6ZV90IHBhZ2VTaXplKQogewogICAgIHNpemVfdCBzbWFsbFBhZ2VDb3VudCA9IHBhZ2VT
aXplIC8gc21hbGxQYWdlU2l6ZTsKLSAgICBmb3JFYWNoUGFnZSh0aGlzLCBwYWdlU2l6ZSwgWyZd
KFNtYWxsUGFnZSogcGFnZSkgeworICAgIGZvckVhY2hQYWdlKHRoaXMsIHBhZ2VTaXplLCBbJl0o
U21hbGxQYWdlKiBwYWdlcykgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNtYWxs
UGFnZUNvdW50OyArK2kpCi0gICAgICAgICAgICBwYWdlW2ldLnNldFNsaWRlKGkpOworICAgICAg
ICAgICAgcGFnZXNbaV0uaW5pdGlhbGl6ZShpKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0RlYWxsb2NhdG9yLmNwcAppbmRleCA3ZDFlMzRlOTdhNzc5MmQ4ZmQzMDZhZTIwNWQ2
ZjcwMTIzYWM4YjQxLi41NGJmYjE3NTM3NzQzNjQ1NjlkMzU1OWQ2ZDdkMmFkZGY2ZjYwNWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcApAQCAtNDEsNiArNDEsOCBAQCBE
ZWFsbG9jYXRvcjo6RGVhbGxvY2F0b3IoSGVhcCYgaGVhcCkKICAgICA6IG1faGVhcChoZWFwKQog
ewogICAgIEJBU1NFUlQoIUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkp
OworICAgIG1fcGVyQ1BVQ2FjaGUgPSAmbV9oZWFwLmdldEN1cnJlbnRDUFVDYWNoZSgpOworICAg
IG1fY2FjaGVUaW1lID0gbWFjaF9hcHByb3hpbWF0ZV90aW1lKCk7CiB9CiAKIERlYWxsb2NhdG9y
Ojp+RGVhbGxvY2F0b3IoKQpAQCAtNTAsMTYgKzUyLDE3IEBAIERlYWxsb2NhdG9yOjp+RGVhbGxv
Y2F0b3IoKQogICAgIAogdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIFVuaXF1
ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLQotICAgIHByb2Nlc3NPYmplY3RMb2co
bG9jayk7Ci0gICAgbV9oZWFwLmRlYWxsb2NhdGVMaW5lQ2FjaGUobG9jaywgbGluZUNhY2hlKGxv
Y2spKTsKKyAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgLy8gbV9oZWFwLmRlYWxsb2NhdGVM
aW5lQ2FjaGUoY2FjaGUoKSk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RM
b2coVW5pcXVlTG9ja0hvbGRlciYgbG9jaykKK3ZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmpl
Y3RMb2coKQogeworICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgYXV0byYgY2Fj
aGUgPSBwZXJDUFVDYWNoZSgpOwogICAgIGZvciAoT2JqZWN0IG9iamVjdCA6IG1fb2JqZWN0TG9n
KQotICAgICAgICBtX2hlYXAuZGVyZWZTbWFsbExpbmUobG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUo
bG9jaykpOworICAgICAgICBtX2hlYXAuZGVyZWZTbWFsbExpbmUoJmhlbGRMb2NrLCBvYmplY3Qs
IGNhY2hlKTsKKyAgICBsb2NrU3dpdGNoKCZoZWxkTG9jaywgbnVsbHB0cik7CiAgICAgbV9vYmpl
Y3RMb2cuY2xlYXIoKTsKIH0KIApAQCAtNjksMTUgKzcyLDEzIEBAIHZvaWQgRGVhbGxvY2F0b3I6
OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2hlYXAuaXNMYXJnZShvYmplY3QpKSB7Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIg
bG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgbV9oZWFwLmRlYWxsb2NhdGVMYXJnZShsb2Nr
LCBvYmplY3QpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0
ZXgoKSk7CisgICAgICAgIG1faGVhcC5kZWFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgb2JqZWN0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX29iamVjdExvZy5zaXplKCkg
PT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkgewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAg
fQorICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkK
KyAgICAgICAgcHJvY2Vzc09iamVjdExvZygpOwogCiAgICAgbV9vYmplY3RMb2cucHVzaChvYmpl
Y3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5o
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCmluZGV4IGYxNGZlZWE1Y2Mw
YjU2MzliZmZjYWE1ZGJmN2UxODFjMmI1YzJmZTMuLjYzMzBmZjcxNjA0MzZhODY5OTQ3NmM0Yjc1
NGVlNjg2N2Q2YjhlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxv
Y2F0b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgKQEAgLTI2
LDkgKzI2LDEyIEBACiAjaWZuZGVmIERlYWxsb2NhdG9yX2gKICNkZWZpbmUgRGVhbGxvY2F0b3Jf
aAogCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKICNpbmNsdWRlICJCRXhwb3J0Lmgi
CiAjaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
U21hbGxQYWdlLmgiCisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNpbmNsdWRlIDxtdXRl
eD4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewpAQCAtNDYsOSArNDksMTcgQEAgY2xhc3MgRGVhbGxv
Y2F0b3IgewogICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgdm9pZCBzY2F2ZW5nZSgp
OwogICAgIAotICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZyhVbmlxdWVMb2NrSG9sZGVyJik7Cisg
ICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKCk7CiAgICAgCi0gICAgTGluZUNhY2hlJiBsaW5lQ2Fj
aGUoVW5pcXVlTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fbGluZUNhY2hlOyB9CisgICAgQXBwcm94
UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHRpbWUg
PSBtYWNoX2FwcHJveGltYXRlX3RpbWUoKTsKKyAgICAgICAgaWYgKHRpbWUgLSBtX2NhY2hlVGlt
ZSA+IG1faGVhcC5vbmVTZWNvbmQoKSkgeworICAgICAgICAgICAgbV9wZXJDUFVDYWNoZSA9ICZt
X2hlYXAuZ2V0Q3VycmVudENQVUNhY2hlKCk7CisgICAgICAgICAgICBtX2NhY2hlVGltZSA9IHRp
bWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICptX3BlckNQVUNhY2hlOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CkBAIC01Niw3ICs2
Nyw4IEBAIGNsYXNzIERlYWxsb2NhdG9yIHsKIAogICAgIEhlYXAmIG1faGVhcDsKICAgICBGaXhl
ZFZlY3Rvcjx2b2lkKiwgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7Ci0gICAg
TGluZUNhY2hlIG1fbGluZUNhY2hlOyAvLyBUaGUgSGVhcCByZW1vdmVzIGl0ZW1zIGZyb20gdGhp
cyBjYWNoZS4KKyAgICB1aW50NjRfdCBtX2NhY2hlVGltZSB7IDAgfTsKKyAgICBBcHByb3hQZXJD
UFVDYWNoZSogbV9wZXJDUFVDYWNoZSB7IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBib29sIERl
YWxsb2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0dpZ2FjYWdlLmNwcAppbmRleCBiOThjZDNhODM2YjA2ZmI0M2MxMTMzNjYzZDJiZmUwYTZi
NDQyZDVlLi44ZTI0ODE3NWVlYjliNzAwOWE3NjdmYzgzZGE2YjFjNTZjNWIyN2M3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAorKysgYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgZGlzYWJs
ZVByaW1pdGl2ZUdpZ2FjYWdlKCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwot
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRl
eCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzOjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxiYWNrcy5j
YWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3VtZW50KTsK
ICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKQEAgLTI3OCwxNCArMjc4LDE0IEBA
IHZvaWQgYWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCop
LCB2b2lkKiBhcmd1bWVudCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgp
KTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tz
OjptdXRleCgpKTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2FsbGJhY2soZnVuY3Rp
b24sIGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
KHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKIHsKICAgICBQcmltaXRp
dmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
czo6Z2V0KCk7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxs
YmFja3M6Om11dGV4KCkpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKFByaW1pdGl2ZURp
c2FibGVDYWxsYmFja3M6Om11dGV4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fs
bGJhY2tzLmNhbGxiYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoY2FsbGJhY2tzLmNh
bGxiYWNrc1tpXS5mdW5jdGlvbiA9PSBmdW5jdGlvbgogICAgICAgICAgICAgJiYgY2FsbGJhY2tz
LmNhbGxiYWNrc1tpXS5hcmd1bWVudCA9PSBhcmd1bWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5j
cHAKaW5kZXggNDk0YTJiNTRjY2MxMzhhNGRhZDA1YmY2NjgxNmMzNjM3ZjU0ZTcxNC4uNWU0ZTIz
MWQ3YzhjYzI2N2E3NmIxNjI0YjMxNDU1MDBlN2IxN2YzOCAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9IZWFwLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCisjaW5jbHVkZSAi
QXJlbmEuaCIKICNpbmNsdWRlICJBdmFpbGFibGVNZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVj
b21taXQuaCIKICNpbmNsdWRlICJCdW1wQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAj
aW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJE
ZWJ1Z0hlYXAuaCIKQEAgLTY1LDYgKzY3LDE5IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwg
TG9ja0hvbGRlciYpCiAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNp
emUsIDAsIDApKTsKICAgICB9CiAjZW5kaWYKKworICAgIHVuc2lnbmVkIGNvcmVzID0gbnVtYmVy
T2ZQcm9jZXNzb3JDb3JlcygpOworICAgIG1fY29yZU1hc2sgPSByb3VuZFVwVG9Qb3dlck9mVHdv
KGNvcmVzKSAtIDE7CisgICAgbV9jYWNoZSA9IHN0YXRpY19jYXN0PEFwcHJveFBlckNQVUNhY2hl
Kj4oQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXplb2YoQXBwcm94UGVyQ1BVQ2FjaGUpICogY29y
ZXMsIGFsaWdub2YoQXBwcm94UGVyQ1BVQ2FjaGUpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgY29yZXM7ICsraW5kZXgpCisgICAgICAgIG5ldyAoJm1fY2FjaGVbaW5k
ZXhdKSBBcHByb3hQZXJDUFVDYWNoZShpbmRleCk7CisKKyAgICBzdGF0aWMgbWFjaF90aW1lYmFz
ZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hf
dGltZWJhc2VfaW5mbygmdGltZWJhc2VJbmZvKTsKKyAgICBCQVNTRVJUKGtyID09IEtFUk5fU1VD
Q0VTUyk7CisgICAgQkFTU0VSVCh0aW1lYmFzZUluZm8uZGVub20pOworICAgIEJVTlVTRUQoa3Ip
OworICAgIG1fb25lU2Vjb25kID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEuMCAqICgxLjBlOSAq
IHRpbWViYXNlSW5mby5kZW5vbSkgLyB0aW1lYmFzZUluZm8ubnVtZXIpOwogICAgIAogICAgIG1f
c2NhdmVuZ2VyID0gU2NhdmVuZ2VyOjpnZXQoKTsKIH0KQEAgLTExNywxMSArMTMyLDMyIEBAIHZv
aWQgSGVhcDo6ZGVjb21taXRMYXJnZVJhbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBMYXJnZVJhbmdl
JiByYW5nZSwgQnVsa0RlY29tbWl0CiB9CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12
b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYg
ZGVjb21taXR0ZXIpCit2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBM
b2NrZXIsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCiAjZWxzZQotdm9pZCBIZWFwOjpzY2F2
ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBz
aXplX3QmIGRlZmVycmVkRGVjb21taXRzKQordm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2Nr
SG9sZGVyJiBoZWFwTG9ja2VyLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRl
ZmVycmVkRGVjb21taXRzKQogI2VuZGlmCiB7CisjaWYgMAorICAgIHVpbnQ2NF90IHRpbWUgPSBt
YWNoX2FwcHJveGltYXRlX3RpbWUoKTsKKyAgICBmb3IgKGF1dG8mIHBlckNQVUNhY2hlIDogbV9j
YWNoZSkgeworICAgICAgICBhdXRvKiBsaW5lQ2FjaGUgPSBwZXJDUFVDYWNoZS5nZXRGYXN0Q2Fz
ZSgpOworICAgICAgICBpZiAoIWxpbmVDYWNoZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAvLyBGSVhNRTogV2lsbCBjaGFuZ2UgaXQgdG8gYmUgcGVyIGNhY2hlLgorICAgICAgICBm
b3IgKGF1dG8mIGxpc3QgOiAqbGluZUNhY2hlKSB7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZUNs
YXNzID0gJmxpc3QgLSAmKCpsaW5lQ2FjaGUpWzBdOworICAgICAgICAgICAgZm9yIChTbWFsbFBh
Z2UqIGN1cnJlbnQgPSAqbGlzdC5iZWdpbigpOyBjdXJyZW50ICE9ICpsaXN0LmVuZCgpOykgewor
ICAgICAgICAgICAgICAgIGF1dG8qIG5leHQgPSBzdGF0aWNfY2FzdDxTbWFsbFBhZ2UqPihjdXJy
ZW50LT5uZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoKHRpbWUgLSBjdXJyZW50LT5sYXN0Q2hh
aW5lZCgpKSA+IG1fb25lU2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgIExpc3Q8U21hbGxQ
YWdlPjo6cmVtb3ZlKGN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVDYWNoZVtz
aXplQ2xhc3NdLnB1c2goY3VycmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2Vu
ZGlmCisKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2ZyZWVQYWdlcykgewogICAgICAgICBmb3Ig
KGF1dG8qIGNodW5rIDogbGlzdCkgewogICAgICAgICAgICAgZm9yIChhdXRvKiBwYWdlIDogY2h1
bmstPmZyZWVQYWdlcygpKSB7CkBAIC0xNTAsNyArMTg2LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5n
ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXpl
X3QmIGQKIAogICAgIGZvciAoYXV0byYgbGlzdCA6IG1fY2h1bmtDYWNoZSkgewogICAgICAgICB3
aGlsZSAoIWxpc3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmso
bG9jaywgbGlzdC5wb3AoKSwgJmxpc3QgLSAmbV9jaHVua0NhY2hlWzBdKTsKKyAgICAgICAgICAg
IGRlYWxsb2NhdGVTbWFsbENodW5rKGhlYXBMb2NrZXIsIGxpc3QucG9wKCksICZsaXN0IC0gJm1f
Y2h1bmtDYWNoZVswXSk7CiAgICAgfQogCiAgICAgZm9yIChMYXJnZVJhbmdlJiByYW5nZSA6IG1f
bGFyZ2VGcmVlKSB7CkBAIC0xNjMsNyArMTk5LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGQK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgZGVjb21t
aXRMYXJnZVJhbmdlKGxvY2ssIHJhbmdlLCBkZWNvbW1pdHRlcik7CisgICAgICAgIGRlY29tbWl0
TGFyZ2VSYW5nZShoZWFwTG9ja2VyLCByYW5nZSwgZGVjb21taXR0ZXIpOwogICAgIH0KIAogI2lm
IEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKQEAgLTE3MiwyMSArMjA4LDIyIEBAIHZvaWQgSGVhcDo6
c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRl
ciwgc2l6ZV90JiBkCiB9CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIEhlYXA6
OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNv
bW1pdCYgZGVjb21taXR0ZXIpCit2b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVu
aXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCiB7
CiAgICAgdm9pZCogbmV3SGlnaFdhdGVyTWFyayA9IG51bGxwdHI7CiAgICAgZm9yIChMYXJnZVJh
bmdlJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7CiAgICAgICAgIGlmIChyYW5nZS5iZWdpbigpIDw9
IG1faGlnaFdhdGVybWFyaykKICAgICAgICAgICAgIG5ld0hpZ2hXYXRlck1hcmsgPSBzdGQ6Om1p
bihuZXdIaWdoV2F0ZXJNYXJrLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmFuZ2UuYmVnaW4oKSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywgcmFuZ2Us
IGRlY29tbWl0dGVyKTsKKyAgICAgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShoZWFwTG9ja2Vy
LCByYW5nZSwgZGVjb21taXR0ZXIpOwogICAgIH0KICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBuZXdI
aWdoV2F0ZXJNYXJrOwogfQogI2VuZGlmCiAKLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxpbmVDYWNo
ZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2b2lkIEhlYXA6OmRl
YWxsb2NhdGVMaW5lQ2FjaGUoTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7CisgICAgVW5pcXVlTG9j
a0hvbGRlciBoZWFwTG9ja2VyKG11dGV4KCkpOwogICAgIGZvciAoYXV0byYgbGlzdCA6IGxpbmVD
YWNoZSkgewogICAgICAgICB3aGlsZSAoIWxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBz
aXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAmbGluZUNhY2hlWzBdOwpAQCAtMTk1LDcgKzIzMiw3
IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGlu
ZUNhY2hlJiBsaW5lQ2FjaGUpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxD
aHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0
aW9uIGFjdGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xk
ZXImIGhlYXBMb2NrZXIsIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQog
ewogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogICAgIApA
QCAtMjA1LDcgKzI0Miw3IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxv
Y2tIb2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAgICAgICAgIGlmICgh
bV9jaHVua0NhY2hlW3BhZ2VDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG1f
Y2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnBvcCgpOwogCi0gICAgICAgIHZvaWQqIG1lbW9yeSA9IGFs
bG9jYXRlTGFyZ2UobG9jaywgY2h1bmtTaXplLCBjaHVua1NpemUsIGFjdGlvbik7CisgICAgICAg
IHZvaWQqIG1lbW9yeSA9IGFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgY2h1bmtTaXplLCBjaHVu
a1NpemUsIGFjdGlvbik7CiAgICAgICAgIGlmICghbWVtb3J5KSB7CiAgICAgICAgICAgICBCQVNT
RVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjEzLDcgKzI1MCw3IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVB
CiAKICAgICAgICAgQ2h1bmsqIGNodW5rID0gbmV3IChtZW1vcnkpIENodW5rKHBhZ2VTaXplKTsK
IAotICAgICAgICBtX29iamVjdFR5cGVzLnNldChsb2NrLCBjaHVuaywgT2JqZWN0VHlwZTo6U21h
bGwpOworICAgICAgICBtX29iamVjdFR5cGVzLnNldChoZWFwTG9ja2VyLCBjaHVuaywgT2JqZWN0
VHlwZTo6U21hbGwpOwogCiAgICAgICAgIHNpemVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsK
ICAgICAgICAgZm9yRWFjaFBhZ2UoY2h1bmssIHBhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdl
KSB7CkBAIC0yMjEsNyArMjU4LDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5p
cXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUEKICNpZiAhQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgcGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNj
YXZlbmdlKCk7CiAjZW5kaWYKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2Nr
LCB0cnVlKTsKKyAgICAgICAgICAgIHBhZ2UtPmluaXRIYXNGcmVlTGluZXMoKTsKKyAgICAgICAg
ICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFsc2UpOwogICAgICAgICAg
ICAgY2h1bmstPmZyZWVQYWdlcygpLnB1c2gocGFnZSk7CiAgICAgICAgICAgICBhY2NvdW50ZWRJ
bkZyZWVhYmxlICs9IHBhZ2VTaXplOwogICAgICAgICB9KTsKQEAgLTI0NCw5ICsyODIsOSBAQCB2
b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXpl
X3QgcGFnZUNsYXNzLCBGYWlsdXJlQQogICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1
c2goY2h1bmspOwogfQogCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxv
Y2tIb2xkZXImIGxvY2ssIENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKK3ZvaWQgSGVh
cDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgQ2h1
bmsqIGNodW5rLCBzaXplX3QgcGFnZUNsYXNzKQogewotICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxv
Y2ssIGNodW5rLCBPYmplY3RUeXBlOjpMYXJnZSk7CisgICAgbV9vYmplY3RUeXBlcy5zZXQoaGVh
cExvY2tlciwgY2h1bmssIE9iamVjdFR5cGU6OkxhcmdlKTsKICAgICAKICAgICBzaXplX3Qgc2l6
ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKGNodW5rKTsKICAgICBzaXplX3QgdG90YWxQaHlz
aWNhbFNpemUgPSBzaXplOwpAQCAtMjcwLDIzICszMDgsMzYgQEAgdm9pZCBIZWFwOjpkZWFsbG9j
YXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBDaHVuayogY2h1bmssIHNpemVf
dCBwYWcKICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShjaHVuaywgc2l6ZSwgc3RhcnRQ
aHlzaWNhbFNpemUsIHRvdGFsUGh5c2ljYWxTaXplKSk7CiB9CiAKLVNtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFz
cywgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQorU21hbGxQYWdl
KiBIZWFwOjphbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBBcHByb3hQ
ZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIFJF
TEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAgaWYgKCFsaW5l
Q2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQ2FjaGVbc2l6
ZUNsYXNzXS5wb3BGcm9udCgpOworICAgIGJvb2wgaXNFbXB0eSA9IGZhbHNlOworICAgIFNtYWxs
UGFnZSogcGFnZSA9IFsmXSgpIC0+IFNtYWxsUGFnZSogeworICAgICAgICB7CisgICAgICAgICAg
ICBMb2NrSG9sZGVyIGNhY2hlTG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAg
ICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUgPSBwZXJDUFVDYWNoZS5saW5lQ2FjaGUoY2FjaGVMb2Nr
ZXIpOworICAgICAgICAgICAgaWYgKCFsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvKiBwYWdlID0gbGluZUNhY2hlW3NpemVDbGFzc10ucG9wRnJv
bnQoKTsKKyAgICAgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9u
KHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKG11dGV4KCkpOwor
ICAgICAgICBpZiAoIW1fbGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBhdXRvKiBwYWdlID0gbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5wb3BGcm9udCgpOworICAg
ICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9CiAKLSAgICBpZiAoIW1fbGluZUNhY2hlW3Np
emVDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9saW5lQ2FjaGVbc2l6ZUNsYXNz
XS5wb3BGcm9udCgpOworICAgICAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7CiAK
LSAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCi0gICAgU21hbGxQYWdl
KiBwYWdlID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CisgICAgICAgIGlzRW1wdHkgPSB0cnVlOwog
ICAgICAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHNpemVDbGFz
cyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBwYWdlQ2xhc3MsIGFj
dGlvbik7CisgICAgICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVhcExvY2tlciwgcGFnZUNs
YXNzLCBhY3Rpb24pOwogICAgICAgICBpZiAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVy
bk51bGwgJiYgbV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApAQCAtMzE0LDc2ICszNjUsMTI3IEBAIFNtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFz
cywgTGluCiAjaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgcGFnZS0+c2V0VXNl
ZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAjZW5kaWYKLQorICAgICAgICBwYWdlLT5zZXRJbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOwogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9KCk7
CisKICAgICBpZiAoIXBhZ2UpIHsKICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6UmV0dXJuTnVsbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAg
IGlmIChpc0VtcHR5KSB7CisgICAgICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAg
ICAgIHBhZ2UtPmxvY2tBbmRUcnlUb1Rha2VCaWFzKCZoZWxkTG9jaywgJnBlckNQVUNhY2hlLnBh
Z2VNdXRleCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFnZS0+bG9jaygpOwogICAgIHBhZ2Ut
PnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwogICAgIHJldHVybiBwYWdlOwogfQogCi12b2lkIEhl
YXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgT2JqZWN0IG9i
amVjdCwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExp
bmUoU21hbGxQYWdlKiBwYWdlLCBPYmplY3Qgb2JqZWN0LCBBcHByb3hQZXJDUFVDYWNoZSYgcGVy
Q1BVQ2FjaGUpCiB7Ci0gICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQobG9jaykp
OwotICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0gICAgcGFnZS0+ZGVyZWYo
bG9jayk7Ci0KLSAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewotICAgICAgICBw
YWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7Ci0gICAgICAgIGxpbmVDYWNoZVtwYWdl
LT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKKyAgICBCVU5VU0VEKG9iamVjdCk7CisgICAgQkFT
U0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpOworICAgIHBhZ2UtPmRlcmVmKCk7
CisKKyAgICBib29sIGNvbXBsZXRlbHlGbG9hdGluZ1BhZ2UgPSBmYWxzZTsKKyAgICBpZiAoIXBh
Z2UtPmhhc0ZyZWVMaW5lcygpKSB7CisgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyh0cnVl
KTsKKyAgICAgICAgLy8gcGFnZS0+aXNPbkxpc3QoKSBjYW4gYmUgY2hhbmdlZCBmcm9tIHRydWUg
dG8gZmFsc2Ugd2l0aG91dCB0YWtpbmcgYSBwYWdlLWxvY2suCisgICAgICAgIC8vIEJ1dCBmYWxz
ZSB0byB0cnVlIHRyYW5zaXRpb24gaGFwcGVucyBvbmx5IHdoZW4gdGhlbiBwYWdlLWxvY2sgaXMg
aGVsZC4KKyAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgIGlmIChw
YWdlLT5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwZXJDUFVD
YWNoZS5tdXRleCgpKTsKKworICAgICAgICAgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0ZvckFs
bG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIFNv
bWUgZnJlZSBsaW5lcyBleGlzdCwgYnV0IHRoZSBwYWdlIGlzIG5vdCBjaGFpbmVkIHRvIGFueSB0
aHJlYWQncyBMaW5lQ2FjaGUuCisgICAgICAgICAgICAvLyBMZXQncyBjaGFpbiBpdCB0byB0aGUg
Y3VycmVudCBmcmVlaW5nIHRocmVhZCdzIExpbmVDYWNoZSBmb3IgcmV1c2luZy4KKyAgICAgICAg
ICAgIHBlckNQVUNhY2hlLmxpbmVDYWNoZShsb2NrZXIpW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNo
KHBhZ2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUoJnBlckNQVUNhY2hlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0ZWx5RmxvYXRpbmdQYWdl
ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAocGFnZS0+cmVmQ291bnQobG9jaykpCisgICAgaWYg
KHBhZ2UtPnJlZkNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNpemVfdCBwYWdlQ2xh
c3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+c2l6ZUNsYXNzKCkpOworICAgIGF1dG8g
cmV0dXJuU21hbGxQYWdlID0gWyZdKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIpIHsKKyAg
ICAgICAgc2l6ZV90IHBhZ2VDbGFzcyA9IG1fY29uc3RhbnRzLnBhZ2VDbGFzcyhwYWdlLT5zaXpl
Q2xhc3MoKSk7CiAKLSAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHBoeXNpY2FsUGFnZVNpemVTbG9w
cHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CisgICAgICAg
IG1fZnJlZWFibGVNZW1vcnkgKz0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdpbigp
LT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKIAotICAgIExpc3Q8U21hbGxQYWdlPjo6
cmVtb3ZlKHBhZ2UpOyAvLyAncGFnZScgbWF5IGJlIGluIGFueSB0aHJlYWQncyBsaW5lIGNhY2hl
LgotICAgIAotICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQocGFnZSk7Ci0gICAgaWYgKGNo
dW5rLT5mcmVlUGFnZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFz
c10ucHVzaChjaHVuayk7Ci0gICAgY2h1bmstPmZyZWVQYWdlcygpLnB1c2gocGFnZSk7CisgICAg
ICAgIGlmIChwYWdlLT5pc09uTGlzdCgpKQorICAgICAgICAgICAgTGlzdDxTbWFsbFBhZ2U+Ojpy
ZW1vdmUocGFnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEJBU1NFUlQoY29tcGxldGVs
eUZsb2F0aW5nUGFnZSk7CisgICAgICAgIHBhZ2UtPnNldENhY2hlKG51bGxwdHIpOwogCi0gICAg
Y2h1bmstPmRlcmVmKCk7CisgICAgICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQocGFnZSk7
CisgICAgICAgIGlmIChjaHVuay0+ZnJlZVBhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKKyAgICAgICAgY2h1bmstPmZyZWVQ
YWdlcygpLnB1c2gocGFnZSk7CiAKLSAgICBpZiAoIWNodW5rLT5yZWZDb3VudCgpKSB7Ci0gICAg
ICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsKKyAgICAgICAgY2h1bmst
PmRlcmVmKCk7CiAKLSAgICAgICAgaWYgKCFtX2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBtX2NodW5rQ2FjaGVb
cGFnZUNsYXNzXS5wb3AoKSwgcGFnZUNsYXNzKTsKKyAgICAgICAgaWYgKCFjaHVuay0+cmVmQ291
bnQoKSkgeworICAgICAgICAgICAgbV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5yZW1vdmUoY2h1bmsp
OworCisgICAgICAgICAgICBpZiAoIW1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhoZWFwTG9ja2VyLCBtX2NodW5r
Q2FjaGVbcGFnZUNsYXNzXS5wb3AoKSwgcGFnZUNsYXNzKTsKIAotICAgICAgICBtX2NodW5rQ2Fj
aGVbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKKyAgICAgICAgICAgIG1fY2h1bmtDYWNoZVtwYWdl
Q2xhc3NdLnB1c2goY2h1bmspOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NjYXZl
bmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7CisgICAgfTsKKworICAgIC8vIENh
Y2hlIHBvaW50ZXIgaXMgdXBkYXRlZCB3aGVuIGEgcGFnZSBpcyBsb2NrZWQuIFNpbmNlIHdlIGFy
ZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgcGFnZSdzIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2Vz
LgorICAgIC8vCisgICAgLy8gICAgIDEuIENhY2hlIHBvaW50ZXIgaXMgbm9uIG51bGxwdHIsIGFu
ZCB0aGUgcGFnZSBpcyBhY3R1YWxseSBjaGFpbmVkLgorICAgIC8vICAgICAyLiBDYWNoZSBwb2lu
dGVyIGlzIG5vbiBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMganVzdCBhZnRlciB1bi1jaGFpbmVk
IGZyb20gdGhlIGNhY2hlLgorICAgIC8vICAgICAzLiBDYWNoZSBwb2ludGVyIGlzIG51bGxwdHIs
IGFuZCB0aGUgcGFnZSBpcyBub3QgY2hhaW5lZC4KKyAgICAvLyAgICAgNC4gQ2FjaGUgcG9pbnRl
ciBpcyBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMgY2hhaW5lZCB0byB0aGUgZ2xvYmFsIGNhY2hl
LgorICAgIC8vCisgICAgLy8gRm9yICgxKSBvciAoMikgY2FzZXMsIGp1c3QgdGFraW5nIGEgbG9j
ayBvZiBjYWNoZSBpcyBmaW5lLiBBbmQgYWZ0ZXIgdGhhdCwgd2UgY2FuIGNoZWNrIGluaXRpYWxp
emluZ0ZvckFsbG9jYXRpb24gZmxhZyB3aGljaCB0ZWxscyB3aGV0aGVyIHRoaXMgaXMgKDEpIG9y
ICgyKS4KKyAgICAvLyBGb3IgKDMpIG9yICg0KSBjYXNlcywganVzdCB0YWtpbmcgYSBoZWFwIGxv
Y2sgaXMgZmluZS4gQW5kIGFmdGVyIHRoYXQsIHdlIGNhbiBjaGVjayBpbml0aWFsaXppbmdGb3JB
bGxvY2F0aW9uIGZsYWcgd2hpY2ggdGVsbHMgd2hldGhlciB0aGlzIGlzICgzKSBvciAoNCkuCisg
ICAgQXBwcm94UGVyQ1BVQ2FjaGUqIGNhY2hlID0gcGFnZS0+Y2FjaGUoKTsKKyAgICBpZiAoY2Fj
aGUpIHsKKyAgICAgICAgTG9ja0hvbGRlciBjYWNoZUxvY2tlcihjYWNoZS0+bXV0ZXgoKSk7Cisg
ICAgICAgIGlmIChwYWdlLT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihtdXRleCgpKTsK
KyAgICAgICAgcmV0dXJuU21hbGxQYWdlKGhlYXBMb2NrZXIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihtdXRleCgpKTsKKyAgICAgICAgaWYgKHBh
Z2UtPmluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuU21hbGxQYWdlKGhlYXBMb2NrZXIpOwogICAgIH0KLSAgICAKLSAgICBtX3Nj
YXZlbmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFnZUNsYXNzKSk7CiB9CiAKLXZvaWQgSGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAotICAgIFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBC
dW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFp
bHVyZUFjdGlvbiBhY3Rpb24pCit2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlN
ZXRhZGF0YShzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBS
YW5nZUNhY2hlJiByYW5nZUNhY2hlLCBBcHByb3hQZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIEZh
aWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIEJVTlVTRUQoYWN0aW9uKTsKICAgICBSRUxFQVNF
X0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIAotICAgIFNtYWxsUGFnZSogcGFn
ZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcywgbGluZUNhY2hlLCBhY3Rpb24p
OworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVDbGFz
cywgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NF
UlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgQkFTU0VSVCghcGFn
ZS0+aXNPbkxpc3QoKSk7CisKICAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsK
LSAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7CisgICAgQkFTU0VSVChwYWdl
LT5oYXNGcmVlTGluZXMoKSk7CiAKICAgICBhdXRvIGZpbmRTbWFsbEJ1bXBSYW5nZSA9IFsmXShz
aXplX3QmIGxpbmVOdW1iZXIpIHsKICAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbV9jb25z
dGFudHMuc21hbGxMaW5lQ291bnQoKTsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICBpZiAo
IWxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKSB7CisgICAgICAgICAgICBpZiAoIWxp
bmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KHBhZ2UpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1f
Y29uc3RhbnRzLm9iamVjdENvdW50KHNpemVDbGFzcywgbGluZU51bWJlcikpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzk2LDcgKzQ5OCw3IEBA
IHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAgICAgICB1
bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKCA7
IGxpbmVOdW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyArK2xpbmVOdW1iZXIp
IHsKLSAgICAgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAg
ICAgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChwYWdlKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgYXV0byBsaW5lT2JqZWN0Q291bnQgPSBtX2Nv
bnN0YW50cy5vYmplY3RDb3VudChzaXplQ2xhc3MsIGxpbmVOdW1iZXIpOwpAQCAtNDA0LDggKzUw
Niw4IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBvYmplY3RDb3VudCArPSBsaW5l
T2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgbGlu
ZU9iamVjdENvdW50KTsKLSAgICAgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgICAg
IGxpbmVzW2xpbmVOdW1iZXJdLnJlZihwYWdlLCBsaW5lT2JqZWN0Q291bnQpOworICAgICAgICAg
ICAgcGFnZS0+cmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHsgYmVnaW4sIG9iamVj
dENvdW50IH07CiAgICAgfTsKQEAgLTQxMywxNSArNTE1LDI2IEBAIHZvaWQgSGVhcDo6YWxsb2Nh
dGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAogICAgIHNpemVfdCBsaW5lTnVtYmVyID0gMDsK
ICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICghZmluZFNtYWxsQnVtcFJhbmdlKGxpbmVOdW1i
ZXIpKSB7Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgZmFsc2UpOwor
ICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGZhbHNlKTsKKyAgICAgICAgICAgIEJB
U1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOwogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7Cisg
ICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAg
ICAgICAgICAgIHBhZ2UtPnNldENhY2hlKG51bGxwdHIpOworICAgICAgICAgICAgcGFnZS0+dW5s
b2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJbiBh
IGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJhbmdlcyBtaWdodCBub3QgZml0IGluIHRoZSBj
YWNoZS4KICAgICAgICAgaWYgKHJhbmdlQ2FjaGUuc2l6ZSgpID09IHJhbmdlQ2FjaGUuY2FwYWNp
dHkoKSkgewotICAgICAgICAgICAgbGluZUNhY2hlW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwZXJDUFVDYWNo
ZS5tdXRleCgpKTsKKyAgICAgICAgICAgICAgICBwZXJDUFVDYWNoZS5saW5lQ2FjaGUobG9ja2Vy
KVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7CisgICAgICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUo
JnBlckNQVUNhY2hlKTsKKyAgICAgICAgICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzT25MaXN0KCkp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFj
dGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAg
ICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAg
IHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTQz
MywyNSArNTQ2LDI0IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFk
YXRhKAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2Jq
ZWN0KAotICAgIFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAg
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAg
ICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCit2b2lkIEhlYXA6
OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFs
bG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVy
Q1BVQ2FjaGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBCVU5V
U0VEKGFjdGlvbik7CiAgICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5k
KSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRvci5zaXplKCk7Ci0gICAgU21hbGxQYWdl
KiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNzLCBsaW5lQ2FjaGUsIGFj
dGlvbik7CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6
ZUNsYXNzLCBwZXJDUFVDYWNoZSwgYWN0aW9uKTsKICAgICBpZiAoIXBhZ2UpIHsKICAgICAgICAg
QkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpOworICAg
IEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3Qo
KSk7CisgICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMoKSk7CiAKICAgICBhdXRvIGZpbmRT
bWFsbEJ1bXBSYW5nZSA9IFsmXShPYmplY3QmIGl0LCBPYmplY3QmIGVuZCkgewogICAgICAgICBm
b3IgKCA7IGl0ICsgc2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBzaXplKSB7Ci0gICAgICAgICAgICBp
ZiAoIWl0LmxpbmUoKS0+cmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBpZiAoIWl0LmxpbmUo
KS0+cmVmQ291bnQocGFnZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDYxLDEyICs1NzMsMTIgQEAgdm9pZCBIZWFw
OjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KAogICAgICAgICBjaGFyKiBiZWdpbiA9
IGl0LmFkZHJlc3MoKTsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSAwOwog
ICAgICAgICBmb3IgKCA7IGl0ICsgc2l6ZSA8PSBlbmQ7IGl0ID0gaXQgKyBzaXplKSB7Ci0gICAg
ICAgICAgICBpZiAoaXQubGluZSgpLT5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgIGlmIChp
dC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICArK29iamVjdENvdW50OwotICAgICAgICAgICAgaXQubGluZSgpLT5yZWYobG9jayk7
Ci0gICAgICAgICAgICBpdC5wYWdlKCktPnJlZihsb2NrKTsKKyAgICAgICAgICAgIGl0LmxpbmUo
KS0+cmVmKHBhZ2UpOworICAgICAgICAgICAgaXQucGFnZSgpLT5yZWYoKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4geyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKICAgICB9OwpAQCAtNDc1LDE1
ICs1ODcsMjYgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KAog
ICAgIE9iamVjdCBlbmQoaXQgKyBwYWdlU2l6ZShtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+
c2l6ZUNsYXNzKCkpKSk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoIWZpbmRTbWFsbEJ1
bXBSYW5nZShpdCwgZW5kKSkgewotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxv
Y2ssIGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhmYWxzZSk7Cisg
ICAgICAgICAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKICAgICAgICAgICAgIEJBU1NF
UlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFs
bG9jYXRlKCkpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlv
bihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRDYWNoZShudWxscHRyKTsKKyAgICAgICAg
ICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90
IGZpdCBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5n
ZUNhY2hlLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1
c2gocGFnZSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIocGVyQ1BVQ2FjaGUubXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgcGVyQ1BVQ2FjaGUubGlu
ZUNhY2hlKGxvY2tlcilbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgICAgIHBh
Z2UtPnNldENhY2hlKCZwZXJDUFVDYWNoZSk7CisgICAgICAgICAgICAgICAgQkFTU0VSVChwYWdl
LT5pc09uTGlzdCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJBU1NFUlQoYWN0aW9u
ID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkp
OworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7
CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC00OTUsNyArNjE4LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlc0J5T2JqZWN0KAogICAgIH0KIH0KIAotTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9j
YXRlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIExhcmdlUmFuZ2UmIHJhbmdlLCBzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSkKK0xhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShV
bmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBMYXJnZVJhbmdlJiByYW5nZSwgc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVh
cEtpbmQobV9raW5kKSk7CiAKQEAgLTUzNywxMyArNjYwLDEzIEBAIExhcmdlUmFuZ2UgSGVhcDo6
c3BsaXRBbmRBbGxvY2F0ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBMYXJnZVJhbmdlJiByYW5n
ZSwgc2l6CiAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChuZXh0KTsKICAgICB9CiAKLSAgICBtX29i
amVjdFR5cGVzLnNldChsb2NrLCBDaHVuazo6Z2V0KHJhbmdlLmJlZ2luKCkpLCBPYmplY3RUeXBl
OjpMYXJnZSk7CisgICAgbV9vYmplY3RUeXBlcy5zZXQoaGVhcExvY2tlciwgQ2h1bms6OmdldChy
YW5nZS5iZWdpbigpKSwgT2JqZWN0VHlwZTo6TGFyZ2UpOwogCiAgICAgbV9sYXJnZUFsbG9jYXRl
ZC5zZXQocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKICAgICByZXR1cm4gcmFuZ2U7CiB9
CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQordm9pZCog
SGVhcDo6YWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAjZGVmaW5l
IEFTU0VSVF9PUl9SRVRVUk5fT05fRkFJTFVSRShjb25kKSBkbyB7IFwKICAgICAgICAgaWYgKGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpDcmFzaCkgXApAQCAtNTcwLDkgKzY5Myw5IEBAIHZvaWQq
IEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUsCiAgICAgTGFyZ2VSYW5nZSByYW5nZSA9IG1fbGFyZ2VGcmVlLnJl
bW92ZShhbGlnbm1lbnQsIHNpemUpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgaWYgKG1f
aGFzUGVuZGluZ0RlY29tbWl0cykgewotICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChsb2Nr
LCBbJl0oKSB7IHJldHVybiAhbV9oYXNQZW5kaW5nRGVjb21taXRzOyB9KTsKKyAgICAgICAgICAg
IG1fY29uZGl0aW9uLndhaXQoaGVhcExvY2tlciwgWyZdKCkgeyByZXR1cm4gIW1faGFzUGVuZGlu
Z0RlY29tbWl0czsgfSk7CiAgICAgICAgICAgICAvLyBOb3cgd2UncmUgZ3VhcmFudGVlZCB3ZSdy
ZSBsb29raW5nIGF0IGFsbCBhdmFpbGFibGUgbWVtb3J5LgotICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCBhY3Rpb24pOworICAgICAgICAgICAg
cmV0dXJuIGFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgYWxpZ25tZW50LCBzaXplLCBhY3Rpb24p
OwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKCF1c2lu
Z0dpZ2FjYWdlKCkpOwpAQCAtNTg2LDcgKzcwOSw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFy
Z2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUs
CiAKICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IHJhbmdlLnRvdGFsUGh5c2ljYWxTaXplKCk7CiAK
LSAgICB2b2lkKiByZXN1bHQgPSBzcGxpdEFuZEFsbG9jYXRlKGxvY2ssIHJhbmdlLCBhbGlnbm1l
bnQsIHNpemUpLmJlZ2luKCk7CisgICAgdm9pZCogcmVzdWx0ID0gc3BsaXRBbmRBbGxvY2F0ZSho
ZWFwTG9ja2VyLCByYW5nZSwgYWxpZ25tZW50LCBzaXplKS5iZWdpbigpOwogI2lmIEJVU0UoUEFS
VElBTF9TQ0FWRU5HRSkKICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRl
cm1hcmssIHJlc3VsdCk7CiAjZW5kaWYKQEAgLTYyNiwxMyArNzQ5LDEzIEBAIHNpemVfdCBIZWFw
OjpsYXJnZVNpemUoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkKICAgICByZXR1cm4g
bV9sYXJnZUFsbG9jYXRlZC5nZXQob2JqZWN0KTsKIH0KIAotdm9pZCBIZWFwOjpzaHJpbmtMYXJn
ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBjb25zdCBSYW5nZSYgb2JqZWN0LCBzaXplX3QgbmV3
U2l6ZSkKK3ZvaWQgSGVhcDo6c2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tl
ciwgY29uc3QgUmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQkFTU0VSVChv
YmplY3Quc2l6ZSgpID4gbmV3U2l6ZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxv
Y2F0ZWQucmVtb3ZlKG9iamVjdC5iZWdpbigpKTsKICAgICBMYXJnZVJhbmdlIHJhbmdlID0gTGFy
Z2VSYW5nZShvYmplY3QsIHNpemUsIHNpemUpOwotICAgIHNwbGl0QW5kQWxsb2NhdGUobG9jaywg
cmFuZ2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CisgICAgc3BsaXRBbmRBbGxvY2F0ZShoZWFwTG9j
a2VyLCByYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKIAogICAgIG1fc2NhdmVuZ2VyLT5zY2hl
ZHVsZShzaXplKTsKIH0KQEAgLTY0Nyw4ICs3NzAsOCBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVM
YXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogb2JqZWN0KQogCiB2b2lkIEhlYXA6OmV4dGVy
bmFsQ29tbWl0KHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCiB7Ci0gICAgVW5pcXVlTG9ja0hvbGRl
ciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIGV4dGVybmFsQ29tbWl0KGxvY2ssIHB0ciwgc2l6
ZSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOworICAg
IGV4dGVybmFsQ29tbWl0KGhlYXBMb2NrZXIsIHB0ciwgc2l6ZSk7CiB9CiAKIHZvaWQgSGVhcDo6
ZXh0ZXJuYWxDb21taXQoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIHB0ciwgc2l6ZV90IHNpemUp
CkBAIC02NjMsOCArNzg2LDggQEAgdm9pZCBIZWFwOjpleHRlcm5hbENvbW1pdChVbmlxdWVMb2Nr
SG9sZGVyJiwgdm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkKIAogdm9pZCBIZWFwOjpleHRlcm5hbERl
Y29tbWl0KHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCiB7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBs
b2NrKEhlYXA6Om11dGV4KCkpOwotICAgIGV4dGVybmFsRGVjb21taXQobG9jaywgcHRyLCBzaXpl
KTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CisgICAg
ZXh0ZXJuYWxEZWNvbW1pdChoZWFwTG9ja2VyLCBwdHIsIHNpemUpOwogfQogCiB2b2lkIEhlYXA6
OmV4dGVybmFsRGVjb21taXQoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIHB0ciwgc2l6ZV90IHNp
emUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaCBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5oCmluZGV4IDU0OWRkMjRmNmM1ODk2NDZjZDIyNjA0ZDhjOWI0
OWVmMGM3NDUwNDMuLjc1NzRkYzA1MzA2YWVkMTRhMzQ0ZTkwMTY4NzAyZjJlOGY0ZGEyY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEhlYXBfaAogI2Rl
ZmluZSBIZWFwX2gKIAorI2luY2x1ZGUgIkFwcHJveFBlckNQVUNhY2hlLmgiCiAjaW5jbHVkZSAi
QnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJGYWlsdXJlQWN0aW9u
LmgiCkBAIC02MiwxMCArNjMsOSBAQCBjbGFzcyBIZWFwIHsKICAgICAKICAgICBIZWFwS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCi0gICAgdm9pZCBhbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlcyhVbmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90IHNpemVDbGFzcywKLSAgICAg
ICAgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFj
dGlvbik7Ci0gICAgdm9pZCBkZXJlZlNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiwgT2JqZWN0
LCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hv
bGRlciYsIExpbmVDYWNoZSYpOworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6
ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVy
Q1BVQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGRlcmVmU21hbGxMaW5lKE11dGV4
KiosIE9iamVjdCwgQXBwcm94UGVyQ1BVQ2FjaGUmKTsKKyAgICB2b2lkIGRlYWxsb2NhdGVMaW5l
Q2FjaGUoTGluZUNhY2hlJik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tI
b2xkZXImLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIEZhaWx1cmVBY3Rpb24pOwogICAgIHZv
aWQgZGVhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKik7CkBAIC05Miw2ICs5
MiwxNSBAQCBjbGFzcyBIZWFwIHsKIAogICAgIHZvaWQgbWFya0FsbExhcmdlQXNFbGlnaWJpbGUo
Y29uc3QgTG9ja0hvbGRlciYpOwogCisgICAgQXBwcm94UGVyQ1BVQ2FjaGUmIGdldEN1cnJlbnRD
UFVDYWNoZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jYWNoZVtjdXJyZW50Q1BVSW5kZXgo
KSAmIG1fY29yZU1hc2tdOworICAgIH0KKyAgICB1aW50NjRfdCBvbmVTZWNvbmQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb25lU2Vjb25kOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICB2b2lkIGRlY29tbWl0TGFyZ2VSYW5nZShVbmlxdWVMb2NrSG9sZGVyJiwgTGFyZ2VSYW5nZSYs
IEJ1bGtEZWNvbW1pdCYpOwogCkBAIC0xMDksMTMgKzExOCwxMSBAQCBjbGFzcyBIZWFwIHsKICAg
ICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsgLy8gTWF5IGNyYXNoIGlmICF1c2luZ0dpZ2FjYWdl
KCkuCiAgICAgc2l6ZV90IGdpZ2FjYWdlU2l6ZSgpOwogCi0gICAgdm9pZCBhbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5TWV0YWRhdGEoVW5pcXVlTG9ja0hvbGRlciYsCi0gICAgICAgIHNpemVfdCBz
aXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYsIEZh
aWx1cmVBY3Rpb24pOwotICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChV
bmlxdWVMb2NrSG9sZGVyJiwKLSAgICAgICAgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRv
ciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAgdm9p
ZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoc2l6ZV90IHNpemVDbGFzcywgQnVt
cEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVyQ1BVQ2FjaGUmLCBGYWlsdXJl
QWN0aW9uKTsKKyAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qoc2l6ZV90
IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgQXBwcm94UGVyQ1BV
Q2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKIAotICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBh
Z2UoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYsIEZhaWx1
cmVBY3Rpb24pOwotICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVy
JiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKKyAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlTG9ja2VkU21h
bGxQYWdlKHNpemVfdCBzaXplQ2xhc3MsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFjdGlv
bik7CisgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKFNtYWxsUGFnZSosIE9iamVjdCwgQXBw
cm94UGVyQ1BVQ2FjaGUmKTsKIAogICAgIHZvaWQgYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxv
Y2tIb2xkZXImLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0aW9uKTsKICAgICB2b2lkIGRl
YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImLCBDaHVuayosIHNpemVfdCBwYWdl
Q2xhc3MpOwpAQCAtMTQzLDYgKzE1MCwxMCBAQCBjbGFzcyBIZWFwIHsKICAgICBzaXplX3QgbV9m
b290cHJpbnQgeyAwIH07CiAgICAgc2l6ZV90IG1fZnJlZWFibGVNZW1vcnkgeyAwIH07CiAKKyAg
ICBBcHByb3hQZXJDUFVDYWNoZSogbV9jYWNoZSB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBt
X2NvcmVNYXNrIHsgMCB9OworICAgIHVpbnQ2NF90IG1fb25lU2Vjb25kIHsgMCB9OworCiAjaWYg
RU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAogICAgIFBoeXNpY2FsUGFnZU1hcCBtX3BoeXNpY2Fs
UGFnZU1hcDsKICNlbmRpZgpAQCAtMTUyLDIxICsxNjMsMjEgQEAgY2xhc3MgSGVhcCB7CiAjZW5k
aWYKIH07CiAKLWlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKAotICAg
IFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2Fj
aGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitpbmxpbmUgdm9pZCBIZWFwOjph
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLCBBcHByb3hQZXJDUFVDYWNoZSYg
cGVyQ1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIGlmIChzaXplQ2xhc3Mg
PCBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSkpCi0gICAgICAgIHJldHVybiBhbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3Is
IHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbWFs
bEJ1bXBSYW5nZXNCeU9iamVjdChsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNo
ZSwgbGluZUNhY2hlLCBhY3Rpb24pOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXNCeU1ldGFkYXRhKHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBwZXJDUFVD
YWNoZSwgYWN0aW9uKTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVj
dChzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7
CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQoraW5saW5lIHZvaWQg
SGVhcDo6ZGVyZWZTbWFsbExpbmUoTXV0ZXgqKiBoZWxkTG9jaywgT2JqZWN0IG9iamVjdCwgQXBw
cm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKQogewotICAgIGlmICghb2JqZWN0LmxpbmUoKS0+
ZGVyZWYobG9jaykpCisgICAgU21hbGxQYWdlKiBwYWdlID0gb2JqZWN0LnBhZ2UoKTsKKyAgICBw
YWdlLT5zd2l0Y2hMb2NrKGhlbGRMb2NrKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkp
OworICAgIGlmICghb2JqZWN0LmxpbmUoKS0+ZGVyZWYocGFnZSkpCiAgICAgICAgIHJldHVybjsK
LSAgICBkZWFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKTsKKyAgICBk
ZWFsbG9jYXRlU21hbGxMaW5lKHBhZ2UsIG9iamVjdCwgcGVyQ1BVQ2FjaGUpOwogfQogCiBpbmxp
bmUgYm9vbCBIZWFwOjppc0xhcmdlKHZvaWQqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvTGlzdC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgKaW5k
ZXggNjM5ZWRjOWU0ZjZlY2IzM2EzZmZiY2U1MzEzMGQyMmIyOThhYzJhNi4uM2RhNzViMzIyYzQy
MTc3NDgwNDRiZmQxNDQxYmYwNDAyZjUzOTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9MaXN0LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaXN0LmgKQEAgLTMy
LDYgKzMyLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTGlzdE5vZGUgewogICAg
IExpc3ROb2RlPFQ+KiBwcmV2IHsgbnVsbHB0ciB9OwogICAgIExpc3ROb2RlPFQ+KiBuZXh0IHsg
bnVsbHB0ciB9OworCisgICAgYm9vbCBpc09uTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBC
QVNTRVJUKCEhcHJldiA9PSAhIW5leHQpOworICAgICAgICByZXR1cm4gISFwcmV2OworICAgIH0K
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL011dGV4LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKaW5kZXggZjRj
YzJhYTQxMWM5MjgzMjIxMjkxY2E4NTgwMjBkMzAxOGFhMjNhZC4uYmU2YTNmMWJjMWI5M2QyYTM2
ZmE0OGQ4MmExOGEwYzllZTQxY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9NdXRleC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaApAQCAtNDgsOSAr
NDgsMTIgQEAgY2xhc3MgTXV0ZXggewogICAgIGJvb2wgdHJ5X2xvY2soKTsKICAgICB2b2lkIHVu
bG9jaygpOwogCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJF
WFBPUlQgdm9pZCBsb2NrU2xvd0Nhc2UoKTsKIAorICAgIC8vIEVuc3VyZSB0aGF0IE11dGV4IGlz
IHplcm8taW5pdGlhbGl6ZWQuIFNtYWxsUGFnZSByZWxpZXMgb24gdGhhdC4KICAgICBzdGQ6OmF0
b21pYzxib29sPiBtX2ZsYWcgeyBmYWxzZSB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1faXNT
cGlubmluZyB7IGZhbHNlIH07CiB9OwpAQCAtOTIsNCArOTUsMjAgQEAgaW5saW5lIHZvaWQgTXV0
ZXg6OnVubG9jaygpCiAgICAgbV9mbGFnLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKTsKIH0KIAoraW5saW5lIGJvb2wgTXV0ZXg6OmlzTG9ja2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9mbGFnOworfQorCitpbmxpbmUgdm9pZCBsb2NrU3dpdGNoKE11dGV4KiogaGVs
ZExvY2ssIE11dGV4KiBsb2NrKQoreworICAgIGlmIChCTElLRUxZKGxvY2sgPT0gKmhlbGRMb2Nr
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgqaGVsZExvY2spCisgICAgICAgICgqaGVsZExv
Y2spLT51bmxvY2soKTsKKyAgICAqaGVsZExvY2sgPSBsb2NrOworICAgIGlmIChsb2NrKQorICAg
ICAgICBsb2NrLT5sb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCmluZGV4IGQ4MmYyNWI1ZTk4ZGRhOWNhNmYwZTMzYWQ0
ODE1MmM4MWRjZDJkZjcuLjg1Mzc4ZTliYTI0NGRhMjY0Yzk4YjRjMTI1MmFlYWMwNjZkMzZjZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNwcApAQCAtMjUsNyArMjUsNyBAQAog
CiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgorI2lu
Y2x1ZGUgIkFyZW5hLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogbmFtZXNwYWNlIGJtYWxsb2Mg
ewpAQCAtMzUsMjkgKzM1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIAogc3RhdGljIE11dGV4IHNfbXV0ZXg7CiAKLXN0YXRpYyBjaGFyKiBzX2J1bXBCYXNlOwot
c3RhdGljIHNpemVfdCBzX2J1bXBPZmZzZXQ7Ci1zdGF0aWMgc2l6ZV90IHNfYnVtcExpbWl0Owot
CiBzdGF0aWMgUGVyUHJvY2Vzc0RhdGEqIHNfdGFibGVbdGFibGVTaXplXTsKIAotLy8gUmV0dXJu
cyB6ZXJvLWZpbGxlZCBtZW1vcnkgYnkgdmlydHVhbCBvZiB1c2luZyB2bUFsbG9jYXRlLgotc3Rh
dGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQotewotICAg
IHNfYnVtcE9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzX2J1bXBPZmZz
ZXQpOwotICAgIHZvaWQqIHJlc3VsdCA9IHNfYnVtcEJhc2UgKyBzX2J1bXBPZmZzZXQ7Ci0gICAg
c19idW1wT2Zmc2V0ICs9IHNpemU7Ci0gICAgaWYgKHNfYnVtcE9mZnNldCA8PSBzX2J1bXBMaW1p
dCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSB2bVNpemUoc2l6ZSk7Ci0gICAgdm9pZCogYWxsb2NhdGlvbiA9IHZtQWxsb2NhdGUoYWxs
b2NhdGlvblNpemUpOwotICAgIHNfYnVtcEJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2Nh
dGlvbik7Ci0gICAgc19idW1wT2Zmc2V0ID0gMDsKLSAgICBzX2J1bXBMaW1pdCA9IGFsbG9jYXRp
b25TaXplOwotICAgIHJldHVybiBhbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOwotfQotCiBQZXJQ
cm9jZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEodW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciog
ZGlzYW1iaWd1YXRvciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrKHNfbXV0ZXgpOwpAQCAtNzYsMTAgKzU1LDExIEBAIFBlclByb2Nlc3NEYXRh
KiBnZXRQZXJQcm9jZXNzRGF0YSh1bnNpZ25lZCBoYXNoLCBjb25zdCBjaGFyKiBkaXNhbWJpZ3Vh
dG9yLCBzaXplCiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJWQ6IENyZWF0aW5nIG5ldyAlc1xuIiwgZ2V0cGlkKCksIGRpc2FtYmlndWF0b3IpOwotICAg
IHZvaWQqIHJhd0RhdGFQdHIgPSBhbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vzc0RhdGEpLCBzdGQ6
OmFsaWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKKyAgICBhdXRvKiBhcmVuYSA9
IEFyZW5hOjpnZXQoKTsKKyAgICB2b2lkKiByYXdEYXRhUHRyID0gYXJlbmEtPmFsbG9jYXRlKHNp
emVvZihQZXJQcm9jZXNzRGF0YSksIHN0ZDo6YWxpZ25tZW50X29mPFBlclByb2Nlc3NEYXRhPjo6
dmFsdWUpOwogICAgIFBlclByb2Nlc3NEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8UGVyUHJvY2Vz
c0RhdGEqPihyYXdEYXRhUHRyKTsKICAgICBkYXRhLT5kaXNhbWJpZ3VhdG9yID0gZGlzYW1iaWd1
YXRvcjsKLSAgICBkYXRhLT5tZW1vcnkgPSBhbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOworICAg
IGRhdGEtPm1lbW9yeSA9IGFyZW5hLT5hbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOwogICAgIGRh
dGEtPnNpemUgPSBzaXplOwogICAgIGRhdGEtPmFsaWdubWVudCA9IGFsaWdubWVudDsKICAgICBk
YXRhLT5uZXh0ID0gYnVja2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
Y2F2ZW5nZXIuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCmluZGV4
IDYxMDY3OGE2MTU3Y2U3ZjIxM2ZiNjZiOGM3ZWU0YWFkMTc5NGYxMjcuLjU1NjQyN2E3NzBhZWYy
NjM2NTNiNDRjZGNlZjA2NDNmMjYxODUzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU2NhdmVuZ2VyLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdl
ci5jcHAKQEAgLTk2LDggKzk2LDggQEAgU2NhdmVuZ2VyOjpTY2F2ZW5nZXIoY29uc3QgTG9ja0hv
bGRlciYpCiAKIHZvaWQgU2NhdmVuZ2VyOjpydW4oKQogewotICAgIExvY2tIb2xkZXIgbG9jayht
dXRleCgpKTsKLSAgICBydW4obG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7
CisgICAgcnVuKGxvY2tlcik7CiB9CiAKIHZvaWQgU2NhdmVuZ2VyOjpydW4oY29uc3QgTG9ja0hv
bGRlciYpCkBAIC0xMDgsOCArMTA4LDggQEAgdm9pZCBTY2F2ZW5nZXI6OnJ1bihjb25zdCBMb2Nr
SG9sZGVyJikKIAogdm9pZCBTY2F2ZW5nZXI6OnJ1blNvb24oKQogewotICAgIExvY2tIb2xkZXIg
bG9jayhtdXRleCgpKTsKLSAgICBydW5Tb29uKGxvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG11dGV4KCkpOworICAgIHJ1blNvb24obG9ja2VyKTsKIH0KIAogdm9pZCBTY2F2ZW5nZXI6OnJ1
blNvb24oY29uc3QgTG9ja0hvbGRlciYpCkBAIC0xMjgsMTEgKzEyOCwxMSBAQCB2b2lkIFNjYXZl
bmdlcjo6ZGlkU3RhcnRHcm93aW5nKCkKIAogdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRl
ck1lbW9yeVByZXNzdXJlKHNpemVfdCBieXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0
ZXgoKSk7Ci0gICAgc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUobG9jaywgYnl0ZXMpOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgIHNjaGVkdWxlSWZVbmRlck1lbW9y
eVByZXNzdXJlKGxvY2tlciwgYnl0ZXMpOwogfQogCi12b2lkIFNjYXZlbmdlcjo6c2NoZWR1bGVJ
ZlVuZGVyTWVtb3J5UHJlc3N1cmUoY29uc3QgTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IGJ5dGVz
KQordm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGNvbnN0IExv
Y2tIb2xkZXImIGxvY2tlciwgc2l6ZV90IGJ5dGVzKQogewogICAgIG1fc2NhdmVuZ2VyQnl0ZXMg
Kz0gYnl0ZXM7CiAgICAgaWYgKG1fc2NhdmVuZ2VyQnl0ZXMgPCBzY2F2ZW5nZXJCeXRlc1Blck1l
bW9yeVByZXNzdXJlQ2hlY2spCkBAIC0xNDcsMTkgKzE0NywxOSBAQCB2b2lkIFNjYXZlbmdlcjo6
c2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUoY29uc3QgTG9ja0hvbGRlciYgbG9jaywgc2l6
ZV90IGJ5dAogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzUHJvYmFibHlHcm93aW5nID0gZmFs
c2U7Ci0gICAgcnVuKGxvY2spOworICAgIHJ1bihsb2NrZXIpOwogfQogCiB2b2lkIFNjYXZlbmdl
cjo6c2NoZWR1bGUoc2l6ZV90IGJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9jayhtdXRleCgp
KTsKLSAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShsb2NrLCBieXRlcyk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7CisgICAgc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJl
c3N1cmUobG9ja2VyLCBieXRlcyk7CiAgICAgCiAgICAgaWYgKHdpbGxSdW5Tb29uKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBtX2lzUHJvYmFibHlHcm93aW5nID0gZmFsc2U7Ci0gICAg
cnVuU29vbihsb2NrKTsKKyAgICBydW5Tb29uKGxvY2tlcik7CiB9CiAKIGlubGluZSB2b2lkIGR1
bXBTdGF0cygpCkBAIC0xODMsMTQgKzE4MywxNCBAQCBpbmxpbmUgdm9pZCBkdW1wU3RhdHMoKQog
CiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjYXZlbmdlcjo6dGltZVNpbmNlTGFzdEZ1bGxT
Y2F2ZW5nZSgpCiB7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgIFVu
aXF1ZUxvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOwogICAgIHJldHVybiBzdGQ6OmNocm9ubzo6
ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3Rl
YWR5X2Nsb2NrOjpub3coKSAtIG1fbGFzdEZ1bGxTY2F2ZW5nZVRpbWUpOwogfQogCiAjaWYgQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQogc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTY2F2ZW5nZXI6
OnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKQogewotICAgIFVuaXF1ZUxvY2tIb2xkZXIg
bG9jayhtdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAg
ICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcz4oc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2xhc3RQYXJ0aWFsU2Nh
dmVuZ2VUaW1lKTsKIH0KICNlbmRpZgpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU2NhdmVuZ2Vy
OjpzY2F2ZW5nZSgpCiAgICAgaWYgKCFtX2lzRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG1fc2NhdmVuZ2luZ011dGV4KTsKKyAgICBVbmlxdWVM
b2NrSG9sZGVyIGxvY2tlcihtX3NjYXZlbmdpbmdNdXRleCk7CiAKICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iKTsKQEAgLTIyMywxNCArMjIzLDE0IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgp
CiAjaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHNpemVfdCBkZWZlcnJl
ZERlY29tbWl0cyA9IDA7CiAjZW5kaWYKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
ayhIZWFwOjptdXRleCgpKTsKKyAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tl
cihIZWFwOjptdXRleCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBz
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19j
YXN0PEhlYXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIEJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBL
aW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLnNjYXZlbmdlKGxvY2ssIGRlY29tbWl0dGVyKTsKKyAg
ICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkp
LnNjYXZlbmdlKGhlYXBMb2NrZXIsIGRlY29tbWl0dGVyKTsKICNlbHNlCi0gICAgICAgICAgICAg
ICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShs
b2NrLCBkZWNvbW1pdHRlciwgZGVmZXJyZWREZWNvbW1pdHMpOworICAgICAgICAgICAgICAgIFBl
clByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UoaGVhcExv
Y2tlciwgZGVjb21taXR0ZXIsIGRlZmVycmVkRGVjb21taXRzKTsKICNlbmRpZgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0VhZ2VyKCk7CkBAIC0yNDgsMTEg
KzI0OCwxMSBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFByaW50VGltZSBwcmludFRpbWUoImZ1bGwgc2NhdmVuZ2UgbWFyayBhbGwgYXMgZWxp
Z2libGUgdGltZSIpOwotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkp
OworICAgICAgICAgICAgTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSGVhcHM7IGktLTspIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQ
ZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5tYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShs
b2NrKTsKKyAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0
KCktPmF0KGkpLm1hcmtBbGxMYXJnZUFzRWxpZ2liaWxlKGhlYXBMb2NrZXIpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgU2NhdmVuZ2Vy
OjpzY2F2ZW5nZSgpCiAgICAgfQogCiAgICAgewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2sobXV0ZXgoKSk7CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOwog
ICAgICAgICBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCk7CiAgICAgfQogfQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgU2NhdmVuZ2VyOjpw
YXJ0aWFsU2NhdmVuZ2UoKQogICAgIGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtX3NjYXZlbmdpbmdNdXRleCk7CisgICAgVW5p
cXVlTG9ja0hvbGRlciBsb2NrZXIobV9zY2F2ZW5naW5nTXV0ZXgpOwogCiAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIik7CkBAIC0yOTcsMTUgKzI5NywxNSBAQCB2b2lkIFNjYXZlbmdlcjo6cGFydGlh
bFNjYXZlbmdlKCkKICAgICAgICAgQnVsa0RlY29tbWl0IGRlY29tbWl0dGVyOwogICAgICAgICB7
CiAgICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJcbnBhcnRpYWxTY2F2ZW5nZSB1bmRl
ciBsb2NrIHRpbWUiKTsKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjpt
dXRleCgpKTsKKyAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjpt
dXRleCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7
CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBL
aW5kPihpKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkp
OwotICAgICAgICAgICAgICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeSA9IGhlYXAuZnJlZWFibGVN
ZW1vcnkobG9jayk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGZyZWVhYmxlTWVtb3J5ID0gaGVh
cC5mcmVlYWJsZU1lbW9yeShoZWFwTG9ja2VyKTsKICAgICAgICAgICAgICAgICBpZiAoZnJlZWFi
bGVNZW1vcnkgPCA0ICogTUIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGhlYXAuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsobG9jaywgZGVjb21taXR0ZXIp
OworICAgICAgICAgICAgICAgIGhlYXAuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoaGVhcExvY2tl
ciwgZGVjb21taXR0ZXIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWNvbW1pdHRl
ci5wcm9jZXNzRWFnZXIoKTsKQEAgLTMxOCwxMiArMzE4LDEyIEBAIHZvaWQgU2NhdmVuZ2VyOjpw
YXJ0aWFsU2NhdmVuZ2UoKQogCiAgICAgICAgIHsKICAgICAgICAgICAgIFByaW50VGltZSBwcmlu
dFRpbWUoInBhcnRpYWxTY2F2ZW5nZSBtYXJrIGFsbCBhcyBlbGlnaWJsZSB0aW1lIik7Ci0gICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgICAgICAgICBMb2Nr
SG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVI
ZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFw
S2luZDxIZWFwPj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAgICBoZWFwLm1hcmtBbGxM
YXJnZUFzRWxpZ2liaWxlKGxvY2spOworICAgICAgICAgICAgICAgIGhlYXAubWFya0FsbExhcmdl
QXNFbGlnaWJpbGUoaGVhcExvY2tlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2ZW5nZSgpCiAg
ICAgfQogCiAgICAgewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Cisg
ICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOwogICAgICAgICBtX2xhc3RQ
YXJ0aWFsU2NhdmVuZ2VUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAg
ICAgfQogfQpAQCAtMzU1LDExICszNTUsMTEgQEAgc2l6ZV90IFNjYXZlbmdlcjo6ZnJlZWFibGVN
ZW1vcnkoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIHsKLSAgICAgICAgVW5pcXVl
TG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVy
IGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUhlYXBzOyBpLS07KSB7CiAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGlj
X2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHJlc3VsdCArPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkp
LmZyZWVhYmxlTWVtb3J5KGxvY2spOworICAgICAgICAgICAgcmVzdWx0ICs9IFBlclByb2Nlc3M8
UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuZnJlZWFibGVNZW1vcnkoaGVhcExvY2tl
cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQxMiwxMyArNDEyLDEzIEBAIHZvaWQgU2NhdmVu
Z2VyOjp0aHJlYWRSdW5Mb29wKCkKICAgICAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U2xlZXApIHsKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhtdXRleCgpKTsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobG9jaywgWyZd
KCkgeyByZXR1cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6U2xlZXA7IH0pOworICAgICAgICAgICAgVW5p
cXVlTG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53
YWl0KGxvY2tlciwgWyZdKCkgeyByZXR1cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6U2xlZXA7IH0pOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6UnVuU29v
bikgewotICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgICAg
ICAgICAgbV9jb25kaXRpb24ud2FpdF9mb3IobG9jaywgbV93YWl0VGltZSwgWyZdKCkgeyByZXR1
cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6UnVuU29vbjsgfSk7CisgICAgICAgICAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2tlcihtdXRleCgpKTsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRfZm9y
KGxvY2tlciwgbV93YWl0VGltZSwgWyZdKCkgeyByZXR1cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6UnVu
U29vbjsgfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
U2xlZXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaAppbmRleCBkOWI3NGFiOGI5ZmUzOWUw
MDA5MjhiZmI2NjUzZTUwNWI4OWNmZDIyLi5kZTI2NzIwNWU4MmM3NGQ2MTAxNWMwYWI5ZWIyMDk2
YTY1YzFiOGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5o
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKQEAgLTI5LDE1ICsyOSwy
MSBAQAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKICNpbmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUg
Ik9iamVjdFR5cGUuaCIKKyNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKICNpbmNsdWRlIDxtdXRleD4K
IAogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBTbWFsbExpbmUgewogcHVibGljOgotICAg
IHZvaWQgcmVmKFVuaXF1ZUxvY2tIb2xkZXImLCB1bnNpZ25lZCBjaGFyID0gMSk7Ci0gICAgYm9v
bCBkZXJlZihVbmlxdWVMb2NrSG9sZGVyJik7Ci0gICAgdW5zaWduZWQgcmVmQ291bnQoVW5pcXVl
TG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KKyAgICB2b2lkIHJlZihTbWFsbFBh
Z2UqLCB1bnNpZ25lZCBjaGFyID0gMSk7CisgICAgYm9vbCBkZXJlZihTbWFsbFBhZ2UqKTsKKyAg
ICB1bnNpZ25lZCByZWZDb3VudChTbWFsbFBhZ2UqIHBhZ2UpCisgICAgeworICAgICAgICBCVU5V
U0VEKHBhZ2UpOworICAgICAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOworICAgICAgICBy
ZXR1cm4gbV9yZWZDb3VudDsKKyAgICB9CiAgICAgCiAgICAgY2hhciogYmVnaW4oKTsKICAgICBj
aGFyKiBlbmQoKTsKQEAgLTUxLDE0ICs1NywxOCBAQCBzdGF0aWNfYXNzZXJ0KAogCiB9OwogCi1p
bmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihVbmlxdWVMb2NrSG9sZGVyJiwgdW5zaWduZWQgY2hh
ciByZWZDb3VudCkKK2lubGluZSB2b2lkIFNtYWxsTGluZTo6cmVmKFNtYWxsUGFnZSogcGFnZSwg
dW5zaWduZWQgY2hhciByZWZDb3VudCkKIHsKKyAgICBCVU5VU0VEKHBhZ2UpOworICAgIEJBU1NF
UlQocGFnZS0+aXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9yZWZDb3VudCk7CiAgICAgbV9y
ZWZDb3VudCA9IHJlZkNvdW50OwogfQogCi1pbmxpbmUgYm9vbCBTbWFsbExpbmU6OmRlcmVmKFVu
aXF1ZUxvY2tIb2xkZXImKQoraW5saW5lIGJvb2wgU21hbGxMaW5lOjpkZXJlZihTbWFsbFBhZ2Uq
IHBhZ2UpCiB7CisgICAgQlVOVVNFRChwYWdlKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2Vk
KCkpOwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiAgICAgLS1tX3JlZkNvdW50OwogICAgIHJl
dHVybiAhbV9yZWZDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxQYWdlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCmluZGV4IDQzNWU1
ZjcwOTc4MGI2NjczMjUwN2RkNmZjMTIyMWI3Y2VlNmU3YzkuLmQ3NzUyMThhZjlhN2RjNjIwYjIy
YTA2NzQ2MTFjZDE0Y2M4ZTgzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
U21hbGxQYWdlLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaApAQCAt
MzQsMTkgKzM0LDMzIEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAorY2xhc3MgQXBwcm94UGVy
Q1BVQ2FjaGU7CiBjbGFzcyBTbWFsbExpbmU7CiAKIGNsYXNzIFNtYWxsUGFnZSA6IHB1YmxpYyBM
aXN0Tm9kZTxTbWFsbFBhZ2U+IHsKIHB1YmxpYzoKLSAgICB2b2lkIHJlZihVbmlxdWVMb2NrSG9s
ZGVyJik7Ci0gICAgYm9vbCBkZXJlZihVbmlxdWVMb2NrSG9sZGVyJik7Ci0gICAgdW5zaWduZWQg
cmVmQ291bnQoVW5pcXVlTG9ja0hvbGRlciYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KKyAgICB2
b2lkIHJlZigpOworICAgIGJvb2wgZGVyZWYoKTsKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpCisg
ICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV9yZWZD
b3VudDsKKyAgICB9CiAgICAgCiAgICAgc2l6ZV90IHNpemVDbGFzcygpIHsgcmV0dXJuIG1fc2l6
ZUNsYXNzOyB9CiAgICAgdm9pZCBzZXRTaXplQ2xhc3Moc2l6ZV90IHNpemVDbGFzcykgeyBtX3Np
emVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAotICAgIGJvb2wgaGFzRnJlZUxpbmVzKFVuaXF1
ZUxvY2tIb2xkZXImKSBjb25zdCB7IHJldHVybiBtX2hhc0ZyZWVMaW5lczsgfQotICAgIHZvaWQg
c2V0SGFzRnJlZUxpbmVzKFVuaXF1ZUxvY2tIb2xkZXImLCBib29sIGhhc0ZyZWVMaW5lcykgeyBt
X2hhc0ZyZWVMaW5lcyA9IGhhc0ZyZWVMaW5lczsgfQorICAgIGJvb2wgaGFzRnJlZUxpbmVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CisgICAgICAgIHJldHVy
biBtX2hhc0ZyZWVMaW5lczsKKyAgICB9CisgICAgdm9pZCBzZXRIYXNGcmVlTGluZXMoYm9vbCBo
YXNGcmVlTGluZXMpCisgICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAgICAg
ICBtX2hhc0ZyZWVMaW5lcyA9IGhhc0ZyZWVMaW5lczsKKyAgICB9CisgICAgdm9pZCBpbml0SGFz
RnJlZUxpbmVzKCkgeyBtX2hhc0ZyZWVMaW5lcyA9IHRydWU7IH0KICAgICAKICAgICBib29sIGhh
c1BoeXNpY2FsUGFnZXMoKSB7IHJldHVybiBtX2hhc1BoeXNpY2FsUGFnZXM7IH0KICAgICB2b2lk
IHNldEhhc1BoeXNpY2FsUGFnZXMoYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKSB7IG1faGFzUGh5c2lj
YWxQYWdlcyA9IGhhc1BoeXNpY2FsUGFnZXM7IH0KQEAgLTYwLDE3ICs3NCw5OCBAQCBjbGFzcyBT
bWFsbFBhZ2UgOiBwdWJsaWMgTGlzdE5vZGU8U21hbGxQYWdlPiB7CiAgICAgU21hbGxMaW5lKiBi
ZWdpbigpOwogCiAgICAgdW5zaWduZWQgY2hhciBzbGlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2xp
ZGU7IH0KLSAgICB2b2lkIHNldFNsaWRlKHVuc2lnbmVkIGNoYXIgc2xpZGUpIHsgbV9zbGlkZSA9
IHNsaWRlOyB9Ci0gICAgCisKKyAgICBib29sIGluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxpemluZ0ZvckFsbG9jYXRpb247IH0KKyAgICB2b2lkIHNl
dEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oYm9vbCBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9u
KSB7IG1faW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiA9IGluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b247IH0KKworICAgIEFwcHJveFBlckNQVUNhY2hlKiBjYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGU7IH0KKyAgICB2b2lkIHNldENhY2hlKEFwcHJveFBlckNQVUNhY2hlKiBjYWNoZSkgeyBt
X2NhY2hlID0gY2FjaGU7IH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZSh1bnNpZ25lZCBjaGFyIHNs
aWRlKQorICAgIHsKKyAgICAgICAgbV9zbGlkZSA9IHNsaWRlOworICAgICAgICBtX211dGV4UHRy
ID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICB9CisKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX211dGV4UHRyLT5pc0xvY2tlZCgpOworICAgIH0KKwor
ICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBN
dXRleCogaGVsZExvY2sgPSBudWxscHRyOworICAgICAgICAgICAgTXV0ZXgqIGxvY2sgPSBtX211
dGV4UHRyOworICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5iaWFzKCZoZWxkTG9jaywgbG9jaykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbG9jay0+dW5sb2NrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBtX211
dGV4UHRyLT51bmxvY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHN3aXRjaExvY2soTXV0ZXgqKiBo
ZWxkTG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIE11dGV4KiBs
b2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAgICAgIGlmIChCTElLRUxZKGxvY2sgPT0gKmhlbGRM
b2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmICgqaGVsZExv
Y2spCisgICAgICAgICAgICAgICAgKCpoZWxkTG9jayktPnVubG9jaygpOworCisgICAgICAgICAg
ICBpZiAobG9ja1dpdGhVbmJpYXMoaGVsZExvY2ssIGxvY2spKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgbG9ja1dpdGhVbmJpYXMoTXV0ZXgq
KiBoZWxkTG9jaywgTXV0ZXgqIGxvY2spCisgICAgeworICAgICAgICAqaGVsZExvY2sgPSBsb2Nr
OworICAgICAgICBpZiAoQkxJS0VMWShsb2NrLT50cnlfbG9jaygpKSkKKyAgICAgICAgICAgIHJl
dHVybiBsb2NrID09IG1fbXV0ZXhQdHI7CisKKyAgICAgICAgLy8gV2UgZm91bmQgdGhhdCBsb2Nr
IGlzIGNvbnRlbmRlZCBiZWNhdXNlIHRyeS1sb2NrIGZhaWxlZC4KKyAgICAgICAgbG9jay0+bG9j
aygpOworICAgICAgICBpZiAobG9jayAhPSBtX211dGV4UHRyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChsb2NrICE9ICZtX2ZhbGxiYWNrTXV0ZXgpIHsKKyAgICAg
ICAgICAgIC8vIENvbnRlbmRlZCBhbmQgdXNpbmcgcGVyLWNwdSBsb2NrLiBDaGFuZ2UgdGhpcyBT
bWFsbFBhZ2UncyBsb2NrIHRvIGZpbmUtZ3JhaW5lZCBmYWxsYmFjayBsb2NrLgorICAgICAgICAg
ICAgbV9mYWxsYmFja011dGV4LmxvY2soKTsKKyAgICAgICAgICAgIG1fbXV0ZXhQdHIgPSAmbV9m
YWxsYmFja011dGV4OworICAgICAgICAgICAgbG9jay0+dW5sb2NrKCk7CisgICAgICAgICAgICAq
aGVsZExvY2sgPSAmbV9mYWxsYmFja011dGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHZvaWQgbG9ja0FuZFRyeVRvVGFrZUJpYXMoTXV0ZXgqKiBoZWxk
TG9jaywgTXV0ZXgqIGxvY2tUb0JpYXNUbykKKyAgICB7CisgICAgICAgIG1fbXV0ZXhQdHIgPSBs
b2NrVG9CaWFzVG87CisgICAgICAgIEJBU1NFUlQobV9tdXRleFB0ciA9PSBsb2NrVG9CaWFzVG8p
OworICAgICAgICBsb2NrU3dpdGNoKGhlbGRMb2NrLCBsb2NrVG9CaWFzVG8pOworICAgICAgICBC
QVNTRVJUKG1fbXV0ZXhQdHIgPT0gbG9ja1RvQmlhc1RvKTsKKyAgICB9CisKIHByaXZhdGU6Cisg
ICAgTXV0ZXggbV9mYWxsYmFja011dGV4OwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNGcmVlTGlu
ZXM6IDE7CiAgICAgdW5zaWduZWQgY2hhciBtX2hhc1BoeXNpY2FsUGFnZXM6IDE7CiAjaWYgIUJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICB1bnNpZ25lZCBjaGFyIG1fdXNlZFNpbmNlTGFzdFNj
YXZlbmdlOiAxOwogI2VuZGlmCiAgICAgdW5zaWduZWQgY2hhciBtX3JlZkNvdW50OiA3OwotICAg
IHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3M7CisgICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFz
cyB7IDAgfTsKICAgICB1bnNpZ25lZCBjaGFyIG1fc2xpZGU7CisgICAgdW5zaWduZWQgY2hhciBt
X2luaXRpYWxpemluZ0ZvckFsbG9jYXRpb247CisKKyAgICBNdXRleCogbV9tdXRleFB0cjsKKyAg
ICBBcHByb3hQZXJDUFVDYWNoZSogbV9jYWNoZSB7IG51bGxwdHIgfTsKIAogc3RhdGljX2Fzc2Vy
dCgKICAgICBzaXplQ2xhc3NDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1f
c2l6ZUNsYXNzKT46Om1heCgpLApAQCAtNzksMTUgKzE3NCwxNyBAQCBzdGF0aWNfYXNzZXJ0KAog
CiB1c2luZyBMaW5lQ2FjaGUgPSBzdGQ6OmFycmF5PExpc3Q8U21hbGxQYWdlPiwgc2l6ZUNsYXNz
Q291bnQ+OwogCi1pbmxpbmUgdm9pZCBTbWFsbFBhZ2U6OnJlZihVbmlxdWVMb2NrSG9sZGVyJikK
K2lubGluZSB2b2lkIFNtYWxsUGFnZTo6cmVmKCkKIHsKKyAgICBCQVNTRVJUKGlzTG9ja2VkKCkp
OwogICAgIEJBU1NFUlQoIW1fc2xpZGUpOwogICAgICsrbV9yZWZDb3VudDsKICAgICBCQVNTRVJU
KG1fcmVmQ291bnQpOwogfQogCi1pbmxpbmUgYm9vbCBTbWFsbFBhZ2U6OmRlcmVmKFVuaXF1ZUxv
Y2tIb2xkZXImKQoraW5saW5lIGJvb2wgU21hbGxQYWdlOjpkZXJlZigpCiB7CisgICAgQkFTU0VS
VChpc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFtX3NsaWRlKTsKICAgICBCQVNTRVJUKG1fcmVm
Q291bnQpOwogICAgIC0tbV9yZWZDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQ
ZXJQcm9jZXNzLmgKaW5kZXggMzY2YzE1NmRmZTQyOWExNGIyMmE1ZDVkOGFiNDg2ZGY0NmJiOTg1
OS4uOTQwNWU2MTRmNzExZGNlMjZkZjdmMWVlMDMzNGQ0ZTgyMDU2Y2ZkYSAxMDA2NDQKLS0tIGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmgKKysrIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmgKQEAgLTU5LDkgKzU5LDkgQEAgY2xhc3Mg
U3RhdGljUGVyUHJvY2VzcyB7CiAgICAgc3RhdGljIFQqIGdldCgpCiAgICAgewogICAgICAgICBU
KiBvYmplY3QgPSBnZXRGYXN0Q2FzZSgpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAg
ICAgIHJldHVybiBnZXRTbG93Q2FzZSgpOwotICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAg
ICBpZiAoQkxJS0VMWShvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIFQqIGdldEZhc3RD
YXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmggYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCmluZGV4IGQ4NDA5YjA1NzJkNzcyZjlmMGQ5ZGVl
OTg2MDhhZGIwOTczYzdkODEuLjZiYjA4NDNjOGRjYmRlNzJlNDliZTczNzUyODA4NDFmMGY0ZjU3
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKKysrIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaApAQCAtNTYsNyArNTYsMTEgQEAgY2xhc3MgVmVj
dG9yIHsKICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCk7CiAgICAgVCYgbGFzdCgpIHsgcmV0dXJu
IG1fYnVmZmVyW21fc2l6ZSAtIDFdOyB9CiAKLSAgICB2b2lkIHB1c2goY29uc3QgVCYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBwdXNoKFUmJik7CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGVtcGxhY2UoQXJncyYmLi4uKTsKIAog
ICAgIFQgcG9wKCk7CiAgICAgVCBwb3Aoc2l6ZV90KTsKQEAgLTExOSwxMSArMTIzLDIxIEBAIGlu
bGluZSBUJiBWZWN0b3I8VD46Om9wZXJhdG9yW10oc2l6ZV90IGkpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1CSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQor
dGVtcGxhdGU8dHlwZW5hbWUgVT4KK0JJTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goVSYmIHZh
bHVlKQoreworICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgZ3Jvd0NhcGFj
aXR5KCk7CisgICAgbmV3ICgmbV9idWZmZXJbbV9zaXplKytdKSBUKHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KK0JJTkxJTkUgdm9pZCBWZWN0b3I8VD46OmVtcGxhY2UoQXJncyYmLi4uIGFyZ3MpCiB7
CiAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQogICAgICAgICBncm93Q2FwYWNpdHkoKTsK
LSAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKKyAgICBuZXcgKCZtX2J1ZmZlclttX3Np
emUrK10pIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCmluZGV4IGVlZWU4NDk0NWZiMzk3
YWY4NmI3NDVjYjViMTdhODA2M2JmZGIzY2QuLjEwNDNlMGU0MTE2ZmRjYjM2MzQ0NTBhZTFjNTQx
OGE0NjEyYzIzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5j
cHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcApAQCAtNTgsMTQgKzU4
LDE0IEBAIHZvaWQqIHRyeUxhcmdlWmVyb2VkTWVtYWxpZ25WaXJ0dWFsKHNpemVfdCByZXF1aXJl
ZEFsaWdubWVudCwgc2l6ZV90IHJlcXVlc3RlZFNpCiAgICAgICAgIGtpbmQgPSBtYXBUb0FjdGl2
ZUhlYXBLaW5kKGtpbmQpOwogICAgICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFw
S2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKIAotICAgICAgICBVbmlxdWVMb2NrSG9sZGVy
IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGhlYXAuYWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOworICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CisgICAgICAg
IHJlc3VsdCA9IGhlYXAuYWxsb2NhdGVMYXJnZShoZWFwTG9ja2VyLCBhbGlnbm1lbnQsIHNpemUs
IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAg
ICAgICAgICAvLyBEb24ndCB0cmFjayB0aGlzIGFzIGRpcnR5IG1lbW9yeSB0aGF0IGRpY3RhdGVz
IGhvdyB3ZSBkcml2ZSB0aGUgc2NhdmVuZ2VyLgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBtYWtlIGl0IHNvIHRoYXQgdXNlcnMgb2YgdGhpcyBBUEkgaW5mb3JtIGJtYWxsb2Mgd2hp
Y2gKICAgICAgICAgICAgIC8vIHBhZ2VzIHRoZXkgZGlydHk6CiAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjA3Ci0gICAgICAgICAgICBo
ZWFwLmV4dGVybmFsRGVjb21taXQobG9jaywgcmVzdWx0LCBzaXplKTsKKyAgICAgICAgICAgIGhl
YXAuZXh0ZXJuYWxEZWNvbW1pdChoZWFwTG9ja2VyLCByZXN1bHQsIHNpemUpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC04MiwxMCArODIsMTAgQEAgdm9pZCBmcmVlTGFyZ2VWaXJ0dWFsKHZvaWQq
IG9iamVjdCwgc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQpCiAgICAgfQogICAgIGtpbmQgPSBt
YXBUb0FjdGl2ZUhlYXBLaW5kKGtpbmQpOwogICAgIEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBl
ckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGtpbmQpOwotICAgIFVuaXF1ZUxvY2tIb2xkZXIg
bG9jayhIZWFwOjptdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVh
cDo6bXV0ZXgoKSk7CiAgICAgLy8gQmFsYW5jZSBvdXQgdGhlIGV4dGVybmFsRGVjb21taXQgd2hl
biB3ZSBhbGxvY2F0ZWQgdGhlIHplcm9lZCB2aXJ0dWFsIG1lbW9yeS4KLSAgICBoZWFwLmV4dGVy
bmFsQ29tbWl0KGxvY2ssIG9iamVjdCwgc2l6ZSk7Ci0gICAgaGVhcC5kZWFsbG9jYXRlTGFyZ2Uo
bG9jaywgb2JqZWN0KTsKKyAgICBoZWFwLmV4dGVybmFsQ29tbWl0KGhlYXBMb2NrZXIsIG9iamVj
dCwgc2l6ZSk7CisgICAgaGVhcC5kZWFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgb2JqZWN0KTsK
IH0KIAogdm9pZCBzY2F2ZW5nZSgpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBzZXRTY2F2ZW5n
ZXJUaHJlYWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvdmVycmlkZUNsYXNzKQogewogICAgIGlmIChE
ZWJ1Z0hlYXA6OnRyeUdldCgpKQogICAgICAgICByZXR1cm47Ci0gICAgVW5pcXVlTG9ja0hvbGRl
ciBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihI
ZWFwOjptdXRleCgpKTsKICAgICBTY2F2ZW5nZXI6OmdldCgpLT5zZXRTY2F2ZW5nZXJUaHJlYWRR
T1NDbGFzcyhvdmVycmlkZUNsYXNzKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399921</attachid>
            <date>2020-05-20 18:26:26 -0700</date>
            <delta_ts>2020-05-26 12:00:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200520182625.patch</filename>
            <type>text/plain</type>
            <size>85836</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uN2ZmZGI5NjZkMTY3YTRhNjk5YjNhZmM4M2Q0MDhm
Mjk5N2ViNWEwZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAorMjAyMC0wNS0yMCAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGhhdmUgcGVyLWNwdSBsb2NraW5nIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBibWFs
bG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0
b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlSW1wbCk6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1h
bGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6
Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFwcHJveFBlckNQVUNhY2hlOjpBcHByb3hQZXJDUFVDYWNoZSk6CisgICAgICAgIChi
bWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6bGluZUNhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjppbmRleCBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpBcHBy
b3hQZXJDUFVDYWNoZTo6cGFnZU11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OkFwcHJveFBlckNQ
VUNhY2hlOjptdXRleCk6CisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
RmFzdENhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXJlbmE6
OkFyZW5hKToKKyAgICAgICAgKGJtYWxsb2M6OkFyZW5hOjphbGxvY2F0ZSk6CisgICAgICAgICog
Ym1hbGxvYy9BcmVuYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAqIGJtYWxsb2MvQkNvbXBpbGVyLmg6CisgICAgICAgICogYm1hbGxv
Yy9DUFUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcC4KKyAgICAgICAgKGJtYWxsb2M6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMpOgorICAgICAg
ICAqIGJtYWxsb2MvQ1BVLmg6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjp4ODZfcmR0c2NwKToKKyAgICAgICAgKGJtYWxs
b2M6OmN1cnJlbnRDUFVJbmRleCk6CisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAg
ICAoYm1hbGxvYzo6Q2h1bms6OkNodW5rKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcik6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6
RGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRv
ci5oOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnBlckNQVUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpsaW5lQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAq
IGJtYWxsb2MvR2lnYWNhZ2UuY3BwOgorICAgICAgICAoR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRp
dmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sp
OgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpz
Y2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFy
ayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjph
bGxvY2F0ZUxvY2tlZFNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9j
YXRlU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5T2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxs
b2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpzaHJpbmtMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpl
eHRlcm5hbENvbW1pdCk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpleHRlcm5hbERlY29tbWl0
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmdldEN1
cnJlbnRDUFVDYWNoZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpvbmVTZWNvbmQgY29uc3Qp
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAg
ICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2Mv
TGlzdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGlzdE5vZGU6OmlzT25MaXN0IGNvbnN0KToKKyAg
ICAgICAgKiBibWFsbG9jL011dGV4Lmg6CisgICAgICAgIChibWFsbG9jOjpNdXRleDo6aXNMb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6bG9ja1N3aXRjaCk6CisgICAgICAgICogYm1h
bGxvYy9QZXJQcm9jZXNzLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OmdldFBlclByb2Nlc3NEYXRh
KToKKyAgICAgICAgKGJtYWxsb2M6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFs
bG9jL1NjYXZlbmdlci5jcHA6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1bik6Cisg
ICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1blNvb24pOgorICAgICAgICAoYm1hbGxvYzo6
U2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChibWFs
bG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6
dGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6
OnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVu
Z2VyOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2
ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KToKKyAg
ICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCk6CisgICAgICAgICogYm1h
bGxvYy9TbWFsbExpbmUuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6cmVmQ291bnQp
OgorICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxMaW5lOjpkZXJlZik6CisgICAgICAgICogYm1hbGxvYy9TbWFsbFBhZ2UuaDoKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6cmVmQ291bnQpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpoYXNGcmVlTGluZXMgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdl
OjpzZXRIYXNGcmVlTGluZXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0SGFz
RnJlZUxpbmVzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6aW5nRm9y
QWxsb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEluaXRp
YWxpemluZ0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpjYWNo
ZSBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldENhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChibWFsbG9jOjpT
bWFsbFBhZ2U6OmlzTG9ja2VkIGNvbnN0KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6
bG9jayk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnVubG9jayk6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OnN3aXRjaExvY2spOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjpsb2NrV2l0aFVuYmlhcyk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmxvY2tB
bmRUcnlUb1Rha2VCaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6cmVmKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6ZGVyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpzZXRTbGlkZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TdGF0aWNQZXJQ
cm9jZXNzLmg6CisgICAgICAgIChibWFsbG9jOjpTdGF0aWNQZXJQcm9jZXNzOjpnZXQpOgorICAg
ICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnB1
c2gpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+OjplbXBsYWNlKToKKyAgICAgICAgKiBi
bWFsbG9jL2JtYWxsb2MuY3BwOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlMYXJnZVplcm9l
ZE1lbWFsaWduVmlydHVhbCk6CisgICAgICAgIChibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1
YWwpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyk6
CisKIDIwMjAtMDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbYm1hbGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9ibWFsbG9jL0NN
YWtlTGlzdHMudHh0CmluZGV4IDNkOTkwZWI5YmE4ZDM4OWM0NjQzZDE4MDBmNTAzNTk4NGJkN2E4
NmQuLjFmOGZjYTBiZWVjOTIzMDc2YjkxMGI3MDE4ODcyZmIyZTE5OWE1NDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9ibWFsbG9jL0NNYWtl
TGlzdHMudHh0CkBAIC04LDYgKzgsNyBAQCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAgYm1hbGxv
Yy9BbGxJc29IZWFwcy5jcHAKICAgICBibWFsbG9jL0FsbG9jYXRvci5jcHAKICAgICBibWFsbG9j
L0F2YWlsYWJsZU1lbW9yeS5jcHAKKyAgICBibWFsbG9jL0NQVS5jcHAKICAgICBibWFsbG9jL0Nh
Y2hlLmNwcAogICAgIGJtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAogICAgIGJtYWxsb2MvRGVhbGxv
Y2F0b3IuY3BwCkBAIC01Miw2ICs1Myw3IEBAIHNldChibWFsbG9jX1BVQkxJQ19IRUFERVJTCiAg
ICAgYm1hbGxvYy9CdWxrRGVjb21taXQuaAogICAgIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oCiAg
ICAgYm1hbGxvYy9CdW1wUmFuZ2UuaAorICAgIGJtYWxsb2MvQ1BVLmgKICAgICBibWFsbG9jL0Nh
Y2hlLmgKICAgICBibWFsbG9jL0NodW5rLmgKICAgICBibWFsbG9jL0NyeXB0b1JhbmRvbS5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNWMyYzNkNTZkOTc1OWNjMTExZGIzYjNmOTRhZGQzNDg1Yzk2ZGM1YS4uNDFkZjA5YTJlNTBj
ZTI2MjNlZGMyMzdjMjgzN2M2YWRmODQ5MmYxNCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM5LDYgKzEzOSwxMiBAQAogCQlE
RThCMTNCMzIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU4QjEzQjIyMUNDNUQ5RjAwQTYzRkNEIC8qIEJW
TVRhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMzFFNzQ4MDIyMzhDQTVDMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxRTc0N0YyMjM4Q0E1QjAw
NUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzI4RDg0RDIzQ0VCMzg5MDA1NDVCMTggLyogUGFja2Vk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzI4RDg0
QzIzQ0VCMzg5MDA1NDVCMTggLyogUGFja2VkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM1MjM5MDIyNDczNEJFNDAwM0ExM0NGIC8qIENQVS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzUyMzkw
MTI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmNwcCAqLzsgfTsKKwkJRTM1MjM5MDMyNDczNEJFOTAw
M0ExM0NGIC8qIENQVS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNkM3MDNCMjQ3M0ExQ0YwMDNDQUQw
NyAvKiBBcHByb3hQZXJDUFVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM2QzcwM0EyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RTM2QzcwM0UyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJl
bmEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlF
MzZDNzAzRjI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8qIEFy
ZW5hLmNwcCAqLzsgfTsKKwkJRTM2QzcwNDEyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQ
VUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNkM3MDQwMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgKi87IH07
CiAJCUUzNzhBOURGMjQ2QjY4NzIwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OEE5REUyNDZCNjg2
QTAwMjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgKi87IH07CiAJCUUzNzhBOUUwMjQ2QjY4
NzUwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RU
eXBlVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFM0E0MTNDOTIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTQxM0M4MjI2
MDYxMTQwMDM3RjQ3MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTUsNiArMzAxLDEyIEBACiAJCURF
OEIxM0IyMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJWTVRh
Z3MuaDsgcGF0aCA9IGJtYWxsb2MvQlZNVGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzFFNzQ3RjIyMzhDQTVCMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdGF0aWNQZXJQcm9jZXNzLmg7IHBhdGggPSBi
bWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTMyOEQ4NEMyM0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQYWNrZWQuaDsgcGF0aCA9IGJtYWxsb2MvUGFja2VkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ1BVLmg7IHBhdGggPSBibWFsbG9jL0NQVS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzUyMzkwMTI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IENQVS5jcHA7IHBhdGggPSBibWFsbG9jL0NQVS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQ
ZXJDUFVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcHByb3hQZXJD
UFVDYWNoZS5oOyBwYXRoID0gYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXJlbmEuaDsgcGF0aCA9IGJtYWxsb2Mv
QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwM0QyNDczQjU5RDAw
M0NBRDA3IC8qIEFyZW5hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFyZW5hLmNwcDsgcGF0aCA9IGJtYWxsb2MvQXJlbmEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzZDNzA0MDI0NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXBwcm94UGVyQ1BVQ2Fj
aGUuY3BwOyBwYXRoID0gYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RUeXBl
VGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT2JqZWN0VHlwZVRhYmxlLmg7IHBhdGggPSBibWFsbG9j
L09iamVjdFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc4QTlE
RTI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE9iamVjdFR5cGVUYWJsZS5jcHA7IHBhdGggPSBibWFsbG9jL09iamVjdFR5cGVUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTQxM0M4MjI2MDYxMTQwMDM3RjQ3
MCAvKiBJc29TaGFyZWRQYWdlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJc29TaGFyZWRQYWdlSW5saW5lcy5oOyBwYXRoID0gYm1hbGxvYy9Jc29TaGFyZWRQYWdl
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc2LDkgKzQ4OCwxNSBA
QAogCQkxNEQ5REI0RTE3RjI4NjZFMDBFQUFCNzkgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8q
IEFwcHJveFBlckNQVUNhY2hlLmNwcCAqLywKKwkJCQlFMzZDNzAzQTI0NzNBMUNGMDAzQ0FEMDcg
LyogQXBwcm94UGVyQ1BVQ2FjaGUuaCAqLywKKwkJCQlFMzZDNzAzRDI0NzNCNTlEMDAzQ0FEMDcg
LyogQXJlbmEuY3BwICovLAorCQkJCUUzNkM3MDNDMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5o
ICovLAogCQkJCTc5Mzk4ODVBMjA3NkVFQjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywK
IAkJCQkxNDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3
REM2RTIxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggKi8sCisJCQkJRTM1MjM5MDEyNDczNEJF
MDAwM0ExM0NGIC8qIENQVS5jcHAgKi8sCisJCQkJRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8q
IENQVS5oICovLAogCQkJCTE0MkI0NDM0MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3Bw
ICovLAogCQkJCTE0MkI0NDM1MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAqLywKIAkJ
CQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovLApAQCAtNTc3
LDYgKzU5NSw4IEBACiAJCQkJMEY3RUI4MzQxRjk1NDFCMDAwRjFBQkNCIC8qIEFsbElzb0hlYXBz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdFQjg0RjFGOTU0RDRFMDBGMUFCQ0IgLyogQWxsSXNv
SGVhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3
MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzZDNzAzQjI0NzNBMUNGMDAz
Q0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNkM3MDNF
MjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5OUM1Q0Qx
RUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFEMDkzNDMzMUZDRjQwNkQwMEU4NUVCNSAvKiBCQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNTkzLDYgKzYxMyw3IEBACiAJCQkJREU4QjEzQjMyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRh
Z3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3REM2RTMxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5r
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzUyMzkwMzI0NzM0QkU5MDAzQTEzQ0YgLyogQ1BVLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzRTFGODk3MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFu
ZG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVh
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkI0NDM3MUUyODM5RTcwMDFEQTZFOSAv
KiBEZWJ1Z0hlYXAuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxLDkgKzc4MiwxMiBAQAogCQkJZmls
ZXMgPSAoCiAJCQkJMEY3RUI4MkYxRjk1NDFCMDAwRjFBQkNCIC8qIEFsbElzb0hlYXBzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM2QzcwNDEyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJv
eFBlckNQVUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNkM3MDNGMjQ3M0I1OUQwMDND
QUQwNyAvKiBBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTk5QzVDQzFFQzNGMTU5MDBB
MkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTE2Nzc0
MUZBRDY4NUMwMDgyMzZBOCAvKiBibWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3
MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzUy
MzkwMjI0NzM0QkU0MDAzQTEzQ0YgLyogQ1BVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzRC
OTNGMUY4OTcxM0UwMEI5MzVEMyAvKiBDcnlwdG9SYW5kb20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKaW5kZXggNTA2ZDJkODc2
YWVkMzIwNmRlODkyMzBmNzUzNzhkOGFiZWZkMzAzYy4uYTRhNjVmNmQzMTljOGQ2NzVjYTg2YzJm
MTI2YTU3MzU5ZTdjNWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxv
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcApAQCAt
NzYsMTEgKzc2LDExIEBAIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZUltcGwodm9pZCogb2Jq
ZWN0LCBzaXplX3QgbmV3U2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3RpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIE9iamVjdFR5cGU6OkxhcmdlOiB7Ci0gICAgICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJn
ZVNpemUobG9jaywgb2JqZWN0KTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2Vy
KEhlYXA6Om11dGV4KCkpOworICAgICAgICBvbGRTaXplID0gbV9oZWFwLmxhcmdlU2l6ZShoZWFw
TG9ja2VyLCBvYmplY3QpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdT
aXplID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG1faGVhcC5zaHJpbmtMYXJnZShsb2NrLCBS
YW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKKyAgICAgICAgICAgIG1faGVhcC5zaHJp
bmtMYXJnZShoZWFwTG9ja2VyLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
MjIsOSArMTIyLDggQEAgQk5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9y
U2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXoKIHsKICAgICBCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCi0g
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0
b3IucHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXMobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxs
b2NhdG9yLmxpbmVDYWNoZShsb2NrKSwgYWN0aW9uKTsKKyAgICBtX2RlYWxsb2NhdG9yLnByb2Nl
c3NPYmplY3RMb2coKTsKKyAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZUNs
YXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxsb2NhdG9yLnBlckNQVUNhY2hl
KCksIGFjdGlvbik7CiB9CiAKIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRv
cihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MsIEZhaWx1cmVBY3Rp
b24gYWN0aW9uKQpAQCAtMTM3LDggKzEzNiw4IEBAIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJl
ZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhCiAK
IEJOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplLCBG
YWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6
bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVu
dCwgc2l6ZSwgYWN0aW9uKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6
bXV0ZXgoKSk7CisgICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIGFs
aWdubWVudCwgc2l6ZSwgYWN0aW9uKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2I4ZTc5NzlkMjhiOTlhMzJmOGUyNGJmMzU2MjM0MTYzYWU4NjIyMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKKworI2luY2x1ZGUgIkFyZW5hLmgiCisK
K25hbWVzcGFjZSBibWFsbG9jIHsKKworTGluZUNhY2hlKiBBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
U2xvd0Nhc2UoY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgaWYgKCFtX2xpbmVDYWNoZS5sb2Fk
KCkpIHsKKyAgICAgICAgdm9pZCogbWVtb3J5ID0gQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXpl
b2YoTGluZUNhY2hlKSwgYWxpZ25vZihMaW5lQ2FjaGUpKTsKKyAgICAgICAgYXV0byogdCA9IG5l
dyAobWVtb3J5KSBMaW5lQ2FjaGUoKTsKKyAgICAgICAgbV9saW5lQ2FjaGUuc3RvcmUodCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2xpbmVDYWNoZS5sb2FkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BV
Q2FjaGUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzA4MmYxZDM2ZGE1NDZiZjZjYTI5ODdhY2Y5YTQ5Y2I3N2E1ZTExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIlNpemVzLmgi
CisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSA8YXJyYXk+CisKK25hbWVzcGFjZSBi
bWFsbG9jIHsKKworLy8gQXBwcm94UGVyQ1BVQ2FjaGUgaXMgKmFwcHJveGltYXRlKiBwZXItQ1BV
IGNhY2hlLiBUaGUgZ29hbCBvZiB0aGlzIGNhY2hlIGlzIG5vdCBwcmVjaXNlbHkgY29uc3RydWN0
aW5nIHBlci1DUFUgY2FjaGUsCisvLyByYXRoZXIgaXQgaXMgb2ZmZXJpbmcgcGVyLUNQVSBhZmZp
bml0eSB0byBTbWFsbFBhZ2VzIGFzIG9wdGltaXphdGlvbi4KK2NsYXNzIEFwcHJveFBlckNQVUNh
Y2hlIHsKK3B1YmxpYzoKKyAgICBBcHByb3hQZXJDUFVDYWNoZSh1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBMaW5lQ2FjaGUmIGxp
bmVDYWNoZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCisgICAgeworICAgICAgICBpZiAoYXV0
byogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKSkKKyAgICAgICAgICAgIHJldHVybiAqb2JqZWN0Owor
ICAgICAgICByZXR1cm4gKmdldFNsb3dDYXNlKGxvY2tlcik7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTXV0ZXgmIHBhZ2VNdXRl
eCgpIHsgcmV0dXJuIG1fcGFnZU11dGV4OyB9CisgICAgTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4g
bV9tdXRleDsgfQorCisgICAgTGluZUNhY2hlKiBnZXRGYXN0Q2FzZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9saW5lQ2FjaGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTGluZUNhY2hlKiBnZXRTbG93Q2FzZShjb25zdCBMb2NrSG9s
ZGVyJik7CisKKyAgICBzdGQ6OmF0b21pYzxMaW5lQ2FjaGUqPiBtX2xpbmVDYWNoZSB7IG51bGxw
dHIgfTsKKyAgICBNdXRleCBtX211dGV4OworICAgIE11dGV4IG1fcGFnZU11dGV4OworICAgIHVu
c2lnbmVkIG1faW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQXJlbmEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMTJkMWQyZTg0NWM1YjRiZjRmNWQ0MDI3ZjU5NmFi
NjhkZjQ0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5h
LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIkFyZW5hLmgiCisKKyNpbmNsdWRlICJWTUFsbG9jYXRlLmgi
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitERUZJTkVfU1RB
VElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJlbmEpOworCitBcmVuYTo6QXJlbmEoY29uc3QgTG9j
a0hvbGRlciYpCit7Cit9CisKKy8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1
YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KK3ZvaWQqIEFyZW5hOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihBcmVuYTo6bXV0
ZXgoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBtX2J1bXBPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbV9idW1wT2Zmc2V0KTsKKyAgICAgICAgdm9pZCog
cmVzdWx0ID0gbV9idW1wQmFzZSArIG1fYnVtcE9mZnNldDsKKyAgICAgICAgbV9idW1wT2Zmc2V0
ICs9IHNpemU7CisgICAgICAgIGlmIChtX2J1bXBPZmZzZXQgPD0gbV9idW1wTGltaXQpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSB2
bVNpemUoc2l6ZSk7CisgICAgICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgbV9idW1wQmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihhbGxv
Y2F0aW9uKTsKKyAgICAgICAgbV9idW1wT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9idW1wTGltaXQg
PSBhbGxvY2F0aW9uU2l6ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaCBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQXJlbmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTFkZWViMjM5ZjA5OTZhMmFmMTk2OTcwN2Jm
MTA5ZWQ0ODIyOTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
cmVuYS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0YXRpY1BlclByb2Nlc3Mu
aCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBBcmVuYSBmaW5hbCA6IHB1YmxpYyBT
dGF0aWNQZXJQcm9jZXNzPEFyZW5hPiB7CitwdWJsaWM6CisgICAgQkVYUE9SVCBBcmVuYShjb25z
dCBMb2NrSG9sZGVyJik7CisKKyAgICAvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1lbW9yeSBieSB2
aXJ0dWFsIG9mIHVzaW5nIHZtQWxsb2NhdGUuCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNp
emUsIHNpemVfdCBhbGlnbm1lbnQpOworCitwcml2YXRlOgorICAgIGNoYXIqIG1fYnVtcEJhc2Ug
eyBudWxscHRyIH07CisgICAgc2l6ZV90IG1fYnVtcE9mZnNldCB7IDAgfTsKKyAgICBzaXplX3Qg
bV9idW1wTGltaXQgeyAwIH07Cit9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFH
RShBcmVuYSk7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVyLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21w
aWxlci5oCmluZGV4IGNkYzQ3YWM5YTJlYzcwYWY3ZDVmZTQ4Y2Q3ODFkZGZiZDBjYzUwNGEuLmYz
ZDA3NDM3ZmUzZTY5ZmQ4MDgxOTc2MGRiOWVhNmYwZTYzOWZkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVyLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9CQ29tcGlsZXIuaApAQCAtNzksMyArNzksMjEgQEAKICNpZiAhZGVmaW5lZChCRkFMTFRIUk9V
R0gpCiAjZGVmaW5lIEJGQUxMVEhST1VHSAogI2VuZGlmCisKKy8qIEJMSUtFTFkgYW5kIEJVTkxJ
S0VMWSAqLworCisjaWYgIWRlZmluZWQoQkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJ
QkxFKQorI2RlZmluZSBCTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKEJMSUtFTFkpCisjZGVmaW5lIEJMSUtFTFkoeCkgKHgpCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKEJVTkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxF
KQorI2RlZmluZSBCVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbmRp
ZgorCisjaWYgIWRlZmluZWQoQlVOTElLRUxZKQorI2RlZmluZSBCVU5MSUtFTFkoeCkgKHgpCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmU0N2EyNzBkODdjOTE4NzM2
Y2YwOWEzZjYyYTM0NzRkNTJiYTYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DUFUuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ1BVLmgiCisKKyNpbmNsdWRlICJCUGxh
dGZvcm0uaCIKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2lmIEJP
UyhEQVJXSU4pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VsaWYgQk9TKExJTlVYKSB8fCBC
T1MoRlJFRUJTRCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgYm1h
bGxvYyB7CisKK2ludCBudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkKK3sKKyAgICBjb25zdCBpbnQg
ZGVmYXVsdElmVW5hdmFpbGFibGUgPSAxOworICAgIHN0YXRpYyBpbnQgc19udW1iZXJPZkNvcmVz
ID0gLTE7CisKKyAgICBpZiAoc19udW1iZXJPZkNvcmVzID4gMCkKKyAgICAgICAgcmV0dXJuIHNf
bnVtYmVyT2ZDb3JlczsKKworICAgIGlmIChjb25zdCBjaGFyKiBjb3Jlc0VudiA9IGdldGVudigi
Ym1hbGxvY19udW1iZXJPZlByb2Nlc3NvckNvcmVzIikpIHsKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZDb3JlczsKKyAgICAgICAgaWYgKHNzY2FuZihjb3Jlc0VudiwgIiV1IiwgJm51bWJlck9m
Q29yZXMpID09IDEpIHsKKyAgICAgICAgICAgIHNfbnVtYmVyT2ZDb3JlcyA9IG51bWJlck9mQ29y
ZXM7CisgICAgICAgICAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOworICAgICAgICB9CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlIGJtYWxsb2NfbnVt
YmVyT2ZQcm9jZXNzb3JDb3Jlcz0lc1xuIiwgY29yZXNFbnYpOworICAgIH0KKworI2lmIEJPUyhE
QVJXSU4pCisgICAgdW5zaWduZWQgcmVzdWx0OworICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2Yo
cmVzdWx0KTsKKyAgICBpbnQgbmFtZVtdID0geworICAgICAgICBDVExfSFcsCisgICAgICAgIEhX
X0FWQUlMQ1BVCisgICAgfTsKKyAgICBpbnQgc3lzY3RsUmVzdWx0ID0gc3lzY3RsKG5hbWUsIHNp
emVvZihuYW1lKSAvIHNpemVvZihpbnQpLCAmcmVzdWx0LCAmbGVuZ3RoLCAwLCAwKTsKKworICAg
IHNfbnVtYmVyT2ZDb3JlcyA9IHN5c2N0bFJlc3VsdCA8IDAgPyBkZWZhdWx0SWZVbmF2YWlsYWJs
ZSA6IHJlc3VsdDsKKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9TKEZSRUVCU0QpCisgICAgbG9uZyBz
eXNjb25mUmVzdWx0ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisKKyAgICBzX251
bWJlck9mQ29yZXMgPSBzeXNjb25mUmVzdWx0IDwgMCA/IGRlZmF1bHRJZlVuYXZhaWxhYmxlIDog
c3RhdGljX2Nhc3Q8aW50PihzeXNjb25mUmVzdWx0KTsKKyNlbHNlCisgICAgc19udW1iZXJPZkNv
cmVzID0gZGVmYXVsdElmVW5hdmFpbGFibGU7CisjZW5kaWYKKyAgICByZXR1cm4gc19udW1iZXJP
ZkNvcmVzOworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0NQVS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZjIyZTRkZGIxMmNiZjI1MmY2YjA3YTc0ZTg0NzVjMzBlYzM1M2FlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNsdWRlIDxjc3RkaW50PgorCituYW1l
c3BhY2UgYm1hbGxvYyB7CisKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZfNjQpCitpbmxpbmUg
dWludDY0X3QgeDg2X3JkdHNjcCh1aW50MzJfdCYgYXV4KQoreworICAgIHVpbnQ2NF90IHJheCA9
IDA7CisgICAgdWludDY0X3QgcmR4ID0gMDsKKyAgICBhc20gdm9sYXRpbGUoInJkdHNjcCIgOiAi
PWEiIChyYXgpLCAiPWQiIChyZHgpLCAiPWMiIChhdXgpIDogOiApOworICAgIHJldHVybiAocmR4
IDw8IDMyKSArIHJheDsKK30KKyNlbmRpZgorCitpbmxpbmUgdW5zaWduZWQgY3VycmVudENQVUlu
ZGV4KCkKK3sKKyNpZiBCT1MoREFSV0lOKQorI2lmIEJDUFUoQVJNKQorICAgIHVpbnRwdHJfdCBw
OworICAgIF9fYXNtX18oIm1yYyBwMTUsIDAsICVbcF0sIGMxMywgYzAsIDMiIDogW3BdICI9JnIi
IChwKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwICYgMHgzdWwpOworI2Vs
aWYgQkNQVShBUk02NCkKKyAgICB1aW50NjRfdCBwOworICAgIF9fYXNtX18oIm1ycyAlW3BdLCBU
UElEUlJPX0VMMCIgOiBbcF0gIj0mciIgKHApKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHAgJiAweDcpOworI2VsaWYgQkNQVShYODYpIHx8IEJDUFUoWDg2XzY0KQorICAgIHN0
cnVjdCB7CisgICAgICAgIHVpbnRwdHJfdCBwMTsKKyAgICAgICAgdWludHB0cl90IHAyOworICAg
IH0gcDsKKyAgICBhc20gdm9sYXRpbGUoInNpZHQgJVtwXSIgOiBbcF0gIj0mbSIgKHApKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHAucDEgJiAweGZmZik7CisjZWxzZQorI2Vy
cm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZQorI2VuZGlmCisjZWxzZQorICAgIHJldHVybiAw
OworI2VuZGlmCit9CisKK2ludCBudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQ2h1bmsuaAppbmRleCAyMWZiYjhmZTc5OGRkOTc4MzVhMzhjY2Y4ZjFhYjAwZTNkYjI3
NDMyLi4zNDhjMjVkZTgzNmEzZDA2MTdiZDUyZmYwNmZmYTc1MTFjZWVmZmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9DaHVuay5oCkBAIC05Myw5ICs5Myw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
PiB2b2lkIGZvckVhY2hQYWdlKENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VTaXplLCBGdW5jCiBp
bmxpbmUgQ2h1bms6OkNodW5rKHNpemVfdCBwYWdlU2l6ZSkKIHsKICAgICBzaXplX3Qgc21hbGxQ
YWdlQ291bnQgPSBwYWdlU2l6ZSAvIHNtYWxsUGFnZVNpemU7Ci0gICAgZm9yRWFjaFBhZ2UodGhp
cywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICBmb3JFYWNoUGFnZSh0aGlz
LCBwYWdlU2l6ZSwgWyZdKFNtYWxsUGFnZSogcGFnZXMpIHsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzbWFsbFBhZ2VDb3VudDsgKytpKQotICAgICAgICAgICAgcGFnZVtpXS5zZXRT
bGlkZShpKTsKKyAgICAgICAgICAgIHBhZ2VzW2ldLmluaXRpYWxpemUoaSk7CiAgICAgfSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXggN2QxZTM0ZTk3YTc3
OTJkOGZkMzA2YWUyMDVkNmY3MDEyM2FjOGI0MS4uNTRiZmIxNzUzNzc0MzY0NTY5ZDM1NTlkNmQ3
ZDJhZGRmNmY2MDVmYSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKQEAg
LTQxLDYgKzQxLDggQEAgRGVhbGxvY2F0b3I6OkRlYWxsb2NhdG9yKEhlYXAmIGhlYXApCiAgICAg
OiBtX2hlYXAoaGVhcCkKIHsKICAgICBCQVNTRVJUKCFFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVi
dWdIZWFwRW5hYmxlZCgpKTsKKyAgICBtX3BlckNQVUNhY2hlID0gJm1faGVhcC5nZXRDdXJyZW50
Q1BVQ2FjaGUoKTsKKyAgICBtX2NhY2hlVGltZSA9IG1hY2hfYXBwcm94aW1hdGVfdGltZSgpOwog
fQogCiBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKQEAgLTUwLDE2ICs1MiwxNyBAQCBEZWFs
bG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKICAgICAKIHZvaWQgRGVhbGxvY2F0b3I6OnNjYXZlbmdl
KCkKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0KLSAgICBw
cm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgIG1faGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGxv
Y2ssIGxpbmVDYWNoZShsb2NrKSk7CisgICAgcHJvY2Vzc09iamVjdExvZygpOworICAgIC8vIG1f
aGVhcC5kZWFsbG9jYXRlTGluZUNhY2hlKGNhY2hlKCkpOwogfQogCi12b2lkIERlYWxsb2NhdG9y
Ojpwcm9jZXNzT2JqZWN0TG9nKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2spCit2b2lkIERlYWxsb2Nh
dG9yOjpwcm9jZXNzT2JqZWN0TG9nKCkKIHsKKyAgICBNdXRleCogaGVsZExvY2sgPSBudWxscHRy
OworICAgIGF1dG8mIGNhY2hlID0gcGVyQ1BVQ2FjaGUoKTsKICAgICBmb3IgKE9iamVjdCBvYmpl
Y3QgOiBtX29iamVjdExvZykKLSAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKGxvY2ssIG9i
amVjdCwgbGluZUNhY2hlKGxvY2spKTsKKyAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKCZo
ZWxkTG9jaywgb2JqZWN0LCBjYWNoZSk7CisgICAgbG9ja1N3aXRjaCgmaGVsZExvY2ssIG51bGxw
dHIpOwogICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7CiB9CiAKQEAgLTY5LDE1ICs3MiwxMyBAQCB2
b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCogb2JqZWN0KQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9oZWFwLmlzTGFyZ2Uob2JqZWN0KSkgewotICAgICAgICBV
bmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIG1faGVhcC5kZWFs
bG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0KTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFw
TG9ja2VyKEhlYXA6Om11dGV4KCkpOworICAgICAgICBtX2hlYXAuZGVhbGxvY2F0ZUxhcmdlKGhl
YXBMb2NrZXIsIG9iamVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9v
YmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgVW5p
cXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgICAgICBwcm9jZXNzT2JqZWN0
TG9nKGxvY2spOwotICAgIH0KKyAgICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0
TG9nLmNhcGFjaXR5KCkpCisgICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKIAogICAgIG1fb2Jq
ZWN0TG9nLnB1c2gob2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaApp
bmRleCBmMTRmZWVhNWNjMGI1NjM5YmZmY2FhNWRiZjdlMTgxYzJiNWMyZmUzLi42MzMwZmY3MTYw
NDM2YTg2OTk0NzZjNGI3NTRlZTY4NjdkNmI4ZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFs
bG9jYXRvci5oCkBAIC0yNiw5ICsyNiwxMiBAQAogI2lmbmRlZiBEZWFsbG9jYXRvcl9oCiAjZGVm
aW5lIERlYWxsb2NhdG9yX2gKIAorI2luY2x1ZGUgIkFwcHJveFBlckNQVUNhY2hlLmgiCiAjaW5j
bHVkZSAiQkV4cG9ydC5oIgogI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCisjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+
CiAjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTQ2LDkgKzQ5LDE3
IEBAIGNsYXNzIERlYWxsb2NhdG9yIHsKICAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCopOwogICAg
IHZvaWQgc2NhdmVuZ2UoKTsKICAgICAKLSAgICB2b2lkIHByb2Nlc3NPYmplY3RMb2coVW5pcXVl
TG9ja0hvbGRlciYpOworICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZygpOwogICAgIAotICAgIExp
bmVDYWNoZSYgbGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX2xpbmVDYWNo
ZTsgfQorICAgIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSgpCisgICAgeworICAgICAg
ICB1aW50NjRfdCB0aW1lID0gbWFjaF9hcHByb3hpbWF0ZV90aW1lKCk7CisgICAgICAgIGlmICh0
aW1lIC0gbV9jYWNoZVRpbWUgPiBtX2hlYXAub25lU2Vjb25kKCkpIHsKKyAgICAgICAgICAgIG1f
cGVyQ1BVQ2FjaGUgPSAmbV9oZWFwLmdldEN1cnJlbnRDUFVDYWNoZSgpOworICAgICAgICAgICAg
bV9jYWNoZVRpbWUgPSB0aW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqbV9wZXJDUFVD
YWNoZTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBkZWFsbG9jYXRlRmFzdENhc2Uodm9p
ZCopOwpAQCAtNTYsNyArNjcsOCBAQCBjbGFzcyBEZWFsbG9jYXRvciB7CiAKICAgICBIZWFwJiBt
X2hlYXA7CiAgICAgRml4ZWRWZWN0b3I8dm9pZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1f
b2JqZWN0TG9nOwotICAgIExpbmVDYWNoZSBtX2xpbmVDYWNoZTsgLy8gVGhlIEhlYXAgcmVtb3Zl
cyBpdGVtcyBmcm9tIHRoaXMgY2FjaGUuCisgICAgdWludDY0X3QgbV9jYWNoZVRpbWUgeyAwIH07
CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIG1fcGVyQ1BVQ2FjaGUgeyBudWxscHRyIH07CiB9Owog
CiBpbmxpbmUgYm9vbCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZUZhc3RDYXNlKHZvaWQqIG9iamVj
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAKaW5kZXggYjk4Y2QzYTgzNmIwNmZiNDNj
MTEzMzY2M2QyYmZlMGE2YjQ0MmQ1ZS4uOGUyNDgxNzVlZWI5YjcwMDlhNzY3ZmM4M2RhNmIxYzU2
YzViMjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAKQEAgLTI2MCw3ICsyNjAs
NyBAQCB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpCiAgICAgfQogICAgIAogICAgIFBy
aW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQcmltaXRpdmVEaXNhYmxlQ2Fs
bGJhY2tzOjpnZXQoKTsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soUHJpbWl0aXZlRGlzYWJs
ZUNhbGxiYWNrczo6bXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIoUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrczo6bXV0ZXgoKSk7CiAgICAgZm9yIChDYWxsYmFjayYgY2FsbGJh
Y2sgOiBjYWxsYmFja3MuY2FsbGJhY2tzKQogICAgICAgICBjYWxsYmFjay5mdW5jdGlvbihjYWxs
YmFjay5hcmd1bWVudCk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5zaHJpbmsoMCk7CkBAIC0y
NzgsMTQgKzI3OCwxNCBAQCB2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgq
ZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiAgICAgfQogICAgIAogICAgIFByaW1p
dGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzOjpnZXQoKTsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrczo6bXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIoUHJpbWl0aXZl
RGlzYWJsZUNhbGxiYWNrczo6bXV0ZXgoKSk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNo
KENhbGxiYWNrKGZ1bmN0aW9uLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIHJlbW92ZVByaW1pdGl2
ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQp
CiB7CiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2
ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmlt
aXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNhbGxiYWNrcy5jYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
aWYgKGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uZnVuY3Rpb24gPT0gZnVuY3Rpb24KICAgICAgICAg
ICAgICYmIGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uYXJndW1lbnQgPT0gYXJndW1lbnQpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuY3BwCmluZGV4IDQ5NGEyYjU0Y2NjMTM4YTRkYWQwNWJmNjY4MTZjMzYz
N2Y1NGU3MTQuLjVlNGUyMzFkN2M4Y2MyNjdhNzZiMTYyNGIzMTQ1NTAwZTdiMTdmMzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKKysrIGIvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmNwcApAQCAtMjUsOSArMjUsMTEgQEAKIAogI2luY2x1ZGUgIkhlYXAu
aCIKIAorI2luY2x1ZGUgIkFyZW5hLmgiCiAjaW5jbHVkZSAiQXZhaWxhYmxlTWVtb3J5LmgiCiAj
aW5jbHVkZSAiQnVsa0RlY29tbWl0LmgiCiAjaW5jbHVkZSAiQnVtcEFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIkNQVS5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAiQ3J5cHRvUmFuZG9t
LmgiCiAjaW5jbHVkZSAiRGVidWdIZWFwLmgiCkBAIC02NSw2ICs2NywxOSBAQCBIZWFwOjpIZWFw
KEhlYXBLaW5kIGtpbmQsIExvY2tIb2xkZXImKQogICAgICAgICBtX2xhcmdlRnJlZS5hZGQoTGFy
Z2VSYW5nZShiYXNlLCBzaXplLCAwLCAwKSk7CiAgICAgfQogI2VuZGlmCisKKyAgICB1bnNpZ25l
ZCBjb3JlcyA9IG51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsKKyAgICBtX2NvcmVNYXNrID0gcm91
bmRVcFRvUG93ZXJPZlR3byhjb3JlcykgLSAxOworICAgIG1fY2FjaGUgPSBzdGF0aWNfY2FzdDxB
cHByb3hQZXJDUFVDYWNoZSo+KEFyZW5hOjpnZXQoKS0+YWxsb2NhdGUoc2l6ZW9mKEFwcHJveFBl
ckNQVUNhY2hlKSAqIGNvcmVzLCBhbGlnbm9mKEFwcHJveFBlckNQVUNhY2hlKSkpOworICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvcmVzOyArK2luZGV4KQorICAgICAgICBu
ZXcgKCZtX2NhY2hlW2luZGV4XSkgQXBwcm94UGVyQ1BVQ2FjaGUoaW5kZXgpOworCisgICAgc3Rh
dGljIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOworICAgIGtlcm5fcmV0
dXJuX3Qga3IgPSBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisgICAgQkFTU0VS
VChrciA9PSBLRVJOX1NVQ0NFU1MpOworICAgIEJBU1NFUlQodGltZWJhc2VJbmZvLmRlbm9tKTsK
KyAgICBCVU5VU0VEKGtyKTsKKyAgICBtX29uZVNlY29uZCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PigxLjAgKiAoMS4wZTkgKiB0aW1lYmFzZUluZm8uZGVub20pIC8gdGltZWJhc2VJbmZvLm51bWVy
KTsKICAgICAKICAgICBtX3NjYXZlbmdlciA9IFNjYXZlbmdlcjo6Z2V0KCk7CiB9CkBAIC0xMTcs
MTEgKzEzMiwzMiBAQCB2b2lkIEhlYXA6OmRlY29tbWl0TGFyZ2VSYW5nZShVbmlxdWVMb2NrSG9s
ZGVyJiwgTGFyZ2VSYW5nZSYgcmFuZ2UsIEJ1bGtEZWNvbW1pdAogfQogCiAjaWYgQlVTRShQQVJU
SUFMX1NDQVZFTkdFKQotdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2Nr
LCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQordm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVM
b2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQogI2Vsc2UK
LXZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0
JiBkZWNvbW1pdHRlciwgc2l6ZV90JiBkZWZlcnJlZERlY29tbWl0cykKK3ZvaWQgSGVhcDo6c2Nh
dmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgQnVsa0RlY29tbWl0JiBkZWNvbW1p
dHRlciwgc2l6ZV90JiBkZWZlcnJlZERlY29tbWl0cykKICNlbmRpZgogeworI2lmIDAKKyAgICB1
aW50NjRfdCB0aW1lID0gbWFjaF9hcHByb3hpbWF0ZV90aW1lKCk7CisgICAgZm9yIChhdXRvJiBw
ZXJDUFVDYWNoZSA6IG1fY2FjaGUpIHsKKyAgICAgICAgYXV0byogbGluZUNhY2hlID0gcGVyQ1BV
Q2FjaGUuZ2V0RmFzdENhc2UoKTsKKyAgICAgICAgaWYgKCFsaW5lQ2FjaGUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgLy8gRklYTUU6IFdpbGwgY2hhbmdlIGl0IHRvIGJlIHBlciBj
YWNoZS4KKyAgICAgICAgZm9yIChhdXRvJiBsaXN0IDogKmxpbmVDYWNoZSkgeworICAgICAgICAg
ICAgc2l6ZV90IHNpemVDbGFzcyA9ICZsaXN0IC0gJigqbGluZUNhY2hlKVswXTsKKyAgICAgICAg
ICAgIGZvciAoU21hbGxQYWdlKiBjdXJyZW50ID0gKmxpc3QuYmVnaW4oKTsgY3VycmVudCAhPSAq
bGlzdC5lbmQoKTspIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBuZXh0ID0gc3RhdGljX2Nhc3Q8
U21hbGxQYWdlKj4oY3VycmVudC0+bmV4dCk7CisgICAgICAgICAgICAgICAgaWYgKCh0aW1lIC0g
Y3VycmVudC0+bGFzdENoYWluZWQoKSkgPiBtX29uZVNlY29uZCkgeworICAgICAgICAgICAgICAg
ICAgICBMaXN0PFNtYWxsUGFnZT46OnJlbW92ZShjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5wdXNoKGN1cnJlbnQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgZm9yIChhdXRvJiBsaXN0IDogbV9mcmVlUGFnZXMp
IHsKICAgICAgICAgZm9yIChhdXRvKiBjaHVuayA6IGxpc3QpIHsKICAgICAgICAgICAgIGZvciAo
YXV0byogcGFnZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgewpAQCAtMTUwLDcgKzE4Niw3IEBAIHZv
aWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBk
ZWNvbW1pdHRlciwgc2l6ZV90JiBkCiAKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2NodW5rQ2Fj
aGUpIHsKICAgICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlYWxs
b2NhdGVTbWFsbENodW5rKGxvY2ssIGxpc3QucG9wKCksICZsaXN0IC0gJm1fY2h1bmtDYWNoZVsw
XSk7CisgICAgICAgICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhoZWFwTG9ja2VyLCBsaXN0LnBv
cCgpLCAmbGlzdCAtICZtX2NodW5rQ2FjaGVbMF0pOwogICAgIH0KIAogICAgIGZvciAoTGFyZ2VS
YW5nZSYgcmFuZ2UgOiBtX2xhcmdlRnJlZSkgewpAQCAtMTYzLDcgKzE5OSw3IEBAIHZvaWQgSGVh
cDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1p
dHRlciwgc2l6ZV90JiBkCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlm
Ci0gICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShsb2NrLCByYW5nZSwgZGVjb21taXR0ZXIpOwor
ICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UoaGVhcExvY2tlciwgcmFuZ2UsIGRlY29tbWl0dGVy
KTsKICAgICB9CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCkBAIC0xNzIsMjEgKzIwOCwy
MiBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNv
bW1pdCYgZGVjb21taXR0ZXIsIHNpemVfdCYgZAogfQogCiAjaWYgQlVTRShQQVJUSUFMX1NDQVZF
TkdFKQotdm9pZCBIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhVbmlxdWVMb2NrSG9sZGVy
JiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQordm9pZCBIZWFwOjpzY2F2ZW5nZVRv
SGlnaFdhdGVybWFyayhVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBCdWxrRGVjb21taXQm
IGRlY29tbWl0dGVyKQogewogICAgIHZvaWQqIG5ld0hpZ2hXYXRlck1hcmsgPSBudWxscHRyOwog
ICAgIGZvciAoTGFyZ2VSYW5nZSYgcmFuZ2UgOiBtX2xhcmdlRnJlZSkgewogICAgICAgICBpZiAo
cmFuZ2UuYmVnaW4oKSA8PSBtX2hpZ2hXYXRlcm1hcmspCiAgICAgICAgICAgICBuZXdIaWdoV2F0
ZXJNYXJrID0gc3RkOjptaW4obmV3SGlnaFdhdGVyTWFyaywgc3RhdGljX2Nhc3Q8dm9pZCo+KHJh
bmdlLmJlZ2luKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVjb21taXRMYXJnZVJh
bmdlKGxvY2ssIHJhbmdlLCBkZWNvbW1pdHRlcik7CisgICAgICAgICAgICBkZWNvbW1pdExhcmdl
UmFuZ2UoaGVhcExvY2tlciwgcmFuZ2UsIGRlY29tbWl0dGVyKTsKICAgICB9CiAgICAgbV9oaWdo
V2F0ZXJtYXJrID0gbmV3SGlnaFdhdGVyTWFyazsKIH0KICNlbmRpZgogCi12b2lkIEhlYXA6OmRl
YWxsb2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYgbGluZUNhY2hl
KQordm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKExpbmVDYWNoZSYgbGluZUNhY2hlKQog
eworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihtdXRleCgpKTsKICAgICBmb3IgKGF1
dG8mIGxpc3QgOiBsaW5lQ2FjaGUpIHsKICAgICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9ICZsaXN0IC0gJmxpbmVDYWNoZVswXTsK
QEAgLTE5NSw3ICsyMzIsNyBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoVW5pcXVl
TG9ja0hvbGRlciYsIExpbmVDYWNoZSYgbGluZUNhY2hlKQogICAgIH0KIH0KIAotdm9pZCBIZWFw
OjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHBhZ2VD
bGFzcywgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCit2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVu
ayhVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJl
QWN0aW9uIGFjdGlvbikKIHsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZCht
X2tpbmQpKTsKICAgICAKQEAgLTIwNSw3ICsyNDIsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21h
bGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJl
QQogICAgICAgICBpZiAoIW1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBtX2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5wb3AoKTsKIAotICAgICAgICB2
b2lkKiBtZW1vcnkgPSBhbGxvY2F0ZUxhcmdlKGxvY2ssIGNodW5rU2l6ZSwgY2h1bmtTaXplLCBh
Y3Rpb24pOworICAgICAgICB2b2lkKiBtZW1vcnkgPSBhbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIs
IGNodW5rU2l6ZSwgY2h1bmtTaXplLCBhY3Rpb24pOwogICAgICAgICBpZiAoIW1lbW9yeSkgewog
ICAgICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxMyw3ICsyNTAsNyBAQCB2b2lkIEhl
YXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgcGFn
ZUNsYXNzLCBGYWlsdXJlQQogCiAgICAgICAgIENodW5rKiBjaHVuayA9IG5ldyAobWVtb3J5KSBD
aHVuayhwYWdlU2l6ZSk7CiAKLSAgICAgICAgbV9vYmplY3RUeXBlcy5zZXQobG9jaywgY2h1bmss
IE9iamVjdFR5cGU6OlNtYWxsKTsKKyAgICAgICAgbV9vYmplY3RUeXBlcy5zZXQoaGVhcExvY2tl
ciwgY2h1bmssIE9iamVjdFR5cGU6OlNtYWxsKTsKIAogICAgICAgICBzaXplX3QgYWNjb3VudGVk
SW5GcmVlYWJsZSA9IDA7CiAgICAgICAgIGZvckVhY2hQYWdlKGNodW5rLCBwYWdlU2l6ZSwgWyZd
KFNtYWxsUGFnZSogcGFnZSkgewpAQCAtMjIxLDcgKzI1OCw4IEBAIHZvaWQgSGVhcDo6YWxsb2Nh
dGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZh
aWx1cmVBCiAjaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNl
dFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogI2VuZGlmCi0gICAgICAgICAgICBwYWdlLT5zZXRI
YXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CisgICAgICAgICAgICBwYWdlLT5pbml0SGFzRnJlZUxp
bmVzKCk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGZh
bHNlKTsKICAgICAgICAgICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwogICAgICAg
ICAgICAgYWNjb3VudGVkSW5GcmVlYWJsZSArPSBwYWdlU2l6ZTsKICAgICAgICAgfSk7CkBAIC0y
NDQsOSArMjgyLDkgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hv
bGRlciYgbG9jaywgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUEKICAgICAgICAgbV9mcmVlUGFn
ZXNbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21h
bGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBDaHVuayogY2h1bmssIHNpemVfdCBwYWdl
Q2xhc3MpCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXIm
IGhlYXBMb2NrZXIsIENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKIHsKLSAgICBtX29i
amVjdFR5cGVzLnNldChsb2NrLCBjaHVuaywgT2JqZWN0VHlwZTo6TGFyZ2UpOworICAgIG1fb2Jq
ZWN0VHlwZXMuc2V0KGhlYXBMb2NrZXIsIGNodW5rLCBPYmplY3RUeXBlOjpMYXJnZSk7CiAgICAg
CiAgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVkLnJlbW92ZShjaHVuayk7CiAgICAg
c2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplID0gc2l6ZTsKQEAgLTI3MCwyMyArMzA4LDM2IEBAIHZv
aWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQ2h1
bmsqIGNodW5rLCBzaXplX3QgcGFnCiAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoY2h1
bmssIHNpemUsIHN0YXJ0UGh5c2ljYWxTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSkpOwogfQogCi1T
bWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFj
dGlvbikKK1NtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVMb2NrZWRTbWFsbFBhZ2Uoc2l6ZV90IHNp
emVDbGFzcywgQXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFj
dGlvbikKIHsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVIZWFwS2luZChtX2tpbmQpKTsK
IAotICAgIGlmICghbGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbGluZUNhY2hlW3NpemVDbGFzc10ucG9wRnJvbnQoKTsKKyAgICBib29sIGlzRW1wdHkgPSBm
YWxzZTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbJl0oKSAtPiBTbWFsbFBhZ2UqIHsKKyAgICAg
ICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBjYWNoZUxvY2tlcihwZXJDUFVDYWNoZS5tdXRl
eCgpKTsKKyAgICAgICAgICAgIExpbmVDYWNoZSYgbGluZUNhY2hlID0gcGVyQ1BVQ2FjaGUubGlu
ZUNhY2hlKGNhY2hlTG9ja2VyKTsKKyAgICAgICAgICAgIGlmICghbGluZUNhY2hlW3NpemVDbGFz
c10uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byogcGFnZSA9IGxpbmVDYWNoZVtz
aXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExv
Y2tlcihtdXRleCgpKTsKKyAgICAgICAgaWYgKCFtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgYXV0byogcGFnZSA9IG1fbGluZUNhY2hlW3NpemVDbGFzc10u
cG9wRnJvbnQoKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24odHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgfQogCi0gICAgaWYg
KCFtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbGlu
ZUNhY2hlW3NpemVDbGFzc10ucG9wRnJvbnQoKTsKKyAgICAgICAgbV9zY2F2ZW5nZXItPmRpZFN0
YXJ0R3Jvd2luZygpOwogCi0gICAgbV9zY2F2ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOwotICAg
IAotICAgIFNtYWxsUGFnZSogcGFnZSA9IFsmXSgpIC0+IFNtYWxsUGFnZSogeworICAgICAgICBp
c0VtcHR5ID0gdHJ1ZTsKICAgICAgICAgc2l6ZV90IHBhZ2VDbGFzcyA9IG1fY29uc3RhbnRzLnBh
Z2VDbGFzcyhzaXplQ2xhc3MpOwotICAgICAgICAKKwogICAgICAgICBpZiAobV9mcmVlUGFnZXNb
cGFnZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsobG9j
aywgcGFnZUNsYXNzLCBhY3Rpb24pOworICAgICAgICAgICAgYWxsb2NhdGVTbWFsbENodW5rKGhl
YXBMb2NrZXIsIHBhZ2VDbGFzcywgYWN0aW9uKTsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBGYWls
dXJlQWN0aW9uOjpSZXR1cm5OdWxsICYmIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10uaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxNCw3NiArMzY1LDEyNyBAQCBT
bWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IHNpemVfdCBzaXplQ2xhc3MsIExpbgogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAg
ICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogI2VuZGlmCi0KKyAgICAgICAg
cGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKICAgICAgICAgcmV0dXJu
IHBhZ2U7CiAgICAgfSgpOworCiAgICAgaWYgKCFwYWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKKyAgICBpZiAoaXNFbXB0eSkgeworICAgICAgICBNdXRleCogaGVsZExvY2sg
PSBudWxscHRyOworICAgICAgICBwYWdlLT5sb2NrQW5kVHJ5VG9UYWtlQmlhcygmaGVsZExvY2ss
ICZwZXJDUFVDYWNoZS5wYWdlTXV0ZXgoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBhZ2UtPmxv
Y2soKTsKICAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsKICAgICByZXR1cm4gcGFn
ZTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXIm
IGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQordm9pZCBIZWFwOjpk
ZWFsbG9jYXRlU21hbGxMaW5lKFNtYWxsUGFnZSogcGFnZSwgT2JqZWN0IG9iamVjdCwgQXBwcm94
UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKQogewotICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCkt
PnJlZkNvdW50KGxvY2spKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwot
ICAgIHBhZ2UtPmRlcmVmKGxvY2spOwotCi0gICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9j
aykpIHsKLSAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwotICAgICAg
ICBsaW5lQ2FjaGVbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAgQlVOVVNFRChv
YmplY3QpOworICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKTsKKyAg
ICBwYWdlLT5kZXJlZigpOworCisgICAgYm9vbCBjb21wbGV0ZWx5RmxvYXRpbmdQYWdlID0gZmFs
c2U7CisgICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMoKSkgeworICAgICAgICBwYWdlLT5zZXRI
YXNGcmVlTGluZXModHJ1ZSk7CisgICAgICAgIC8vIHBhZ2UtPmlzT25MaXN0KCkgY2FuIGJlIGNo
YW5nZWQgZnJvbSB0cnVlIHRvIGZhbHNlIHdpdGhvdXQgdGFraW5nIGEgcGFnZS1sb2NrLgorICAg
ICAgICAvLyBCdXQgZmFsc2UgdG8gdHJ1ZSB0cmFuc2l0aW9uIGhhcHBlbnMgb25seSB3aGVuIHRo
ZW4gcGFnZS1sb2NrIGlzIGhlbGQuCisgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkp
OworICAgICAgICBpZiAocGFnZS0+cmVmQ291bnQoKSkgeworICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIocGVyQ1BVQ2FjaGUubXV0ZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChwYWdlLT5p
bml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBTb21lIGZyZWUgbGluZXMgZXhpc3QsIGJ1dCB0aGUgcGFnZSBpcyBub3Qg
Y2hhaW5lZCB0byBhbnkgdGhyZWFkJ3MgTGluZUNhY2hlLgorICAgICAgICAgICAgLy8gTGV0J3Mg
Y2hhaW4gaXQgdG8gdGhlIGN1cnJlbnQgZnJlZWluZyB0aHJlYWQncyBMaW5lQ2FjaGUgZm9yIHJl
dXNpbmcuCisgICAgICAgICAgICBwZXJDUFVDYWNoZS5saW5lQ2FjaGUobG9ja2VyKVtwYWdlLT5z
aXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldENhY2hlKCZwZXJD
UFVDYWNoZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29tcGxl
dGVseUZsb2F0aW5nUGFnZSA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKHBhZ2UtPnJlZkNvdW50
KGxvY2spKQorICAgIGlmIChwYWdlLT5yZWZDb3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFz
cygpKTsKKyAgICBhdXRvIHJldHVyblNtYWxsUGFnZSA9IFsmXShVbmlxdWVMb2NrSG9sZGVyJiBo
ZWFwTG9ja2VyKSB7CisgICAgICAgIHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdl
Q2xhc3MocGFnZS0+c2l6ZUNsYXNzKCkpOwogCi0gICAgbV9mcmVlYWJsZU1lbW9yeSArPSBwaHlz
aWNhbFBhZ2VTaXplU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VD
bGFzcykpOworICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHBoeXNpY2FsUGFnZVNpemVTbG9w
cHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CiAKLSAgICBM
aXN0PFNtYWxsUGFnZT46OnJlbW92ZShwYWdlKTsgLy8gJ3BhZ2UnIG1heSBiZSBpbiBhbnkgdGhy
ZWFkJ3MgbGluZSBjYWNoZS4KLSAgICAKLSAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBh
Z2UpOwotICAgIGlmIChjaHVuay0+ZnJlZVBhZ2VzKCkuaXNFbXB0eSgpKQotICAgICAgICBtX2Zy
ZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmspOwotICAgIGNodW5rLT5mcmVlUGFnZXMoKS5w
dXNoKHBhZ2UpOworICAgICAgICBpZiAocGFnZS0+aXNPbkxpc3QoKSkKKyAgICAgICAgICAgIExp
c3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBC
QVNTRVJUKGNvbXBsZXRlbHlGbG9hdGluZ1BhZ2UpOworICAgICAgICBwYWdlLT5zZXRDYWNoZShu
dWxscHRyKTsKIAotICAgIGNodW5rLT5kZXJlZigpOworICAgICAgICBDaHVuayogY2h1bmsgPSBD
aHVuazo6Z2V0KHBhZ2UpOworICAgICAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CisgICAg
ICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwogCi0gICAgaWYgKCFjaHVuay0+cmVm
Q291bnQoKSkgewotICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnJlbW92ZShjaHVuayk7
CisgICAgICAgIGNodW5rLT5kZXJlZigpOwogCi0gICAgICAgIGlmICghbV9jaHVua0NhY2hlW3Bh
Z2VDbGFzc10uaXNFbXB0eSgpKQotICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsobG9j
aywgbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10ucG9wKCksIHBhZ2VDbGFzcyk7CisgICAgICAgIGlm
ICghY2h1bmstPnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFz
c10ucmVtb3ZlKGNodW5rKTsKKworICAgICAgICAgICAgaWYgKCFtX2NodW5rQ2FjaGVbcGFnZUNs
YXNzXS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVh
cExvY2tlciwgbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10ucG9wKCksIHBhZ2VDbGFzcyk7CiAKLSAg
ICAgICAgbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CisgICAgICAgICAgICBt
X2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHBhZ2VTaXplKHBhZ2VDbGFzcykpOworICAg
IH07CisKKyAgICAvLyBDYWNoZSBwb2ludGVyIGlzIHVwZGF0ZWQgd2hlbiBhIHBhZ2UgaXMgbG9j
a2VkLiBTaW5jZSB3ZSBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHBhZ2UncyBsb2NrLCB0aGVy
ZSBhcmUgZm91ciBjYXNlcy4KKyAgICAvLworICAgIC8vICAgICAxLiBDYWNoZSBwb2ludGVyIGlz
IG5vbiBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMgYWN0dWFsbHkgY2hhaW5lZC4KKyAgICAvLyAg
ICAgMi4gQ2FjaGUgcG9pbnRlciBpcyBub24gbnVsbHB0ciwgYW5kIHRoZSBwYWdlIGlzIGp1c3Qg
YWZ0ZXIgdW4tY2hhaW5lZCBmcm9tIHRoZSBjYWNoZS4KKyAgICAvLyAgICAgMy4gQ2FjaGUgcG9p
bnRlciBpcyBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMgbm90IGNoYWluZWQuCisgICAgLy8gICAg
IDQuIENhY2hlIHBvaW50ZXIgaXMgbnVsbHB0ciwgYW5kIHRoZSBwYWdlIGlzIGNoYWluZWQgdG8g
dGhlIGdsb2JhbCBjYWNoZS4KKyAgICAvLworICAgIC8vIEZvciAoMSkgb3IgKDIpIGNhc2VzLCBq
dXN0IHRha2luZyBhIGxvY2sgb2YgY2FjaGUgaXMgZmluZS4gQW5kIGFmdGVyIHRoYXQsIHdlIGNh
biBjaGVjayBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uIGZsYWcgd2hpY2ggdGVsbHMgd2hldGhl
ciB0aGlzIGlzICgxKSBvciAoMikuCisgICAgLy8gRm9yICgzKSBvciAoNCkgY2FzZXMsIGp1c3Qg
dGFraW5nIGEgaGVhcCBsb2NrIGlzIGZpbmUuIEFuZCBhZnRlciB0aGF0LCB3ZSBjYW4gY2hlY2sg
aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbiBmbGFnIHdoaWNoIHRlbGxzIHdoZXRoZXIgdGhpcyBp
cyAoMykgb3IgKDQpLgorICAgIEFwcHJveFBlckNQVUNhY2hlKiBjYWNoZSA9IHBhZ2UtPmNhY2hl
KCk7CisgICAgaWYgKGNhY2hlKSB7CisgICAgICAgIExvY2tIb2xkZXIgY2FjaGVMb2NrZXIoY2Fj
aGUtPm11dGV4KCkpOworICAgICAgICBpZiAocGFnZS0+aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBM
b2NrZXIobXV0ZXgoKSk7CisgICAgICAgIHJldHVyblNtYWxsUGFnZShoZWFwTG9ja2VyKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIobXV0ZXgoKSk7
CisgICAgICAgIGlmIChwYWdlLT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVyblNtYWxsUGFnZShoZWFwTG9ja2VyKTsKICAgICB9
Ci0gICAgCi0gICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHBhZ2VTaXplKHBhZ2VDbGFzcykpOwog
fQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKLSAgICBV
bmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxvY2F0
b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGluZUNhY2hl
JiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQordm9pZCBIZWFwOjphbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVyQ1BVQ2FjaGUm
IHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBCVU5VU0VEKGFjdGlv
bik7CiAgICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAKLSAg
ICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBzaXplQ2xhc3MsIGxp
bmVDYWNoZSwgYWN0aW9uKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZUxvY2tlZFNt
YWxsUGFnZShzaXplQ2xhc3MsIHBlckNQVUNhY2hlLCBhY3Rpb24pOwogICAgIGlmICghcGFnZSkg
ewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOwor
ICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOworCiAgICAgU21hbGxMaW5lKiBsaW5lcyA9
IHBhZ2UtPmJlZ2luKCk7Ci0gICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpOwor
ICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKCkpOwogCiAgICAgYXV0byBmaW5kU21hbGxC
dW1wUmFuZ2UgPSBbJl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CiAgICAgICAgIGZvciAoIDsgbGlu
ZU51bWJlciA8IG1fY29uc3RhbnRzLnNtYWxsTGluZUNvdW50KCk7ICsrbGluZU51bWJlcikgewot
ICAgICAgICAgICAgaWYgKCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkgeworICAg
ICAgICAgICAgaWYgKCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChwYWdlKSkgewogICAgICAg
ICAgICAgICAgIGlmIChtX2NvbnN0YW50cy5vYmplY3RDb3VudChzaXplQ2xhc3MsIGxpbmVOdW1i
ZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAg
LTM5Niw3ICs0OTgsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRh
ZGF0YSgKICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSAwOwogICAgICAgICAK
ICAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgbV9jb25zdGFudHMuc21hbGxMaW5lQ291bnQo
KTsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVm
Q291bnQobG9jaykpCisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQo
cGFnZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGF1dG8gbGluZU9i
amVjdENvdW50ID0gbV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5lTnVtYmVy
KTsKQEAgLTQwNCw4ICs1MDYsOCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlNZXRhZGF0YSgKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgb2Jq
ZWN0Q291bnQgKz0gbGluZU9iamVjdENvdW50OwotICAgICAgICAgICAgbGluZXNbbGluZU51bWJl
cl0ucmVmKGxvY2ssIGxpbmVPYmplY3RDb3VudCk7Ci0gICAgICAgICAgICBwYWdlLT5yZWYobG9j
ayk7CisgICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYocGFnZSwgbGluZU9iamVjdENv
dW50KTsKKyAgICAgICAgICAgIHBhZ2UtPnJlZigpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biB7IGJlZ2luLCBvYmplY3RDb3VudCB9OwogICAgIH07CkBAIC00MTMsMTUgKzUxNSwyNiBAQCB2
b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICBzaXplX3Qg
bGluZU51bWJlciA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoIWZpbmRTbWFsbEJ1
bXBSYW5nZShsaW5lTnVtYmVyKSkgewotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVz
KGxvY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhmYWxzZSk7
CisgICAgICAgICAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKICAgICAgICAgICAgIEJB
U1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNh
bkFsbG9jYXRlKCkpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRDYWNoZShudWxscHRyKTsKKyAgICAg
ICAgICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQg
bm90IGZpdCBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSBy
YW5nZUNhY2hlLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3Nd
LnB1c2gocGFnZSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIocGVyQ1BVQ2FjaGUubXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgcGVyQ1BVQ2FjaGUu
bGluZUNhY2hlKGxvY2tlcilbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgICAg
IHBhZ2UtPnNldENhY2hlKCZwZXJDUFVDYWNoZSk7CisgICAgICAgICAgICAgICAgQkFTU0VSVChw
YWdlLT5pc09uTGlzdCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJBU1NFUlQoYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFsbG9jYXRl
KCkpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxz
ZSk7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC00MzMsMjUgKzU0NiwyNCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6YWxsb2NhdGVTbWFs
bEJ1bXBSYW5nZXNCeU9iamVjdCgKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qg
c2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUm
IHJhbmdlQ2FjaGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0
aW9uKQordm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KHNpemVfdCBz
aXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdl
Q2FjaGUsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rp
b24pCiB7CiAgICAgQlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2
ZUhlYXBLaW5kKG1fa2luZCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhbGxvY2F0b3Iuc2l6ZSgp
OwotICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFz
cywgbGluZUNhY2hlLCBhY3Rpb24pOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlTG9j
a2VkU21hbGxQYWdlKHNpemVDbGFzcywgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CiAgICAgaWYgKCFw
YWdlKSB7CiAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51
bGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxp
bmVzKGxvY2spKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOworICAgIEJBU1NFUlQo
IXBhZ2UtPmlzT25MaXN0KCkpOworICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKCkpOwog
CiAgICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oT2JqZWN0JiBpdCwgT2JqZWN0JiBl
bmQpIHsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkg
ewotICAgICAgICAgICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQorICAgICAgICAg
ICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KHBhZ2UpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ2MSwxMiArNTcz
LDEyIEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKICAgICAg
ICAgY2hhciogYmVnaW4gPSBpdC5hZGRyZXNzKCk7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9i
amVjdENvdW50ID0gMDsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9IGl0
ICsgc2l6ZSkgewotICAgICAgICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQobG9jaykpCisg
ICAgICAgICAgICBpZiAoaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgKytvYmplY3RDb3VudDsKLSAgICAgICAgICAgIGl0Lmxp
bmUoKS0+cmVmKGxvY2spOwotICAgICAgICAgICAgaXQucGFnZSgpLT5yZWYobG9jayk7CisgICAg
ICAgICAgICBpdC5saW5lKCktPnJlZihwYWdlKTsKKyAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVm
KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHsgYmVnaW4sIG9iamVjdENvdW50IH07CiAg
ICAgfTsKQEAgLTQ3NSwxNSArNTg3LDI2IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXNCeU9iamVjdCgKICAgICBPYmplY3QgZW5kKGl0ICsgcGFnZVNpemUobV9jb25zdGFudHMu
cGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKSkpOwogICAgIGZvciAoOzspIHsKICAgICAgICAg
aWYgKCFmaW5kU21hbGxCdW1wUmFuZ2UoaXQsIGVuZCkpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNl
dEhhc0ZyZWVMaW5lcyhsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVl
TGluZXMoZmFsc2UpOworICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CiAg
ICAgICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8
IGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxp
emluZ0ZvckFsbG9jYXRpb24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUobnVs
bHB0cik7CisgICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZyZWUg
cmFuZ2VzIG1pZ2h0IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBpZiAocmFuZ2VDYWNo
ZS5zaXplKCkgPT0gcmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQ2Fj
aGVbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAgICAgICAg
IHBlckNQVUNhY2hlLmxpbmVDYWNoZShsb2NrZXIpW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAg
ICAgICAgICAgICAgICBwYWdlLT5zZXRDYWNoZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAg
ICAgIEJBU1NFUlQocGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRv
ci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFs
bG9jYXRpb24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNDk1LDcgKzYxOCw3IEBAIHZvaWQgSGVhcDo6YWxs
b2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKICAgICB9CiB9CiAKLUxhcmdlUmFuZ2UgSGVh
cDo6c3BsaXRBbmRBbGxvY2F0ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBMYXJnZVJhbmdlJiBy
YW5nZSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitMYXJnZVJhbmdlIEhlYXA6OnNw
bGl0QW5kQWxsb2NhdGUoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgTGFyZ2VSYW5nZSYg
cmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIFJFTEVBU0VfQkFT
U0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCkBAIC01MzcsMTMgKzY2MCwxMyBAQCBM
YXJnZVJhbmdlIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywg
TGFyZ2VSYW5nZSYgcmFuZ2UsIHNpegogICAgICAgICBtX2xhcmdlRnJlZS5hZGQobmV4dCk7CiAg
ICAgfQogCi0gICAgbV9vYmplY3RUeXBlcy5zZXQobG9jaywgQ2h1bms6OmdldChyYW5nZS5iZWdp
bigpKSwgT2JqZWN0VHlwZTo6TGFyZ2UpOworICAgIG1fb2JqZWN0VHlwZXMuc2V0KGhlYXBMb2Nr
ZXIsIENodW5rOjpnZXQocmFuZ2UuYmVnaW4oKSksIE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAg
IG1fbGFyZ2VBbGxvY2F0ZWQuc2V0KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CiAgICAg
cmV0dXJuIHJhbmdlOwogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9u
IGFjdGlvbikKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgaGVh
cExvY2tlciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIEZhaWx1cmVBY3Rpb24gYWN0
aW9uKQogewogI2RlZmluZSBBU1NFUlRfT1JfUkVUVVJOX09OX0ZBSUxVUkUoY29uZCkgZG8geyBc
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2gpIFwKQEAgLTU3MCw5
ICs2OTMsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxv
Y2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLAogICAgIExhcmdlUmFuZ2UgcmFuZ2Ug
PSBtX2xhcmdlRnJlZS5yZW1vdmUoYWxpZ25tZW50LCBzaXplKTsKICAgICBpZiAoIXJhbmdlKSB7
CiAgICAgICAgIGlmIChtX2hhc1BlbmRpbmdEZWNvbW1pdHMpIHsKLSAgICAgICAgICAgIG1fY29u
ZGl0aW9uLndhaXQobG9jaywgWyZdKCkgeyByZXR1cm4gIW1faGFzUGVuZGluZ0RlY29tbWl0czsg
fSk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KGhlYXBMb2NrZXIsIFsmXSgpIHsgcmV0
dXJuICFtX2hhc1BlbmRpbmdEZWNvbW1pdHM7IH0pOwogICAgICAgICAgICAgLy8gTm93IHdlJ3Jl
IGd1YXJhbnRlZWQgd2UncmUgbG9va2luZyBhdCBhbGwgYXZhaWxhYmxlIG1lbW9yeS4KLSAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgYWN0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIGFsaWdubWVu
dCwgc2l6ZSwgYWN0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVF9PUl9SRVRVUk5f
T05fRkFJTFVSRSghdXNpbmdHaWdhY2FnZSgpKTsKQEAgLTU4Niw3ICs3MDksNyBAQCB2b2lkKiBI
ZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplLAogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSByYW5nZS50b3RhbFBo
eXNpY2FsU2l6ZSgpOwogCi0gICAgdm9pZCogcmVzdWx0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2Nr
LCByYW5nZSwgYWxpZ25tZW50LCBzaXplKS5iZWdpbigpOworICAgIHZvaWQqIHJlc3VsdCA9IHNw
bGl0QW5kQWxsb2NhdGUoaGVhcExvY2tlciwgcmFuZ2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4o
KTsKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3Rk
OjptYXgobV9oaWdoV2F0ZXJtYXJrLCByZXN1bHQpOwogI2VuZGlmCkBAIC02MjYsMTMgKzc0OSwx
MyBAQCBzaXplX3QgSGVhcDo6bGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBvYmpl
Y3QpCiAgICAgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0ZWQuZ2V0KG9iamVjdCk7CiB9CiAKLXZvaWQg
SGVhcDo6c2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgY29uc3QgUmFuZ2UmIG9i
amVjdCwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tI
b2xkZXImIGhlYXBMb2NrZXIsIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQog
ewogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwogCiAgICAgc2l6ZV90IHNp
emUgPSBtX2xhcmdlQWxsb2NhdGVkLnJlbW92ZShvYmplY3QuYmVnaW4oKSk7CiAgICAgTGFyZ2VS
YW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplKTsKLSAgICBzcGxpdEFu
ZEFsbG9jYXRlKGxvY2ssIHJhbmdlLCBhbGlnbm1lbnQsIG5ld1NpemUpOworICAgIHNwbGl0QW5k
QWxsb2NhdGUoaGVhcExvY2tlciwgcmFuZ2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CiAKICAgICBt
X3NjYXZlbmdlci0+c2NoZWR1bGUoc2l6ZSk7CiB9CkBAIC02NDcsOCArNzcwLDggQEAgdm9pZCBI
ZWFwOjpkZWFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkKIAog
dm9pZCBIZWFwOjpleHRlcm5hbENvbW1pdCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKQogewotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICBleHRlcm5hbENvbW1p
dChsb2NrLCBwdHIsIHNpemUpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFw
OjptdXRleCgpKTsKKyAgICBleHRlcm5hbENvbW1pdChoZWFwTG9ja2VyLCBwdHIsIHNpemUpOwog
fQogCiB2b2lkIEhlYXA6OmV4dGVybmFsQ29tbWl0KFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBw
dHIsIHNpemVfdCBzaXplKQpAQCAtNjYzLDggKzc4Niw4IEBAIHZvaWQgSGVhcDo6ZXh0ZXJuYWxD
b21taXQoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCiAKIHZvaWQg
SGVhcDo6ZXh0ZXJuYWxEZWNvbW1pdCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKQogewotICAgIFVu
aXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICBleHRlcm5hbERlY29tbWl0
KGxvY2ssIHB0ciwgc2l6ZSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6
Om11dGV4KCkpOworICAgIGV4dGVybmFsRGVjb21taXQoaGVhcExvY2tlciwgcHRyLCBzaXplKTsK
IH0KIAogdm9pZCBIZWFwOjpleHRlcm5hbERlY29tbWl0KFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lk
KiBwdHIsIHNpemVfdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAppbmRleCA1NDlkZDI0ZjZjNTg5
NjQ2Y2QyMjYwNGQ4YzliNDllZjBjNzQ1MDQzLi43NTc0ZGMwNTMwNmFlZDE0YTM0NGU5MDE2ODcw
MmYyZThmNGRhMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAor
KysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaApAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcHByb3hQZXJDUFVDYWNo
ZS5oIgogI2luY2x1ZGUgIkJ1bXBSYW5nZS5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVk
ZSAiRmFpbHVyZUFjdGlvbi5oIgpAQCAtNjIsMTAgKzYzLDkgQEAgY2xhc3MgSGVhcCB7CiAgICAg
CiAgICAgSGVhcEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAotICAg
IHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBz
aXplQ2xhc3MsCi0gICAgICAgIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVD
YWNoZSYsIEZhaWx1cmVBY3Rpb24pOwotICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoVW5pcXVlTG9j
a0hvbGRlciYsIE9iamVjdCwgTGluZUNhY2hlJik7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTGluZUNh
Y2hlKFVuaXF1ZUxvY2tIb2xkZXImLCBMaW5lQ2FjaGUmKTsKKyAgICB2b2lkIGFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzKHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VD
YWNoZSYsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAgdm9pZCBkZXJl
ZlNtYWxsTGluZShNdXRleCoqLCBPYmplY3QsIEFwcHJveFBlckNQVUNhY2hlJik7CisgICAgdm9p
ZCBkZWFsbG9jYXRlTGluZUNhY2hlKExpbmVDYWNoZSYpOwogCiAgICAgdm9pZCogYWxsb2NhdGVM
YXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBGYWlsdXJl
QWN0aW9uKTsKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9p
ZCopOwpAQCAtOTIsNiArOTIsMTUgQEAgY2xhc3MgSGVhcCB7CiAKICAgICB2b2lkIG1hcmtBbGxM
YXJnZUFzRWxpZ2liaWxlKGNvbnN0IExvY2tIb2xkZXImKTsKIAorICAgIEFwcHJveFBlckNQVUNh
Y2hlJiBnZXRDdXJyZW50Q1BVQ2FjaGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVb
Y3VycmVudENQVUluZGV4KCkgJiBtX2NvcmVNYXNrXTsKKyAgICB9CisgICAgdWludDY0X3Qgb25l
U2Vjb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29uZVNlY29uZDsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgdm9pZCBkZWNvbW1pdExhcmdlUmFuZ2UoVW5pcXVlTG9ja0hvbGRl
ciYsIExhcmdlUmFuZ2UmLCBCdWxrRGVjb21taXQmKTsKIApAQCAtMTA5LDEzICsxMTgsMTEgQEAg
Y2xhc3MgSGVhcCB7CiAgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyKCk7IC8vIE1heSBjcmFzaCBp
ZiAhdXNpbmdHaWdhY2FnZSgpLgogICAgIHNpemVfdCBnaWdhY2FnZVNpemUoKTsKIAotICAgIHZv
aWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKFVuaXF1ZUxvY2tIb2xkZXImLAot
ICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUm
LCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlPYmplY3QoVW5pcXVlTG9ja0hvbGRlciYsCi0gICAgICAgIHNpemVfdCBzaXplQ2xh
c3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIExpbmVDYWNoZSYsIEZhaWx1cmVB
Y3Rpb24pOworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVf
dCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIEFwcHJveFBlckNQ
VUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
c0J5T2JqZWN0KHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNo
ZSYsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CiAKLSAgICBTbWFsbFBhZ2Uq
IGFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUNsYXNzLCBM
aW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUo
VW5pcXVlTG9ja0hvbGRlciYsIE9iamVjdCwgTGluZUNhY2hlJik7CisgICAgU21hbGxQYWdlKiBh
bGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBBcHByb3hQZXJDUFVDYWNo
ZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShTbWFsbFBh
Z2UqLCBPYmplY3QsIEFwcHJveFBlckNQVUNhY2hlJik7CiAKICAgICB2b2lkIGFsbG9jYXRlU21h
bGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUFjdGlv
bik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiwgQ2h1
bmsqLCBzaXplX3QgcGFnZUNsYXNzKTsKQEAgLTE0Myw2ICsxNTAsMTAgQEAgY2xhc3MgSGVhcCB7
CiAgICAgc2l6ZV90IG1fZm9vdHByaW50IHsgMCB9OwogICAgIHNpemVfdCBtX2ZyZWVhYmxlTWVt
b3J5IHsgMCB9OwogCisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIG1fY2FjaGUgeyBudWxscHRyIH07
CisgICAgdW5zaWduZWQgbV9jb3JlTWFzayB7IDAgfTsKKyAgICB1aW50NjRfdCBtX29uZVNlY29u
ZCB7IDAgfTsKKwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICBQaHlzaWNhbFBh
Z2VNYXAgbV9waHlzaWNhbFBhZ2VNYXA7CiAjZW5kaWYKQEAgLTE1MiwyMSArMTYzLDIxIEBAIGNs
YXNzIEhlYXAgewogI2VuZGlmCiB9OwogCi1pbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlcygKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNz
LAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2Fj
aGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQoraW5s
aW5lIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywg
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBw
cm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAg
ICBpZiAoc2l6ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQotICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKGxvY2ssIHNpemVD
bGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUsIGFjdGlvbik7Ci0gICAgcmV0
dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QobG9jaywgc2l6ZUNsYXNzLCBhbGxv
Y2F0b3IsIHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YShzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFu
Z2VDYWNoZSwgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CisgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzQnlPYmplY3Qoc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2FjaGUsIHBlckNQ
VUNhY2hlLCBhY3Rpb24pOwogfQogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShV
bmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNo
ZSkKK2lubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKE11dGV4KiogaGVsZExvY2ssIE9i
amVjdCBvYmplY3QsIEFwcHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSkKIHsKLSAgICBpZiAo
IW9iamVjdC5saW5lKCktPmRlcmVmKGxvY2spKQorICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVj
dC5wYWdlKCk7CisgICAgcGFnZS0+c3dpdGNoTG9jayhoZWxkTG9jayk7CisgICAgQkFTU0VSVChw
YWdlLT5pc0xvY2tlZCgpKTsKKyAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVmKHBhZ2UpKQog
ICAgICAgICByZXR1cm47Ci0gICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBvYmplY3QsIGxp
bmVDYWNoZSk7CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShwYWdlLCBvYmplY3QsIHBlckNQVUNh
Y2hlKTsKIH0KIAogaW5saW5lIGJvb2wgSGVhcDo6aXNMYXJnZSh2b2lkKiBvYmplY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpc3QuaCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvTGlzdC5oCmluZGV4IDYzOWVkYzllNGY2ZWNiMzNhM2ZmYmNlNTMxMzBkMjJiMjk4YWMy
YTYuLjNkYTc1YjMyMmM0MjE3NzQ4MDQ0YmZkMTQ0MWJmMDQwMmY1Mzk1NzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvTGlzdC5oCkBAIC0zMiw2ICszMiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0
IExpc3ROb2RlIHsKICAgICBMaXN0Tm9kZTxUPiogcHJldiB7IG51bGxwdHIgfTsKICAgICBMaXN0
Tm9kZTxUPiogbmV4dCB7IG51bGxwdHIgfTsKKworICAgIGJvb2wgaXNPbkxpc3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQkFTU0VSVCghIXByZXYgPT0gISFuZXh0KTsKKyAgICAgICAgcmV0dXJu
ICEhcHJldjsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9N
dXRleC5oCmluZGV4IGY0Y2MyYWE0MTFjOTI4MzIyMTI5MWNhODU4MDIwZDMwMThhYTIzYWQuLmJl
NmEzZjFiYzFiOTNkMmEzNmZhNDhkODJhMThhMGM5ZWU0MWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011
dGV4LmgKQEAgLTQ4LDkgKzQ4LDEyIEBAIGNsYXNzIE11dGV4IHsKICAgICBib29sIHRyeV9sb2Nr
KCk7CiAgICAgdm9pZCB1bmxvY2soKTsKIAorICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICBCRVhQT1JUIHZvaWQgbG9ja1Nsb3dDYXNlKCk7CiAKKyAgICAvLyBFbnN1
cmUgdGhhdCBNdXRleCBpcyB6ZXJvLWluaXRpYWxpemVkLiBTbWFsbFBhZ2UgcmVsaWVzIG9uIHRo
YXQuCiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9mbGFnIHsgZmFsc2UgfTsKICAgICBzdGQ6OmF0
b21pYzxib29sPiBtX2lzU3Bpbm5pbmcgeyBmYWxzZSB9OwogfTsKQEAgLTkyLDQgKzk1LDIwIEBA
IGlubGluZSB2b2lkIE11dGV4Ojp1bmxvY2soKQogICAgIG1fZmxhZy5zdG9yZShmYWxzZSwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiB9CiAKK2lubGluZSBib29sIE11dGV4Ojppc0xvY2tl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmxhZzsKK30KKworaW5saW5lIHZvaWQgbG9ja1N3
aXRjaChNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9jaykKK3sKKyAgICBpZiAoQkxJS0VMWShs
b2NrID09ICpoZWxkTG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoKmhlbGRMb2NrKQor
ICAgICAgICAoKmhlbGRMb2NrKS0+dW5sb2NrKCk7CisgICAgKmhlbGRMb2NrID0gbG9jazsKKyAg
ICBpZiAobG9jaykKKyAgICAgICAgbG9jay0+bG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNwcAppbmRleCBkODJmMjViNWU5
OGRkYTljYTZmMGUzM2FkNDgxNTJjODFkY2QyZGY3Li44NTM3OGU5YmEyNDRkYTI2NGM5OGI0YzEy
NTJhZWFjMDY2ZDM2Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclBy
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAotI2luY2x1ZGUgIlZN
QWxsb2NhdGUuaCIKKyNpbmNsdWRlICJBcmVuYS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5h
bWVzcGFjZSBibWFsbG9jIHsKQEAgLTM1LDI5ICszNSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiAKIHN0YXRpYyBNdXRleCBzX211dGV4OwogCi1zdGF0aWMgY2hh
ciogc19idW1wQmFzZTsKLXN0YXRpYyBzaXplX3Qgc19idW1wT2Zmc2V0Owotc3RhdGljIHNpemVf
dCBzX2J1bXBMaW1pdDsKLQogc3RhdGljIFBlclByb2Nlc3NEYXRhKiBzX3RhYmxlW3RhYmxlU2l6
ZV07CiAKLS8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcg
dm1BbGxvY2F0ZS4KLXN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFs
aWdubWVudCkKLXsKLSAgICBzX2J1bXBPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdu
bWVudCwgc19idW1wT2Zmc2V0KTsKLSAgICB2b2lkKiByZXN1bHQgPSBzX2J1bXBCYXNlICsgc19i
dW1wT2Zmc2V0OwotICAgIHNfYnVtcE9mZnNldCArPSBzaXplOwotICAgIGlmIChzX2J1bXBPZmZz
ZXQgPD0gc19idW1wTGltaXQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUpOwotICAgIHZvaWQqIGFsbG9jYXRpb24g
PSB2bUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKLSAgICBzX2J1bXBCYXNlID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGFsbG9jYXRpb24pOwotICAgIHNfYnVtcE9mZnNldCA9IDA7Ci0gICAgc19idW1w
TGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsKLSAgICByZXR1cm4gYWxsb2NhdGUoc2l6ZSwgYWxpZ25t
ZW50KTsKLX0KLQogUGVyUHJvY2Vzc0RhdGEqIGdldFBlclByb2Nlc3NEYXRhKHVuc2lnbmVkIGhh
c2gsIGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25t
ZW50KQogewogICAgIExvY2tIb2xkZXIgbG9jayhzX211dGV4KTsKQEAgLTc2LDEwICs1NSwxMSBA
QCBQZXJQcm9jZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEodW5zaWduZWQgaGFzaCwgY29uc3Qg
Y2hhciogZGlzYW1iaWd1YXRvciwgc2l6ZQogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBDcmVhdGluZyBuZXcgJXNcbiIsIGdldHBpZCgpLCBkaXNh
bWJpZ3VhdG9yKTsKLSAgICB2b2lkKiByYXdEYXRhUHRyID0gYWxsb2NhdGUoc2l6ZW9mKFBlclBy
b2Nlc3NEYXRhKSwgc3RkOjphbGlnbm1lbnRfb2Y8UGVyUHJvY2Vzc0RhdGE+Ojp2YWx1ZSk7Cisg
ICAgYXV0byogYXJlbmEgPSBBcmVuYTo6Z2V0KCk7CisgICAgdm9pZCogcmF3RGF0YVB0ciA9IGFy
ZW5hLT5hbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vzc0RhdGEpLCBzdGQ6OmFsaWdubWVudF9vZjxQ
ZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKICAgICBQZXJQcm9jZXNzRGF0YSogZGF0YSA9IHN0YXRp
Y19jYXN0PFBlclByb2Nlc3NEYXRhKj4ocmF3RGF0YVB0cik7CiAgICAgZGF0YS0+ZGlzYW1iaWd1
YXRvciA9IGRpc2FtYmlndWF0b3I7Ci0gICAgZGF0YS0+bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwg
YWxpZ25tZW50KTsKKyAgICBkYXRhLT5tZW1vcnkgPSBhcmVuYS0+YWxsb2NhdGUoc2l6ZSwgYWxp
Z25tZW50KTsKICAgICBkYXRhLT5zaXplID0gc2l6ZTsKICAgICBkYXRhLT5hbGlnbm1lbnQgPSBh
bGlnbm1lbnQ7CiAgICAgZGF0YS0+bmV4dCA9IGJ1Y2tldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmNwcAppbmRleCA2MTA2NzhhNjE1N2NlN2YyMTNmYjY2YjhjN2VlNGFhZDE3OTRmMTI3
Li41NTY0MjdhNzcwYWVmMjYzNjUzYjQ0Y2RjZWYwNjQzZjI2MTg1MzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TY2F2ZW5nZXIuY3BwCkBAIC05Niw4ICs5Niw4IEBAIFNjYXZlbmdlcjo6U2NhdmVu
Z2VyKGNvbnN0IExvY2tIb2xkZXImKQogCiB2b2lkIFNjYXZlbmdlcjo6cnVuKCkKIHsKLSAgICBM
b2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgcnVuKGxvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG11dGV4KCkpOworICAgIHJ1bihsb2NrZXIpOwogfQogCiB2b2lkIFNjYXZlbmdlcjo6
cnVuKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTA4LDggKzEwOCw4IEBAIHZvaWQgU2NhdmVuZ2Vy
OjpydW4oY29uc3QgTG9ja0hvbGRlciYpCiAKIHZvaWQgU2NhdmVuZ2VyOjpydW5Tb29uKCkKIHsK
LSAgICBMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgcnVuU29vbihsb2NrKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKKyAgICBydW5Tb29uKGxvY2tlcik7CiB9CiAKIHZv
aWQgU2NhdmVuZ2VyOjpydW5Tb29uKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTI4LDExICsxMjgs
MTEgQEAgdm9pZCBTY2F2ZW5nZXI6OmRpZFN0YXJ0R3Jvd2luZygpCiAKIHZvaWQgU2NhdmVuZ2Vy
OjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0ZXMpCiB7Ci0gICAgTG9j
a0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgIHNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJl
KGxvY2ssIGJ5dGVzKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKKyAgICBzY2hl
ZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShsb2NrZXIsIGJ5dGVzKTsKIH0KIAotdm9pZCBTY2F2
ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2ssIHNpemVfdCBieXRlcykKK3ZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQ
cmVzc3VyZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIHNpemVfdCBieXRlcykKIHsKICAgICBt
X3NjYXZlbmdlckJ5dGVzICs9IGJ5dGVzOwogICAgIGlmIChtX3NjYXZlbmdlckJ5dGVzIDwgc2Nh
dmVuZ2VyQnl0ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNrKQpAQCAtMTQ3LDE5ICsxNDcsMTkgQEAg
dm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGNvbnN0IExvY2tI
b2xkZXImIGxvY2ssIHNpemVfdCBieXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc1Byb2Jh
Ymx5R3Jvd2luZyA9IGZhbHNlOwotICAgIHJ1bihsb2NrKTsKKyAgICBydW4obG9ja2VyKTsKIH0K
IAogdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlKHNpemVfdCBieXRlcykKIHsKLSAgICBMb2NrSG9s
ZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUobG9j
aywgYnl0ZXMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgIHNjaGVkdWxl
SWZVbmRlck1lbW9yeVByZXNzdXJlKGxvY2tlciwgYnl0ZXMpOwogICAgIAogICAgIGlmICh3aWxs
UnVuU29vbigpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgbV9pc1Byb2JhYmx5R3Jvd2lu
ZyA9IGZhbHNlOwotICAgIHJ1blNvb24obG9jayk7CisgICAgcnVuU29vbihsb2NrZXIpOwogfQog
CiBpbmxpbmUgdm9pZCBkdW1wU3RhdHMoKQpAQCAtMTgzLDE0ICsxODMsMTQgQEAgaW5saW5lIHZv
aWQgZHVtcFN0YXRzKCkKIAogc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTY2F2ZW5nZXI6OnRp
bWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UoKQogewotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayht
dXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAgICByZXR1
cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4o
c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1l
KTsKIH0KIAogI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgU2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlKCkKIHsKLSAgICBV
bmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2Nr
ZXIobXV0ZXgoKSk7CiAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0g
bV9sYXN0UGFydGlhbFNjYXZlbmdlVGltZSk7CiB9CiAjZW5kaWYKQEAgLTIwNyw3ICsyMDcsNyBA
QCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogICAgIGlmICghbV9pc0VuYWJsZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtX3NjYXZlbmdpbmdNdXRl
eCk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIobV9zY2F2ZW5naW5nTXV0ZXgpOwogCiAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBAIC0yMjMsMTQgKzIyMywxNCBAQCB2b2lkIFNjYXZl
bmdlcjo6c2NhdmVuZ2UoKQogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAg
ICBzaXplX3QgZGVmZXJyZWREZWNvbW1pdHMgPSAwOwogI2VuZGlmCi0gICAgICAgICAgICBVbmlx
dWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgICAgICAgICBVbmlxdWVMb2Nr
SG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVI
ZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgICAgICAgICAgICAgUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrLCBk
ZWNvbW1pdHRlcik7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFw
Pj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShoZWFwTG9ja2VyLCBkZWNvbW1pdHRlcik7CiAjZWxz
ZQotICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+
YXQoaSkuc2NhdmVuZ2UobG9jaywgZGVjb21taXR0ZXIsIGRlZmVycmVkRGVjb21taXRzKTsKKyAg
ICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkp
LnNjYXZlbmdlKGhlYXBMb2NrZXIsIGRlY29tbWl0dGVyLCBkZWZlcnJlZERlY29tbWl0cyk7CiAj
ZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlY29tbWl0dGVyLnByb2Nlc3NFYWdl
cigpOwpAQCAtMjQ4LDExICsyNDgsMTEgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKIAog
ICAgICAgICB7CiAgICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJmdWxsIHNjYXZlbmdl
IG1hcmsgYWxsIGFzIGVsaWdpYmxlIHRpbWUiKTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
ayhIZWFwOjptdXRleCgpKTsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFw
OjptdXRleCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhl
YXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkubWFya0FsbExh
cmdlQXNFbGlnaWJpbGUobG9jayk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFw
S2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5tYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShoZWFwTG9j
a2VyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NCw3ICsyNzQsNyBA
QCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgVW5p
cXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2tlcihtdXRleCgpKTsKICAgICAgICAgbV9sYXN0RnVsbFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAgIH0KIH0KQEAgLTI4NSw3ICsyODUsNyBAQCB2
b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKCkKICAgICBpZiAoIW1faXNFbmFibGVkKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobV9zY2F2ZW5naW5n
TXV0ZXgpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKG1fc2NhdmVuZ2luZ011dGV4KTsK
IAogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtMjk3LDE1ICsyOTcsMTUgQEAgdm9pZCBT
Y2F2ZW5nZXI6OnBhcnRpYWxTY2F2ZW5nZSgpCiAgICAgICAgIEJ1bGtEZWNvbW1pdCBkZWNvbW1p
dHRlcjsKICAgICAgICAgewogICAgICAgICAgICAgUHJpbnRUaW1lIHByaW50VGltZSgiXG5wYXJ0
aWFsU2NhdmVuZ2UgdW5kZXIgbG9jayB0aW1lIik7Ci0gICAgICAgICAgICBVbmlxdWVMb2NrSG9s
ZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhl
YXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1IZWFwczsgaS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChz
dGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFw
Pj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZnJlZWFibGVNZW1vcnkg
PSBoZWFwLmZyZWVhYmxlTWVtb3J5KGxvY2spOworICAgICAgICAgICAgICAgIHNpemVfdCBmcmVl
YWJsZU1lbW9yeSA9IGhlYXAuZnJlZWFibGVNZW1vcnkoaGVhcExvY2tlcik7CiAgICAgICAgICAg
ICAgICAgaWYgKGZyZWVhYmxlTWVtb3J5IDwgNCAqIE1CKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxv
Y2ssIGRlY29tbWl0dGVyKTsKKyAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0
ZXJtYXJrKGhlYXBMb2NrZXIsIGRlY29tbWl0dGVyKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0VhZ2VyKCk7CkBAIC0zMTgsMTIgKzMxOCwxMiBAQCB2
b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKCkKIAogICAgICAgICB7CiAgICAgICAgICAg
ICBQcmludFRpbWUgcHJpbnRUaW1lKCJwYXJ0aWFsU2NhdmVuZ2UgbWFyayBhbGwgYXMgZWxpZ2li
bGUgdGltZSIpOwotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwor
ICAgICAgICAgICAgTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSGVhcHM7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgSGVhcCYgaGVhcCA9IFBl
clByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSk7Ci0gICAgICAgICAgICAg
ICAgaGVhcC5tYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShsb2NrKTsKKyAgICAgICAgICAgICAgICBo
ZWFwLm1hcmtBbGxMYXJnZUFzRWxpZ2liaWxlKGhlYXBMb2NrZXIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgU2NhdmVuZ2VyOjpwYXJ0
aWFsU2NhdmVuZ2UoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBs
b2NrKG11dGV4KCkpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsK
ICAgICAgICAgbV9sYXN0UGFydGlhbFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6Om5vdygpOwogICAgIH0KIH0KQEAgLTM1NSwxMSArMzU1LDExIEBAIHNpemVfdCBTY2F2
ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KCkKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICB7
Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKKyAgICAgICAg
VW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAgICAgICAgaWYgKCFpc0FjdGl2
ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICByZXN1bHQgKz0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFw
Pj46OmdldCgpLT5hdChpKS5mcmVlYWJsZU1lbW9yeShsb2NrKTsKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLmZyZWVhYmxl
TWVtb3J5KGhlYXBMb2NrZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MTIsMTMgKzQxMiwx
MyBAQCB2b2lkIFNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCgpCiAgICAgCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlNsZWVwKSB7Ci0gICAgICAgICAg
ICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlv
bi53YWl0KGxvY2ssIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsK
KyAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgICAgICAg
ICAgbV9jb25kaXRpb24ud2FpdChsb2NrZXIsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3Rh
dGU6OlNsZWVwOyB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OlJ1blNvb24pIHsKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayht
dXRleCgpKTsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRfZm9yKGxvY2ssIG1fd2FpdFRp
bWUsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlJ1blNvb247IH0pOworICAgICAg
ICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7CisgICAgICAgICAgICBtX2Nv
bmRpdGlvbi53YWl0X2Zvcihsb2NrZXIsIG1fd2FpdFRpbWUsIFsmXSgpIHsgcmV0dXJuIG1fc3Rh
dGUgIT0gU3RhdGU6OlJ1blNvb247IH0pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBt
X3N0YXRlID0gU3RhdGU6OlNsZWVwOwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TbWFsbExpbmUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKaW5kZXgg
ZDliNzRhYjhiOWZlMzllMDAwOTI4YmZiNjY1M2U1MDViODljZmQyMi4uZGUyNjcyMDVlODJjNzRk
NjEwMTVjMGFiOWViMjA5NmE2NWMxYjhiMCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9TbWFsbExpbmUuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5o
CkBAIC0yOSwxNSArMjksMjEgQEAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCiAjaW5jbHVkZSAiTXV0
ZXguaCIKICNpbmNsdWRlICJPYmplY3RUeXBlLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAj
aW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU21hbGxMaW5l
IHsKIHB1YmxpYzoKLSAgICB2b2lkIHJlZihVbmlxdWVMb2NrSG9sZGVyJiwgdW5zaWduZWQgY2hh
ciA9IDEpOwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVk
IHJlZkNvdW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAg
dm9pZCByZWYoU21hbGxQYWdlKiwgdW5zaWduZWQgY2hhciA9IDEpOworICAgIGJvb2wgZGVyZWYo
U21hbGxQYWdlKik7CisgICAgdW5zaWduZWQgcmVmQ291bnQoU21hbGxQYWdlKiBwYWdlKQorICAg
IHsKKyAgICAgICAgQlVOVVNFRChwYWdlKTsKKyAgICAgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tl
ZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAgIAogICAgIGNoYXIq
IGJlZ2luKCk7CiAgICAgY2hhciogZW5kKCk7CkBAIC01MSwxNCArNTcsMTggQEAgc3RhdGljX2Fz
c2VydCgKIAogfTsKIAotaW5saW5lIHZvaWQgU21hbGxMaW5lOjpyZWYoVW5pcXVlTG9ja0hvbGRl
ciYsIHVuc2lnbmVkIGNoYXIgcmVmQ291bnQpCitpbmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihT
bWFsbFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIGNoYXIgcmVmQ291bnQpCiB7CisgICAgQlVOVVNFRChw
YWdlKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQoIW1fcmVm
Q291bnQpOwogICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKIH0KIAotaW5saW5lIGJvb2wgU21h
bGxMaW5lOjpkZXJlZihVbmlxdWVMb2NrSG9sZGVyJikKK2lubGluZSBib29sIFNtYWxsTGluZTo6
ZGVyZWYoU21hbGxQYWdlKiBwYWdlKQogeworICAgIEJVTlVTRUQocGFnZSk7CisgICAgQkFTU0VS
VChwYWdlLT5pc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKG1fcmVmQ291bnQpOwogICAgIC0tbV9y
ZWZDb3VudDsKICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBh
Z2UuaAppbmRleCA0MzVlNWY3MDk3ODBiNjY3MzI1MDdkZDZmYzEyMjFiN2NlZTZlN2M5Li5kNzc1
MjE4YWY5YTdkYzYyMGIyMmEwNjc0NjExY2QxNGNjOGU4MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
U21hbGxQYWdlLmgKQEAgLTM0LDE5ICszNCwzMyBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAK
K2NsYXNzIEFwcHJveFBlckNQVUNhY2hlOwogY2xhc3MgU21hbGxMaW5lOwogCiBjbGFzcyBTbWFs
bFBhZ2UgOiBwdWJsaWMgTGlzdE5vZGU8U21hbGxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgdm9pZCBy
ZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYp
OwotICAgIHVuc2lnbmVkIHJlZkNvdW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJldHVybiBtX3Jl
ZkNvdW50OyB9CisgICAgdm9pZCByZWYoKTsKKyAgICBib29sIGRlcmVmKCk7CisgICAgdW5zaWdu
ZWQgcmVmQ291bnQoKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAgIAogICAgIHNpemVfdCBzaXplQ2xhc3Mo
KSB7IHJldHVybiBtX3NpemVDbGFzczsgfQogICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBz
aXplQ2xhc3MpIHsgbV9zaXplQ2xhc3MgPSBzaXplQ2xhc3M7IH0KICAgICAKLSAgICBib29sIGhh
c0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJikgY29uc3QgeyByZXR1cm4gbV9oYXNGcmVlTGlu
ZXM7IH0KLSAgICB2b2lkIHNldEhhc0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJiwgYm9vbCBo
YXNGcmVlTGluZXMpIHsgbV9oYXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7IH0KKyAgICBib29s
IGhhc0ZyZWVMaW5lcygpIGNvbnN0CisgICAgeworICAgICAgICBCQVNTRVJUKGlzTG9ja2VkKCkp
OworICAgICAgICByZXR1cm4gbV9oYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgc2V0SGFz
RnJlZUxpbmVzKGJvb2wgaGFzRnJlZUxpbmVzKQorICAgIHsKKyAgICAgICAgQkFTU0VSVChpc0xv
Y2tlZCgpKTsKKyAgICAgICAgbV9oYXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7CisgICAgfQor
ICAgIHZvaWQgaW5pdEhhc0ZyZWVMaW5lcygpIHsgbV9oYXNGcmVlTGluZXMgPSB0cnVlOyB9CiAg
ICAgCiAgICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBh
Z2VzOyB9CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdl
cykgeyBtX2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9CkBAIC02MCwxNyAr
NzQsOTggQEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewog
ICAgIFNtYWxsTGluZSogYmVnaW4oKTsKIAogICAgIHVuc2lnbmVkIGNoYXIgc2xpZGUoKSBjb25z
dCB7IHJldHVybiBtX3NsaWRlOyB9Ci0gICAgdm9pZCBzZXRTbGlkZSh1bnNpZ25lZCBjaGFyIHNs
aWRlKSB7IG1fc2xpZGUgPSBzbGlkZTsgfQotICAgIAorCisgICAgYm9vbCBpbml0aWFsaXppbmdG
b3JBbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9u
OyB9CisgICAgdm9pZCBzZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKGJvb2wgaW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbikgeyBtX2luaXRpYWxpemluZ0ZvckFsbG9jYXRpb24gPSBpbml0aWFs
aXppbmdGb3JBbGxvY2F0aW9uOyB9CisKKyAgICBBcHByb3hQZXJDUFVDYWNoZSogY2FjaGUoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlOyB9CisgICAgdm9pZCBzZXRDYWNoZShBcHByb3hQZXJDUFVD
YWNoZSogY2FjaGUpIHsgbV9jYWNoZSA9IGNhY2hlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemUo
dW5zaWduZWQgY2hhciBzbGlkZSkKKyAgICB7CisgICAgICAgIG1fc2xpZGUgPSBzbGlkZTsKKyAg
ICAgICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgfQorCisgICAgYm9vbCBp
c0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tdXRleFB0ci0+aXNMb2Nr
ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIE11
dGV4KiBsb2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAgICAgIGlmIChsb2NrV2l0aFVuYmlhcygm
aGVsZExvY2ssIGxvY2spKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGxv
Y2stPnVubG9jaygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAg
IHsKKyAgICAgICAgbV9tdXRleFB0ci0+dW5sb2NrKCk7CisgICAgfQorCisgICAgdm9pZCBzd2l0
Y2hMb2NrKE11dGV4KiogaGVsZExvY2spCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7CisgICAgICAgICAgICBpZiAoQkxJS0VM
WShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAgICAgICAgICgqaGVsZExvY2spLT51bmxvY2so
KTsKKworICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5iaWFzKGhlbGRMb2NrLCBsb2NrKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGxvY2tX
aXRoVW5iaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2NrKQorICAgIHsKKyAgICAgICAg
KmhlbGRMb2NrID0gbG9jazsKKyAgICAgICAgaWYgKEJMSUtFTFkobG9jay0+dHJ5X2xvY2soKSkp
CisgICAgICAgICAgICByZXR1cm4gbG9jayA9PSBtX211dGV4UHRyOworCisgICAgICAgIC8vIFdl
IGZvdW5kIHRoYXQgbG9jayBpcyBjb250ZW5kZWQgYmVjYXVzZSB0cnktbG9jayBmYWlsZWQuCisg
ICAgICAgIGxvY2stPmxvY2soKTsKKyAgICAgICAgaWYgKGxvY2sgIT0gbV9tdXRleFB0cikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobG9jayAhPSAmbV9mYWxsYmFj
a011dGV4KSB7CisgICAgICAgICAgICAvLyBDb250ZW5kZWQgYW5kIHVzaW5nIHBlci1jcHUgbG9j
ay4gQ2hhbmdlIHRoaXMgU21hbGxQYWdlJ3MgbG9jayB0byBmaW5lLWdyYWluZWQgZmFsbGJhY2sg
bG9jay4KKyAgICAgICAgICAgIG1fZmFsbGJhY2tNdXRleC5sb2NrKCk7CisgICAgICAgICAgICBt
X211dGV4UHRyID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICAgICAgICAgIGxvY2stPnVubG9jaygp
OworICAgICAgICAgICAgKmhlbGRMb2NrID0gJm1fZmFsbGJhY2tNdXRleDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2tBbmRUcnlUb1Rha2VC
aWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2NrVG9CaWFzVG8pCisgICAgeworICAgICAg
ICBtX211dGV4UHRyID0gbG9ja1RvQmlhc1RvOworICAgICAgICBCQVNTRVJUKG1fbXV0ZXhQdHIg
PT0gbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgbG9ja1N3aXRjaChoZWxkTG9jaywgbG9ja1RvQmlh
c1RvKTsKKyAgICAgICAgQkFTU0VSVChtX211dGV4UHRyID09IGxvY2tUb0JpYXNUbyk7CisgICAg
fQorCiBwcml2YXRlOgorICAgIE11dGV4IG1fZmFsbGJhY2tNdXRleDsKICAgICB1bnNpZ25lZCBj
aGFyIG1faGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBh
Z2VzOiAxOwogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgdW5zaWduZWQgY2hhciBt
X3VzZWRTaW5jZUxhc3RTY2F2ZW5nZTogMTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbV9y
ZWZDb3VudDogNzsKLSAgICB1bnNpZ25lZCBjaGFyIG1fc2l6ZUNsYXNzOworICAgIHVuc2lnbmVk
IGNoYXIgbV9zaXplQ2xhc3MgeyAwIH07CiAgICAgdW5zaWduZWQgY2hhciBtX3NsaWRlOworICAg
IHVuc2lnbmVkIGNoYXIgbV9pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOworCisgICAgTXV0ZXgq
IG1fbXV0ZXhQdHI7CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIG1fY2FjaGUgeyBudWxscHRyIH07
CiAKIHN0YXRpY19hc3NlcnQoCiAgICAgc2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xp
bWl0czxkZWNsdHlwZShtX3NpemVDbGFzcyk+OjptYXgoKSwKQEAgLTc5LDE1ICsxNzQsMTcgQEAg
c3RhdGljX2Fzc2VydCgKIAogdXNpbmcgTGluZUNhY2hlID0gc3RkOjphcnJheTxMaXN0PFNtYWxs
UGFnZT4sIHNpemVDbGFzc0NvdW50PjsKIAotaW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYoVW5p
cXVlTG9ja0hvbGRlciYpCitpbmxpbmUgdm9pZCBTbWFsbFBhZ2U6OnJlZigpCiB7CisgICAgQkFT
U0VSVChpc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFtX3NsaWRlKTsKICAgICArK21fcmVmQ291
bnQ7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50KTsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxQYWdl
OjpkZXJlZihVbmlxdWVMb2NrSG9sZGVyJikKK2lubGluZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYo
KQogeworICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAg
ICAgQkFTU0VSVChtX3JlZkNvdW50KTsKICAgICAtLW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCmluZGV4IDM2NmMxNTZkZmU0MjlhMTRiMjJhNWQ1
ZDhhYjQ4NmRmNDZiYjk4NTkuLjk0MDVlNjE0ZjcxMWRjZTI2ZGY3ZjFlZTAzMzRkNGU4MjA1NmNm
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5o
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCkBAIC01OSw5
ICs1OSw5IEBAIGNsYXNzIFN0YXRpY1BlclByb2Nlc3MgewogICAgIHN0YXRpYyBUKiBnZXQoKQog
ICAgIHsKICAgICAgICAgVCogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFv
YmplY3QpCi0gICAgICAgICAgICByZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICAgICAgaWYgKEJMSUtFTFkob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgICAgIHJldHVybiBnZXRTbG93Q2FzZSgpOwogICAgIH0KIAogICAgIHN0
YXRpYyBUKiBnZXRGYXN0Q2FzZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1ZlY3Rvci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAppbmRleCBkODQwOWIw
NTcyZDc3MmY5ZjBkOWRlZTk4NjA4YWRiMDk3M2M3ZDgxLi42YmIwODQzYzhkY2JkZTcyZTQ5YmU3
Mzc1MjgwODQxZjBmNGY1NzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Zl
Y3Rvci5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKQEAgLTU2LDcgKzU2
LDExIEBAIGNsYXNzIFZlY3RvciB7CiAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QpOwogICAgIFQm
IGxhc3QoKSB7IHJldHVybiBtX2J1ZmZlclttX3NpemUgLSAxXTsgfQogCi0gICAgdm9pZCBwdXNo
KGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgcHVzaChVJiYp
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBlbXBsYWNl
KEFyZ3MmJi4uLik7CiAKICAgICBUIHBvcCgpOwogICAgIFQgcG9wKHNpemVfdCk7CkBAIC0xMTks
MTEgKzEyMywyMSBAQCBpbmxpbmUgVCYgVmVjdG9yPFQ+OjpvcGVyYXRvcltdKHNpemVfdCBpKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChj
b25zdCBUJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFU+CitCSU5MSU5FIHZvaWQgVmVjdG9y
PFQ+OjpwdXNoKFUmJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCisg
ICAgICAgIGdyb3dDYXBhY2l0eSgpOworICAgIG5ldyAoJm1fYnVmZmVyW21fc2l6ZSsrXSkgVChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CitCSU5MSU5FIHZvaWQgVmVjdG9yPFQ+OjplbXBsYWNlKEFy
Z3MmJi4uLiBhcmdzKQogewogICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKICAgICAgICAg
Z3Jvd0NhcGFjaXR5KCk7Ci0gICAgbV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7CisgICAgbmV3
ICgmbV9idWZmZXJbbV9zaXplKytdKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL2JtYWxsb2MuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcAppbmRl
eCBlZWVlODQ5NDVmYjM5N2FmODZiNzQ1Y2I1YjE3YTgwNjNiZmRiM2NkLi4xMDQzZTBlNDExNmZk
Y2IzNjM0NDUwYWUxYzU0MThhNDYxMmMyMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL2JtYWxsb2MuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5j
cHAKQEAgLTU4LDE0ICs1OCwxNCBAQCB2b2lkKiB0cnlMYXJnZVplcm9lZE1lbWFsaWduVmlydHVh
bChzaXplX3QgcmVxdWlyZWRBbGlnbm1lbnQsIHNpemVfdCByZXF1ZXN0ZWRTaQogICAgICAgICBr
aW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKICAgICAgICAgSGVhcCYgaGVhcCA9IFBl
clByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoa2luZCk7CiAKLSAgICAgICAg
VW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgICAgICByZXN1bHQgPSBo
ZWFwLmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCBGYWlsdXJlQWN0aW9uOjpS
ZXR1cm5OdWxsKTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11
dGV4KCkpOworICAgICAgICByZXN1bHQgPSBoZWFwLmFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwg
YWxpZ25tZW50LCBzaXplLCBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYg
KHJlc3VsdCkgewogICAgICAgICAgICAgLy8gRG9uJ3QgdHJhY2sgdGhpcyBhcyBkaXJ0eSBtZW1v
cnkgdGhhdCBkaWN0YXRlcyBob3cgd2UgZHJpdmUgdGhlIHNjYXZlbmdlci4KICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBpdCBzbyB0aGF0IHVzZXJzIG9mIHRoaXMgQVBJIGlu
Zm9ybSBibWFsbG9jIHdoaWNoCiAgICAgICAgICAgICAvLyBwYWdlcyB0aGV5IGRpcnR5OgogICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDIw
NwotICAgICAgICAgICAgaGVhcC5leHRlcm5hbERlY29tbWl0KGxvY2ssIHJlc3VsdCwgc2l6ZSk7
CisgICAgICAgICAgICBoZWFwLmV4dGVybmFsRGVjb21taXQoaGVhcExvY2tlciwgcmVzdWx0LCBz
aXplKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODIsMTAgKzgyLDEwIEBAIHZvaWQgZnJlZUxh
cmdlVmlydHVhbCh2b2lkKiBvYmplY3QsIHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5kKQogICAg
IH0KICAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKICAgICBIZWFwJiBoZWFw
ID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKLSAgICBV
bmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRl
ciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgIC8vIEJhbGFuY2Ugb3V0IHRoZSBleHRl
cm5hbERlY29tbWl0IHdoZW4gd2UgYWxsb2NhdGVkIHRoZSB6ZXJvZWQgdmlydHVhbCBtZW1vcnku
Ci0gICAgaGVhcC5leHRlcm5hbENvbW1pdChsb2NrLCBvYmplY3QsIHNpemUpOwotICAgIGhlYXAu
ZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIG9iamVjdCk7CisgICAgaGVhcC5leHRlcm5hbENvbW1pdCho
ZWFwTG9ja2VyLCBvYmplY3QsIHNpemUpOworICAgIGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGhlYXBM
b2NrZXIsIG9iamVjdCk7CiB9CiAKIHZvaWQgc2NhdmVuZ2UoKQpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFz
cykKIHsKICAgICBpZiAoRGVidWdIZWFwOjp0cnlHZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9s
ZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgU2NhdmVuZ2VyOjpnZXQoKS0+c2V0
U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3Mob3ZlcnJpZGVDbGFzcyk7CiB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400264</attachid>
            <date>2020-05-26 12:00:04 -0700</date>
            <delta_ts>2020-06-02 06:57:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200526120003.patch</filename>
            <type>text/plain</type>
            <size>85458</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uMzZmOTMzZDU3YzdkM2IzYjE4N2ZiZjc1Y2VhMjE5
MGQ3ZWQ0MDcyMyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMSBAQAorMjAyMC0wNS0yNiAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGhhdmUgcGVyLWNwdSBsb2NraW5nIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBibWFs
bG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0
b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlSW1wbCk6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1h
bGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6
Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFwcHJveFBlckNQVUNhY2hlOjpBcHByb3hQZXJDUFVDYWNoZSk6CisgICAgICAgIChi
bWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6bGluZUNhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjppbmRleCBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpBcHBy
b3hQZXJDUFVDYWNoZTo6cGFnZU11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OkFwcHJveFBlckNQ
VUNhY2hlOjptdXRleCk6CisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
RmFzdENhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXJlbmE6
OkFyZW5hKToKKyAgICAgICAgKGJtYWxsb2M6OkFyZW5hOjphbGxvY2F0ZSk6CisgICAgICAgICog
Ym1hbGxvYy9BcmVuYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAqIGJtYWxsb2MvQkNvbXBpbGVyLmg6CisgICAgICAgICogYm1hbGxv
Yy9DUFUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcC4KKyAgICAgICAgKGJtYWxsb2M6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMpOgorICAgICAg
ICAqIGJtYWxsb2MvQ1BVLmg6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjp4ODZfcmR0c2NwKToKKyAgICAgICAgKGJtYWxs
b2M6OmN1cnJlbnRDUFVJbmRleCk6CisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAg
ICAoYm1hbGxvYzo6Q2h1bms6OkNodW5rKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcik6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6
RGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRv
ci5oOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnBlckNQVUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpsaW5lQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAq
IGJtYWxsb2MvR2lnYWNhZ2UuY3BwOgorICAgICAgICAoR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRp
dmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sp
OgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpz
Y2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFy
ayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjph
bGxvY2F0ZUxvY2tlZFNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9j
YXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVTbWFsbFBh
Z2VzKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUpOgorICAg
ICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3Qp
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6CisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNo
cmlua0xhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmV4dGVybmFsQ29tbWl0KToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmV4dGVybmFsRGVjb21taXQpOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2Mv
SGVhcC5oOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Z2V0Q3VycmVudENQVUNhY2hlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6Om9uZVNlY29uZCBjb25zdCk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyk6CisgICAgICAgIChibWFsbG9jOjpIZWFw
OjpkZXJlZlNtYWxsTGluZSk6CisgICAgICAgICogYm1hbGxvYy9MaXN0Lmg6CisgICAgICAgIChi
bWFsbG9jOjpMaXN0Tm9kZTo6aXNPbkxpc3QgY29uc3QpOgorICAgICAgICAqIGJtYWxsb2MvTXV0
ZXguaDoKKyAgICAgICAgKGJtYWxsb2M6Ok11dGV4Ojppc0xvY2tlZCBjb25zdCk6CisgICAgICAg
IChibWFsbG9jOjpsb2NrU3dpdGNoKToKKyAgICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuY3Bw
OgorICAgICAgICAoYm1hbGxvYzo6Z2V0UGVyUHJvY2Vzc0RhdGEpOgorICAgICAgICAoYm1hbGxv
Yzo6YWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvU2NhdmVuZ2VyLmNwcDoK
KyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6cnVuKToKKyAgICAgICAgKGJtYWxsb2M6OlNj
YXZlbmdlcjo6cnVuU29vbik6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxl
SWZVbmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2No
ZWR1bGUpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0RnVsbFNj
YXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGltZVNpbmNlTGFzdFBhcnRp
YWxTY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnNjYXZlbmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKToKKyAgICAgICAgKGJt
YWxsb2M6OlNjYXZlbmdlcjo6ZnJlZWFibGVNZW1vcnkpOgorICAgICAgICAoYm1hbGxvYzo6U2Nh
dmVuZ2VyOjp0aHJlYWRSdW5Mb29wKToKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsTGluZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjpyZWZDb3VudCk6CisgICAgICAgIChibWFsbG9j
OjpTbWFsbExpbmU6OnJlZik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbExpbmU6OmRlcmVmKToK
KyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjpyZWZDb3VudCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6Omhhc0ZyZWVMaW5l
cyBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldEhhc0ZyZWVMaW5lcyk6
CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmluaXRIYXNGcmVlTGluZXMpOgorICAgICAg
ICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uIGNvbnN0KToK
KyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlv
bik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmNhY2hlIGNvbnN0KToKKyAgICAgICAg
KGJtYWxsb2M6OlNtYWxsUGFnZTo6c2V0Q2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjppbml0aWFsaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQg
Y29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJt
YWxsb2M6OlNtYWxsUGFnZTo6dW5sb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6
c3dpdGNoTG9jayk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFz
KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpkZXJlZik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlN0YXRpY1BlclByb2Nlc3M6OmdldCk6CisgICAgICAgICogYm1hbGxvYy9ibWFs
bG9jLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6dHJ5TGFyZ2VaZXJvZWRNZW1hbGlnblZp
cnR1YWwpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpmcmVlTGFyZ2VWaXJ0dWFsKToKKyAgICAg
ICAgKGJtYWxsb2M6OmFwaTo6c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MpOgorCiAyMDIwLTA1
LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW2JtYWxs
b2NdIEludHJvZHVjZSBsb2NrLWxlc3MgT2JqZWN0VHlwZSBxdWVyeQpkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4
dAppbmRleCAzZDk5MGViOWJhOGQzODljNDY0M2QxODAwZjUwMzU5ODRiZDdhODZkLi4xZjhmY2Ew
YmVlYzkyMzA3NmI5MTBiNzAxODg3MmZiMmUxOTlhNTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dApA
QCAtOCw2ICs4LDcgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvQWxsSXNvSGVh
cHMuY3BwCiAgICAgYm1hbGxvYy9BbGxvY2F0b3IuY3BwCiAgICAgYm1hbGxvYy9BdmFpbGFibGVN
ZW1vcnkuY3BwCisgICAgYm1hbGxvYy9DUFUuY3BwCiAgICAgYm1hbGxvYy9DYWNoZS5jcHAKICAg
ICBibWFsbG9jL0NyeXB0b1JhbmRvbS5jcHAKICAgICBibWFsbG9jL0RlYWxsb2NhdG9yLmNwcApA
QCAtNTIsNiArNTMsNyBAQCBzZXQoYm1hbGxvY19QVUJMSUNfSEVBREVSUwogICAgIGJtYWxsb2Mv
QnVsa0RlY29tbWl0LmgKICAgICBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAogICAgIGJtYWxsb2Mv
QnVtcFJhbmdlLmgKKyAgICBibWFsbG9jL0NQVS5oCiAgICAgYm1hbGxvYy9DYWNoZS5oCiAgICAg
Ym1hbGxvYy9DaHVuay5oCiAgICAgYm1hbGxvYy9DcnlwdG9SYW5kb20uaApkaWZmIC0tZ2l0IGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVjMmMzZDU2
ZDk3NTljYzExMWRiM2IzZjk0YWRkMzQ4NWM5NmRjNWEuLjQxZGYwOWEyZTUwY2UyNjIzZWRjMjM3
YzI4MzdjNmFkZjg0OTJmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOSw2ICsxMzksMTIgQEAKIAkJREU4QjEzQjMyMUND
NUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERFOEIxM0IyMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMxRTc0ODAy
MjM4Q0E1QzAwNUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMUU3NDdGMjIzOENBNUIwMDVEMDg0QSAvKiBT
dGF0aWNQZXJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTMyOEQ4NEQyM0NFQjM4OTAwNTQ1QjE4IC8qIFBhY2tlZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyOEQ4NEMyM0NFQjM4OTAw
NTQ1QjE4IC8qIFBhY2tlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUUzNTIzOTAyMjQ3MzRCRTQwMDNBMTNDRiAvKiBDUFUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1MjM5MDEyNDczNEJFMDAw
M0ExM0NGIC8qIENQVS5jcHAgKi87IH07CisJCUUzNTIzOTAzMjQ3MzRCRTkwMDNBMTNDRiAvKiBD
UFUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTIz
OTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlFMzZDNzAzQjI0NzNBMUNGMDAzQ0FEMDcgLyogQXBwcm94
UGVyQ1BVQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNkM3MDNFMjQ3
M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM2QzcwM0MyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM2QzcwM0YyNDcz
QjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNkM3MDNEMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5jcHAgKi87
IH07CisJCUUzNkM3MDQxMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZDNzA0MDI0
NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuY3BwICovOyB9OwogCQlFMzc4QTlE
RjI0NkI2ODcyMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzhBOURFMjQ2QjY4NkEwMDI5QzJCQiAv
KiBPYmplY3RUeXBlVGFibGUuY3BwICovOyB9OwogCQlFMzc4QTlFMDI0NkI2ODc1MDAyOUMyQkIg
LyogT2JqZWN0VHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNBNDEz
QzkyMjYwNjExNDAwMzdGNDcwIC8qIElzb1NoYXJlZFBhZ2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0E0MTNDODIyNjA2MTE0MDAzN0Y0
NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjk1LDYgKzMwMSwxMiBAQAogCQlERThCMTNCMjIxQ0M1
RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCVk1UYWdzLmg7IHBhdGgg
PSBibWFsbG9jL0JWTVRhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxRTc0
N0YyMjM4Q0E1QjAwNUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU3RhdGljUGVyUHJvY2Vzcy5oOyBwYXRoID0gYm1hbGxvYy9TdGF0
aWNQZXJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjhEODRDMjND
RUIzODkwMDU0NUIxOCAvKiBQYWNrZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGFja2VkLmg7IHBhdGggPSBibWFsbG9jL1BhY2tlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzUyMzkwMDI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENQVS5oOyBwYXRoID0gYm1hbGxvYy9DUFUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBDUFUuY3BwOyBwYXRoID0gYm1hbGxvYy9DUFUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzZDNzAzQTI0NzNBMUNGMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXBwcm94UGVyQ1BVQ2FjaGUuaDsg
cGF0aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTM2QzcwM0MyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFyZW5hLmg7IHBhdGggPSBibWFsbG9jL0FyZW5hLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNkM3MDNEMjQ3M0I1OUQwMDNDQUQwNyAvKiBB
cmVuYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBcmVuYS5jcHA7
IHBhdGggPSBibWFsbG9jL0FyZW5hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFwcHJveFBlckNQVUNhY2hlLmNwcDsgcGF0
aCA9IGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzc4QTlERDI0NkI2ODZBMDAyOUMyQkIgLyogT2JqZWN0VHlwZVRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IE9iamVjdFR5cGVUYWJsZS5oOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBl
VGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM3OEE5REUyNDZCNjg2QTAw
MjlDMkJCIC8qIE9iamVjdFR5cGVUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RU
eXBlVGFibGUuY3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlVGFibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFM0E0MTNDODIyNjA2MTE0MDAzN0Y0NzAgLyogSXNvU2hh
cmVkUGFnZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSXNvU2hh
cmVkUGFnZUlubGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvSXNvU2hhcmVkUGFnZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Niw5ICs0ODgsMTUgQEAKIAkJMTREOURC
NEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUUzNkM3MDQwMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJD
UFVDYWNoZS5jcHAgKi8sCisJCQkJRTM2QzcwM0EyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBl
ckNQVUNhY2hlLmggKi8sCisJCQkJRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNw
cCAqLywKKwkJCQlFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAqLywKIAkJCQk3
OTM5ODg1QTIwNzZFRUI1MDA3NEEyRTcgLyogQnVsa0RlY29tbWl0LmggKi8sCiAJCQkJMTQwRkEw
MDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovLAogCQkJCTE0N0RDNkUyMUNBNUI3
MEIwMDcyNEU4RCAvKiBDaHVuay5oICovLAorCQkJCUUzNTIzOTAxMjQ3MzRCRTAwMDNBMTNDRiAv
KiBDUFUuY3BwICovLAorCQkJCUUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAqLywK
IAkJCQkxNDJCNDQzNDFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCAqLywKIAkJCQkx
NDJCNDQzNTFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmggKi8sCiAJCQkJMTQ4OTVEOEYx
QTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLywKQEAgLTU3Nyw2ICs1OTUsOCBA
QAogCQkJCTBGN0VCODM0MUY5NTQxQjAwMEYxQUJDQiAvKiBBbGxJc29IZWFwcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3RUI4NEYxRjk1NEQ0RTAwRjFBQkNCIC8qIEFsbElzb0hlYXBzSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM2QzcwM0IyNDczQTFDRjAwM0NBRDA3IC8qIEFw
cHJveFBlckNQVUNhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzZDNzAzRTI0NzNCNTlEMDAz
Q0FEMDcgLyogQXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OTlDNUNEMUVDM0YxNTkwMEEy
RjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThG
NDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDA5MzQzMzFG
Q0Y0MDZEMDBFODVFQjUgLyogQkNvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTU5Myw2ICs2
MTMsNyBAQAogCQkJCURFOEIxM0IzMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0N0RDNkUzMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTM1MjM5MDMyNDczNEJFOTAwM0ExM0NGIC8qIENQVS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY3NEI5M0UxRjg5NzEzRTAwQjkzNUQzIC8qIENyeXB0b1JhbmRvbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDJCNDQzNzFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFw
LmggaW4gSGVhZGVycyAqLywKQEAgLTc2MSw5ICs3ODIsMTIgQEAKIAkJCWZpbGVzID0gKAogCQkJ
CTBGN0VCODJGMUY5NTQxQjAwMEYxQUJDQiAvKiBBbGxJc29IZWFwcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUUzNkM3MDQxMjQ3M0I2RDEwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNo
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzZDNzAzRjI0NzNCNTlEMDAzQ0FEMDcgLyogQXJl
bmEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2
YWlsYWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjUxNjc3NDFGQUQ2ODVDMDA4
MjM2QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYyNzFDNDE4RUEzOTdC
MDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1MjM5MDIyNDczNEJF
NDAwM0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0QjkzRjFGODk3MTNF
MDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM1
MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJCNDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCmluZGV4IDUwNmQyZDg3NmFlZDMyMDZkZTg5
MjMwZjc1Mzc4ZDhhYmVmZDMwM2MuLmE0YTY1ZjZkMzE5YzhkNjc1Y2E4NmMyZjEyNmE1NzM1OWU3
YzVmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAor
KysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKQEAgLTc2LDExICs3Niwx
MSBAQCB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGVJbXBsKHZvaWQqIG9iamVjdCwgc2l6ZV90
IG5ld1NpemUsIEZhaWx1cmVBY3Rpb24gYWN0aQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBPYmplY3RUeXBlOjpMYXJnZTogewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
SGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIG9sZFNpemUgPSBtX2hlYXAubGFyZ2VTaXplKGxvY2ss
IG9iamVjdCk7CisgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjptdXRl
eCgpKTsKKyAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJnZVNpemUoaGVhcExvY2tlciwgb2Jq
ZWN0KTsKIAogICAgICAgICBpZiAobmV3U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxs
TWF4KSB7Ci0gICAgICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2JqZWN0
LCBvbGRTaXplKSwgbmV3U2l6ZSk7CisgICAgICAgICAgICBtX2hlYXAuc2hyaW5rTGFyZ2UoaGVh
cExvY2tlciwgUmFuZ2Uob2JqZWN0LCBvbGRTaXplKSwgbmV3U2l6ZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTIyLDkgKzEyMiw4
IEBAIEJOT19JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1
bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6CiB7CiAgICAgQnVtcFJhbmdlQ2FjaGUmIGJ1bXBS
YW5nZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKIAotICAgIFVuaXF1ZUxv
Y2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICBtX2RlYWxsb2NhdG9yLnByb2Nlc3NP
YmplY3RMb2cobG9jayk7Ci0gICAgbV9oZWFwLmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKGxvY2ss
IHNpemVDbGFzcywgYWxsb2NhdG9yLCBidW1wUmFuZ2VDYWNoZSwgbV9kZWFsbG9jYXRvci5saW5l
Q2FjaGUobG9jayksIGFjdGlvbik7CisgICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0TG9n
KCk7CisgICAgbV9oZWFwLmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKHNpemVDbGFzcywgYWxsb2Nh
dG9yLCBidW1wUmFuZ2VDYWNoZSwgbV9kZWFsbG9jYXRvci5wZXJDUFVDYWNoZSgpLCBhY3Rpb24p
OwogfQogCiBCSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikK
QEAgLTEzNyw4ICsxMzYsOCBAQCBCSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0
b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYQogCiBCTk9fSU5MSU5F
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlv
biBhY3Rpb24pCiB7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwot
ICAgIHJldHVybiBtX2hlYXAuYWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIGFj
dGlvbik7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwor
ICAgIHJldHVybiBtX2hlYXAuYWxsb2NhdGVMYXJnZShoZWFwTG9ja2VyLCBhbGlnbm1lbnQsIHNp
emUsIGFjdGlvbik7CiB9CiAKIEJOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxv
Z1NpemVDbGFzcyhzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmNwcCBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiOGU3OTc5
ZDI4Yjk5YTMyZjhlMjRiZjM1NjIzNDE2M2FlODYyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmNwcApAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IkFwcHJveFBlckNQVUNhY2hlLmgiCisKKyNpbmNsdWRlICJBcmVuYS5oIgorCituYW1lc3BhY2Ug
Ym1hbGxvYyB7CisKK0xpbmVDYWNoZSogQXBwcm94UGVyQ1BVQ2FjaGU6OmdldFNsb3dDYXNlKGNv
bnN0IExvY2tIb2xkZXImKQoreworICAgIGlmICghbV9saW5lQ2FjaGUubG9hZCgpKSB7CisgICAg
ICAgIHZvaWQqIG1lbW9yeSA9IEFyZW5hOjpnZXQoKS0+YWxsb2NhdGUoc2l6ZW9mKExpbmVDYWNo
ZSksIGFsaWdub2YoTGluZUNhY2hlKSk7CisgICAgICAgIGF1dG8qIHQgPSBuZXcgKG1lbW9yeSkg
TGluZUNhY2hlKCk7CisgICAgICAgIG1fbGluZUNhY2hlLnN0b3JlKHQpOworICAgIH0KKyAgICBy
ZXR1cm4gbV9saW5lQ2FjaGUubG9hZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmggYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FwcHJveFBlckNQVUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWMw
ODJmMWQzNmRhNTQ2YmY2Y2EyOTg3YWNmOWE0OWNiNzdhNWUxMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJTaXplcy5oIgorI2luY2x1ZGUg
IlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisK
Ky8vIEFwcHJveFBlckNQVUNhY2hlIGlzICphcHByb3hpbWF0ZSogcGVyLUNQVSBjYWNoZS4gVGhl
IGdvYWwgb2YgdGhpcyBjYWNoZSBpcyBub3QgcHJlY2lzZWx5IGNvbnN0cnVjdGluZyBwZXItQ1BV
IGNhY2hlLAorLy8gcmF0aGVyIGl0IGlzIG9mZmVyaW5nIHBlci1DUFUgYWZmaW5pdHkgdG8gU21h
bGxQYWdlcyBhcyBvcHRpbWl6YXRpb24uCitjbGFzcyBBcHByb3hQZXJDUFVDYWNoZSB7CitwdWJs
aWM6CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUodW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9p
bmRleChpbmRleCkKKyAgICB7CisgICAgfQorCisgICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUoY29u
c3QgTG9ja0hvbGRlciYgbG9ja2VyKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIG9iamVjdCA9
IGdldEZhc3RDYXNlKCkpCisgICAgICAgICAgICByZXR1cm4gKm9iamVjdDsKKyAgICAgICAgcmV0
dXJuICpnZXRTbG93Q2FzZShsb2NrZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIE11dGV4JiBwYWdlTXV0ZXgoKSB7IHJldHVy
biBtX3BhZ2VNdXRleDsgfQorICAgIE11dGV4JiBtdXRleCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0K
KworICAgIExpbmVDYWNoZSogZ2V0RmFzdENhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGluZUNhY2hlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIExpbmVDYWNoZSogZ2V0U2xvd0Nhc2UoY29uc3QgTG9ja0hvbGRlciYpOworCisg
ICAgc3RkOjphdG9taWM8TGluZUNhY2hlKj4gbV9saW5lQ2FjaGUgeyBudWxscHRyIH07CisgICAg
TXV0ZXggbV9tdXRleDsKKyAgICBNdXRleCBtX3BhZ2VNdXRleDsKKyAgICB1bnNpZ25lZCBtX2lu
ZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BcmVuYS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41YzEyZDFkMmU4NDVjNWI0YmY0ZjVkNDAyN2Y1OTZhYjY4ZGY0NGExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcmVuYS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJBcmVuYS5oIgorCisjaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworREVGSU5FX1NUQVRJQ19QRVJfUFJP
Q0VTU19TVE9SQUdFKEFyZW5hKTsKKworQXJlbmE6OkFyZW5hKGNvbnN0IExvY2tIb2xkZXImKQor
eworfQorCisvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1lbW9yeSBieSB2aXJ0dWFsIG9mIHVzaW5n
IHZtQWxsb2NhdGUuCit2b2lkKiBBcmVuYTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIHNpemVfdCBh
bGlnbm1lbnQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoQXJlbmE6Om11dGV4KCkpOworCisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbV9idW1wT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlw
bGVPZihhbGlnbm1lbnQsIG1fYnVtcE9mZnNldCk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1f
YnVtcEJhc2UgKyBtX2J1bXBPZmZzZXQ7CisgICAgICAgIG1fYnVtcE9mZnNldCArPSBzaXplOwor
ICAgICAgICBpZiAobV9idW1wT2Zmc2V0IDw9IG1fYnVtcExpbWl0KQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUp
OworICAgICAgICB2b2lkKiBhbGxvY2F0aW9uID0gdm1BbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgIG1fYnVtcEJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbik7Cisg
ICAgICAgIG1fYnVtcE9mZnNldCA9IDA7CisgICAgICAgIG1fYnVtcExpbWl0ID0gYWxsb2NhdGlv
blNpemU7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fy
ZW5hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDExZGVlYjIzOWYwOTk2YTJhZjE5Njk3MDdiZjEwOWVkNDgyMjkx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKworY2xhc3MgQXJlbmEgZmluYWwgOiBwdWJsaWMgU3RhdGljUGVyUHJv
Y2VzczxBcmVuYT4geworcHVibGljOgorICAgIEJFWFBPUlQgQXJlbmEoY29uc3QgTG9ja0hvbGRl
ciYpOworCisgICAgLy8gUmV0dXJucyB6ZXJvLWZpbGxlZCBtZW1vcnkgYnkgdmlydHVhbCBvZiB1
c2luZyB2bUFsbG9jYXRlLgorICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3Qg
YWxpZ25tZW50KTsKKworcHJpdmF0ZToKKyAgICBjaGFyKiBtX2J1bXBCYXNlIHsgbnVsbHB0ciB9
OworICAgIHNpemVfdCBtX2J1bXBPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fYnVtcExpbWl0
IHsgMCB9OworfTsKK0RFQ0xBUkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQXJlbmEpOwor
Cit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0JDb21waWxlci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGlsZXIuaAppbmRl
eCBjZGM0N2FjOWEyZWM3MGFmN2Q1ZmU0OGNkNzgxZGRmYmQwY2M1MDRhLi5mM2QwNzQzN2ZlM2U2
OWZkODA4MTk3NjBkYjllYTZmMGU2MzlmZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0JDb21waWxlci5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkNvbXBpbGVy
LmgKQEAgLTc5LDMgKzc5LDIxIEBACiAjaWYgIWRlZmluZWQoQkZBTExUSFJPVUdIKQogI2RlZmlu
ZSBCRkFMTFRIUk9VR0gKICNlbmRpZgorCisvKiBCTElLRUxZIGFuZCBCVU5MSUtFTFkgKi8KKwor
I2lmICFkZWZpbmVkKEJMSUtFTFkpICYmIEJDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyNkZWZp
bmUgQkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChCTElLRUxZKQorI2RlZmluZSBCTElLRUxZKHgpICh4KQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChCVU5MSUtFTFkpICYmIEJDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyNkZWZpbmUg
QlVOTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCisjZW5kaWYKKworI2lmICFk
ZWZpbmVkKEJVTkxJS0VMWSkKKyNkZWZpbmUgQlVOTElLRUxZKHgpICh4KQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NQVS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0NQVS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmZlNDdhMjcwZDg3YzkxODczNmNmMDlhM2Y2MmEz
NDc0ZDUyYmE2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BV
LmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIkNQVS5oIgorCisjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCisj
aW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisKKyNpZiBCT1MoREFSV0lOKQor
I2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9TKEZSRUVCU0Qp
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitp
bnQgbnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpCit7CisgICAgY29uc3QgaW50IGRlZmF1bHRJZlVu
YXZhaWxhYmxlID0gMTsKKyAgICBzdGF0aWMgaW50IHNfbnVtYmVyT2ZDb3JlcyA9IC0xOworCisg
ICAgaWYgKHNfbnVtYmVyT2ZDb3JlcyA+IDApCisgICAgICAgIHJldHVybiBzX251bWJlck9mQ29y
ZXM7CisKKyAgICBpZiAoY29uc3QgY2hhciogY29yZXNFbnYgPSBnZXRlbnYoImJtYWxsb2NfbnVt
YmVyT2ZQcm9jZXNzb3JDb3JlcyIpKSB7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29yZXM7
CisgICAgICAgIGlmIChzc2NhbmYoY29yZXNFbnYsICIldSIsICZudW1iZXJPZkNvcmVzKSA9PSAx
KSB7CisgICAgICAgICAgICBzX251bWJlck9mQ29yZXMgPSBudW1iZXJPZkNvcmVzOworICAgICAg
ICAgICAgcmV0dXJuIHNfbnVtYmVyT2ZDb3JlczsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSBibWFsbG9jX251bWJlck9mUHJvY2Vz
c29yQ29yZXM9JXNcbiIsIGNvcmVzRW52KTsKKyAgICB9CisKKyNpZiBCT1MoREFSV0lOKQorICAg
IHVuc2lnbmVkIHJlc3VsdDsKKyAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKHJlc3VsdCk7Cisg
ICAgaW50IG5hbWVbXSA9IHsKKyAgICAgICAgQ1RMX0hXLAorICAgICAgICBIV19BVkFJTENQVQor
ICAgIH07CisgICAgaW50IHN5c2N0bFJlc3VsdCA9IHN5c2N0bChuYW1lLCBzaXplb2YobmFtZSkg
LyBzaXplb2YoaW50KSwgJnJlc3VsdCwgJmxlbmd0aCwgMCwgMCk7CisKKyAgICBzX251bWJlck9m
Q29yZXMgPSBzeXNjdGxSZXN1bHQgPCAwID8gZGVmYXVsdElmVW5hdmFpbGFibGUgOiByZXN1bHQ7
CisjZWxpZiBCT1MoTElOVVgpIHx8IEJPUyhGUkVFQlNEKQorICAgIGxvbmcgc3lzY29uZlJlc3Vs
dCA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworCisgICAgc19udW1iZXJPZkNvcmVz
ID0gc3lzY29uZlJlc3VsdCA8IDAgPyBkZWZhdWx0SWZVbmF2YWlsYWJsZSA6IHN0YXRpY19jYXN0
PGludD4oc3lzY29uZlJlc3VsdCk7CisjZWxzZQorICAgIHNfbnVtYmVyT2ZDb3JlcyA9IGRlZmF1
bHRJZlVuYXZhaWxhYmxlOworI2VuZGlmCisgICAgcmV0dXJuIHNfbnVtYmVyT2ZDb3JlczsKK30K
KworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9DUFUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Yy
MmU0ZGRiMTJjYmYyNTJmNmIwN2E3NGU4NDc1YzMwZWMzNTNhZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQlBsYXRmb3JtLmgiCisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNwYWNlIGJtYWxs
b2MgeworCisjaWYgQkNQVShYODYpIHx8IEJDUFUoWDg2XzY0KQoraW5saW5lIHVpbnQ2NF90IHg4
Nl9yZHRzY3AodWludDMyX3QmIGF1eCkKK3sKKyAgICB1aW50NjRfdCByYXggPSAwOworICAgIHVp
bnQ2NF90IHJkeCA9IDA7CisgICAgYXNtIHZvbGF0aWxlKCJyZHRzY3AiIDogIj1hIiAocmF4KSwg
Ij1kIiAocmR4KSwgIj1jIiAoYXV4KSA6IDogKTsKKyAgICByZXR1cm4gKHJkeCA8PCAzMikgKyBy
YXg7Cit9CisjZW5kaWYKKworaW5saW5lIHVuc2lnbmVkIGN1cnJlbnRDUFVJbmRleCgpCit7Cisj
aWYgQk9TKERBUldJTikKKyNpZiBCQ1BVKEFSTSkKKyAgICB1aW50cHRyX3QgcDsKKyAgICBfX2Fz
bV9fKCJtcmMgcDE1LCAwLCAlW3BdLCBjMTMsIGMwLCAzIiA6IFtwXSAiPSZyIiAocCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocCAmIDB4M3VsKTsKKyNlbGlmIEJDUFUoQVJN
NjQpCisgICAgdWludDY0X3QgcDsKKyAgICBfX2FzbV9fKCJtcnMgJVtwXSwgVFBJRFJST19FTDAi
IDogW3BdICI9JnIiIChwKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwICYg
MHg3KTsKKyNlbGlmIEJDUFUoWDg2KSB8fCBCQ1BVKFg4Nl82NCkKKyAgICBzdHJ1Y3QgeworICAg
ICAgICB1aW50cHRyX3QgcDE7CisgICAgICAgIHVpbnRwdHJfdCBwMjsKKyAgICB9IHA7CisgICAg
YXNtIHZvbGF0aWxlKCJzaWR0ICVbcF0iIDogW3BdICI9Jm0iIChwKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwLnAxICYgMHhmZmYpOworI2Vsc2UKKyNlcnJvciBVbnN1cHBv
cnRlZCBhcmNoaXRlY3R1cmUKKyNlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgor
fQorCitpbnQgbnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5r
LmgKaW5kZXggMjFmYmI4ZmU3OThkZDk3ODM1YTM4Y2NmOGYxYWIwMGUzZGIyNzQzMi4uMzQ4YzI1
ZGU4MzZhM2QwNjE3YmQ1MmZmMDZmZmE3NTExY2VlZmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9DaHVuay5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsu
aApAQCAtOTMsOSArOTMsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBmb3JF
YWNoUGFnZShDaHVuayogY2h1bmssIHNpemVfdCBwYWdlU2l6ZSwgRnVuYwogaW5saW5lIENodW5r
OjpDaHVuayhzaXplX3QgcGFnZVNpemUpCiB7CiAgICAgc2l6ZV90IHNtYWxsUGFnZUNvdW50ID0g
cGFnZVNpemUgLyBzbWFsbFBhZ2VTaXplOwotICAgIGZvckVhY2hQYWdlKHRoaXMsIHBhZ2VTaXpl
LCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CisgICAgZm9yRWFjaFBhZ2UodGhpcywgcGFnZVNpemUs
IFsmXShTbWFsbFBhZ2UqIHBhZ2VzKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c21hbGxQYWdlQ291bnQ7ICsraSkKLSAgICAgICAgICAgIHBhZ2VbaV0uc2V0U2xpZGUoaSk7Cisg
ICAgICAgICAgICBwYWdlc1tpXS5pbml0aWFsaXplKGkpOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCmluZGV4IDdkMWUzNGU5N2E3NzkyZDhmZDMwNmFl
MjA1ZDZmNzAxMjNhYzhiNDEuLjEzYTJjMzdkZjY4N2JkMGEzOGRiYjRhYWQ0ZTVhZTM4MzFiYmNi
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCisr
KyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCkBAIC00MSw2ICs0MSw4
IEBAIERlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcihIZWFwJiBoZWFwKQogICAgIDogbV9oZWFwKGhl
YXApCiB7CiAgICAgQkFTU0VSVCghRW52aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJs
ZWQoKSk7CisgICAgbV9wZXJDUFVDYWNoZSA9ICZtX2hlYXAuZ2V0Q3VycmVudENQVUNhY2hlKCk7
CisgICAgbV9jYWNoZVRpbWUgPSBtYWNoX2FwcHJveGltYXRlX3RpbWUoKTsKIH0KIAogRGVhbGxv
Y2F0b3I6On5EZWFsbG9jYXRvcigpCkBAIC01MCwxNyArNTIsMjMgQEAgRGVhbGxvY2F0b3I6On5E
ZWFsbG9jYXRvcigpCiAgICAgCiB2b2lkIERlYWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiB7Ci0gICAg
VW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotCi0gICAgcHJvY2Vzc09iamVj
dExvZyhsb2NrKTsKLSAgICBtX2hlYXAuZGVhbGxvY2F0ZUxpbmVDYWNoZShsb2NrLCBsaW5lQ2Fj
aGUobG9jaykpOworICAgIHByb2Nlc3NPYmplY3RMb2coKTsKKyAgICAvLyBtX2hlYXAuZGVhbGxv
Y2F0ZUxpbmVDYWNoZShjYWNoZSgpKTsKIH0KIAotdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09i
amVjdExvZyhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrKQordm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vz
c09iamVjdExvZygpCiB7CisgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICBMaXN0
PFNtYWxsUGFnZT4gZnJlZVBhZ2VzOworICAgIGF1dG8mIGNhY2hlID0gcGVyQ1BVQ2FjaGUoKTsK
ICAgICBmb3IgKE9iamVjdCBvYmplY3QgOiBtX29iamVjdExvZykKLSAgICAgICAgbV9oZWFwLmRl
cmVmU21hbGxMaW5lKGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKGxvY2spKTsKKyAgICAgICAgbV9o
ZWFwLmRlcmVmU21hbGxMaW5lKCZoZWxkTG9jaywgb2JqZWN0LCBjYWNoZSwgZnJlZVBhZ2VzKTsK
KyAgICBsb2NrU3dpdGNoKCZoZWxkTG9jaywgbnVsbHB0cik7CiAgICAgbV9vYmplY3RMb2cuY2xl
YXIoKTsKKyAgICBpZiAoIWZyZWVQYWdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgVW5pcXVlTG9j
a0hvbGRlciBoZWFwTG9ja2VyKG1faGVhcC5tdXRleCgpKTsKKyAgICAgICAgbV9oZWFwLmRlYWxs
b2NhdGVTbWFsbFBhZ2VzKGhlYXBMb2NrZXIsIGZyZWVQYWdlcyk7CisgICAgfQogfQogCiB2b2lk
IERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCogb2JqZWN0KQpAQCAtNjksMTUg
Kzc3LDEzIEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2hlYXAuaXNMYXJnZShvYmplY3QpKSB7
Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAg
bV9oZWFwLmRlYWxsb2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOworICAgICAgICBVbmlxdWVMb2Nr
SG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CisgICAgICAgIG1faGVhcC5kZWFsbG9j
YXRlTGFyZ2UoaGVhcExvY2tlciwgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkgewot
ICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIHBy
b2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAgfQorICAgIGlmIChtX29iamVjdExvZy5zaXplKCkg
PT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKKyAgICAgICAgcHJvY2Vzc09iamVjdExvZygpOwog
CiAgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFs
bG9jYXRvci5oCmluZGV4IGYxNGZlZWE1Y2MwYjU2MzliZmZjYWE1ZGJmN2UxODFjMmI1YzJmZTMu
LmU5OTMxOGE3NWE1NWJmNDBkYTIxN2I1ZGIxYzQwNzI1OWE1MzYzYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0RlYWxsb2NhdG9yLmgKQEAgLTI2LDkgKzI2LDEyIEBACiAjaWZuZGVmIERlYWxsb2Nh
dG9yX2gKICNkZWZpbmUgRGVhbGxvY2F0b3JfaAogCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2Fj
aGUuaCIKICNpbmNsdWRlICJCRXhwb3J0LmgiCiAjaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKKyNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSA8bWFjaC9t
YWNoX3RpbWUuaD4KICNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewpAQCAt
NDYsOSArNDksMTkgQEAgY2xhc3MgRGVhbGxvY2F0b3IgewogICAgIHZvaWQgZGVhbGxvY2F0ZSh2
b2lkKik7CiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogICAgIAotICAgIHZvaWQgcHJvY2Vzc09iamVj
dExvZyhVbmlxdWVMb2NrSG9sZGVyJik7CisgICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKCk7CiAg
ICAgCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYpIHsgcmV0dXJu
IG1fbGluZUNhY2hlOyB9CisgICAgQXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hlKCkKKyAg
ICB7CisjaWYgMAorICAgICAgICB1aW50NjRfdCB0aW1lID0gbWFjaF9hcHByb3hpbWF0ZV90aW1l
KCk7CisgICAgICAgIGlmICh0aW1lIC0gbV9jYWNoZVRpbWUgPiBtX2hlYXAub25lU2Vjb25kKCkp
IHsKKyAgICAgICAgICAgIG1fcGVyQ1BVQ2FjaGUgPSAmbV9oZWFwLmdldEN1cnJlbnRDUFVDYWNo
ZSgpOworICAgICAgICAgICAgbV9jYWNoZVRpbWUgPSB0aW1lOworICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuICptX3BlckNQVUNhY2hlOworICAgIH0KIAogcHJpdmF0ZToKICAgICBi
b29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CkBAIC01Niw3ICs2OSw4IEBAIGNsYXNzIERl
YWxsb2NhdG9yIHsKIAogICAgIEhlYXAmIG1faGVhcDsKICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwg
ZGVhbGxvY2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7Ci0gICAgTGluZUNhY2hlIG1fbGlu
ZUNhY2hlOyAvLyBUaGUgSGVhcCByZW1vdmVzIGl0ZW1zIGZyb20gdGhpcyBjYWNoZS4KKyAgICB1
aW50NjRfdCBtX2NhY2hlVGltZSB7IDAgfTsKKyAgICBBcHByb3hQZXJDUFVDYWNoZSogbV9wZXJD
UFVDYWNoZSB7IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBib29sIERlYWxsb2NhdG9yOjpkZWFs
bG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9HaWdhY2FnZS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNw
cAppbmRleCBiOThjZDNhODM2YjA2ZmI0M2MxMTMzNjYzZDJiZmUwYTZiNDQyZDVlLi44ZTI0ODE3
NWVlYjliNzAwOWE3NjdmYzgzZGE2YjFjNTZjNWIyN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dp
Z2FjYWdlLmNwcApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2Fj
YWdlKCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJh
Y2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsKKyAgICBVbmlx
dWVMb2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsK
ICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxiYWNrcy5jYWxsYmFja3MpCiAgICAg
ICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3VtZW50KTsKICAgICBjYWxsYmFja3Mu
Y2FsbGJhY2tzLnNocmluaygwKTsKQEAgLTI3OCwxNCArMjc4LDE0IEBAIHZvaWQgYWRkUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVu
dCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tz
ID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsKKyAgICBVbmlxdWVM
b2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsKICAg
ICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2FsbGJhY2soZnVuY3Rpb24sIGFyZ3VtZW50KSk7
CiB9CiAKIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlv
bikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKIHsKICAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzJiBjYWxsYmFja3MgPSAqUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6Z2V0KCk7Ci0gICAg
VW5pcXVlTG9ja0hvbGRlciBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6Om11dGV4KCkp
OworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6
Om11dGV4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmNhbGxiYWNr
cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5mdW5j
dGlvbiA9PSBmdW5jdGlvbgogICAgICAgICAgICAgJiYgY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5h
cmd1bWVudCA9PSBhcmd1bWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKaW5kZXggNDk0YTJi
NTRjY2MxMzhhNGRhZDA1YmY2NjgxNmMzNjM3ZjU0ZTcxNC4uNTZkZjI4Mjk5OGU1NmZmYjI1ZWIw
YTQ3OTM2YzMzZTRlMWUzODFkYiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCkBAIC0yNSw5ICsy
NSwxMSBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCisjaW5jbHVkZSAiQXJlbmEuaCIKICNpbmNs
dWRlICJBdmFpbGFibGVNZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21taXQuaCIKICNpbmNs
dWRlICJCdW1wQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5jbHVkZSAiQ2h1bmsu
aCIKICNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKQEAg
LTY1LDYgKzY3LDE5IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgTG9ja0hvbGRlciYpCiAg
ICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDApKTsKICAg
ICB9CiAjZW5kaWYKKworICAgIHVuc2lnbmVkIGNvcmVzID0gbnVtYmVyT2ZQcm9jZXNzb3JDb3Jl
cygpOworICAgIG1fY29yZU1hc2sgPSByb3VuZFVwVG9Qb3dlck9mVHdvKGNvcmVzKSAtIDE7Cisg
ICAgbV9jYWNoZSA9IHN0YXRpY19jYXN0PEFwcHJveFBlckNQVUNhY2hlKj4oQXJlbmE6OmdldCgp
LT5hbGxvY2F0ZShzaXplb2YoQXBwcm94UGVyQ1BVQ2FjaGUpICogY29yZXMsIGFsaWdub2YoQXBw
cm94UGVyQ1BVQ2FjaGUpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
Y29yZXM7ICsraW5kZXgpCisgICAgICAgIG5ldyAoJm1fY2FjaGVbaW5kZXhdKSBBcHByb3hQZXJD
UFVDYWNoZShpbmRleCk7CisKKyAgICBzdGF0aWMgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0
aW1lYmFzZUluZm87CisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfdGltZWJhc2VfaW5mbygm
dGltZWJhc2VJbmZvKTsKKyAgICBCQVNTRVJUKGtyID09IEtFUk5fU1VDQ0VTUyk7CisgICAgQkFT
U0VSVCh0aW1lYmFzZUluZm8uZGVub20pOworICAgIEJVTlVTRUQoa3IpOworICAgIG1fb25lU2Vj
b25kID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEuMCAqICgxLjBlOSAqIHRpbWViYXNlSW5mby5k
ZW5vbSkgLyB0aW1lYmFzZUluZm8ubnVtZXIpOwogICAgIAogICAgIG1fc2NhdmVuZ2VyID0gU2Nh
dmVuZ2VyOjpnZXQoKTsKIH0KQEAgLTExNywxMSArMTMyLDMyIEBAIHZvaWQgSGVhcDo6ZGVjb21t
aXRMYXJnZVJhbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBMYXJnZVJhbmdlJiByYW5nZSwgQnVsa0Rl
Y29tbWl0CiB9CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZl
bmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCit2
b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIsIEJ1bGtEZWNv
bW1pdCYgZGVjb21taXR0ZXIpCiAjZWxzZQotdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2Nr
SG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRlZmVycmVk
RGVjb21taXRzKQordm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9j
a2VyLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRlZmVycmVkRGVjb21taXRz
KQogI2VuZGlmCiB7CisjaWYgMAorICAgIHVpbnQ2NF90IHRpbWUgPSBtYWNoX2FwcHJveGltYXRl
X3RpbWUoKTsKKyAgICBmb3IgKGF1dG8mIHBlckNQVUNhY2hlIDogbV9jYWNoZSkgeworICAgICAg
ICBhdXRvKiBsaW5lQ2FjaGUgPSBwZXJDUFVDYWNoZS5nZXRGYXN0Q2FzZSgpOworICAgICAgICBp
ZiAoIWxpbmVDYWNoZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBGSVhNRTog
V2lsbCBjaGFuZ2UgaXQgdG8gYmUgcGVyIGNhY2hlLgorICAgICAgICBmb3IgKGF1dG8mIGxpc3Qg
OiAqbGluZUNhY2hlKSB7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gJmxpc3QgLSAm
KCpsaW5lQ2FjaGUpWzBdOworICAgICAgICAgICAgZm9yIChTbWFsbFBhZ2UqIGN1cnJlbnQgPSAq
bGlzdC5iZWdpbigpOyBjdXJyZW50ICE9ICpsaXN0LmVuZCgpOykgeworICAgICAgICAgICAgICAg
IGF1dG8qIG5leHQgPSBzdGF0aWNfY2FzdDxTbWFsbFBhZ2UqPihjdXJyZW50LT5uZXh0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoKHRpbWUgLSBjdXJyZW50LT5sYXN0Q2hhaW5lZCgpKSA+IG1fb25l
U2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKGN1
cnJlbnQpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2go
Y3VycmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBu
ZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBmb3Ig
KGF1dG8mIGxpc3QgOiBtX2ZyZWVQYWdlcykgewogICAgICAgICBmb3IgKGF1dG8qIGNodW5rIDog
bGlzdCkgewogICAgICAgICAgICAgZm9yIChhdXRvKiBwYWdlIDogY2h1bmstPmZyZWVQYWdlcygp
KSB7CkBAIC0xNTAsNyArMTg2LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9s
ZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGQKIAogICAgIGZv
ciAoYXV0byYgbGlzdCA6IG1fY2h1bmtDYWNoZSkgewogICAgICAgICB3aGlsZSAoIWxpc3QuaXNF
bXB0eSgpKQotICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsobG9jaywgbGlzdC5wb3Ao
KSwgJmxpc3QgLSAmbV9jaHVua0NhY2hlWzBdKTsKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTbWFs
bENodW5rKGhlYXBMb2NrZXIsIGxpc3QucG9wKCksICZsaXN0IC0gJm1fY2h1bmtDYWNoZVswXSk7
CiAgICAgfQogCiAgICAgZm9yIChMYXJnZVJhbmdlJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7CkBA
IC0xNjMsNyArMTk5LDcgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBs
b2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGQKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgZGVjb21taXRMYXJnZVJhbmdlKGxv
Y2ssIHJhbmdlLCBkZWNvbW1pdHRlcik7CisgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShoZWFw
TG9ja2VyLCByYW5nZSwgZGVjb21taXR0ZXIpOwogICAgIH0KIAogI2lmIEJVU0UoUEFSVElBTF9T
Q0FWRU5HRSkKQEAgLTE3MiwyMSArMjA4LDIyIEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVl
TG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgc2l6ZV90JiBkCiB9
CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdo
V2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0
ZXIpCit2b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXIm
IGhlYXBMb2NrZXIsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCiB7CiAgICAgdm9pZCogbmV3
SGlnaFdhdGVyTWFyayA9IG51bGxwdHI7CiAgICAgZm9yIChMYXJnZVJhbmdlJiByYW5nZSA6IG1f
bGFyZ2VGcmVlKSB7CiAgICAgICAgIGlmIChyYW5nZS5iZWdpbigpIDw9IG1faGlnaFdhdGVybWFy
aykKICAgICAgICAgICAgIG5ld0hpZ2hXYXRlck1hcmsgPSBzdGQ6Om1pbihuZXdIaWdoV2F0ZXJN
YXJrLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmFuZ2UuYmVnaW4oKSkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywgcmFuZ2UsIGRlY29tbWl0dGVyKTsK
KyAgICAgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShoZWFwTG9ja2VyLCByYW5nZSwgZGVjb21t
aXR0ZXIpOwogICAgIH0KICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBuZXdIaWdoV2F0ZXJNYXJrOwog
fQogI2VuZGlmCiAKLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9s
ZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2Fj
aGUoTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9j
a2VyKG11dGV4KCkpOwogICAgIGZvciAoYXV0byYgbGlzdCA6IGxpbmVDYWNoZSkgewogICAgICAg
ICB3aGlsZSAoIWxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZUNsYXNz
ID0gJmxpc3QgLSAmbGluZUNhY2hlWzBdOwpAQCAtMTk1LDcgKzIzMiw3IEBAIHZvaWQgSGVhcDo6
ZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2Fj
aGUpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2Nr
SG9sZGVyJiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3Zv
aWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIs
IHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIFJFTEVBU0Vf
QkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogICAgIApAQCAtMjA1LDcgKzI0Miw3
IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAgICAgICAgIGlmICghbV9jaHVua0NhY2hlW3Bh
Z2VDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fY2h1bmtDYWNoZVtwYWdl
Q2xhc3NdLnBvcCgpOwogCi0gICAgICAgIHZvaWQqIG1lbW9yeSA9IGFsbG9jYXRlTGFyZ2UobG9j
aywgY2h1bmtTaXplLCBjaHVua1NpemUsIGFjdGlvbik7CisgICAgICAgIHZvaWQqIG1lbW9yeSA9
IGFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgY2h1bmtTaXplLCBjaHVua1NpemUsIGFjdGlvbik7
CiAgICAgICAgIGlmICghbWVtb3J5KSB7CiAgICAgICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBG
YWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtMjEzLDcgKzI1MCw3IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxv
Y2tIb2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBCiAKICAgICAgICAgQ2h1
bmsqIGNodW5rID0gbmV3IChtZW1vcnkpIENodW5rKHBhZ2VTaXplKTsKIAotICAgICAgICBtX29i
amVjdFR5cGVzLnNldChsb2NrLCBjaHVuaywgT2JqZWN0VHlwZTo6U21hbGwpOworICAgICAgICBt
X29iamVjdFR5cGVzLnNldChoZWFwTG9ja2VyLCBjaHVuaywgT2JqZWN0VHlwZTo6U21hbGwpOwog
CiAgICAgICAgIHNpemVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsKICAgICAgICAgZm9yRWFj
aFBhZ2UoY2h1bmssIHBhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CkBAIC0yMjEsNyAr
MjU4LDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYg
bG9jaywgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUEKICNpZiAhQlVTRShQQVJUSUFMX1NDQVZF
TkdFKQogICAgICAgICAgICAgcGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAjZW5k
aWYKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2NrLCB0cnVlKTsKKyAgICAg
ICAgICAgIHBhZ2UtPmluaXRIYXNGcmVlTGluZXMoKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldElu
aXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFsc2UpOwogICAgICAgICAgICAgY2h1bmstPmZyZWVQ
YWdlcygpLnB1c2gocGFnZSk7CiAgICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVhYmxlICs9IHBh
Z2VTaXplOwogICAgICAgICB9KTsKQEAgLTI0NCw5ICsyODIsOSBAQCB2b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBG
YWlsdXJlQQogICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmspOwogfQog
Ci12b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VDbGFzcykKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgQ2h1bmsqIGNodW5rLCBzaXpl
X3QgcGFnZUNsYXNzKQogewotICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxvY2ssIGNodW5rLCBPYmpl
Y3RUeXBlOjpMYXJnZSk7CisgICAgbV9vYmplY3RUeXBlcy5zZXQoaGVhcExvY2tlciwgY2h1bmss
IE9iamVjdFR5cGU6OkxhcmdlKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxv
Y2F0ZWQucmVtb3ZlKGNodW5rKTsKICAgICBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUgPSBzaXpl
OwpAQCAtMjcwLDIzICszMDgsMzYgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayhV
bmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBDaHVuayogY2h1bmssIHNpemVfdCBwYWcKICAgICBtX2xh
cmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShjaHVuaywgc2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUsIHRv
dGFsUGh5c2ljYWxTaXplKSk7CiB9CiAKLVNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiBs
aW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQorU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0
ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6ZUNsYXNzLCBBcHByb3hQZXJDUFVDYWNoZSYgcGVy
Q1BVQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIFJFTEVBU0VfQkFTU0VSVChp
c0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwogCi0gICAgaWYgKCFsaW5lQ2FjaGVbc2l6ZUNsYXNz
XS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5wb3BGcm9u
dCgpOworICAgIGJvb2wgaXNFbXB0eSA9IGZhbHNlOworICAgIFNtYWxsUGFnZSogcGFnZSA9IFsm
XSgpIC0+IFNtYWxsUGFnZSogeworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGNh
Y2hlTG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAgICAgTGluZUNhY2hlJiBs
aW5lQ2FjaGUgPSBwZXJDUFVDYWNoZS5saW5lQ2FjaGUoY2FjaGVMb2NrZXIpOworICAgICAgICAg
ICAgaWYgKCFsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBwYWdlID0gbGluZUNhY2hlW3NpemVDbGFzc10ucG9wRnJvbnQoKTsKKyAgICAgICAg
ICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRydWUpOworICAgICAg
ICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKG11dGV4KCkpOworICAgICAgICBpZiAoIW1f
bGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvKiBwYWdl
ID0gbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5wb3BGcm9udCgpOworICAgICAgICAgICAgcGFnZS0+
c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBw
YWdlOworICAgICAgICB9CiAKLSAgICBpZiAoIW1fbGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5wb3BGcm9udCgpOwor
ICAgICAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7CiAKLSAgICBtX3NjYXZlbmdl
ci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCi0gICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkg
LT4gU21hbGxQYWdlKiB7CisgICAgICAgIGlzRW1wdHkgPSB0cnVlOwogICAgICAgICBzaXplX3Qg
cGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHNpemVDbGFzcyk7Ci0gICAgICAgIAor
CiAgICAgICAgIGlmIChtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBwYWdlQ2xhc3MsIGFjdGlvbik7CisgICAgICAg
ICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVhcExvY2tlciwgcGFnZUNsYXNzLCBhY3Rpb24pOwog
ICAgICAgICBpZiAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgJiYgbV9mcmVl
UGFnZXNbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMzE0LDM4ICszNjUsMzIgQEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW4KICNpZiAhQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICBwYWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVu
Z2UoKTsKICNlbmRpZgotCisgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRp
b24odHJ1ZSk7CiAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0oKTsKKwogICAgIGlmICghcGFn
ZSkgewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxs
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgaWYgKGlzRW1wdHkpIHsK
KyAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0gbnVsbHB0cjsKKyAgICAgICAgcGFnZS0+bG9ja0Fu
ZFRyeVRvVGFrZUJpYXMoJmhlbGRMb2NrLCAmcGVyQ1BVQ2FjaGUucGFnZU11dGV4KCkpOworICAg
IH0gZWxzZQorICAgICAgICBwYWdlLT5sb2NrKCk7CiAgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNp
emVDbGFzcyk7CiAgICAgcmV0dXJuIHBhZ2U7CiB9CiAKLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsTGluZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUm
IGxpbmVDYWNoZSkKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9s
ZGVyJiBoZWFwTG9ja2VyLCBTbWFsbFBhZ2UqIHBhZ2UpCiB7Ci0gICAgQkFTU0VSVCghb2JqZWN0
LmxpbmUoKS0+cmVmQ291bnQobG9jaykpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5w
YWdlKCk7Ci0gICAgcGFnZS0+ZGVyZWYobG9jayk7Ci0KLSAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVM
aW5lcyhsb2NrKSkgewotICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7
Ci0gICAgICAgIGxpbmVDYWNoZVtwYWdlLT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKLSAgICB9
Ci0KLSAgICBpZiAocGFnZS0+cmVmQ291bnQobG9jaykpCi0gICAgICAgIHJldHVybjsKLQogICAg
IHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+c2l6ZUNsYXNz
KCkpOwogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSArPSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VDbGFzcykpOwogCi0gICAgTGlzdDxT
bWFsbFBhZ2U+OjpyZW1vdmUocGFnZSk7IC8vICdwYWdlJyBtYXkgYmUgaW4gYW55IHRocmVhZCdz
IGxpbmUgY2FjaGUuCi0gICAgCisgICAgcGFnZS0+c2V0Q2FjaGUobnVsbHB0cik7CisKICAgICBD
aHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHBhZ2UpOwogICAgIGlmIChjaHVuay0+ZnJlZVBhZ2Vz
KCkuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmsp
OwpAQCAtMzU3LDMzICs0MDIsMTIxIEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShV
bmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmCiAgICAgICAg
IG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsKIAogICAgICAgICBpZiAoIW1f
Y2h1bmtDYWNoZVtwYWdlQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGVT
bWFsbENodW5rKGxvY2ssIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnBvcCgpLCBwYWdlQ2xhc3Mp
OworICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVhcExvY2tlciwgbV9jaHVua0Nh
Y2hlW3BhZ2VDbGFzc10ucG9wKCksIHBhZ2VDbGFzcyk7CiAKICAgICAgICAgbV9jaHVua0NhY2hl
W3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CiAgICAgfQotICAgIAorCiAgICAgbV9zY2F2ZW5nZXIt
PnNjaGVkdWxlKHBhZ2VTaXplKHBhZ2VDbGFzcykpOwogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRl
U21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBz
aXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdl
Q2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rp
b24gYWN0aW9uKQordm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlcyhVbmlxdWVMb2NrSG9s
ZGVyJiBoZWFwTG9ja2VyLCBMaXN0PFNtYWxsUGFnZT4mIGZyZWVQYWdlcykKK3sKKyAgICBzaXpl
X3QgYW1vdW50ID0gMDsKKyAgICB3aGlsZSAoIWZyZWVQYWdlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgU21hbGxQYWdlKiBwYWdlID0gZnJlZVBhZ2VzLnBvcEZyb250KCk7CisgICAgICAgIHNpemVf
dCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3MocGFnZS0+c2l6ZUNsYXNzKCkpOwor
CisgICAgICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdl
LT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKKworICAgICAgICBwYWdl
LT5zZXRDYWNoZShudWxscHRyKTsKKworICAgICAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0
KHBhZ2UpOworICAgICAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygpLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChjaHVuayk7CisgICAgICAgIGNodW5r
LT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOworCisgICAgICAgIGNodW5rLT5kZXJlZigpOworCisg
ICAgICAgIGlmICghY2h1bmstPnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgIG1fZnJlZVBhZ2Vz
W3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsKKworICAgICAgICAgICAgaWYgKCFtX2NodW5rQ2Fj
aGVbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxs
Q2h1bmsoaGVhcExvY2tlciwgbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10ucG9wKCksIHBhZ2VDbGFz
cyk7CisKKyAgICAgICAgICAgIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnB1c2goY2h1bmspOwor
ICAgICAgICB9CisgICAgICAgIGFtb3VudCArPSBwYWdlU2l6ZShwYWdlQ2xhc3MpOworICAgIH0K
KworICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShhbW91bnQpOworfQorCit2b2lkIEhlYXA6OmRl
YWxsb2NhdGVTbWFsbExpbmUoU21hbGxQYWdlKiBwYWdlLCBPYmplY3Qgb2JqZWN0LCBBcHByb3hQ
ZXJDUFVDYWNoZSYgcGVyQ1BVQ2FjaGUsIExpc3Q8U21hbGxQYWdlPiYgZnJlZVBhZ2VzKQorewor
ICAgIEJVTlVTRUQob2JqZWN0KTsKKyAgICBCQVNTRVJUKCFvYmplY3QubGluZSgpLT5yZWZDb3Vu
dChwYWdlKSk7CisgICAgcGFnZS0+ZGVyZWYoKTsKKworICAgIGlmICghcGFnZS0+aGFzRnJlZUxp
bmVzKCkpIHsKKyAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKHRydWUpOworICAgICAgICAv
LyBwYWdlLT5pc09uTGlzdCgpIGNhbiBiZSBjaGFuZ2VkIGZyb20gdHJ1ZSB0byBmYWxzZSB3aXRo
b3V0IHRha2luZyBhIHBhZ2UtbG9jay4KKyAgICAgICAgLy8gQnV0IGZhbHNlIHRvIHRydWUgdHJh
bnNpdGlvbiBoYXBwZW5zIG9ubHkgd2hlbiB0aGVuIHBhZ2UtbG9jayBpcyBoZWxkLgorICAgICAg
ICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKyAgICAgICAgaWYgKHBhZ2UtPnJlZkNvdW50
KCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkp
OworCisgICAgICAgICAgICBpZiAocGFnZS0+aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gU29tZSBmcmVlIGxpbmVz
IGV4aXN0LCBidXQgdGhlIHBhZ2UgaXMgbm90IGNoYWluZWQgdG8gYW55IHRocmVhZCdzIExpbmVD
YWNoZS4KKyAgICAgICAgICAgIC8vIExldCdzIGNoYWluIGl0IHRvIHRoZSBjdXJyZW50IGZyZWVp
bmcgdGhyZWFkJ3MgTGluZUNhY2hlIGZvciByZXVzaW5nLgorICAgICAgICAgICAgcGVyQ1BVQ2Fj
aGUubGluZUNhY2hlKGxvY2tlcilbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAg
ICAgICAgICBwYWdlLT5zZXRDYWNoZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGZyZWVQYWdlcy5wdXNoKHBhZ2UpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHBhZ2UtPnJlZkNvdW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIENhY2hlIHBvaW50ZXIgaXMgdXBkYXRlZCB3aGVuIGEgcGFnZSBpcyBsb2NrZWQu
IFNpbmNlIHdlIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgcGFnZSdzIGxvY2ssIHRoZXJlIGFy
ZSBmb3VyIGNhc2VzLgorICAgIC8vCisgICAgLy8gICAgIDEuIENhY2hlIHBvaW50ZXIgaXMgbm9u
IG51bGxwdHIsIGFuZCB0aGUgcGFnZSBpcyBhY3R1YWxseSBjaGFpbmVkLgorICAgIC8vICAgICAy
LiBDYWNoZSBwb2ludGVyIGlzIG5vbiBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMganVzdCBhZnRl
ciB1bi1jaGFpbmVkIGZyb20gdGhlIGNhY2hlLgorICAgIC8vICAgICAzLiBDYWNoZSBwb2ludGVy
IGlzIG51bGxwdHIsIGFuZCB0aGUgcGFnZSBpcyBub3QgY2hhaW5lZC4KKyAgICAvLyAgICAgNC4g
Q2FjaGUgcG9pbnRlciBpcyBudWxscHRyLCBhbmQgdGhlIHBhZ2UgaXMgY2hhaW5lZCB0byB0aGUg
Z2xvYmFsIGNhY2hlLgorICAgIC8vCisgICAgLy8gRm9yICgxKSBvciAoMikgY2FzZXMsIGp1c3Qg
dGFraW5nIGEgbG9jayBvZiBjYWNoZSBpcyBmaW5lLiBBbmQgYWZ0ZXIgdGhhdCwgd2UgY2FuIGNo
ZWNrIGluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24gZmxhZyB3aGljaCB0ZWxscyB3aGV0aGVyIHRo
aXMgaXMgKDEpIG9yICgyKS4KKyAgICAvLyBGb3IgKDMpIG9yICg0KSBjYXNlcywganVzdCB0YWtp
bmcgYSBoZWFwIGxvY2sgaXMgZmluZS4gQW5kIGFmdGVyIHRoYXQsIHdlIGNhbiBjaGVjayBpbml0
aWFsaXppbmdGb3JBbGxvY2F0aW9uIGZsYWcgd2hpY2ggdGVsbHMgd2hldGhlciB0aGlzIGlzICgz
KSBvciAoNCkuCisgICAgQXBwcm94UGVyQ1BVQ2FjaGUqIGNhY2hlID0gcGFnZS0+Y2FjaGUoKTsK
KyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgTG9ja0hvbGRlciBjYWNoZUxvY2tlcihjYWNoZS0+
bXV0ZXgoKSk7CisgICAgICAgIGlmIChwYWdlLT5pbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBh
Z2UpOworICAgICAgICBmcmVlUGFnZXMucHVzaChwYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihtdXRleCgpKTsKKyAgICBpZiAo
cGFnZS0+aW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAg
TGlzdDxTbWFsbFBhZ2U+OjpyZW1vdmUocGFnZSk7CisgICAgZGVhbGxvY2F0ZVNtYWxsUGFnZSho
ZWFwTG9ja2VyLCBwYWdlKTsKK30KKwordm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
c0J5TWV0YWRhdGEoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBC
dW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVyQ1BVQ2FjaGUmIHBlckNQVUNhY2hl
LCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBCVU5VU0VEKGFjdGlvbik7CiAgICAgUkVM
RUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAKLSAgICBTbWFsbFBhZ2Uq
IHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBzaXplQ2xhc3MsIGxpbmVDYWNoZSwgYWN0
aW9uKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXpl
Q2xhc3MsIHBlckNQVUNhY2hlLCBhY3Rpb24pOwogICAgIGlmICghcGFnZSkgewogICAgICAgICBC
QVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOworICAgIEJBU1NFUlQo
IXBhZ2UtPmlzT25MaXN0KCkpOworCiAgICAgU21hbGxMaW5lKiBsaW5lcyA9IHBhZ2UtPmJlZ2lu
KCk7Ci0gICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpOworICAgIEJBU1NFUlQo
cGFnZS0+aGFzRnJlZUxpbmVzKCkpOwogCiAgICAgYXV0byBmaW5kU21hbGxCdW1wUmFuZ2UgPSBb
Jl0oc2l6ZV90JiBsaW5lTnVtYmVyKSB7CiAgICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1f
Y29uc3RhbnRzLnNtYWxsTGluZUNvdW50KCk7ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAg
aWYgKCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkgeworICAgICAgICAgICAgaWYg
KCFsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChwYWdlKSkgewogICAgICAgICAgICAgICAgIGlm
IChtX2NvbnN0YW50cy5vYmplY3RDb3VudChzaXplQ2xhc3MsIGxpbmVOdW1iZXIpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTM5Niw3ICs1Mjks
NyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSAwOwogICAgICAgICAKICAgICAgICAgZm9y
ICggOyBsaW5lTnVtYmVyIDwgbV9jb25zdGFudHMuc21hbGxMaW5lQ291bnQoKTsgKytsaW5lTnVt
YmVyKSB7Ci0gICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykp
CisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQocGFnZSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGF1dG8gbGluZU9iamVjdENvdW50ID0g
bV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5lTnVtYmVyKTsKQEAgLTQwNCw4
ICs1MzcsOCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgb2JqZWN0Q291bnQgKz0g
bGluZU9iamVjdENvdW50OwotICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ss
IGxpbmVPYmplY3RDb3VudCk7Ci0gICAgICAgICAgICBwYWdlLT5yZWYobG9jayk7CisgICAgICAg
ICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYocGFnZSwgbGluZU9iamVjdENvdW50KTsKKyAgICAg
ICAgICAgIHBhZ2UtPnJlZigpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7IGJlZ2luLCBv
YmplY3RDb3VudCB9OwogICAgIH07CkBAIC00MTMsMTUgKzU0NiwyNiBAQCB2b2lkIEhlYXA6OmFs
bG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSgKICAgICBzaXplX3QgbGluZU51bWJlciA9
IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoIWZpbmRTbWFsbEJ1bXBSYW5nZShsaW5l
TnVtYmVyKSkgewotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIGZhbHNl
KTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhmYWxzZSk7CisgICAgICAgICAg
ICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKICAgICAgICAgICAgIEJBU1NFUlQoYWN0aW9u
ID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkp
OworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7
CisgICAgICAgICAgICBwYWdlLT5zZXRDYWNoZShudWxscHRyKTsKKyAgICAgICAgICAgIHBhZ2Ut
PnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
SW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90IGZpdCBpbiB0
aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5nZUNhY2hlLmNh
cGFjaXR5KCkpIHsKLSAgICAgICAgICAgIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocGVyQ1BV
Q2FjaGUubXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgcGVyQ1BVQ2FjaGUubGluZUNhY2hlKGxv
Y2tlcilbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgICAgIHBhZ2UtPnNldENh
Y2hlKCZwZXJDUFVDYWNoZSk7CisgICAgICAgICAgICAgICAgQkFTU0VSVChwYWdlLT5pc09uTGlz
dCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1
cmVBY3Rpb246OlJldHVybk51bGwgfHwgYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpOworICAgICAg
ICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7CisgICAgICAg
ICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC00MzMsMjUgKzU3NywyNCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlN
ZXRhZGF0YSgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNC
eU9iamVjdCgKLSAgICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAot
ICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUs
Ci0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQordm9pZCBI
ZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KHNpemVfdCBzaXplQ2xhc3MsIEJ1
bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIEFwcHJv
eFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAg
QlVOVVNFRChhY3Rpb24pOwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1f
a2luZCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhbGxvY2F0b3Iuc2l6ZSgpOwotICAgIFNtYWxs
UGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcywgbGluZUNhY2hl
LCBhY3Rpb24pOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlTG9ja2VkU21hbGxQYWdl
KHNpemVDbGFzcywgcGVyQ1BVQ2FjaGUsIGFjdGlvbik7CiAgICAgaWYgKCFwYWdlKSB7CiAgICAg
ICAgIEJBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2spKTsK
KyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2VkKCkpOworICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25M
aXN0KCkpOworICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKCkpOwogCiAgICAgYXV0byBm
aW5kU21hbGxCdW1wUmFuZ2UgPSBbJl0oT2JqZWN0JiBpdCwgT2JqZWN0JiBlbmQpIHsKICAgICAg
ICAgZm9yICggOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkgewotICAgICAgICAg
ICAgaWYgKCFpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgaWYgKCFpdC5s
aW5lKCktPnJlZkNvdW50KHBhZ2UpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ2MSwxMiArNjA0LDEyIEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdCgKICAgICAgICAgY2hhciogYmVn
aW4gPSBpdC5hZGRyZXNzKCk7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0g
MDsKICAgICAgICAgZm9yICggOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkgewot
ICAgICAgICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBp
ZiAoaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgKytvYmplY3RDb3VudDsKLSAgICAgICAgICAgIGl0LmxpbmUoKS0+cmVmKGxv
Y2spOwotICAgICAgICAgICAgaXQucGFnZSgpLT5yZWYobG9jayk7CisgICAgICAgICAgICBpdC5s
aW5lKCktPnJlZihwYWdlKTsKKyAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVmKCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHsgYmVnaW4sIG9iamVjdENvdW50IH07CiAgICAgfTsKQEAgLTQ3
NSwxNSArNjE4LDI2IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVj
dCgKICAgICBPYmplY3QgZW5kKGl0ICsgcGFnZVNpemUobV9jb25zdGFudHMucGFnZUNsYXNzKHBh
Z2UtPnNpemVDbGFzcygpKSkpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFmaW5kU21h
bGxCdW1wUmFuZ2UoaXQsIGVuZCkpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5l
cyhsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMoZmFsc2Up
OworICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CiAgICAgICAgICAgICBC
QVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5j
YW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9j
YXRpb24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUobnVsbHB0cik7CisgICAg
ICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZyZWUgcmFuZ2VzIG1pZ2h0
IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBpZiAocmFuZ2VDYWNoZS5zaXplKCkgPT0g
cmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNz
XS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHBlckNQVUNhY2hlLm11dGV4KCkpOworICAgICAgICAgICAgICAgIHBlckNQVUNhY2hl
LmxpbmVDYWNoZShsb2NrZXIpW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgICAg
ICBwYWdlLT5zZXRDYWNoZSgmcGVyQ1BVQ2FjaGUpOworICAgICAgICAgICAgICAgIEJBU1NFUlQo
cGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBCQVNTRVJUKGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0
ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFs
c2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtNDk1LDcgKzY0OSw3IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1
bXBSYW5nZXNCeU9iamVjdCgKICAgICB9CiB9CiAKLUxhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRB
bGxvY2F0ZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBMYXJnZVJhbmdlJiByYW5nZSwgc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitMYXJnZVJhbmdlIEhlYXA6OnNwbGl0QW5kQWxsb2Nh
dGUoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgTGFyZ2VSYW5nZSYgcmFuZ2UsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2
ZUhlYXBLaW5kKG1fa2luZCkpOwogCkBAIC01MzcsMTMgKzY5MSwxMyBAQCBMYXJnZVJhbmdlIEhl
YXA6OnNwbGl0QW5kQWxsb2NhdGUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgTGFyZ2VSYW5nZSYg
cmFuZ2UsIHNpegogICAgICAgICBtX2xhcmdlRnJlZS5hZGQobmV4dCk7CiAgICAgfQogCi0gICAg
bV9vYmplY3RUeXBlcy5zZXQobG9jaywgQ2h1bms6OmdldChyYW5nZS5iZWdpbigpKSwgT2JqZWN0
VHlwZTo6TGFyZ2UpOworICAgIG1fb2JqZWN0VHlwZXMuc2V0KGhlYXBMb2NrZXIsIENodW5rOjpn
ZXQocmFuZ2UuYmVnaW4oKSksIE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAgIG1fbGFyZ2VBbGxv
Y2F0ZWQuc2V0KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CiAgICAgcmV0dXJuIHJhbmdl
OwogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ss
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3Zv
aWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogI2Rl
ZmluZSBBU1NFUlRfT1JfUkVUVVJOX09OX0ZBSUxVUkUoY29uZCkgZG8geyBcCiAgICAgICAgIGlm
IChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6Q3Jhc2gpIFwKQEAgLTU3MCw5ICs3MjQsOSBAQCB2
b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplLAogICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBtX2xhcmdlRnJl
ZS5yZW1vdmUoYWxpZ25tZW50LCBzaXplKTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIGlm
IChtX2hhc1BlbmRpbmdEZWNvbW1pdHMpIHsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQo
bG9jaywgWyZdKCkgeyByZXR1cm4gIW1faGFzUGVuZGluZ0RlY29tbWl0czsgfSk7CisgICAgICAg
ICAgICBtX2NvbmRpdGlvbi53YWl0KGhlYXBMb2NrZXIsIFsmXSgpIHsgcmV0dXJuICFtX2hhc1Bl
bmRpbmdEZWNvbW1pdHM7IH0pOwogICAgICAgICAgICAgLy8gTm93IHdlJ3JlIGd1YXJhbnRlZWQg
d2UncmUgbG9va2luZyBhdCBhbGwgYXZhaWxhYmxlIG1lbW9yeS4KLSAgICAgICAgICAgIHJldHVy
biBhbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgYWN0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIGFsaWdubWVudCwgc2l6ZSwgYWN0
aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVF9PUl9SRVRVUk5fT05fRkFJTFVSRSgh
dXNpbmdHaWdhY2FnZSgpKTsKQEAgLTU4Niw3ICs3NDAsNyBAQCB2b2lkKiBIZWFwOjphbGxvY2F0
ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLAogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSByYW5nZS50b3RhbFBoeXNpY2FsU2l6ZSgp
OwogCi0gICAgdm9pZCogcmVzdWx0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCByYW5nZSwgYWxp
Z25tZW50LCBzaXplKS5iZWdpbigpOworICAgIHZvaWQqIHJlc3VsdCA9IHNwbGl0QW5kQWxsb2Nh
dGUoaGVhcExvY2tlciwgcmFuZ2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKICNpZiBCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdo
V2F0ZXJtYXJrLCByZXN1bHQpOwogI2VuZGlmCkBAIC02MjYsMTMgKzc4MCwxMyBAQCBzaXplX3Qg
SGVhcDo6bGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBvYmplY3QpCiAgICAgcmV0
dXJuIG1fbGFyZ2VBbGxvY2F0ZWQuZ2V0KG9iamVjdCk7CiB9CiAKLXZvaWQgSGVhcDo6c2hyaW5r
TGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgY29uc3QgUmFuZ2UmIG9iamVjdCwgc2l6ZV90
IG5ld1NpemUpCit2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBM
b2NrZXIsIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIEJBU1NF
UlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdl
QWxsb2NhdGVkLnJlbW92ZShvYmplY3QuYmVnaW4oKSk7CiAgICAgTGFyZ2VSYW5nZSByYW5nZSA9
IExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplKTsKLSAgICBzcGxpdEFuZEFsbG9jYXRlKGxv
Y2ssIHJhbmdlLCBhbGlnbm1lbnQsIG5ld1NpemUpOworICAgIHNwbGl0QW5kQWxsb2NhdGUoaGVh
cExvY2tlciwgcmFuZ2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci0+
c2NoZWR1bGUoc2l6ZSk7CiB9CkBAIC02NDcsOCArODAxLDggQEAgdm9pZCBIZWFwOjpkZWFsbG9j
YXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkKIAogdm9pZCBIZWFwOjpl
eHRlcm5hbENvbW1pdCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKQogewotICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICBleHRlcm5hbENvbW1pdChsb2NrLCBwdHIs
IHNpemUpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjptdXRleCgpKTsK
KyAgICBleHRlcm5hbENvbW1pdChoZWFwTG9ja2VyLCBwdHIsIHNpemUpOwogfQogCiB2b2lkIEhl
YXA6OmV4dGVybmFsQ29tbWl0KFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBwdHIsIHNpemVfdCBz
aXplKQpAQCAtNjYzLDggKzgxNyw4IEBAIHZvaWQgSGVhcDo6ZXh0ZXJuYWxDb21taXQoVW5pcXVl
TG9ja0hvbGRlciYsIHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCiAKIHZvaWQgSGVhcDo6ZXh0ZXJu
YWxEZWNvbW1pdCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKQogewotICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICBleHRlcm5hbERlY29tbWl0KGxvY2ssIHB0ciwg
c2l6ZSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwor
ICAgIGV4dGVybmFsRGVjb21taXQoaGVhcExvY2tlciwgcHRyLCBzaXplKTsKIH0KIAogdm9pZCBI
ZWFwOjpleHRlcm5hbERlY29tbWl0KFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBwdHIsIHNpemVf
dCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmggYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAppbmRleCA1NDlkZDI0ZjZjNTg5NjQ2Y2QyMjYwNGQ4
YzliNDllZjBjNzQ1MDQzLi4wNzQ1MzAxNWU1ZDVkOWI0NDA1YmVhODJiN2I5YTYzNDczM2JhN2Y1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAorKysgYi9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0hlYXAuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBIZWFwX2gK
ICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcHByb3hQZXJDUFVDYWNoZS5oIgogI2luY2x1
ZGUgIkJ1bXBSYW5nZS5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAiRmFpbHVyZUFj
dGlvbi5oIgpAQCAtNjIsMTAgKzYzLDExIEBAIGNsYXNzIEhlYXAgewogICAgIAogICAgIEhlYXBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKLSAgICB2b2lkIGFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUNsYXNzLAot
ICAgICAgICBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWls
dXJlQWN0aW9uKTsKLSAgICB2b2lkIGRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xkZXImLCBP
YmplY3QsIExpbmVDYWNoZSYpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlxdWVM
b2NrSG9sZGVyJiwgTGluZUNhY2hlJik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
cyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBBcHBy
b3hQZXJDUFVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgZGVyZWZTbWFsbExpbmUo
TXV0ZXgqKiwgT2JqZWN0LCBBcHByb3hQZXJDUFVDYWNoZSYsIExpc3Q8U21hbGxQYWdlPiYpOwor
ICAgIHZvaWQgZGVhbGxvY2F0ZUxpbmVDYWNoZShMaW5lQ2FjaGUmKTsKKyAgICB2b2lkIGRlYWxs
b2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYsIFNtYWxsUGFnZSopOworICAgIHZvaWQg
ZGVhbGxvY2F0ZVNtYWxsUGFnZXMoVW5pcXVlTG9ja0hvbGRlciYsIExpc3Q8U21hbGxQYWdlPiYp
OwogCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90LCBGYWlsdXJlQWN0aW9uKTsKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJn
ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCopOwpAQCAtOTIsNiArOTQsMTUgQEAgY2xhc3MgSGVh
cCB7CiAKICAgICB2b2lkIG1hcmtBbGxMYXJnZUFzRWxpZ2liaWxlKGNvbnN0IExvY2tIb2xkZXIm
KTsKIAorICAgIEFwcHJveFBlckNQVUNhY2hlJiBnZXRDdXJyZW50Q1BVQ2FjaGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVbY3VycmVudENQVUluZGV4KCkgJiBtX2NvcmVNYXNrXTsK
KyAgICB9CisgICAgdWludDY0X3Qgb25lU2Vjb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX29uZVNlY29uZDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBkZWNvbW1pdExh
cmdlUmFuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIExhcmdlUmFuZ2UmLCBCdWxrRGVjb21taXQmKTsK
IApAQCAtMTA5LDEzICsxMjAsMTEgQEAgY2xhc3MgSGVhcCB7CiAgICAgdm9pZCogZ2lnYWNhZ2VC
YXNlUHRyKCk7IC8vIE1heSBjcmFzaCBpZiAhdXNpbmdHaWdhY2FnZSgpLgogICAgIHNpemVfdCBn
aWdhY2FnZVNpemUoKTsKIAotICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFk
YXRhKFVuaXF1ZUxvY2tIb2xkZXImLAotICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxs
b2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAg
ICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoVW5pcXVlTG9ja0hvbGRlciYs
Ci0gICAgICAgIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNo
ZSYsIExpbmVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1
bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1w
UmFuZ2VDYWNoZSYsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7CisgICAgdm9p
ZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBB
bGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYsIEFwcHJveFBlckNQVUNhY2hlJiwgRmFpbHVyZUFj
dGlvbik7CiAKLSAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxvY2tIb2xk
ZXImLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKLSAgICB2
b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoVW5pcXVlTG9ja0hvbGRlciYsIE9iamVjdCwgTGluZUNh
Y2hlJik7CisgICAgU21hbGxQYWdlKiBhbGxvY2F0ZUxvY2tlZFNtYWxsUGFnZShzaXplX3Qgc2l6
ZUNsYXNzLCBBcHByb3hQZXJDUFVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOworICAgIHZvaWQgZGVh
bGxvY2F0ZVNtYWxsTGluZShTbWFsbFBhZ2UqLCBPYmplY3QsIEFwcHJveFBlckNQVUNhY2hlJiwg
TGlzdDxTbWFsbFBhZ2U+Jik7CiAKICAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVM
b2NrSG9sZGVyJiwgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUFjdGlvbik7CiAgICAgdm9pZCBk
ZWFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiwgQ2h1bmsqLCBzaXplX3QgcGFn
ZUNsYXNzKTsKQEAgLTE0Myw2ICsxNTIsMTAgQEAgY2xhc3MgSGVhcCB7CiAgICAgc2l6ZV90IG1f
Zm9vdHByaW50IHsgMCB9OwogICAgIHNpemVfdCBtX2ZyZWVhYmxlTWVtb3J5IHsgMCB9OwogCisg
ICAgQXBwcm94UGVyQ1BVQ2FjaGUqIG1fY2FjaGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQg
bV9jb3JlTWFzayB7IDAgfTsKKyAgICB1aW50NjRfdCBtX29uZVNlY29uZCB7IDAgfTsKKwogI2lm
IEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICBQaHlzaWNhbFBhZ2VNYXAgbV9waHlzaWNh
bFBhZ2VNYXA7CiAjZW5kaWYKQEAgLTE1MiwyMSArMTY1LDIxIEBAIGNsYXNzIEhlYXAgewogI2Vu
ZGlmCiB9OwogCi1pbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcygKLSAg
ICBVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLAotICAgIEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsCi0gICAgTGluZUNh
Y2hlJiBsaW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQoraW5saW5lIHZvaWQgSGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwgQXBwcm94UGVyQ1BVQ2FjaGUm
IHBlckNQVUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoc2l6ZUNsYXNz
IDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQotICAgICAgICByZXR1cm4gYWxs
b2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9y
LCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUsIGFjdGlvbik7Ci0gICAgcmV0dXJuIGFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzQnlPYmplY3QobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2Fj
aGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxCdW1w
UmFuZ2VzQnlNZXRhZGF0YShzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgcGVyQ1BV
Q2FjaGUsIGFjdGlvbik7CisgICAgcmV0dXJuIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmpl
Y3Qoc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIHJhbmdlQ2FjaGUsIHBlckNQVUNhY2hlLCBhY3Rpb24p
OwogfQogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShVbmlxdWVMb2NrSG9sZGVy
JiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKK2lubGluZSB2b2lk
IEhlYXA6OmRlcmVmU21hbGxMaW5lKE11dGV4KiogaGVsZExvY2ssIE9iamVjdCBvYmplY3QsIEFw
cHJveFBlckNQVUNhY2hlJiBwZXJDUFVDYWNoZSwgTGlzdDxTbWFsbFBhZ2U+JiBmcmVlUGFnZXMp
CiB7Ci0gICAgaWYgKCFvYmplY3QubGluZSgpLT5kZXJlZihsb2NrKSkKKyAgICBTbWFsbFBhZ2Uq
IHBhZ2UgPSBvYmplY3QucGFnZSgpOworICAgIHBhZ2UtPnN3aXRjaExvY2soaGVsZExvY2spOwor
ICAgIEJBU1NFUlQocGFnZS0+aXNMb2NrZWQoKSk7CisgICAgaWYgKCFvYmplY3QubGluZSgpLT5k
ZXJlZihwYWdlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRlYWxsb2NhdGVTbWFsbExpbmUobG9j
aywgb2JqZWN0LCBsaW5lQ2FjaGUpOworICAgIGRlYWxsb2NhdGVTbWFsbExpbmUocGFnZSwgb2Jq
ZWN0LCBwZXJDUFVDYWNoZSwgZnJlZVBhZ2VzKTsKIH0KIAogaW5saW5lIGJvb2wgSGVhcDo6aXNM
YXJnZSh2b2lkKiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xp
c3QuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCmluZGV4IDYzOWVkYzllNGY2ZWNi
MzNhM2ZmYmNlNTMxMzBkMjJiMjk4YWMyYTYuLjNkYTc1YjMyMmM0MjE3NzQ4MDQ0YmZkMTQ0MWJm
MDQwMmY1Mzk1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCisr
KyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCkBAIC0zMiw2ICszMiwxMiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IExpc3ROb2RlIHsKICAgICBMaXN0Tm9kZTxUPiogcHJl
diB7IG51bGxwdHIgfTsKICAgICBMaXN0Tm9kZTxUPiogbmV4dCB7IG51bGxwdHIgfTsKKworICAg
IGJvb2wgaXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFTU0VSVCghIXByZXYgPT0g
ISFuZXh0KTsKKyAgICAgICAgcmV0dXJuICEhcHJldjsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oCmluZGV4IGY0Y2MyYWE0MTFjOTI4MzIyMTI5
MWNhODU4MDIwZDMwMThhYTIzYWQuLmJlNmEzZjFiYzFiOTNkMmEzNmZhNDhkODJhMThhMGM5ZWU0
MWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTXV0ZXguaAorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKQEAgLTQ4LDkgKzQ4LDEyIEBAIGNsYXNzIE11
dGV4IHsKICAgICBib29sIHRyeV9sb2NrKCk7CiAgICAgdm9pZCB1bmxvY2soKTsKIAorICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBCRVhQT1JUIHZvaWQgbG9ja1Ns
b3dDYXNlKCk7CiAKKyAgICAvLyBFbnN1cmUgdGhhdCBNdXRleCBpcyB6ZXJvLWluaXRpYWxpemVk
LiBTbWFsbFBhZ2UgcmVsaWVzIG9uIHRoYXQuCiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9mbGFn
IHsgZmFsc2UgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2lzU3Bpbm5pbmcgeyBmYWxzZSB9
OwogfTsKQEAgLTkyLDQgKzk1LDIwIEBAIGlubGluZSB2b2lkIE11dGV4Ojp1bmxvY2soKQogICAg
IG1fZmxhZy5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiB9CiAKK2lu
bGluZSBib29sIE11dGV4Ojppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmxhZzsK
K30KKworaW5saW5lIHZvaWQgbG9ja1N3aXRjaChNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9j
aykKK3sKKyAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAoKmhlbGRMb2NrKS0+dW5sb2NrKCk7Cisg
ICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICBpZiAobG9jaykKKyAgICAgICAgbG9jay0+bG9jaygp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9j
ZXNzLmNwcAppbmRleCBkODJmMjViNWU5OGRkYTljYTZmMGUzM2FkNDgxNTJjODFkY2QyZGY3Li44
NTM3OGU5YmEyNDRkYTI2NGM5OGI0YzEyNTJhZWFjMDY2ZDM2Y2ZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvUGVyUHJvY2Vzcy5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlBlclBy
b2Nlc3MuaCIKIAotI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKKyNpbmNsdWRlICJBcmVuYS5oIgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTM1LDI5ICszNSw4
IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHN0YXRpYyBNdXRl
eCBzX211dGV4OwogCi1zdGF0aWMgY2hhciogc19idW1wQmFzZTsKLXN0YXRpYyBzaXplX3Qgc19i
dW1wT2Zmc2V0Owotc3RhdGljIHNpemVfdCBzX2J1bXBMaW1pdDsKLQogc3RhdGljIFBlclByb2Nl
c3NEYXRhKiBzX3RhYmxlW3RhYmxlU2l6ZV07CiAKLS8vIFJldHVybnMgemVyby1maWxsZWQgbWVt
b3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KLXN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKLXsKLSAgICBzX2J1bXBPZmZzZXQgPSBy
b3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc19idW1wT2Zmc2V0KTsKLSAgICB2b2lkKiBy
ZXN1bHQgPSBzX2J1bXBCYXNlICsgc19idW1wT2Zmc2V0OwotICAgIHNfYnVtcE9mZnNldCArPSBz
aXplOwotICAgIGlmIChzX2J1bXBPZmZzZXQgPD0gc19idW1wTGltaXQpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgCi0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUp
OwotICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKLSAg
ICBzX2J1bXBCYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pOwotICAgIHNfYnVt
cE9mZnNldCA9IDA7Ci0gICAgc19idW1wTGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsKLSAgICByZXR1
cm4gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQogUGVyUHJvY2Vzc0RhdGEqIGdldFBl
clByb2Nlc3NEYXRhKHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNp
emVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQogewogICAgIExvY2tIb2xkZXIgbG9jayhzX211
dGV4KTsKQEAgLTc2LDEwICs1NSwxMSBAQCBQZXJQcm9jZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0Rh
dGEodW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciogZGlzYW1iaWd1YXRvciwgc2l6ZQogICAgIAog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBDcmVhdGluZyBu
ZXcgJXNcbiIsIGdldHBpZCgpLCBkaXNhbWJpZ3VhdG9yKTsKLSAgICB2b2lkKiByYXdEYXRhUHRy
ID0gYWxsb2NhdGUoc2l6ZW9mKFBlclByb2Nlc3NEYXRhKSwgc3RkOjphbGlnbm1lbnRfb2Y8UGVy
UHJvY2Vzc0RhdGE+Ojp2YWx1ZSk7CisgICAgYXV0byogYXJlbmEgPSBBcmVuYTo6Z2V0KCk7Cisg
ICAgdm9pZCogcmF3RGF0YVB0ciA9IGFyZW5hLT5hbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vzc0Rh
dGEpLCBzdGQ6OmFsaWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKICAgICBQZXJQ
cm9jZXNzRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFBlclByb2Nlc3NEYXRhKj4ocmF3RGF0YVB0
cik7CiAgICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRpc2FtYmlndWF0b3I7Ci0gICAgZGF0YS0+
bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKKyAgICBkYXRhLT5tZW1vcnkgPSBh
cmVuYS0+YWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKICAgICBkYXRhLT5zaXplID0gc2l6ZTsK
ICAgICBkYXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiAgICAgZGF0YS0+bmV4dCA9IGJ1Y2tl
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAppbmRleCA2MTA2NzhhNjE1N2NlN2Yy
MTNmYjY2YjhjN2VlNGFhZDE3OTRmMTI3Li41NTY0MjdhNzcwYWVmMjYzNjUzYjQ0Y2RjZWYwNjQz
ZjI2MTg1MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5j
cHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCkBAIC05Niw4ICs5
Niw4IEBAIFNjYXZlbmdlcjo6U2NhdmVuZ2VyKGNvbnN0IExvY2tIb2xkZXImKQogCiB2b2lkIFNj
YXZlbmdlcjo6cnVuKCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgcnVu
KGxvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgIHJ1bihsb2NrZXIp
OwogfQogCiB2b2lkIFNjYXZlbmdlcjo6cnVuKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTA4LDgg
KzEwOCw4IEBAIHZvaWQgU2NhdmVuZ2VyOjpydW4oY29uc3QgTG9ja0hvbGRlciYpCiAKIHZvaWQg
U2NhdmVuZ2VyOjpydW5Tb29uKCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0g
ICAgcnVuU29vbihsb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKKyAgICBy
dW5Tb29uKGxvY2tlcik7CiB9CiAKIHZvaWQgU2NhdmVuZ2VyOjpydW5Tb29uKGNvbnN0IExvY2tI
b2xkZXImKQpAQCAtMTI4LDExICsxMjgsMTEgQEAgdm9pZCBTY2F2ZW5nZXI6OmRpZFN0YXJ0R3Jv
d2luZygpCiAKIHZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShz
aXplX3QgYnl0ZXMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgIHNjaGVk
dWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGxvY2ssIGJ5dGVzKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtdXRleCgpKTsKKyAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShsb2NrZXIs
IGJ5dGVzKTsKIH0KIAotdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNz
dXJlKGNvbnN0IExvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBieXRlcykKK3ZvaWQgU2NhdmVuZ2Vy
OjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIs
IHNpemVfdCBieXRlcykKIHsKICAgICBtX3NjYXZlbmdlckJ5dGVzICs9IGJ5dGVzOwogICAgIGlm
IChtX3NjYXZlbmdlckJ5dGVzIDwgc2NhdmVuZ2VyQnl0ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNr
KQpAQCAtMTQ3LDE5ICsxNDcsMTkgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1l
bW9yeVByZXNzdXJlKGNvbnN0IExvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBieXQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNlOwotICAgIHJ1bihsb2Nr
KTsKKyAgICBydW4obG9ja2VyKTsKIH0KIAogdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlKHNpemVf
dCBieXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgc2NoZWR1bGVJ
ZlVuZGVyTWVtb3J5UHJlc3N1cmUobG9jaywgYnl0ZXMpOworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG11dGV4KCkpOworICAgIHNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGxvY2tlciwgYnl0
ZXMpOwogICAgIAogICAgIGlmICh3aWxsUnVuU29vbigpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNlOwotICAgIHJ1blNvb24obG9jayk7Cisg
ICAgcnVuU29vbihsb2NrZXIpOwogfQogCiBpbmxpbmUgdm9pZCBkdW1wU3RhdHMoKQpAQCAtMTgz
LDE0ICsxODMsMTQgQEAgaW5saW5lIHZvaWQgZHVtcFN0YXRzKCkKIAogc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBTY2F2ZW5nZXI6OnRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UoKQogewotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2tlcihtdXRleCgpKTsKICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkg
LSBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lKTsKIH0KIAogI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5H
RSkKIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0UGFy
dGlhbFNjYXZlbmdlKCkKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Cisg
ICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7CiAgICAgcmV0dXJuIHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9sYXN0UGFydGlhbFNjYXZlbmdlVGltZSk7CiB9CiAj
ZW5kaWYKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogICAg
IGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVuaXF1ZUxvY2tIb2xk
ZXIgbG9jayhtX3NjYXZlbmdpbmdNdXRleCk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIo
bV9zY2F2ZW5naW5nTXV0ZXgpOwogCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZnByaW50
ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBAIC0yMjMs
MTQgKzIyMywxNCBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogI2lmICFCVVNFKFBBUlRJ
QUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBzaXplX3QgZGVmZXJyZWREZWNvbW1pdHMgPSAwOwog
I2VuZGlmCi0gICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7
CisgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAg
ICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCi0gICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgp
LT5hdChpKS5zY2F2ZW5nZShsb2NrLCBkZWNvbW1pdHRlcik7CisgICAgICAgICAgICAgICAgUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShoZWFwTG9j
a2VyLCBkZWNvbW1pdHRlcik7CiAjZWxzZQotICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVy
SGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UobG9jaywgZGVjb21taXR0ZXIs
IGRlZmVycmVkRGVjb21taXRzKTsKKyAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBL
aW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLnNjYXZlbmdlKGhlYXBMb2NrZXIsIGRlY29tbWl0dGVy
LCBkZWZlcnJlZERlY29tbWl0cyk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRlY29tbWl0dGVyLnByb2Nlc3NFYWdlcigpOwpAQCAtMjQ4LDExICsyNDgsMTEgQEAgdm9pZCBT
Y2F2ZW5nZXI6OnNjYXZlbmdlKCkKIAogICAgICAgICB7CiAgICAgICAgICAgICBQcmludFRpbWUg
cHJpbnRUaW1lKCJmdWxsIHNjYXZlbmdlIG1hcmsgYWxsIGFzIGVsaWdpYmxlIHRpbWUiKTsKLSAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjptdXRleCgpKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2
ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXQoKS0+YXQoaSkubWFya0FsbExhcmdlQXNFbGlnaWJpbGUobG9jayk7CisgICAgICAgICAg
ICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5tYXJrQWxs
TGFyZ2VBc0VsaWdpYmlsZShoZWFwTG9ja2VyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogICAg
IH0KIAogICAgIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAgICAgICAgbV9sYXN0RnVs
bFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAgIH0K
IH0KQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKCkK
ICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2sobV9zY2F2ZW5naW5nTXV0ZXgpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
a2VyKG1fc2NhdmVuZ2luZ011dGV4KTsKIAogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAt
Mjk3LDE1ICsyOTcsMTUgQEAgdm9pZCBTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2ZW5nZSgpCiAgICAg
ICAgIEJ1bGtEZWNvbW1pdCBkZWNvbW1pdHRlcjsKICAgICAgICAgewogICAgICAgICAgICAgUHJp
bnRUaW1lIHByaW50VGltZSgiXG5wYXJ0aWFsU2NhdmVuZ2UgdW5kZXIgbG9jayB0aW1lIik7Ci0g
ICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAgICAgICAgICAg
IGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAg
ICBzaXplX3QgZnJlZWFibGVNZW1vcnkgPSBoZWFwLmZyZWVhYmxlTWVtb3J5KGxvY2spOworICAg
ICAgICAgICAgICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeSA9IGhlYXAuZnJlZWFibGVNZW1vcnko
aGVhcExvY2tlcik7CiAgICAgICAgICAgICAgICAgaWYgKGZyZWVhYmxlTWVtb3J5IDwgNCAqIE1C
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBoZWFwLnNj
YXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxvY2ssIGRlY29tbWl0dGVyKTsKKyAgICAgICAgICAgICAg
ICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGhlYXBMb2NrZXIsIGRlY29tbWl0dGVyKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0VhZ2VyKCk7
CkBAIC0zMTgsMTIgKzMxOCwxMiBAQCB2b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKCkK
IAogICAgICAgICB7CiAgICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJwYXJ0aWFsU2Nh
dmVuZ2UgbWFyayBhbGwgYXMgZWxpZ2libGUgdGltZSIpOwotICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgICAgICAgICAgTG9ja0hvbGRlciBoZWFwTG9ja2Vy
KEhlYXA6Om11dGV4KCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSGVhcHM7
IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGljX2Nh
c3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQo
KS0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaGVhcC5tYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShs
b2NrKTsKKyAgICAgICAgICAgICAgICBoZWFwLm1hcmtBbGxMYXJnZUFzRWxpZ2liaWxlKGhlYXBM
b2NrZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzQ1LDcgKzM0NSw3
IEBAIHZvaWQgU2NhdmVuZ2VyOjpwYXJ0aWFsU2NhdmVuZ2UoKQogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAgICAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAgICAgICAgbV9sYXN0UGFydGlhbFNjYXZlbmdlVGlt
ZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAgIH0KIH0KQEAgLTM1NSwx
MSArMzU1LDExIEBAIHNpemVfdCBTY2F2ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KCkKIHsKICAgICBz
aXplX3QgcmVzdWx0ID0gMDsKICAgICB7Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhI
ZWFwOjptdXRleCgpKTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6
Om11dGV4KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewog
ICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihp
KSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQgKz0gUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5mcmVlYWJsZU1lbW9yeShs
b2NrKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+
Pjo6Z2V0KCktPmF0KGkpLmZyZWVhYmxlTWVtb3J5KGhlYXBMb2NrZXIpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC00MTIsMTMgKzQxMiwxMyBAQCB2b2lkIFNjYXZlbmdlcjo6dGhyZWFkUnVuTG9v
cCgpCiAgICAgCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OlNsZWVwKSB7Ci0gICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7
Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KGxvY2ssIFsmXSgpIHsgcmV0dXJuIG1fc3Rh
dGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKKyAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
a2VyKG11dGV4KCkpOworICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChsb2NrZXIsIFsmXSgp
IHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlJ1blNvb24pIHsKLSAgICAgICAgICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKLSAgICAgICAgICAgIG1fY29uZGl0aW9u
LndhaXRfZm9yKGxvY2ssIG1fd2FpdFRpbWUsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3Rh
dGU6OlJ1blNvb247IH0pOworICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIobXV0
ZXgoKSk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0X2Zvcihsb2NrZXIsIG1fd2FpdFRp
bWUsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlJ1blNvb247IH0pOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlNsZWVwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmgKaW5kZXggZDliNzRhYjhiOWZlMzllMDAwOTI4YmZiNjY1M2U1MDVi
ODljZmQyMi4uZGUyNjcyMDVlODJjNzRkNjEwMTVjMGFiOWViMjA5NmE2NWMxYjhiMCAxMDA2NDQK
LS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaAorKysgYi9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oCkBAIC0yOSwxNSArMjksMjEgQEAKICNpbmNsdWRlICJC
QXNzZXJ0LmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNsdWRlICJPYmplY3RUeXBlLmgiCisj
aW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBibWFs
bG9jIHsKIAogY2xhc3MgU21hbGxMaW5lIHsKIHB1YmxpYzoKLSAgICB2b2lkIHJlZihVbmlxdWVM
b2NrSG9sZGVyJiwgdW5zaWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wgZGVyZWYoVW5pcXVlTG9j
a0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNvdW50KFVuaXF1ZUxvY2tIb2xkZXImKSB7IHJl
dHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCByZWYoU21hbGxQYWdlKiwgdW5zaWduZWQgY2hh
ciA9IDEpOworICAgIGJvb2wgZGVyZWYoU21hbGxQYWdlKik7CisgICAgdW5zaWduZWQgcmVmQ291
bnQoU21hbGxQYWdlKiBwYWdlKQorICAgIHsKKyAgICAgICAgQlVOVVNFRChwYWdlKTsKKyAgICAg
ICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7
CisgICAgfQogICAgIAogICAgIGNoYXIqIGJlZ2luKCk7CiAgICAgY2hhciogZW5kKCk7CkBAIC01
MSwxNCArNTcsMTggQEAgc3RhdGljX2Fzc2VydCgKIAogfTsKIAotaW5saW5lIHZvaWQgU21hbGxM
aW5lOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYsIHVuc2lnbmVkIGNoYXIgcmVmQ291bnQpCitpbmxp
bmUgdm9pZCBTbWFsbExpbmU6OnJlZihTbWFsbFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIGNoYXIgcmVm
Q291bnQpCiB7CisgICAgQlVOVVNFRChwYWdlKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmlzTG9ja2Vk
KCkpOwogICAgIEJBU1NFUlQoIW1fcmVmQ291bnQpOwogICAgIG1fcmVmQ291bnQgPSByZWZDb3Vu
dDsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxMaW5lOjpkZXJlZihVbmlxdWVMb2NrSG9sZGVyJikK
K2lubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYoU21hbGxQYWdlKiBwYWdlKQogeworICAgIEJV
TlVTRUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKICAgICBCQVNTRVJU
KG1fcmVmQ291bnQpOwogICAgIC0tbV9yZWZDb3VudDsKICAgICByZXR1cm4gIW1fcmVmQ291bnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAppbmRleCA0MzVlNWY3MDk3ODBiNjY3MzI1MDdk
ZDZmYzEyMjFiN2NlZTZlN2M5Li5kNzc1MjE4YWY5YTdkYzYyMGIyMmEwNjc0NjExY2QxNGNjOGU4
MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKQEAgLTM0LDE5ICszNCwzMyBAQAog
CiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK2NsYXNzIEFwcHJveFBlckNQVUNhY2hlOwogY2xhc3Mg
U21hbGxMaW5lOwogCiBjbGFzcyBTbWFsbFBhZ2UgOiBwdWJsaWMgTGlzdE5vZGU8U21hbGxQYWdl
PiB7CiBwdWJsaWM6Ci0gICAgdm9pZCByZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIGJvb2wg
ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNvdW50KFVuaXF1ZUxv
Y2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCByZWYoKTsKKyAgICBi
b29sIGRlcmVmKCk7CisgICAgdW5zaWduZWQgcmVmQ291bnQoKQorICAgIHsKKyAgICAgICAgQkFT
U0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAg
IAogICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7IHJldHVybiBtX3NpemVDbGFzczsgfQogICAgIHZv
aWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXplQ2xhc3MpIHsgbV9zaXplQ2xhc3MgPSBzaXplQ2xh
c3M7IH0KICAgICAKLSAgICBib29sIGhhc0ZyZWVMaW5lcyhVbmlxdWVMb2NrSG9sZGVyJikgY29u
c3QgeyByZXR1cm4gbV9oYXNGcmVlTGluZXM7IH0KLSAgICB2b2lkIHNldEhhc0ZyZWVMaW5lcyhV
bmlxdWVMb2NrSG9sZGVyJiwgYm9vbCBoYXNGcmVlTGluZXMpIHsgbV9oYXNGcmVlTGluZXMgPSBo
YXNGcmVlTGluZXM7IH0KKyAgICBib29sIGhhc0ZyZWVMaW5lcygpIGNvbnN0CisgICAgeworICAg
ICAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV9oYXNGcmVlTGluZXM7
CisgICAgfQorICAgIHZvaWQgc2V0SGFzRnJlZUxpbmVzKGJvb2wgaGFzRnJlZUxpbmVzKQorICAg
IHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgbV9oYXNGcmVlTGluZXMg
PSBoYXNGcmVlTGluZXM7CisgICAgfQorICAgIHZvaWQgaW5pdEhhc0ZyZWVMaW5lcygpIHsgbV9o
YXNGcmVlTGluZXMgPSB0cnVlOyB9CiAgICAgCiAgICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkg
eyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBh
Z2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBtX2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlz
aWNhbFBhZ2VzOyB9CkBAIC02MCwxNyArNzQsOTggQEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGlj
IExpc3ROb2RlPFNtYWxsUGFnZT4gewogICAgIFNtYWxsTGluZSogYmVnaW4oKTsKIAogICAgIHVu
c2lnbmVkIGNoYXIgc2xpZGUoKSBjb25zdCB7IHJldHVybiBtX3NsaWRlOyB9Ci0gICAgdm9pZCBz
ZXRTbGlkZSh1bnNpZ25lZCBjaGFyIHNsaWRlKSB7IG1fc2xpZGUgPSBzbGlkZTsgfQotICAgIAor
CisgICAgYm9vbCBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9p
bml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRJbml0aWFsaXppbmdGb3JB
bGxvY2F0aW9uKGJvb2wgaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbikgeyBtX2luaXRpYWxpemlu
Z0ZvckFsbG9jYXRpb24gPSBpbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uOyB9CisKKyAgICBBcHBy
b3hQZXJDUFVDYWNoZSogY2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlOyB9CisgICAgdm9p
ZCBzZXRDYWNoZShBcHByb3hQZXJDUFVDYWNoZSogY2FjaGUpIHsgbV9jYWNoZSA9IGNhY2hlOyB9
CisKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgY2hhciBzbGlkZSkKKyAgICB7CisgICAg
ICAgIG1fc2xpZGUgPSBzbGlkZTsKKyAgICAgICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0
ZXg7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tdXRleFB0ci0+aXNMb2NrZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgTXV0ZXgqIGhlbGRMb2NrID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIE11dGV4KiBsb2NrID0gbV9tdXRleFB0cjsKKyAgICAgICAg
ICAgIGlmIChsb2NrV2l0aFVuYmlhcygmaGVsZExvY2ssIGxvY2spKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgbV9tdXRleFB0ci0+dW5sb2NrKCk7
CisgICAgfQorCisgICAgdm9pZCBzd2l0Y2hMb2NrKE11dGV4KiogaGVsZExvY2spCisgICAgewor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7
CisgICAgICAgICAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAgICAg
ICAgICgqaGVsZExvY2spLT51bmxvY2soKTsKKworICAgICAgICAgICAgaWYgKGxvY2tXaXRoVW5i
aWFzKGhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBib29sIGxvY2tXaXRoVW5iaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4
KiBsb2NrKQorICAgIHsKKyAgICAgICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICAgICAgaWYgKEJM
SUtFTFkobG9jay0+dHJ5X2xvY2soKSkpCisgICAgICAgICAgICByZXR1cm4gbG9jayA9PSBtX211
dGV4UHRyOworCisgICAgICAgIC8vIFdlIGZvdW5kIHRoYXQgbG9jayBpcyBjb250ZW5kZWQgYmVj
YXVzZSB0cnktbG9jayBmYWlsZWQuCisgICAgICAgIGxvY2stPmxvY2soKTsKKyAgICAgICAgaWYg
KGxvY2sgIT0gbV9tdXRleFB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAobG9jayAhPSAmbV9mYWxsYmFja011dGV4KSB7CisgICAgICAgICAgICAvLyBDb250ZW5k
ZWQgYW5kIHVzaW5nIHBlci1jcHUgbG9jay4gQ2hhbmdlIHRoaXMgU21hbGxQYWdlJ3MgbG9jayB0
byBmaW5lLWdyYWluZWQgZmFsbGJhY2sgbG9jay4KKyAgICAgICAgICAgIG1fZmFsbGJhY2tNdXRl
eC5sb2NrKCk7CisgICAgICAgICAgICBtX211dGV4UHRyID0gJm1fZmFsbGJhY2tNdXRleDsKKyAg
ICAgICAgICAgIGxvY2stPnVubG9jaygpOworICAgICAgICAgICAgKmhlbGRMb2NrID0gJm1fZmFs
bGJhY2tNdXRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvY2tBbmRUcnlUb1Rha2VCaWFzKE11dGV4KiogaGVsZExvY2ssIE11dGV4KiBsb2Nr
VG9CaWFzVG8pCisgICAgeworICAgICAgICBtX211dGV4UHRyID0gbG9ja1RvQmlhc1RvOworICAg
ICAgICBCQVNTRVJUKG1fbXV0ZXhQdHIgPT0gbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgbG9ja1N3
aXRjaChoZWxkTG9jaywgbG9ja1RvQmlhc1RvKTsKKyAgICAgICAgQkFTU0VSVChtX211dGV4UHRy
ID09IGxvY2tUb0JpYXNUbyk7CisgICAgfQorCiBwcml2YXRlOgorICAgIE11dGV4IG1fZmFsbGJh
Y2tNdXRleDsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2ln
bmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwogI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZTogMTsKICNlbmRp
ZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3VudDogNzsKLSAgICB1bnNpZ25lZCBjaGFyIG1f
c2l6ZUNsYXNzOworICAgIHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3MgeyAwIH07CiAgICAgdW5z
aWduZWQgY2hhciBtX3NsaWRlOworICAgIHVuc2lnbmVkIGNoYXIgbV9pbml0aWFsaXppbmdGb3JB
bGxvY2F0aW9uOworCisgICAgTXV0ZXgqIG1fbXV0ZXhQdHI7CisgICAgQXBwcm94UGVyQ1BVQ2Fj
aGUqIG1fY2FjaGUgeyBudWxscHRyIH07CiAKIHN0YXRpY19hc3NlcnQoCiAgICAgc2l6ZUNsYXNz
Q291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX3NpemVDbGFzcyk+OjptYXgo
KSwKQEAgLTc5LDE1ICsxNzQsMTcgQEAgc3RhdGljX2Fzc2VydCgKIAogdXNpbmcgTGluZUNhY2hl
ID0gc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PjsKIAotaW5saW5l
IHZvaWQgU21hbGxQYWdlOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUgdm9pZCBTbWFs
bFBhZ2U6OnJlZigpCiB7CisgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKICAgICBCQVNTRVJUKCFt
X3NsaWRlKTsKICAgICArK21fcmVmQ291bnQ7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50KTsKIH0K
IAotaW5saW5lIGJvb2wgU21hbGxQYWdlOjpkZXJlZihVbmlxdWVMb2NrSG9sZGVyJikKK2lubGlu
ZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYoKQogeworICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAg
ICAgQkFTU0VSVCghbV9zbGlkZSk7CiAgICAgQkFTU0VSVChtX3JlZkNvdW50KTsKICAgICAtLW1f
cmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclBy
b2Nlc3MuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCmluZGV4
IDM2NmMxNTZkZmU0MjlhMTRiMjJhNWQ1ZDhhYjQ4NmRmNDZiYjk4NTkuLjk0MDVlNjE0ZjcxMWRj
ZTI2ZGY3ZjFlZTAzMzRkNGU4MjA1NmNmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3Rh
dGljUGVyUHJvY2Vzcy5oCkBAIC01OSw5ICs1OSw5IEBAIGNsYXNzIFN0YXRpY1BlclByb2Nlc3Mg
ewogICAgIHN0YXRpYyBUKiBnZXQoKQogICAgIHsKICAgICAgICAgVCogb2JqZWN0ID0gZ2V0RmFz
dENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gZ2V0U2xv
d0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgaWYgKEJMSUtFTFkob2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIHJldHVybiBnZXRTbG93
Q2FzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyBUKiBnZXRGYXN0Q2FzZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9ibWFsbG9jLmNwcAppbmRleCBlZWVlODQ5NDVmYjM5N2FmODZiNzQ1Y2I1YjE3YTgwNjNi
ZmRiM2NkLi4xMDQzZTBlNDExNmZkY2IzNjM0NDUwYWUxYzU0MThhNDYxMmMyMzAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAKQEAgLTU4LDE0ICs1OCwxNCBAQCB2b2lkKiB0cnlMYXJn
ZVplcm9lZE1lbWFsaWduVmlydHVhbChzaXplX3QgcmVxdWlyZWRBbGlnbm1lbnQsIHNpemVfdCBy
ZXF1ZXN0ZWRTaQogICAgICAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKICAg
ICAgICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+
YXQoa2luZCk7CiAKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkp
OwotICAgICAgICByZXN1bHQgPSBoZWFwLmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplLCBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRl
ciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOworICAgICAgICByZXN1bHQgPSBoZWFwLmFsbG9j
YXRlTGFyZ2UoaGVhcExvY2tlciwgYWxpZ25tZW50LCBzaXplLCBGYWlsdXJlQWN0aW9uOjpSZXR1
cm5OdWxsKTsKICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgLy8gRG9uJ3QgdHJh
Y2sgdGhpcyBhcyBkaXJ0eSBtZW1vcnkgdGhhdCBkaWN0YXRlcyBob3cgd2UgZHJpdmUgdGhlIHNj
YXZlbmdlci4KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBpdCBzbyB0aGF0
IHVzZXJzIG9mIHRoaXMgQVBJIGluZm9ybSBibWFsbG9jIHdoaWNoCiAgICAgICAgICAgICAvLyBw
YWdlcyB0aGV5IGRpcnR5OgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDIwNwotICAgICAgICAgICAgaGVhcC5leHRlcm5hbERlY29tbWl0
KGxvY2ssIHJlc3VsdCwgc2l6ZSk7CisgICAgICAgICAgICBoZWFwLmV4dGVybmFsRGVjb21taXQo
aGVhcExvY2tlciwgcmVzdWx0LCBzaXplKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODIsMTAg
KzgyLDEwIEBAIHZvaWQgZnJlZUxhcmdlVmlydHVhbCh2b2lkKiBvYmplY3QsIHNpemVfdCBzaXpl
LCBIZWFwS2luZCBraW5kKQogICAgIH0KICAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChr
aW5kKTsKICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46Omdl
dCgpLT5hdChraW5kKTsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7
CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgIC8v
IEJhbGFuY2Ugb3V0IHRoZSBleHRlcm5hbERlY29tbWl0IHdoZW4gd2UgYWxsb2NhdGVkIHRoZSB6
ZXJvZWQgdmlydHVhbCBtZW1vcnkuCi0gICAgaGVhcC5leHRlcm5hbENvbW1pdChsb2NrLCBvYmpl
Y3QsIHNpemUpOwotICAgIGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIG9iamVjdCk7CisgICAg
aGVhcC5leHRlcm5hbENvbW1pdChoZWFwTG9ja2VyLCBvYmplY3QsIHNpemUpOworICAgIGhlYXAu
ZGVhbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIG9iamVjdCk7CiB9CiAKIHZvaWQgc2NhdmVuZ2Uo
KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9z
X2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKIHsKICAgICBpZiAoRGVidWdIZWFwOjp0cnlHZXQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgp
KTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7CiAgICAg
U2NhdmVuZ2VyOjpnZXQoKS0+c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3Mob3ZlcnJpZGVDbGFz
cyk7CiB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400814</attachid>
            <date>2020-06-02 06:57:12 -0700</date>
            <delta_ts>2020-06-02 06:57:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211633-20200602065711.patch</filename>
            <type>text/plain</type>
            <size>94590</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMTgxYzVkMTQ0NjI4OTAx
YzIwMzkyYTIzYWU4ZjEyMTY5MjhkMTdkNy4uMDcyMGUyZTVhOWE5MzdhMDk5OWFhMGVlNjc5N2Ew
Yjk2MWExMTNlNyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAyMC0wNi0wMiAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGhhdmUgcGVyLWNwdSBsb2NraW5nIG1lY2hhbmlzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBibWFs
bG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0
b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWFsbG9jYXRlSW1wbCk6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1h
bGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6
Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaDogQ29w
aWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaC4KKyAgICAgICAgKGJt
YWxsb2M6OkFwcHJveFBlckNQVUNhY2hlOjpBcHByb3hQZXJDUFVDYWNoZSk6CisgICAgICAgIChi
bWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6bGluZUNhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFwcHJveFBlckNQVUNhY2hlOjppbmRleCBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpBcHBy
b3hQZXJDUFVDYWNoZTo6cGFnZU11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OkFwcHJveFBlckNQ
VUNhY2hlOjptdXRleCk6CisgICAgICAgIChibWFsbG9jOjpBcHByb3hQZXJDUFVDYWNoZTo6Z2V0
RmFzdENhc2UpOgorICAgICAgICAqIGJtYWxsb2MvQXJlbmEuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6QXJlbmE6
OkFyZW5hKToKKyAgICAgICAgKGJtYWxsb2M6OkFyZW5hOjphbGxvY2F0ZSk6CisgICAgICAgICog
Ym1hbGxvYy9BcmVuYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
TGluZS5oLgorICAgICAgICAqIGJtYWxsb2MvQkNvbXBpbGVyLmg6CisgICAgICAgICogYm1hbGxv
Yy9DUFUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcC4KKyAgICAgICAgKGJtYWxsb2M6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMpOgorICAgICAg
ICAqIGJtYWxsb2MvQ1BVLmg6IENvcGllZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21h
bGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjp4ODZfcmR0c2NwKToKKyAgICAgICAgKGJtYWxs
b2M6OmN1cnJlbnRDUFVJbmRleCk6CisgICAgICAgICogYm1hbGxvYy9DaHVuay5oOgorICAgICAg
ICAoYm1hbGxvYzo6Q2h1bms6OkNodW5rKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcik6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKToKKyAgICAgICAgKGJtYWxs
b2M6OkRlYWxsb2NhdG9yOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRv
cjo6cHJvY2Vzc09iamVjdExvZyk6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6ZGVh
bGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9yLmg6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6dGhyZWFkQ2FjaGUpOgorICAgICAgICAoYm1hbGxv
Yzo6RGVhbGxvY2F0b3I6OmxpbmVDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9H
aWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KToKKyAgICAgICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2spOgorICAg
ICAgICAoR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6CisgICAgICAg
ICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVUaHJlYWRDYWNoZSk6CisgICAgICAgIChibWFs
bG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
ZGVhbGxvY2F0ZVNtYWxsQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVM
b2NrZWRTbWFsbFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVNtYWxs
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlcyk6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlNZXRhZGF0YSk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5T2JqZWN0KToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtMYXJn
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpleHRlcm5hbENvbW1pdCk6CisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjpleHRlcm5hbERlY29tbWl0KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6
OmRlYWxsb2NhdGVMaW5lQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOgorICAgICAg
ICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAqIGJtYWxsb2MvSGVh
cENvbnN0YW50cy5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwQ29uc3RhbnRzOjppbml0aWFs
aXplUGFnZU1ldGFkYXRhKToKKyAgICAgICAgKiBibWFsbG9jL0hlYXBDb25zdGFudHMuaDoKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXBDb25zdGFudHM6Om1heExpbmVDb3VudCBjb25zdCk6CisgICAg
ICAgICogYm1hbGxvYy9MaXN0Lmg6CisgICAgICAgIChibWFsbG9jOjpMaXN0Tm9kZTo6aXNPbkxp
c3QgY29uc3QpOgorICAgICAgICAqIGJtYWxsb2MvTXV0ZXguaDoKKyAgICAgICAgKGJtYWxsb2M6
Ok11dGV4Ojppc0xvY2tlZCBjb25zdCk6CisgICAgICAgIChibWFsbG9jOjpsb2NrU3dpdGNoKToK
KyAgICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuY3BwOgorICAgICAgICAoYm1hbGxvYzo6Z2V0
UGVyUHJvY2Vzc0RhdGEpOgorICAgICAgICAoYm1hbGxvYzo6YWxsb2NhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJtYWxsb2MvU2NhdmVuZ2VyLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZl
bmdlcjo6cnVuKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6cnVuU29vbik6CisgICAg
ICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2NoZWR1bGUpOgorICAgICAgICAoYm1hbGxv
Yzo6U2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxs
b2M6OlNjYXZlbmdlcjo6dGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSk6CisgICAgICAgIChi
bWFsbG9jOjpTY2F2ZW5nZXI6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdl
cjo6cGFydGlhbFNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6ZnJlZWFi
bGVNZW1vcnkpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aHJlYWRSdW5Mb29wKToK
KyAgICAgICAgKiBibWFsbG9jL1NtYWxsTGluZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxM
aW5lOjpyZWZDb3VudCk6CisgICAgICAgIChibWFsbG9jOjpTbWFsbExpbmU6OnJlZik6CisgICAg
ICAgIChibWFsbG9jOjpTbWFsbExpbmU6OmRlcmVmKToKKyAgICAgICAgKiBibWFsbG9jL1NtYWxs
UGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpyZWZDb3VudCk6CisgICAgICAg
IChibWFsbG9jOjpTbWFsbFBhZ2U6Omhhc0ZyZWVMaW5lcyBjb25zdCk6CisgICAgICAgIChibWFs
bG9jOjpTbWFsbFBhZ2U6OnNldEhhc0ZyZWVMaW5lcyk6CisgICAgICAgIChibWFsbG9jOjpTbWFs
bFBhZ2U6OmluaXRIYXNGcmVlTGluZXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpp
bml0aWFsaXppbmdGb3JBbGxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxs
UGFnZTo6c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbik6CisgICAgICAgIChibWFsbG9jOjpT
bWFsbFBhZ2U6OmNhY2hlIGNvbnN0KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c2V0
Q2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6aXNMb2NrZWQgY29uc3QpOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxQYWdlOjpsb2NrKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6dW5sb2Nr
KToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsUGFnZTo6c3dpdGNoTG9jayk6CisgICAgICAgIChi
bWFsbG9jOjpTbWFsbFBhZ2U6OmxvY2tXaXRoVW5iaWFzKToKKyAgICAgICAgKGJtYWxsb2M6OlNt
YWxsUGFnZTo6bG9ja0FuZFRyeVRvVGFrZUJpYXMpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjpyZWYpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpkZXJlZik6CisgICAgICAg
IChibWFsbG9jOjpTbWFsbFBhZ2U6OnNldFNsaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFs
bG9jL1N0YXRpY1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlN0YXRpY1BlclByb2Nl
c3M6OmdldCk6CisgICAgICAgICogYm1hbGxvYy9UaHJlYWRDYWNoZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmguCisgICAgICAgIChibWFsbG9jOjpU
aHJlYWRDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OlRocmVhZENhY2hlOjpyZXR1
cm5Gb3JSZXVzZSk6CisgICAgICAgICogYm1hbGxvYy9UaHJlYWRDYWNoZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oLgorICAgICAgICAoYm1hbGxvYzo6
VGhyZWFkQ2FjaGU6Om11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OlRocmVhZENhY2hlOjpwYWdl
TXV0ZXgpOgorICAgICAgICAoYm1hbGxvYzo6VGhyZWFkQ2FjaGU6OmluZGV4IGNvbnN0KToKKyAg
ICAgICAgKGJtYWxsb2M6OlRocmVhZENhY2hlOjpsaW5lQ2FjaGUgY29uc3QpOgorICAgICAgICAo
Ym1hbGxvYzo6VGhyZWFkQ2FjaGU6OlRocmVhZENhY2hlKToKKyAgICAgICAgKiBibWFsbG9jL2Jt
YWxsb2MuY3BwOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjp0cnlMYXJnZVplcm9lZE1lbWFsaWdu
VmlydHVhbCk6CisgICAgICAgIChibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1YWwpOgorICAg
ICAgICAoYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyk6CisKIDIwMjAt
MDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbYm1h
bGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5CmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNkOTkwZWI5YmE4ZDM4OWM0NjQzZDE4MDBmNTAzNTk4NGJkN2E4NmQuLjFmOGZj
YTBiZWVjOTIzMDc2YjkxMGI3MDE4ODcyZmIyZTE5OWE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0
CkBAIC04LDYgKzgsNyBAQCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAgYm1hbGxvYy9BbGxJc29I
ZWFwcy5jcHAKICAgICBibWFsbG9jL0FsbG9jYXRvci5jcHAKICAgICBibWFsbG9jL0F2YWlsYWJs
ZU1lbW9yeS5jcHAKKyAgICBibWFsbG9jL0NQVS5jcHAKICAgICBibWFsbG9jL0NhY2hlLmNwcAog
ICAgIGJtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAogICAgIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3Bw
CkBAIC01Miw2ICs1Myw3IEBAIHNldChibWFsbG9jX1BVQkxJQ19IRUFERVJTCiAgICAgYm1hbGxv
Yy9CdWxrRGVjb21taXQuaAogICAgIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oCiAgICAgYm1hbGxv
Yy9CdW1wUmFuZ2UuaAorICAgIGJtYWxsb2MvQ1BVLmgKICAgICBibWFsbG9jL0NhY2hlLmgKICAg
ICBibWFsbG9jL0NodW5rLmgKICAgICBibWFsbG9jL0NyeXB0b1JhbmRvbS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWMyYzNk
NTZkOTc1OWNjMTExZGIzYjNmOTRhZGQzNDg1Yzk2ZGM1YS4uYTE3ZDU2ZWNhY2Y1N2IyYzkyYTZl
MDU4NzVjMzdmNGE2NTkxYjUyMyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM3LDggKzEzNywxNiBAQAogCQlBRDE0QUQyOTIw
MjUyOUM0MDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDE0QUQyNzIwMjUyOUE2MDA4OTBFM0IgLyogUHJvY2Vz
c0NoZWNrLmggKi87IH07CiAJCUFEMTRBRDJBMjAyNTI5QzcwMDg5MEUzQiAvKiBQcm9jZXNzQ2hl
Y2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDE0
QUQyODIwMjUyOUIwMDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNrLm1tICovOyB9OwogCQlERThCMTNC
MzIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gREU4QjEzQjIyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzBD
ODQ0QTI0ODU3RDkzMDBDM0UyNTcgLyogVGhyZWFkQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMwQzg0NDgyNDg1N0Q5MzAwQzNFMjU3IC8q
IFRocmVhZENhY2hlLmNwcCAqLzsgfTsKKwkJRTMwQzg0NEIyNDg1N0Q5MzAwQzNFMjU3IC8qIFRo
cmVhZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzBDODQ0OTI0ODU3RDkzMDBDM0UyNTcgLyogVGhyZWFkQ2FjaGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzFFNzQ4MDIyMzhDQTVDMDA1
RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTMxRTc0N0YyMjM4Q0E1QjAwNUQwODRBIC8qIFN0YXRpY1BlclBy
b2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMzI4RDg0RDIzQ0VCMzg5MDA1NDVCMTggLyogUGFja2VkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzI4RDg0QzIzQ0VCMzg5MDA1NDVCMTggLyog
UGFja2VkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTM1MjM5MDIyNDczNEJFNDAwM0ExM0NGIC8qIENQVS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzUyMzkwMTI0NzM0QkUwMDAzQTEzQ0YgLyog
Q1BVLmNwcCAqLzsgfTsKKwkJRTM1MjM5MDMyNDczNEJFOTAwM0ExM0NGIC8qIENQVS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1MjM5MDAyNDczNEJF
MDAwM0ExM0NGIC8qIENQVS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUUzNkM3MDNCMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNo
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Qzcw
M0EyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM2QzcwM0UyNDczQjU5RDAwM0NB
RDA3IC8qIEFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzZDNzAzRjI0NzNCNTlEMDAzQ0FE
MDcgLyogQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNwcCAqLzsgfTsKKwkJRTM2
QzcwNDEyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkM3MDQwMjQ3M0I2RDEwMDND
QUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5jcHAgKi87IH07CiAJCUUzNzhBOURGMjQ2QjY4NzIw
MDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OEE5REUyNDZCNjg2QTAwMjlDMkJCIC8qIE9iamVjdFR5
cGVUYWJsZS5jcHAgKi87IH07CiAJCUUzNzhBOUUwMjQ2QjY4NzUwMDI5QzJCQiAvKiBPYmplY3RU
eXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0E0MTNDOTIyNjA2MTE0
MDAzN0Y0NzAgLyogSXNvU2hhcmVkUGFnZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTQxM0M4MjI2MDYxMTQwMDM3RjQ3MCAvKiBJc29T
aGFyZWRQYWdlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yOTMsOCArMzAxLDE2IEBACiAJCUFEMTRBRDI3MjAyNTI5QTYwMDg5MEUz
QiAvKiBQcm9jZXNzQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJv
Y2Vzc0NoZWNrLmg7IHBhdGggPSBibWFsbG9jL1Byb2Nlc3NDaGVjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRDE0QUQyODIwMjUyOUIwMDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNr
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUHJvY2Vzc0NoZWNr
Lm1tOyBwYXRoID0gYm1hbGxvYy9Qcm9jZXNzQ2hlY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCURFOEIxM0IyMjFDQzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEJWTVRhZ3MuaDsgcGF0aCA9IGJtYWxsb2MvQlZNVGFncy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzBDODQ0ODI0ODU3RDkzMDBDM0UyNTcgLyogVGhyZWFkQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGhyZWFkQ2FjaGUuY3Bw
OyBwYXRoID0gYm1hbGxvYy9UaHJlYWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUzMEM4NDQ5MjQ4NTdEOTMwMEMzRTI1NyAvKiBUaHJlYWRDYWNoZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaHJlYWRDYWNoZS5oOyBwYXRoID0gYm1hbGxvYy9U
aHJlYWRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFFNzQ3RjIyMzhD
QTVCMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTdGF0aWNQZXJQcm9jZXNzLmg7IHBhdGggPSBibWFsbG9jL1N0YXRpY1BlclBy
b2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyOEQ4NEMyM0NFQjM4OTAw
NTQ1QjE4IC8qIFBhY2tlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQYWNr
ZWQuaDsgcGF0aCA9IGJtYWxsb2MvUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUzNTIzOTAwMjQ3MzRCRTAwMDNBMTNDRiAvKiBDUFUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1BV
Lmg7IHBhdGggPSBibWFsbG9jL0NQVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MzUyMzkwMTI0NzM0QkUwMDAzQTEzQ0YgLyogQ1BVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENQ
VS5jcHA7IHBhdGggPSBibWFsbG9jL0NQVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUzNkM3MDNBMjQ3M0ExQ0YwMDNDQUQwNyAvKiBBcHByb3hQZXJDUFVDYWNoZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcHByb3hQZXJDUFVDYWNoZS5oOyBwYXRoID0g
Ym1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMzZDNzAzQzI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQXJlbmEuaDsgcGF0aCA9IGJtYWxsb2MvQXJlbmEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QzcwM0QyNDczQjU5RDAwM0NBRDA3IC8qIEFyZW5hLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFyZW5hLmNwcDsgcGF0aCA9
IGJtYWxsb2MvQXJlbmEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzZDNzA0
MDI0NzNCNkQxMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXBwcm94UGVyQ1BVQ2FjaGUuY3BwOyBwYXRoID0gYm1h
bGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzNzhBOUREMjQ2QjY4NkEwMDI5QzJCQiAvKiBPYmplY3RUeXBlVGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gT2JqZWN0VHlwZVRhYmxlLmg7IHBhdGggPSBibWFsbG9jL09iamVjdFR5cGVUYWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc4QTlERTI0NkI2ODZBMDAyOUMyQkIg
LyogT2JqZWN0VHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9iamVjdFR5cGVUYWJs
ZS5jcHA7IHBhdGggPSBibWFsbG9jL09iamVjdFR5cGVUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzQTQxM0M4MjI2MDYxMTQwMDM3RjQ3MCAvKiBJc29TaGFyZWRQYWdl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJc29TaGFyZWRQYWdl
SW5saW5lcy5oOyBwYXRoID0gYm1hbGxvYy9Jc29TaGFyZWRQYWdlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc2LDkgKzQ5MiwxNSBAQAogCQkxNEQ5REI0RTE3RjI4
NjZFMDBFQUFCNzkgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJRTM2QzcwNDAyNDczQjZEMTAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hl
LmNwcCAqLywKKwkJCQlFMzZDNzAzQTI0NzNBMUNGMDAzQ0FEMDcgLyogQXBwcm94UGVyQ1BVQ2Fj
aGUuaCAqLywKKwkJCQlFMzZDNzAzRDI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuY3BwICovLAor
CQkJCUUzNkM3MDNDMjQ3M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5oICovLAogCQkJCTc5Mzk4ODVB
MjA3NkVFQjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywKIAkJCQkxNDBGQTAwMjE5Q0U0
MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3REM2RTIxQ0E1QjcwQjAwNzI0
RThEIC8qIENodW5rLmggKi8sCisJCQkJRTM1MjM5MDEyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5j
cHAgKi8sCisJCQkJRTM1MjM5MDAyNDczNEJFMDAwM0ExM0NGIC8qIENQVS5oICovLAogCQkJCTE0
MkI0NDM0MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwICovLAogCQkJCTE0MkI0NDM1
MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAqLywKIAkJCQkxNDg5NUQ4RjFBM0EzMTlD
MDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovLApAQCAtNTQ0LDYgKzU2Niw4IEBACiAJCQkJ
RTMxRTc0N0YyMjM4Q0E1QjAwNUQwODRBIC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLywKIAkJCQk3
QzU3MUYwMDIyMzg4Qjg0MDA3N0EzQzcgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJMTQxN0Y2
NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLywKKwkJCQlFMzBDODQ0ODI0ODU3RDkz
MDBDM0UyNTcgLyogVGhyZWFkQ2FjaGUuY3BwICovLAorCQkJCUUzMEM4NDQ5MjQ4NTdEOTMwMEMz
RTI1NyAvKiBUaHJlYWRDYWNoZS5oICovLAogCQkJCTE0NzlFMjEyMTdBMUEyNTUwMDZENEU5RCAv
KiBWZWN0b3IuaCAqLywKIAkJCQkxNDc5RTIxNDE3QTFBNjNFMDA2RDRFOUQgLyogVk1BbGxvY2F0
ZS5oICovLAogCQkJKTsKQEAgLTU3Nyw2ICs2MDEsOCBAQAogCQkJCTBGN0VCODM0MUY5NTQxQjAw
MEYxQUJDQiAvKiBBbGxJc29IZWFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3RUI4NEYxRjk1
NEQ0RTAwRjFBQkNCIC8qIEFsbElzb0hlYXBzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTM2QzcwM0IyNDczQTFDRjAwM0NBRDA3IC8qIEFwcHJveFBlckNQVUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFMzZDNzAzRTI0NzNCNTlEMDAzQ0FEMDcgLyogQXJlbmEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1OTlDNUNEMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDA5MzQzMzFGQ0Y0MDZEMDBFODVFQjUgLyogQkNvbXBp
bGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTU5Myw2ICs2MTksNyBAQAogCQkJCURFOEIxM0IzMjFD
QzVEOUYwMEE2M0ZDRCAvKiBCVk1UYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5OTE4
RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0RDNkUzMUNB
NUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1MjM5MDMyNDcz
NEJFOTAwM0ExM0NGIC8qIENQVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NEI5M0UxRjg5NzEz
RTAwQjkzNUQzIC8qIENyeXB0b1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUEx
OEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJC
NDQzNzFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTY2
Nyw2ICs2OTQsNyBAQAogCQkJCUUzMUU3NDgwMjIzOENBNUMwMDVEMDg0QSAvKiBTdGF0aWNQZXJQ
cm9jZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzU3MUYwMTIyMzg4Qjg0MDA3N0EzQzcgLyog
U3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDRTE4RjQ4RDc1MDA5NTA3
MDIgLyogU3lzY2FsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMwQzg0NEIyNDg1N0Q5MzAwQzNF
MjU3IC8qIFRocmVhZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDRjE4RjQ4RDc1
MDA5NTA3MDIgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhEMDE4RjQ4RDc1
MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFGQ0IxQTk1
MjYxMTAwODM3RkFBIC8qIFpvbmUuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxLDkgKzc4OSwxMiBA
QAogCQkJZmlsZXMgPSAoCiAJCQkJMEY3RUI4MkYxRjk1NDFCMDAwRjFBQkNCIC8qIEFsbElzb0hl
YXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBB
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM2QzcwNDEyNDczQjZEMTAwM0NBRDA3
IC8qIEFwcHJveFBlckNQVUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNkM3MDNGMjQ3
M0I1OUQwMDNDQUQwNyAvKiBBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTk5QzVDQzFF
QzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNTE2Nzc0MUZBRDY4NUMwMDgyMzZBOCAvKiBibWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0RjI3MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMzUyMzkwMjI0NzM0QkU0MDAzQTEzQ0YgLyogQ1BVLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzRCOTNGMUY4OTcxM0UwMEI5MzVEMyAvKiBDcnlwdG9SYW5kb20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODgsNiArODE5LDcgQEAKIAkJCQkwRjI2QTdBNTIwNTQ4
MzEzMDA5MEExNDEgLyogUGVyUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDE0QUQy
QTIwMjUyOUM3MDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY1QkYxNTIxRjIyRTE1NzAwMjlEOTFEIC8qIFNjYXZlbmdlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMzBDODQ0QTI0ODU3RDkzMDBDM0UyNTcgLyogVGhyZWFkQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEFGQ0QxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKaW5kZXggNTA2ZDJkODc2YWVkMzIwNmRl
ODkyMzBmNzUzNzhkOGFiZWZkMzAzYy4uMzY1ZmNmYjI3NjBhMWQxN2Y5NzgzM2JkZjIzOTVhYTY1
NDY3ZDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcApAQCAtNzYsMTEgKzc2
LDExIEBAIHZvaWQqIEFsbG9jYXRvcjo6cmVhbGxvY2F0ZUltcGwodm9pZCogb2JqZWN0LCBzaXpl
X3QgbmV3U2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3RpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIE9iamVjdFR5cGU6OkxhcmdlOiB7Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
ayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgb2xkU2l6ZSA9IG1faGVhcC5sYXJnZVNpemUobG9j
aywgb2JqZWN0KTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11
dGV4KCkpOworICAgICAgICBvbGRTaXplID0gbV9oZWFwLmxhcmdlU2l6ZShoZWFwTG9ja2VyLCBv
YmplY3QpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gc21h
bGxNYXgpIHsKLSAgICAgICAgICAgIG1faGVhcC5zaHJpbmtMYXJnZShsb2NrLCBSYW5nZShvYmpl
Y3QsIG9sZFNpemUpLCBuZXdTaXplKTsKKyAgICAgICAgICAgIG1faGVhcC5zaHJpbmtMYXJnZSho
ZWFwTG9ja2VyLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMjIsOSArMTIy
LDggQEAgQk5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2Uo
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXoKIHsKICAgICBCdW1wUmFuZ2VDYWNoZSYgYnVt
cFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCi0gICAgVW5pcXVl
TG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0b3IucHJvY2Vz
c09iamVjdExvZyhsb2NrKTsKLSAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMobG9j
aywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxsb2NhdG9yLmxp
bmVDYWNoZShsb2NrKSwgYWN0aW9uKTsKKyAgICBtX2RlYWxsb2NhdG9yLnByb2Nlc3NPYmplY3RM
b2coKTsKKyAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZUNsYXNzLCBhbGxv
Y2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxsb2NhdG9yLnRocmVhZENhY2hlKCksIGFjdGlv
bik7CiB9CiAKIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxs
b2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MsIEZhaWx1cmVBY3Rpb24gYWN0aW9u
KQpAQCAtMTM3LDggKzEzNiw4IEBAIEJJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9j
YXRvcihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhCiAKIEJOT19JTkxJ
TkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0
aW9uIGFjdGlvbikKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7
Ci0gICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSwg
YWN0aW9uKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgoKSk7
CisgICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIGFsaWdubWVudCwg
c2l6ZSwgYWN0aW9uKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
TG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I4ZTc5
NzlkMjhiOTlhMzJmOGUyNGJmMzU2MjM0MTYzYWU4NjIyMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuY3BwCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKKworI2luY2x1ZGUgIkFyZW5hLmgiCisKK25hbWVzcGFj
ZSBibWFsbG9jIHsKKworTGluZUNhY2hlKiBBcHByb3hQZXJDUFVDYWNoZTo6Z2V0U2xvd0Nhc2Uo
Y29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgaWYgKCFtX2xpbmVDYWNoZS5sb2FkKCkpIHsKKyAg
ICAgICAgdm9pZCogbWVtb3J5ID0gQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXplb2YoTGluZUNh
Y2hlKSwgYWxpZ25vZihMaW5lQ2FjaGUpKTsKKyAgICAgICAgYXV0byogdCA9IG5ldyAobWVtb3J5
KSBMaW5lQ2FjaGUoKTsKKyAgICAgICAgbV9saW5lQ2FjaGUuc3RvcmUodCk7CisgICAgfQorICAg
IHJldHVybiBtX2xpbmVDYWNoZS5sb2FkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXBwcm94UGVyQ1BVQ2FjaGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzA4MmYxZDM2ZGE1NDZiZjZjYTI5ODdhY2Y5YTQ5Y2I3N2E1ZTExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcHByb3hQZXJDUFVDYWNoZS5oCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIlNpemVzLmgiCisjaW5jbHVk
ZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSA8YXJyYXk+CisKK25hbWVzcGFjZSBibWFsbG9jIHsK
KworLy8gQXBwcm94UGVyQ1BVQ2FjaGUgaXMgKmFwcHJveGltYXRlKiBwZXItQ1BVIGNhY2hlLiBU
aGUgZ29hbCBvZiB0aGlzIGNhY2hlIGlzIG5vdCBwcmVjaXNlbHkgY29uc3RydWN0aW5nIHBlci1D
UFUgY2FjaGUsCisvLyByYXRoZXIgaXQgaXMgb2ZmZXJpbmcgcGVyLUNQVSBhZmZpbml0eSB0byBT
bWFsbFBhZ2VzIGFzIG9wdGltaXphdGlvbi4KK2NsYXNzIEFwcHJveFBlckNQVUNhY2hlIHsKK3B1
YmxpYzoKKyAgICBBcHByb3hQZXJDUFVDYWNoZSh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBt
X2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZShj
b25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCisgICAgeworICAgICAgICBpZiAoYXV0byogb2JqZWN0
ID0gZ2V0RmFzdENhc2UoKSkKKyAgICAgICAgICAgIHJldHVybiAqb2JqZWN0OworICAgICAgICBy
ZXR1cm4gKmdldFNsb3dDYXNlKGxvY2tlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTXV0ZXgmIHBhZ2VNdXRleCgpIHsgcmV0
dXJuIG1fcGFnZU11dGV4OyB9CisgICAgTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gbV9tdXRleDsg
fQorCisgICAgTGluZUNhY2hlKiBnZXRGYXN0Q2FzZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9saW5lQ2FjaGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgTGluZUNhY2hlKiBnZXRTbG93Q2FzZShjb25zdCBMb2NrSG9sZGVyJik7CisK
KyAgICBzdGQ6OmF0b21pYzxMaW5lQ2FjaGUqPiBtX2xpbmVDYWNoZSB7IG51bGxwdHIgfTsKKyAg
ICBNdXRleCBtX211dGV4OworICAgIE11dGV4IG1fcGFnZU11dGV4OworICAgIHVuc2lnbmVkIG1f
aW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVjMTJkMWQyZTg0NWM1YjRiZjRmNWQ0MDI3ZjU5NmFiNjhkZjQ0YTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FyZW5hLmNwcApAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIkFyZW5hLmgiCisKKyNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitERUZJTkVfU1RBVElDX1BFUl9Q
Uk9DRVNTX1NUT1JBR0UoQXJlbmEpOworCitBcmVuYTo6QXJlbmEoY29uc3QgTG9ja0hvbGRlciYp
Cit7Cit9CisKKy8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNp
bmcgdm1BbGxvY2F0ZS4KK3ZvaWQqIEFyZW5hOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90
IGFsaWdubWVudCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihBcmVuYTo6bXV0ZXgoKSk7CisK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBtX2J1bXBPZmZzZXQgPSByb3VuZFVwVG9NdWx0
aXBsZU9mKGFsaWdubWVudCwgbV9idW1wT2Zmc2V0KTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0g
bV9idW1wQmFzZSArIG1fYnVtcE9mZnNldDsKKyAgICAgICAgbV9idW1wT2Zmc2V0ICs9IHNpemU7
CisgICAgICAgIGlmIChtX2J1bXBPZmZzZXQgPD0gbV9idW1wTGltaXQpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSB2bVNpemUoc2l6
ZSk7CisgICAgICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9jYXRpb25TaXpl
KTsKKyAgICAgICAgbV9idW1wQmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0aW9uKTsK
KyAgICAgICAgbV9idW1wT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9idW1wTGltaXQgPSBhbGxvY2F0
aW9uU2l6ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXJlbmEuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QXJlbmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMTFkZWViMjM5ZjA5OTZhMmFmMTk2OTcwN2JmMTA5ZWQ0ODIy
OTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BcmVuYS5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0YXRpY1BlclByb2Nlc3MuaCIKKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBBcmVuYSBmaW5hbCA6IHB1YmxpYyBTdGF0aWNQZXJQ
cm9jZXNzPEFyZW5hPiB7CitwdWJsaWM6CisgICAgQkVYUE9SVCBBcmVuYShjb25zdCBMb2NrSG9s
ZGVyJik7CisKKyAgICAvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1lbW9yeSBieSB2aXJ0dWFsIG9m
IHVzaW5nIHZtQWxsb2NhdGUuCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUsIHNpemVf
dCBhbGlnbm1lbnQpOworCitwcml2YXRlOgorICAgIGNoYXIqIG1fYnVtcEJhc2UgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IG1fYnVtcE9mZnNldCB7IDAgfTsKKyAgICBzaXplX3QgbV9idW1wTGlt
aXQgeyAwIH07Cit9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShBcmVuYSk7
CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQkNvbXBpbGVyLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JDb21waWxlci5oCmlu
ZGV4IGNkYzQ3YWM5YTJlYzcwYWY3ZDVmZTQ4Y2Q3ODFkZGZiZDBjYzUwNGEuLmYzZDA3NDM3ZmUz
ZTY5ZmQ4MDgxOTc2MGRiOWVhNmYwZTYzOWZkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQkNvbXBpbGVyLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CQ29tcGls
ZXIuaApAQCAtNzksMyArNzksMjEgQEAKICNpZiAhZGVmaW5lZChCRkFMTFRIUk9VR0gpCiAjZGVm
aW5lIEJGQUxMVEhST1VHSAogI2VuZGlmCisKKy8qIEJMSUtFTFkgYW5kIEJVTkxJS0VMWSAqLwor
CisjaWYgIWRlZmluZWQoQkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQorI2Rl
ZmluZSBCTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKEJMSUtFTFkpCisjZGVmaW5lIEJMSUtFTFkoeCkgKHgpCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKEJVTkxJS0VMWSkgJiYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQorI2RlZmlu
ZSBCVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbmRpZgorCisjaWYg
IWRlZmluZWQoQlVOTElLRUxZKQorI2RlZmluZSBCVU5MSUtFTFkoeCkgKHgpCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ1BVLmNwcCBiL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ1BVLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmU0N2EyNzBkODdjOTE4NzM2Y2YwOWEzZjYy
YTM0NzRkNTJiYTYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
UFUuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ1BVLmgiCisKKyNpbmNsdWRlICJCUGxhdGZvcm0uaCIK
KyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2lmIEJPUyhEQVJXSU4p
CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VsaWYgQk9TKExJTlVYKSB8fCBCT1MoRlJFRUJT
RCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisK
K2ludCBudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkKK3sKKyAgICBjb25zdCBpbnQgZGVmYXVsdElm
VW5hdmFpbGFibGUgPSAxOworICAgIHN0YXRpYyBpbnQgc19udW1iZXJPZkNvcmVzID0gLTE7CisK
KyAgICBpZiAoc19udW1iZXJPZkNvcmVzID4gMCkKKyAgICAgICAgcmV0dXJuIHNfbnVtYmVyT2ZD
b3JlczsKKworICAgIGlmIChjb25zdCBjaGFyKiBjb3Jlc0VudiA9IGdldGVudigiYm1hbGxvY19u
dW1iZXJPZlByb2Nlc3NvckNvcmVzIikpIHsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb3Jl
czsKKyAgICAgICAgaWYgKHNzY2FuZihjb3Jlc0VudiwgIiV1IiwgJm51bWJlck9mQ29yZXMpID09
IDEpIHsKKyAgICAgICAgICAgIHNfbnVtYmVyT2ZDb3JlcyA9IG51bWJlck9mQ29yZXM7CisgICAg
ICAgICAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOworICAgICAgICB9CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBhcnNlIGJtYWxsb2NfbnVtYmVyT2ZQcm9j
ZXNzb3JDb3Jlcz0lc1xuIiwgY29yZXNFbnYpOworICAgIH0KKworI2lmIEJPUyhEQVJXSU4pCisg
ICAgdW5zaWduZWQgcmVzdWx0OworICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YocmVzdWx0KTsK
KyAgICBpbnQgbmFtZVtdID0geworICAgICAgICBDVExfSFcsCisgICAgICAgIEhXX0FWQUlMQ1BV
CisgICAgfTsKKyAgICBpbnQgc3lzY3RsUmVzdWx0ID0gc3lzY3RsKG5hbWUsIHNpemVvZihuYW1l
KSAvIHNpemVvZihpbnQpLCAmcmVzdWx0LCAmbGVuZ3RoLCAwLCAwKTsKKworICAgIHNfbnVtYmVy
T2ZDb3JlcyA9IHN5c2N0bFJlc3VsdCA8IDAgPyBkZWZhdWx0SWZVbmF2YWlsYWJsZSA6IHJlc3Vs
dDsKKyNlbGlmIEJPUyhMSU5VWCkgfHwgQk9TKEZSRUVCU0QpCisgICAgbG9uZyBzeXNjb25mUmVz
dWx0ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisKKyAgICBzX251bWJlck9mQ29y
ZXMgPSBzeXNjb25mUmVzdWx0IDwgMCA/IGRlZmF1bHRJZlVuYXZhaWxhYmxlIDogc3RhdGljX2Nh
c3Q8aW50PihzeXNjb25mUmVzdWx0KTsKKyNlbHNlCisgICAgc19udW1iZXJPZkNvcmVzID0gZGVm
YXVsdElmVW5hdmFpbGFibGU7CisjZW5kaWYKKyAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0NQVS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ZjIyZTRkZGIxMmNiZjI1MmY2YjA3YTc0ZTg0NzVjMzBlYzM1M2FlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DUFUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNsdWRlIDxjc3RkaW50PgorCituYW1lc3BhY2UgYm1h
bGxvYyB7CisKKyNpZiBCQ1BVKFg4NikgfHwgQkNQVShYODZfNjQpCitpbmxpbmUgdWludDY0X3Qg
eDg2X3JkdHNjcCh1aW50MzJfdCYgYXV4KQoreworICAgIHVpbnQ2NF90IHJheCA9IDA7CisgICAg
dWludDY0X3QgcmR4ID0gMDsKKyAgICBhc20gdm9sYXRpbGUoInJkdHNjcCIgOiAiPWEiIChyYXgp
LCAiPWQiIChyZHgpLCAiPWMiIChhdXgpIDogOiApOworICAgIHJldHVybiAocmR4IDw8IDMyKSAr
IHJheDsKK30KKyNlbmRpZgorCitpbmxpbmUgdW5zaWduZWQgY3VycmVudENQVUluZGV4KCkKK3sK
KyNpZiBCT1MoREFSV0lOKQorI2lmIEJDUFUoQVJNKQorICAgIHVpbnRwdHJfdCBwOworICAgIF9f
YXNtX18oIm1yYyBwMTUsIDAsICVbcF0sIGMxMywgYzAsIDMiIDogW3BdICI9JnIiIChwKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwICYgMHgzdWwpOworI2VsaWYgQkNQVShB
Uk02NCkKKyAgICB1aW50NjRfdCBwOworICAgIF9fYXNtX18oIm1ycyAlW3BdLCBUUElEUlJPX0VM
MCIgOiBbcF0gIj0mciIgKHApKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHAg
JiAweDcpOworI2VsaWYgQkNQVShYODYpIHx8IEJDUFUoWDg2XzY0KQorICAgIHN0cnVjdCB7Cisg
ICAgICAgIHVpbnRwdHJfdCBwMTsKKyAgICAgICAgdWludHB0cl90IHAyOworICAgIH0gcDsKKyAg
ICBhc20gdm9sYXRpbGUoInNpZHQgJVtwXSIgOiBbcF0gIj0mbSIgKHApKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHAucDEgJiAweGZmZik7CisjZWxzZQorI2Vycm9yIFVuc3Vw
cG9ydGVkIGFyY2hpdGVjdHVyZQorI2VuZGlmCisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisKK2ludCBudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1
bmsuaAppbmRleCAyMWZiYjhmZTc5OGRkOTc4MzVhMzhjY2Y4ZjFhYjAwZTNkYjI3NDMyLi4zNDhj
MjVkZTgzNmEzZDA2MTdiZDUyZmYwNmZmYTc1MTFjZWVmZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0NodW5rLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVu
ay5oCkBAIC05Myw5ICs5Myw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIGZv
ckVhY2hQYWdlKENodW5rKiBjaHVuaywgc2l6ZV90IHBhZ2VTaXplLCBGdW5jCiBpbmxpbmUgQ2h1
bms6OkNodW5rKHNpemVfdCBwYWdlU2l6ZSkKIHsKICAgICBzaXplX3Qgc21hbGxQYWdlQ291bnQg
PSBwYWdlU2l6ZSAvIHNtYWxsUGFnZVNpemU7Ci0gICAgZm9yRWFjaFBhZ2UodGhpcywgcGFnZVNp
emUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICBmb3JFYWNoUGFnZSh0aGlzLCBwYWdlU2l6
ZSwgWyZdKFNtYWxsUGFnZSogcGFnZXMpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzbWFsbFBhZ2VDb3VudDsgKytpKQotICAgICAgICAgICAgcGFnZVtpXS5zZXRTbGlkZShpKTsK
KyAgICAgICAgICAgIHBhZ2VzW2ldLmluaXRpYWxpemUoaSk7CiAgICAgfSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXggN2QxZTM0ZTk3YTc3OTJkOGZkMzA2
YWUyMDVkNmY3MDEyM2FjOGI0MS4uNTA1NzM4Njg4YmM5N2Y5Njc5OTNlMGZlZDc3ZTMwOTljMWY5
NzU3NCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKQEAgLTQxLDI2ICs0
MSwzMyBAQCBEZWFsbG9jYXRvcjo6RGVhbGxvY2F0b3IoSGVhcCYgaGVhcCkKICAgICA6IG1faGVh
cChoZWFwKQogewogICAgIEJBU1NFUlQoIUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBF
bmFibGVkKCkpOworICAgIG1fdGhyZWFkQ2FjaGUgPSBUaHJlYWRDYWNoZTo6Y3JlYXRlKCZtX2xp
bmVDYWNoZSk7CiB9CiAKIERlYWxsb2NhdG9yOjp+RGVhbGxvY2F0b3IoKQogewogICAgIHNjYXZl
bmdlKCk7CisgICAgVGhyZWFkQ2FjaGU6OnJldHVybkZvclJldXNlKG1fdGhyZWFkQ2FjaGUpOwog
fQogICAgIAogdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIFVuaXF1ZUxvY2tI
b2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLQotICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7
Ci0gICAgbV9oZWFwLmRlYWxsb2NhdGVMaW5lQ2FjaGUobG9jaywgbGluZUNhY2hlKGxvY2spKTsK
KyAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9oZWFwLmRlYWxsb2NhdGVUaHJlYWRDYWNo
ZSgqbV90aHJlYWRDYWNoZSk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RM
b2coVW5pcXVlTG9ja0hvbGRlciYgbG9jaykKK3ZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmpl
Y3RMb2coKQogeworICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgTGlzdDxTbWFs
bFBhZ2U+IGZyZWVQYWdlczsKICAgICBmb3IgKE9iamVjdCBvYmplY3QgOiBtX29iamVjdExvZykK
LSAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKGxvY2ssIG9iamVjdCwgbGluZUNhY2hlKGxv
Y2spKTsKKyAgICAgICAgbV9oZWFwLmRlcmVmU21hbGxMaW5lKCZoZWxkTG9jaywgb2JqZWN0LCAq
bV90aHJlYWRDYWNoZSwgZnJlZVBhZ2VzKTsKKyAgICBsb2NrU3dpdGNoKCZoZWxkTG9jaywgbnVs
bHB0cik7CiAgICAgbV9vYmplY3RMb2cuY2xlYXIoKTsKKyAgICBpZiAoIWZyZWVQYWdlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKG1faGVhcC5tdXRl
eCgpKTsKKyAgICAgICAgbV9oZWFwLmRlYWxsb2NhdGVTbWFsbFBhZ2VzKGhlYXBMb2NrZXIsIGZy
ZWVQYWdlcyk7CisgICAgfQogfQogCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nh
c2Uodm9pZCogb2JqZWN0KQpAQCAtNjksMTUgKzc2LDEzIEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRl
YWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX2hlYXAuaXNMYXJnZShvYmplY3QpKSB7Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
ayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgbV9oZWFwLmRlYWxsb2NhdGVMYXJnZShsb2NrLCBv
YmplY3QpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgo
KSk7CisgICAgICAgIG1faGVhcC5kZWFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgb2JqZWN0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0g
bV9vYmplY3RMb2cuY2FwYWNpdHkoKSkgewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
SGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAgfQor
ICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKKyAg
ICAgICAgcHJvY2Vzc09iamVjdExvZygpOwogCiAgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3Qp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCmluZGV4IGYxNGZlZWE1Y2MwYjU2
MzliZmZjYWE1ZGJmN2UxODFjMmI1YzJmZTMuLmFiNzA5MWM1MWVmZTcwODVlMmI4ZDM2NDM4NTk1
YTc0NWNmY2Q3MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0
b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgKQEAgLTI4LDcg
KzI4LDEwIEBACiAKICNpbmNsdWRlICJCRXhwb3J0LmgiCiAjaW5jbHVkZSAiRml4ZWRWZWN0b3Iu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSAi
VGhyZWFkQ2FjaGUuaCIKKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgogI2luY2x1ZGUgPG11
dGV4PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CkBAIC00NiwxNyArNDksMTcgQEAgY2xhc3MgRGVh
bGxvY2F0b3IgewogICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKik7CiAgICAgdm9pZCBzY2F2ZW5n
ZSgpOwogICAgIAotICAgIHZvaWQgcHJvY2Vzc09iamVjdExvZyhVbmlxdWVMb2NrSG9sZGVyJik7
CisgICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgVGhyZWFkQ2FjaGUmIHRocmVhZENh
Y2hlKCkgeyByZXR1cm4gKm1fdGhyZWFkQ2FjaGU7IH0KICAgICAKLSAgICBMaW5lQ2FjaGUmIGxp
bmVDYWNoZShVbmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4gbV9saW5lQ2FjaGU7IH0KLQogcHJp
dmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAgICAgQkVYUE9SVCB2
b2lkIGRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKik7CiAKICAgICBIZWFwJiBtX2hlYXA7CiAgICAg
Rml4ZWRWZWN0b3I8dm9pZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0TG9nOwot
ICAgIExpbmVDYWNoZSBtX2xpbmVDYWNoZTsgLy8gVGhlIEhlYXAgcmVtb3ZlcyBpdGVtcyBmcm9t
IHRoaXMgY2FjaGUuCisgICAgTGluZUNhY2hlIG1fbGluZUNhY2hlIHsgfTsKKyAgICBUaHJlYWRD
YWNoZSogbV90aHJlYWRDYWNoZSB7IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBib29sIERlYWxs
b2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0dpZ2FjYWdlLmNwcAppbmRleCBiOThjZDNhODM2YjA2ZmI0M2MxMTMzNjYzZDJiZmUwYTZiNDQy
ZDVlLi44ZTI0ODE3NWVlYjliNzAwOWE3NjdmYzgzZGE2YjFjNTZjNWIyN2M3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0dpZ2FjYWdlLmNwcApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgZGlzYWJsZVBy
aW1pdGl2ZUdpZ2FjYWdlKCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgp
KTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tz
OjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxiYWNrcy5jYWxs
YmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3VtZW50KTsKICAg
ICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKQEAgLTI3OCwxNCArMjc4LDE0IEBAIHZv
aWQgYWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2
b2lkKiBhcmd1bWVudCkKICAgICB9CiAgICAgCiAgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
cyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwotICAgIFVu
aXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRleCgpKTsK
KyAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjpt
dXRleCgpKTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2FsbGJhY2soZnVuY3Rpb24s
IGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZv
aWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKIHsKICAgICBQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6
Z2V0KCk7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3M6Om11dGV4KCkpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9ja2VyKFByaW1pdGl2ZURpc2Fi
bGVDYWxsYmFja3M6Om11dGV4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJh
Y2tzLmNhbGxiYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoY2FsbGJhY2tzLmNhbGxi
YWNrc1tpXS5mdW5jdGlvbiA9PSBmdW5jdGlvbgogICAgICAgICAgICAgJiYgY2FsbGJhY2tzLmNh
bGxiYWNrc1tpXS5hcmd1bWVudCA9PSBhcmd1bWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9IZWFwLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAK
aW5kZXggNDk0YTJiNTRjY2MxMzhhNGRhZDA1YmY2NjgxNmMzNjM3ZjU0ZTcxNC4uNDc4Yzk5Y2Fj
OGY2YjBmOWI0Y2JlN2IwZDk1MDg0OTkyMmQwYzIxOSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
CkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCisjaW5jbHVkZSAiQXJl
bmEuaCIKICNpbmNsdWRlICJBdmFpbGFibGVNZW1vcnkuaCIKICNpbmNsdWRlICJCdWxrRGVjb21t
aXQuaCIKICNpbmNsdWRlICJCdW1wQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ1BVLmgiCiAjaW5j
bHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJEZWJ1
Z0hlYXAuaCIKQEAgLTY1LDcgKzY3LDYgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBMb2Nr
SG9sZGVyJikKICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoYmFzZSwgc2l6ZSwg
MCwgMCkpOwogICAgIH0KICNlbmRpZgotICAgIAogICAgIG1fc2NhdmVuZ2VyID0gU2NhdmVuZ2Vy
OjpnZXQoKTsKIH0KIApAQCAtMTE3LDkgKzExOCw5IEBAIHZvaWQgSGVhcDo6ZGVjb21taXRMYXJn
ZVJhbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBMYXJnZVJhbmdlJiByYW5nZSwgQnVsa0RlY29tbWl0
CiB9CiAKICNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlKFVu
aXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCit2b2lkIEhl
YXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIsIEJ1bGtEZWNvbW1pdCYg
ZGVjb21taXR0ZXIpCiAjZWxzZQotdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVy
JiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRlZmVycmVkRGVjb21t
aXRzKQordm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBC
dWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRlZmVycmVkRGVjb21taXRzKQogI2Vu
ZGlmCiB7CiAgICAgZm9yIChhdXRvJiBsaXN0IDogbV9mcmVlUGFnZXMpIHsKQEAgLTE1MCw3ICsx
NTEsNyBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtE
ZWNvbW1pdCYgZGVjb21taXR0ZXIsIHNpemVfdCYgZAogCiAgICAgZm9yIChhdXRvJiBsaXN0IDog
bV9jaHVua0NhY2hlKSB7CiAgICAgICAgIHdoaWxlICghbGlzdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhsb2NrLCBsaXN0LnBvcCgpLCAmbGlzdCAtICZtX2No
dW5rQ2FjaGVbMF0pOworICAgICAgICAgICAgZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoaGVhcExvY2tl
ciwgbGlzdC5wb3AoKSwgJmxpc3QgLSAmbV9jaHVua0NhY2hlWzBdKTsKICAgICB9CiAKICAgICBm
b3IgKExhcmdlUmFuZ2UmIHJhbmdlIDogbV9sYXJnZUZyZWUpIHsKQEAgLTE2Myw3ICsxNjQsNyBA
QCB2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1p
dCYgZGVjb21taXR0ZXIsIHNpemVfdCYgZAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICNlbmRpZgotICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywgcmFuZ2UsIGRlY29t
bWl0dGVyKTsKKyAgICAgICAgZGVjb21taXRMYXJnZVJhbmdlKGhlYXBMb2NrZXIsIHJhbmdlLCBk
ZWNvbW1pdHRlcik7CiAgICAgfQogCiAjaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQpAQCAtMTcy
LDMwICsxNzMsMzYgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2Nr
LCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGQKIH0KIAogI2lmIEJVU0UoUEFS
VElBTF9TQ0FWRU5HRSkKLXZvaWQgSGVhcDo6c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVW5pcXVl
TG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlcikKK3ZvaWQgSGVhcDo6
c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYgaGVhcExvY2tlciwgQnVs
a0RlY29tbWl0JiBkZWNvbW1pdHRlcikKIHsKICAgICB2b2lkKiBuZXdIaWdoV2F0ZXJNYXJrID0g
bnVsbHB0cjsKICAgICBmb3IgKExhcmdlUmFuZ2UmIHJhbmdlIDogbV9sYXJnZUZyZWUpIHsKICAg
ICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPD0gbV9oaWdoV2F0ZXJtYXJrKQogICAgICAgICAgICAg
bmV3SGlnaFdhdGVyTWFyayA9IHN0ZDo6bWluKG5ld0hpZ2hXYXRlck1hcmssIHN0YXRpY19jYXN0
PHZvaWQqPihyYW5nZS5iZWdpbigpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlY29t
bWl0TGFyZ2VSYW5nZShsb2NrLCByYW5nZSwgZGVjb21taXR0ZXIpOworICAgICAgICAgICAgZGVj
b21taXRMYXJnZVJhbmdlKGhlYXBMb2NrZXIsIHJhbmdlLCBkZWNvbW1pdHRlcik7CiAgICAgfQog
ICAgIG1faGlnaFdhdGVybWFyayA9IG5ld0hpZ2hXYXRlck1hcms7CiB9CiAjZW5kaWYKIAotdm9p
ZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xkZXImLCBMaW5lQ2FjaGUm
IGxpbmVDYWNoZSkKK0JOT19JTkxJTkUgdm9pZCBIZWFwOjpkZWFsbG9jYXRlVGhyZWFkQ2FjaGUo
VGhyZWFkQ2FjaGUmIHRocmVhZENhY2hlKQogeworICAgIEJVTlVTRUQodGhyZWFkQ2FjaGUpOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHRocmVhZENhY2hlLm11dGV4KCkpOworICAgIFVuaXF1ZUxv
Y2tIb2xkZXIgaGVhcExvY2tlcihtdXRleCgpKTsKKyAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSA9
ICp0aHJlYWRDYWNoZS5saW5lQ2FjaGUoKTsKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBsaW5lQ2Fj
aGUpIHsKICAgICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgc2l6
ZV90IHNpemVDbGFzcyA9ICZsaXN0IC0gJmxpbmVDYWNoZVswXTsKLSAgICAgICAgICAgIG1fbGlu
ZUNhY2hlW3NpemVDbGFzc10ucHVzaChsaXN0LnBvcEZyb250KCkpOworICAgICAgICAgICAgU21h
bGxQYWdlKiBwYWdlID0gbGlzdC5wb3BGcm9udCgpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2Fj
aGUobnVsbHB0cik7CisgICAgICAgICAgICBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnB1c2gocGFn
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5r
KFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MsIEZhaWx1cmVBY3Rpb24g
YWN0aW9uKQordm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hvbGRlciYg
aGVhcExvY2tlciwgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAg
ICAgUkVMRUFTRV9CQVNTRVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAgICAgCkBAIC0y
MDUsNyArMjEyLDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hv
bGRlciYgbG9jaywgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUEKICAgICAgICAgaWYgKCFtX2No
dW5rQ2FjaGVbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gbV9jaHVu
a0NhY2hlW3BhZ2VDbGFzc10ucG9wKCk7CiAKLSAgICAgICAgdm9pZCogbWVtb3J5ID0gYWxsb2Nh
dGVMYXJnZShsb2NrLCBjaHVua1NpemUsIGNodW5rU2l6ZSwgYWN0aW9uKTsKKyAgICAgICAgdm9p
ZCogbWVtb3J5ID0gYWxsb2NhdGVMYXJnZShoZWFwTG9ja2VyLCBjaHVua1NpemUsIGNodW5rU2l6
ZSwgYWN0aW9uKTsKICAgICAgICAgaWYgKCFtZW1vcnkpIHsKICAgICAgICAgICAgIEJBU1NFUlQo
YWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwpOwogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yMTMsNyArMjIwLDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1
bmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHBhZ2VDbGFzcywgRmFpbHVyZUEKIAog
ICAgICAgICBDaHVuayogY2h1bmsgPSBuZXcgKG1lbW9yeSkgQ2h1bmsocGFnZVNpemUpOwogCi0g
ICAgICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxvY2ssIGNodW5rLCBPYmplY3RUeXBlOjpTbWFsbCk7
CisgICAgICAgIG1fb2JqZWN0VHlwZXMuc2V0KGhlYXBMb2NrZXIsIGNodW5rLCBPYmplY3RUeXBl
OjpTbWFsbCk7CiAKICAgICAgICAgc2l6ZV90IGFjY291bnRlZEluRnJlZWFibGUgPSAwOwogICAg
ICAgICBmb3JFYWNoUGFnZShjaHVuaywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsK
QEAgLTIyMSw3ICsyMjgsOCBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVM
b2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQQogI2lmICFCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBwYWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVu
Z2UoKTsKICNlbmRpZgotICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRy
dWUpOworICAgICAgICAgICAgcGFnZS0+aW5pdEhhc0ZyZWVMaW5lcygpOworICAgICAgICAgICAg
cGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbihmYWxzZSk7CiAgICAgICAgICAgICBj
aHVuay0+ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKICAgICAgICAgICAgIGFjY291bnRlZEluRnJl
ZWFibGUgKz0gcGFnZVNpemU7CiAgICAgICAgIH0pOwpAQCAtMjQ0LDkgKzI1Miw5IEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBw
YWdlQ2xhc3MsIEZhaWx1cmVBCiAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChj
aHVuayk7CiB9CiAKLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9ja0hv
bGRlciYgbG9jaywgQ2h1bmsqIGNodW5rLCBzaXplX3QgcGFnZUNsYXNzKQordm9pZCBIZWFwOjpk
ZWFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrSG9sZGVyJiBoZWFwTG9ja2VyLCBDaHVuayog
Y2h1bmssIHNpemVfdCBwYWdlQ2xhc3MpCiB7Ci0gICAgbV9vYmplY3RUeXBlcy5zZXQobG9jaywg
Y2h1bmssIE9iamVjdFR5cGU6OkxhcmdlKTsKKyAgICBtX29iamVjdFR5cGVzLnNldChoZWFwTG9j
a2VyLCBjaHVuaywgT2JqZWN0VHlwZTo6TGFyZ2UpOwogICAgIAogICAgIHNpemVfdCBzaXplID0g
bV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUoY2h1bmspOwogICAgIHNpemVfdCB0b3RhbFBoeXNpY2Fs
U2l6ZSA9IHNpemU7CkBAIC0yNzAsMjMgKzI3OCwzNiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVT
bWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIENodW5rKiBjaHVuaywgc2l6ZV90IHBh
ZwogICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBzaXplLCBzdGFydFBoeXNp
Y2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKIH0KIAotU21hbGxQYWdlKiBIZWFwOjphbGxv
Y2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLCBM
aW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitTbWFsbFBhZ2UqIEhl
YXA6OmFsbG9jYXRlTG9ja2VkU21hbGxQYWdlKHNpemVfdCBzaXplQ2xhc3MsIFRocmVhZENhY2hl
JiB0aHJlYWRDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgUkVMRUFTRV9CQVNT
RVJUKGlzQWN0aXZlSGVhcEtpbmQobV9raW5kKSk7CiAKLSAgICBpZiAoIWxpbmVDYWNoZVtzaXpl
Q2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGxpbmVDYWNoZVtzaXplQ2xhc3NdLnBv
cEZyb250KCk7CisgICAgYm9vbCBpc0VtcHR5ID0gZmFsc2U7CisgICAgU21hbGxQYWdlKiBwYWdl
ID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xk
ZXIgY2FjaGVMb2NrZXIodGhyZWFkQ2FjaGUubXV0ZXgoKSk7CisgICAgICAgICAgICBMaW5lQ2Fj
aGUmIGxpbmVDYWNoZSA9ICp0aHJlYWRDYWNoZS5saW5lQ2FjaGUoKTsKKyAgICAgICAgICAgIGlm
ICghbGluZUNhY2hlW3NpemVDbGFzc10uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byogcGFnZSA9IGxpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgICAgICAgICAg
ICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbih0cnVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYgKCFt
X2xpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbGluZUNh
Y2hlW3NpemVDbGFzc10ucG9wRnJvbnQoKTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFw
TG9ja2VyKG11dGV4KCkpOworICAgICAgICBpZiAoIW1fbGluZUNhY2hlW3NpemVDbGFzc10uaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvKiBwYWdlID0gbV9saW5lQ2FjaGVbc2l6ZUNsYXNz
XS5wb3BGcm9udCgpOworICAgICAgICAgICAgcGFnZS0+c2V0SW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbih0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9CiAKLSAgICBt
X3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCi0gICAgU21hbGxQYWdlKiBwYWdl
ID0gWyZdKCkgLT4gU21hbGxQYWdlKiB7CisgICAgICAgIG1fc2NhdmVuZ2VyLT5kaWRTdGFydEdy
b3dpbmcoKTsKKworICAgICAgICBpc0VtcHR5ID0gdHJ1ZTsKICAgICAgICAgc2l6ZV90IHBhZ2VD
bGFzcyA9IG1fY29uc3RhbnRzLnBhZ2VDbGFzcyhzaXplQ2xhc3MpOwotICAgICAgICAKKwogICAg
ICAgICBpZiAobV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
bGxvY2F0ZVNtYWxsQ2h1bmsobG9jaywgcGFnZUNsYXNzLCBhY3Rpb24pOworICAgICAgICAgICAg
YWxsb2NhdGVTbWFsbENodW5rKGhlYXBMb2NrZXIsIHBhZ2VDbGFzcywgYWN0aW9uKTsKICAgICAg
ICAgaWYgKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsICYmIG1fZnJlZVBhZ2Vz
W3BhZ2VDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTMxNCwzOCArMzM1LDMyIEBAIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5p
cXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgTGluCiAjaWYgIUJVU0UoUEFS
VElBTF9TQ0FWRU5HRSkKICAgICAgICAgcGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7
CiAjZW5kaWYKLQorICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9uKHRy
dWUpOwogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9KCk7CisKICAgICBpZiAoIXBhZ2UpIHsK
ICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIGlmIChpc0VtcHR5KSB7CisgICAg
ICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxwdHI7CisgICAgICAgIHBhZ2UtPmxvY2tBbmRUcnlU
b1Rha2VCaWFzKCZoZWxkTG9jaywgJnRocmVhZENhY2hlLnBhZ2VNdXRleCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcGFnZS0+bG9jaygpOwogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xh
c3MpOwogICAgIHJldHVybiBwYWdlOwogfQogCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExp
bmUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgT2JqZWN0IG9iamVjdCwgTGluZUNhY2hlJiBsaW5l
Q2FjaGUpCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYg
aGVhcExvY2tlciwgU21hbGxQYWdlKiBwYWdlKQogewotICAgIEJBU1NFUlQoIW9iamVjdC5saW5l
KCktPnJlZkNvdW50KGxvY2spKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgp
OwotICAgIHBhZ2UtPmRlcmVmKGxvY2spOwotCi0gICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMo
bG9jaykpIHsKLSAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwotICAg
ICAgICBsaW5lQ2FjaGVbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7Ci0gICAgfQotCi0g
ICAgaWYgKHBhZ2UtPnJlZkNvdW50KGxvY2spKQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXpl
X3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKTsK
IAogICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5i
ZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKIAotICAgIExpc3Q8U21hbGxQ
YWdlPjo6cmVtb3ZlKHBhZ2UpOyAvLyAncGFnZScgbWF5IGJlIGluIGFueSB0aHJlYWQncyBsaW5l
IGNhY2hlLgotICAgIAorICAgIHBhZ2UtPnNldENhY2hlKG51bGxwdHIpOworCiAgICAgQ2h1bmsq
IGNodW5rID0gQ2h1bms6OmdldChwYWdlKTsKICAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygpLmlz
RW1wdHkoKSkKICAgICAgICAgbV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKQEAg
LTM1NywzMyArMzcyLDEyNyBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoVW5pcXVl
TG9ja0hvbGRlciYgbG9jaywgT2JqZWN0IG9iamVjdCwgTGluZUNhY2hlJgogICAgICAgICBtX2Zy
ZWVQYWdlc1twYWdlQ2xhc3NdLnJlbW92ZShjaHVuayk7CiAKICAgICAgICAgaWYgKCFtX2NodW5r
Q2FjaGVbcGFnZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZWFsbG9jYXRlU21hbGxD
aHVuayhsb2NrLCBtX2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5wb3AoKSwgcGFnZUNsYXNzKTsKKyAg
ICAgICAgICAgIGRlYWxsb2NhdGVTbWFsbENodW5rKGhlYXBMb2NrZXIsIG1fY2h1bmtDYWNoZVtw
YWdlQ2xhc3NdLnBvcCgpLCBwYWdlQ2xhc3MpOwogCiAgICAgICAgIG1fY2h1bmtDYWNoZVtwYWdl
Q2xhc3NdLnB1c2goY2h1bmspOwogICAgIH0KLSAgICAKKwogICAgIG1fc2NhdmVuZ2VyLT5zY2hl
ZHVsZShwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKIH0KIAotdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5TWV0YWRhdGEoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90
IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hl
JiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFj
dGlvbikKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZXMoVW5pcXVlTG9ja0hvbGRlciYg
aGVhcExvY2tlciwgTGlzdDxTbWFsbFBhZ2U+JiBmcmVlUGFnZXMpCit7CisgICAgc2l6ZV90IGFt
b3VudCA9IDA7CisgICAgd2hpbGUgKCFmcmVlUGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNt
YWxsUGFnZSogcGFnZSA9IGZyZWVQYWdlcy5wb3BGcm9udCgpOworICAgICAgICBzaXplX3QgcGFn
ZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHBhZ2UtPnNpemVDbGFzcygpKTsKKworICAg
ICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVn
aW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CisKKyAgICAgICAgcGFnZS0+c2V0
Q2FjaGUobnVsbHB0cik7CisKKyAgICAgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6OmdldChwYWdl
KTsKKyAgICAgICAgaWYgKGNodW5rLT5mcmVlUGFnZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnB1c2goY2h1bmspOworICAgICAgICBjaHVuay0+ZnJl
ZVBhZ2VzKCkucHVzaChwYWdlKTsKKworICAgICAgICBjaHVuay0+ZGVyZWYoKTsKKworICAgICAg
ICBpZiAoIWNodW5rLT5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICBtX2ZyZWVQYWdlc1twYWdl
Q2xhc3NdLnJlbW92ZShjaHVuayk7CisKKyAgICAgICAgICAgIGlmICghbV9jaHVua0NhY2hlW3Bh
Z2VDbGFzc10uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVTbWFsbENodW5r
KGhlYXBMb2NrZXIsIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnBvcCgpLCBwYWdlQ2xhc3MpOwor
CisgICAgICAgICAgICBtX2NodW5rQ2FjaGVbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKKyAgICAg
ICAgfQorICAgICAgICBhbW91bnQgKz0gcGFnZVNpemUocGFnZUNsYXNzKTsKKyAgICB9CisKKyAg
ICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoYW1vdW50KTsKK30KKwordm9pZCBIZWFwOjpkZWFsbG9j
YXRlU21hbGxMaW5lKFNtYWxsUGFnZSogcGFnZSwgT2JqZWN0IG9iamVjdCwgVGhyZWFkQ2FjaGUm
IHRocmVhZENhY2hlLCBMaXN0PFNtYWxsUGFnZT4mIGZyZWVQYWdlcykKK3sKKyAgICBCVU5VU0VE
KG9iamVjdCk7CisgICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpOwor
ICAgIHBhZ2UtPmRlcmVmKCk7CisKKyAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcygpKSB7Cisg
ICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyh0cnVlKTsKKyAgICAgICAgLy8gcGFnZS0+aXNP
bkxpc3QoKSBjYW4gYmUgY2hhbmdlZCBmcm9tIHRydWUgdG8gZmFsc2Ugd2l0aG91dCB0YWtpbmcg
YSBwYWdlLWxvY2suCisgICAgICAgIC8vIEJ1dCBmYWxzZSB0byB0cnVlIHRyYW5zaXRpb24gaGFw
cGVucyBvbmx5IHdoZW4gdGhlbiBwYWdlLWxvY2sgaXMgaGVsZC4KKyAgICAgICAgQkFTU0VSVCgh
cGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgIGlmIChwYWdlLT5yZWZDb3VudCgpKSB7CisgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcih0aHJlYWRDYWNoZS5tdXRleCgpKTsKKworICAgICAg
ICAgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIFNvbWUgZnJlZSBsaW5lcyBleGlzdCwgYnV0
IHRoZSBwYWdlIGlzIG5vdCBjaGFpbmVkIHRvIGFueSB0aHJlYWQncyBMaW5lQ2FjaGUuCisgICAg
ICAgICAgICAvLyBMZXQncyBjaGFpbiBpdCB0byB0aGUgY3VycmVudCBmcmVlaW5nIHRocmVhZCdz
IExpbmVDYWNoZSBmb3IgcmV1c2luZy4KKyAgICAgICAgICAgICgqdGhyZWFkQ2FjaGUubGluZUNh
Y2hlKCkpW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgcGFnZS0+
c2V0Q2FjaGUoJnRocmVhZENhY2hlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBmcmVlUGFnZXMucHVzaChwYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChwYWdlLT5yZWZDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDYWNo
ZSBwb2ludGVyIGlzIHVwZGF0ZWQgd2hlbiBhIHBhZ2UgaXMgbG9ja2VkLiBTaW5jZSB3ZSBhcmUg
Y3VycmVudGx5IGhvbGRpbmcgdGhlIHBhZ2UncyBsb2NrLCB0aGVyZSBhcmUgZm91ciBjYXNlcy4K
KyAgICAvLworICAgIC8vICAgICAxLiBDYWNoZSBwb2ludGVyIGlzIG5vbiBudWxscHRyLCBhbmQg
dGhlIHBhZ2UgaXMgYWN0dWFsbHkgY2hhaW5lZC4KKyAgICAvLyAgICAgMi4gQ2FjaGUgcG9pbnRl
ciBpcyBub24gbnVsbHB0ciwgYW5kIHRoZSBwYWdlIGlzIGp1c3QgYWZ0ZXIgdW4tY2hhaW5lZCBm
cm9tIHRoZSBjYWNoZS4KKyAgICAvLyAgICAgMy4gQ2FjaGUgcG9pbnRlciBpcyBudWxscHRyLCBh
bmQgdGhlIHBhZ2UgaXMgbm90IGNoYWluZWQuCisgICAgLy8gICAgIDQuIENhY2hlIHBvaW50ZXIg
aXMgbnVsbHB0ciwgYW5kIHRoZSBwYWdlIGlzIGNoYWluZWQgdG8gdGhlIGdsb2JhbCBjYWNoZS4K
KyAgICAvLworICAgIC8vIEZvciAoMSkgb3IgKDIpIGNhc2VzLCBqdXN0IHRha2luZyBhIGxvY2sg
b2YgY2FjaGUgaXMgZmluZS4gQW5kIGFmdGVyIHRoYXQsIHdlIGNhbiBjaGVjayBpbml0aWFsaXpp
bmdGb3JBbGxvY2F0aW9uIGZsYWcgd2hpY2ggdGVsbHMgd2hldGhlciB0aGlzIGlzICgxKSBvciAo
MikuCisgICAgLy8gRm9yICgzKSBvciAoNCkgY2FzZXMsIGp1c3QgdGFraW5nIGEgaGVhcCBsb2Nr
IGlzIGZpbmUuIEFuZCBhZnRlciB0aGF0LCB3ZSBjYW4gY2hlY2sgaW5pdGlhbGl6aW5nRm9yQWxs
b2NhdGlvbiBmbGFnIHdoaWNoIHRlbGxzIHdoZXRoZXIgdGhpcyBpcyAoMykgb3IgKDQpLgorICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIFRocmVhZENhY2hlKiBjYWNoZSA9IHBhZ2UtPmNhY2hl
KCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgTG9j
a0hvbGRlciBjYWNoZUxvY2tlcihjYWNoZS0+bXV0ZXgoKSk7CisgICAgICAgIGlmICghcGFnZS0+
Y2FjaGUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocGFnZS0+Y2FjaGUoKSAh
PSBjYWNoZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocGFnZS0+aW5pdGlh
bGl6aW5nRm9yQWxsb2NhdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBMaXN0
PFNtYWxsUGFnZT46OnJlbW92ZShwYWdlKTsKKyAgICAgICAgZnJlZVBhZ2VzLnB1c2gocGFnZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2Nr
ZXIobXV0ZXgoKSk7CisgICAgaWYgKHBhZ2UtPmluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oKSkK
KyAgICAgICAgcmV0dXJuOworICAgIExpc3Q8U21hbGxQYWdlPjo6cmVtb3ZlKHBhZ2UpOworICAg
IGRlYWxsb2NhdGVTbWFsbFBhZ2UoaGVhcExvY2tlciwgcGFnZSk7Cit9CisKK3ZvaWQgSGVhcDo6
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBB
bGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUsIFRocmVhZENh
Y2hlJiB0aHJlYWRDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCiB7CiAgICAgQlVOVVNFRChh
Y3Rpb24pOwogICAgIFJFTEVBU0VfQkFTU0VSVChpc0FjdGl2ZUhlYXBLaW5kKG1fa2luZCkpOwog
Ci0gICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNz
LCBsaW5lQ2FjaGUsIGFjdGlvbik7CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVMb2Nr
ZWRTbWFsbFBhZ2Uoc2l6ZUNsYXNzLCB0aHJlYWRDYWNoZSwgYWN0aW9uKTsKICAgICBpZiAoIXBh
Z2UpIHsKICAgICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVs
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgp
KTsKKyAgICBCQVNTRVJUKCFwYWdlLT5pc09uTGlzdCgpKTsKKwogICAgIFNtYWxsTGluZSogbGlu
ZXMgPSBwYWdlLT5iZWdpbigpOwotICAgIEJBU1NFUlQocGFnZS0+aGFzRnJlZUxpbmVzKGxvY2sp
KTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAgIGF1dG8gZmluZFNt
YWxsQnVtcFJhbmdlID0gWyZdKHNpemVfdCYgbGluZU51bWJlcikgewogICAgICAgICBmb3IgKCA7
IGxpbmVOdW1iZXIgPCBtX2NvbnN0YW50cy5zbWFsbExpbmVDb3VudCgpOyArK2xpbmVOdW1iZXIp
IHsKLSAgICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpIHsK
KyAgICAgICAgICAgIGlmICghbGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQocGFnZSkpIHsKICAg
ICAgICAgICAgICAgICBpZiAobV9jb25zdGFudHMub2JqZWN0Q291bnQoc2l6ZUNsYXNzLCBsaW5l
TnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CkBAIC0zOTYsNyArNTA1LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5
TWV0YWRhdGEoCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gMDsKICAgICAg
ICAgCiAgICAgICAgIGZvciAoIDsgbGluZU51bWJlciA8IG1fY29uc3RhbnRzLnNtYWxsTGluZUNv
dW50KCk7ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJd
LnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNv
dW50KHBhZ2UpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBhdXRvIGxp
bmVPYmplY3RDb3VudCA9IG1fY29uc3RhbnRzLm9iamVjdENvdW50KHNpemVDbGFzcywgbGluZU51
bWJlcik7CkBAIC00MDQsOCArNTEzLDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlc0J5TWV0YWRhdGEoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IG9iamVjdENvdW50ICs9IGxpbmVPYmplY3RDb3VudDsKLSAgICAgICAgICAgIGxpbmVzW2xpbmVO
dW1iZXJdLnJlZihsb2NrLCBsaW5lT2JqZWN0Q291bnQpOwotICAgICAgICAgICAgcGFnZS0+cmVm
KGxvY2spOworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKHBhZ2UsIGxpbmVPYmpl
Y3RDb3VudCk7CisgICAgICAgICAgICBwYWdlLT5yZWYoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4geyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKICAgICB9OwpAQCAtNDEzLDE1ICs1MjIsMjYg
QEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgc2l6
ZV90IGxpbmVOdW1iZXIgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFmaW5kU21h
bGxCdW1wUmFuZ2UobGluZU51bWJlcikpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVM
aW5lcyhsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMoZmFs
c2UpOworICAgICAgICAgICAgQkFTU0VSVCghcGFnZS0+aXNPbkxpc3QoKSk7CiAgICAgICAgICAg
ICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRv
ci5jYW5BbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFs
bG9jYXRpb24oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0Q2FjaGUobnVsbHB0cik7Cisg
ICAgICAgICAgICBwYWdlLT51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZyZWUgcmFuZ2VzIG1p
Z2h0IG5vdCBmaXQgaW4gdGhlIGNhY2hlLgogICAgICAgICBpZiAocmFuZ2VDYWNoZS5zaXplKCkg
PT0gcmFuZ2VDYWNoZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQ2FjaGVbc2l6ZUNs
YXNzXS5wdXNoKHBhZ2UpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHRocmVhZENhY2hlLm11dGV4KCkpOworICAgICAgICAgICAgICAgICgqdGhyZWFk
Q2FjaGUubGluZUNhY2hlKCkpW3NpemVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgICAg
ICBwYWdlLT5zZXRDYWNoZSgmdGhyZWFkQ2FjaGUpOworICAgICAgICAgICAgICAgIEJBU1NFUlQo
cGFnZS0+aXNPbkxpc3QoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBCQVNTRVJUKGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IGFsbG9jYXRvci5jYW5BbGxvY2F0
ZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24oZmFs
c2UpOworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtNDMzLDI1ICs1NTMsMjQgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxs
QnVtcFJhbmdlc0J5TWV0YWRhdGEoCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzQnlPYmplY3QoCi0gICAgVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90
IHNpemVDbGFzcywKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hl
JiByYW5nZUNhY2hlLAotICAgIExpbmVDYWNoZSYgbGluZUNhY2hlLCBGYWlsdXJlQWN0aW9uIGFj
dGlvbikKK3ZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVjdChzaXplX3Qg
c2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5n
ZUNhY2hlLCBUaHJlYWRDYWNoZSYgdGhyZWFkQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQog
ewogICAgIEJVTlVTRUQoYWN0aW9uKTsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNBY3RpdmVIZWFw
S2luZChtX2tpbmQpKTsKIAogICAgIHNpemVfdCBzaXplID0gYWxsb2NhdG9yLnNpemUoKTsKLSAg
ICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBzaXplQ2xhc3MsIGxp
bmVDYWNoZSwgYWN0aW9uKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZUxvY2tlZFNt
YWxsUGFnZShzaXplQ2xhc3MsIHRocmVhZENhY2hlLCBhY3Rpb24pOwogICAgIGlmICghcGFnZSkg
ewogICAgICAgICBCQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhs
b2NrKSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICBCQVNTRVJUKCFwYWdl
LT5pc09uTGlzdCgpKTsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcygpKTsKIAogICAg
IGF1dG8gZmluZFNtYWxsQnVtcFJhbmdlID0gWyZdKE9iamVjdCYgaXQsIE9iamVjdCYgZW5kKSB7
CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNpemUpIHsKLSAg
ICAgICAgICAgIGlmICghaXQubGluZSgpLT5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgIGlm
ICghaXQubGluZSgpLT5yZWZDb3VudChwYWdlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjEsMTIgKzU4MCwxMiBA
QCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplY3QoCiAgICAgICAgIGNo
YXIqIGJlZ2luID0gaXQuYWRkcmVzcygpOwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RD
b3VudCA9IDA7CiAgICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNp
emUpIHsKLSAgICAgICAgICAgIGlmIChpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQorICAgICAg
ICAgICAgaWYgKGl0LmxpbmUoKS0+cmVmQ291bnQocGFnZSkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICsrb2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICBpdC5saW5lKCkt
PnJlZihsb2NrKTsKLSAgICAgICAgICAgIGl0LnBhZ2UoKS0+cmVmKGxvY2spOworICAgICAgICAg
ICAgaXQubGluZSgpLT5yZWYocGFnZSk7CisgICAgICAgICAgICBpdC5wYWdlKCktPnJlZigpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB7IGJlZ2luLCBvYmplY3RDb3VudCB9OwogICAgIH07
CkBAIC00NzUsMTUgKzU5NCwyNiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlPYmplY3QoCiAgICAgT2JqZWN0IGVuZChpdCArIHBhZ2VTaXplKG1fY29uc3RhbnRzLnBhZ2VD
bGFzcyhwYWdlLT5zaXplQ2xhc3MoKSkpKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICgh
ZmluZFNtYWxsQnVtcFJhbmdlKGl0LCBlbmQpKSB7Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNG
cmVlTGluZXMobG9jaywgZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVz
KGZhbHNlKTsKKyAgICAgICAgICAgIEJBU1NFUlQoIXBhZ2UtPmlzT25MaXN0KCkpOwogICAgICAg
ICAgICAgQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxv
Y2F0b3IuY2FuQWxsb2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdG
b3JBbGxvY2F0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldENhY2hlKG51bGxwdHIp
OworICAgICAgICAgICAgcGFnZS0+dW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJhbmdl
cyBtaWdodCBub3QgZml0IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHJhbmdlQ2FjaGUuc2l6
ZSgpID09IHJhbmdlQ2FjaGUuY2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbGluZUNhY2hlW3Np
emVDbGFzc10ucHVzaChwYWdlKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcih0aHJlYWRDYWNoZS5tdXRleCgpKTsKKyAgICAgICAgICAgICAgICAoKnRo
cmVhZENhY2hlLmxpbmVDYWNoZSgpKVtzaXplQ2xhc3NdLnB1c2gocGFnZSk7CisgICAgICAgICAg
ICAgICAgcGFnZS0+c2V0Q2FjaGUoJnRocmVhZENhY2hlKTsKKyAgICAgICAgICAgICAgICBCQVNT
RVJUKHBhZ2UtPmlzT25MaXN0KCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgQkFTU0VS
VChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCBhbGxvY2F0b3IuY2FuQWxs
b2NhdGUoKSk7CisgICAgICAgICAgICBwYWdlLT5zZXRJbml0aWFsaXppbmdGb3JBbGxvY2F0aW9u
KGZhbHNlKTsKKyAgICAgICAgICAgIHBhZ2UtPnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTQ5NSw3ICs2MjUsNyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21h
bGxCdW1wUmFuZ2VzQnlPYmplY3QoCiAgICAgfQogfQogCi1MYXJnZVJhbmdlIEhlYXA6OnNwbGl0
QW5kQWxsb2NhdGUoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgTGFyZ2VSYW5nZSYgcmFuZ2UsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQorTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFs
bG9jYXRlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIsIExhcmdlUmFuZ2UmIHJhbmdlLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBSRUxFQVNFX0JBU1NFUlQoaXNB
Y3RpdmVIZWFwS2luZChtX2tpbmQpKTsKIApAQCAtNTM3LDEzICs2NjcsMTMgQEAgTGFyZ2VSYW5n
ZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIExhcmdlUmFu
Z2UmIHJhbmdlLCBzaXoKICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKG5leHQpOwogICAgIH0KIAot
ICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxvY2ssIENodW5rOjpnZXQocmFuZ2UuYmVnaW4oKSksIE9i
amVjdFR5cGU6OkxhcmdlKTsKKyAgICBtX29iamVjdFR5cGVzLnNldChoZWFwTG9ja2VyLCBDaHVu
azo6Z2V0KHJhbmdlLmJlZ2luKCkpLCBPYmplY3RUeXBlOjpMYXJnZSk7CiAKICAgICBtX2xhcmdl
QWxsb2NhdGVkLnNldChyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwogICAgIHJldHVybiBy
YW5nZTsKIH0KIAotdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiBs
b2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24p
Cit2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGhlYXBMb2NrZXIs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKIHsK
ICNkZWZpbmUgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKGNvbmQpIGRvIHsgXAogICAgICAg
ICBpZiAoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OkNyYXNoKSBcCkBAIC01NzAsOSArNzAwLDkg
QEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwKICAgICBMYXJnZVJhbmdlIHJhbmdlID0gbV9sYXJn
ZUZyZWUucmVtb3ZlKGFsaWdubWVudCwgc2l6ZSk7CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAg
ICBpZiAobV9oYXNQZW5kaW5nRGVjb21taXRzKSB7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi53
YWl0KGxvY2ssIFsmXSgpIHsgcmV0dXJuICFtX2hhc1BlbmRpbmdEZWNvbW1pdHM7IH0pOworICAg
ICAgICAgICAgbV9jb25kaXRpb24ud2FpdChoZWFwTG9ja2VyLCBbJl0oKSB7IHJldHVybiAhbV9o
YXNQZW5kaW5nRGVjb21taXRzOyB9KTsKICAgICAgICAgICAgIC8vIE5vdyB3ZSdyZSBndWFyYW50
ZWVkIHdlJ3JlIGxvb2tpbmcgYXQgYWxsIGF2YWlsYWJsZSBtZW1vcnkuCi0gICAgICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIGFjdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gYWxsb2NhdGVMYXJnZShoZWFwTG9ja2VyLCBhbGlnbm1lbnQsIHNpemUs
IGFjdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfT1JfUkVUVVJOX09OX0ZBSUxV
UkUoIXVzaW5nR2lnYWNhZ2UoKSk7CkBAIC01ODYsNyArNzE2LDcgQEAgdm9pZCogSGVhcDo6YWxs
b2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSwKIAogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2UudG90YWxQaHlzaWNhbFNp
emUoKTsKIAotICAgIHZvaWQqIHJlc3VsdCA9IHNwbGl0QW5kQWxsb2NhdGUobG9jaywgcmFuZ2Us
IGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKKyAgICB2b2lkKiByZXN1bHQgPSBzcGxpdEFuZEFs
bG9jYXRlKGhlYXBMb2NrZXIsIHJhbmdlLCBhbGlnbm1lbnQsIHNpemUpLmJlZ2luKCk7CiAjaWYg
QlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIG1faGlnaFdhdGVybWFyayA9IHN0ZDo6bWF4KG1f
aGlnaFdhdGVybWFyaywgcmVzdWx0KTsKICNlbmRpZgpAQCAtNjI2LDEzICs3NTYsMTMgQEAgc2l6
ZV90IEhlYXA6OmxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogb2JqZWN0KQogICAg
IHJldHVybiBtX2xhcmdlQWxsb2NhdGVkLmdldChvYmplY3QpOwogfQogCi12b2lkIEhlYXA6OnNo
cmlua0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNp
emVfdCBuZXdTaXplKQordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiBo
ZWFwTG9ja2VyLCBjb25zdCBSYW5nZSYgb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBC
QVNTRVJUKG9iamVjdC5zaXplKCkgPiBuZXdTaXplKTsKIAogICAgIHNpemVfdCBzaXplID0gbV9s
YXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2luKCkpOwogICAgIExhcmdlUmFuZ2UgcmFu
Z2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6ZSk7Ci0gICAgc3BsaXRBbmRBbGxvY2F0
ZShsb2NrLCByYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKKyAgICBzcGxpdEFuZEFsbG9jYXRl
KGhlYXBMb2NrZXIsIHJhbmdlLCBhbGlnbm1lbnQsIG5ld1NpemUpOwogCiAgICAgbV9zY2F2ZW5n
ZXItPnNjaGVkdWxlKHNpemUpOwogfQpAQCAtNjQ3LDggKzc3Nyw4IEBAIHZvaWQgSGVhcDo6ZGVh
bGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBvYmplY3QpCiAKIHZvaWQgSGVh
cDo6ZXh0ZXJuYWxDb21taXQodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBVbmlxdWVM
b2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgZXh0ZXJuYWxDb21taXQobG9jaywg
cHRyLCBzaXplKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0ZXgo
KSk7CisgICAgZXh0ZXJuYWxDb21taXQoaGVhcExvY2tlciwgcHRyLCBzaXplKTsKIH0KIAogdm9p
ZCBIZWFwOjpleHRlcm5hbENvbW1pdChVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogcHRyLCBzaXpl
X3Qgc2l6ZSkKQEAgLTY2Myw4ICs3OTMsOCBAQCB2b2lkIEhlYXA6OmV4dGVybmFsQ29tbWl0KFVu
aXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBwdHIsIHNpemVfdCBzaXplKQogCiB2b2lkIEhlYXA6OmV4
dGVybmFsRGVjb21taXQodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBVbmlxdWVMb2Nr
SG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgZXh0ZXJuYWxEZWNvbW1pdChsb2NrLCBw
dHIsIHNpemUpOworICAgIFVuaXF1ZUxvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjptdXRleCgp
KTsKKyAgICBleHRlcm5hbERlY29tbWl0KGhlYXBMb2NrZXIsIHB0ciwgc2l6ZSk7CiB9CiAKIHZv
aWQgSGVhcDo6ZXh0ZXJuYWxEZWNvbW1pdChVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogcHRyLCBz
aXplX3Qgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oIGIv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKaW5kZXggNTQ5ZGQyNGY2YzU4OTY0NmNkMjI2
MDRkOGM5YjQ5ZWYwYzc0NTA0My4uZmEyZGQyYTEwYjM2YTY3MjU2YmMyNDdjYTRiOWQwY2FmZTAy
YjFkZiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKKysrIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSGVh
cF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXBwcm94UGVyQ1BVQ2FjaGUuaCIKICNp
bmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkZhaWx1
cmVBY3Rpb24uaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQaHlzaWNhbFBhZ2VNYXAu
aCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKICNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKKyNpbmNs
dWRlICJUaHJlYWRDYWNoZS5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGNvbmRpdGlv
bl92YXJpYWJsZT4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTYyLDEwICs2NCwxMSBAQCBjbGFzcyBI
ZWFwIHsKICAgICAKICAgICBIZWFwS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CiAgICAgCi0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhVbmlxdWVMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVDbGFzcywKLSAgICAgICAgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNh
Y2hlJiwgTGluZUNhY2hlJiwgRmFpbHVyZUFjdGlvbik7Ci0gICAgdm9pZCBkZXJlZlNtYWxsTGlu
ZShVbmlxdWVMb2NrSG9sZGVyJiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRlYWxs
b2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYpOworICAgIHZvaWQg
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYs
IEJ1bXBSYW5nZUNhY2hlJiwgVGhyZWFkQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lk
IGRlcmVmU21hbGxMaW5lKE11dGV4KiosIE9iamVjdCwgVGhyZWFkQ2FjaGUmLCBMaXN0PFNtYWxs
UGFnZT4mKTsKKyAgICB2b2lkIGRlYWxsb2NhdGVUaHJlYWRDYWNoZShUaHJlYWRDYWNoZSYpOwor
ICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiwgU21hbGxQYWdl
Kik7CisgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxQYWdlcyhVbmlxdWVMb2NrSG9sZGVyJiwgTGlz
dDxTbWFsbFBhZ2U+Jik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xk
ZXImLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIEZhaWx1cmVBY3Rpb24pOwogICAgIHZvaWQg
ZGVhbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKik7CkBAIC0xMDksMTMgKzEx
MiwxMSBAQCBjbGFzcyBIZWFwIHsKICAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsgLy8gTWF5
IGNyYXNoIGlmICF1c2luZ0dpZ2FjYWdlKCkuCiAgICAgc2l6ZV90IGdpZ2FjYWdlU2l6ZSgpOwog
Ci0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoVW5pcXVlTG9ja0hv
bGRlciYsCi0gICAgICAgIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFu
Z2VDYWNoZSYsIExpbmVDYWNoZSYsIEZhaWx1cmVBY3Rpb24pOwotICAgIHZvaWQgYWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZXNCeU9iamVjdChVbmlxdWVMb2NrSG9sZGVyJiwKLSAgICAgICAgc2l6ZV90
IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJiwg
RmFpbHVyZUFjdGlvbik7CisgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRh
dGEoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgVGhy
ZWFkQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKKyAgICB2b2lkIGFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzQnlPYmplY3Qoc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNh
Y2hlJiwgVGhyZWFkQ2FjaGUmLCBGYWlsdXJlQWN0aW9uKTsKIAotICAgIFNtYWxsUGFnZSogYWxs
b2NhdGVTbWFsbFBhZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHNpemVfdCBzaXplQ2xhc3MsIExpbmVD
YWNoZSYsIEZhaWx1cmVBY3Rpb24pOwotICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShVbmlx
dWVMb2NrSG9sZGVyJiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKKyAgICBTbWFsbFBhZ2UqIGFsbG9j
YXRlTG9ja2VkU21hbGxQYWdlKHNpemVfdCBzaXplQ2xhc3MsIFRocmVhZENhY2hlJiwgRmFpbHVy
ZUFjdGlvbik7CisgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKFNtYWxsUGFnZSosIE9iamVj
dCwgVGhyZWFkQ2FjaGUmLCBMaXN0PFNtYWxsUGFnZT4mKTsKIAogICAgIHZvaWQgYWxsb2NhdGVT
bWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImLCBzaXplX3QgcGFnZUNsYXNzLCBGYWlsdXJlQWN0
aW9uKTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvY2tIb2xkZXImLCBD
aHVuayosIHNpemVfdCBwYWdlQ2xhc3MpOwpAQCAtMTUyLDIxICsxNTMsMjEgQEAgY2xhc3MgSGVh
cCB7CiAjZW5kaWYKIH07CiAKLWlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzKAotICAgIFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAg
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAg
ICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCitpbmxpbmUgdm9p
ZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzaXplX3Qgc2l6ZUNsYXNzLCBCdW1wQWxs
b2NhdG9yJiBhbGxvY2F0b3IsIEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlLCBUaHJlYWRDYWNo
ZSYgdGhyZWFkQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQogewogICAgIGlmIChzaXplQ2xh
c3MgPCBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxMaW5lU2l6ZSkpCi0gICAgICAgIHJldHVybiBh
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0
b3IsIHJhbmdlQ2FjaGUsIGxpbmVDYWNoZSwgYWN0aW9uKTsKLSAgICByZXR1cm4gYWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZXNCeU9iamVjdChsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VD
YWNoZSwgbGluZUNhY2hlLCBhY3Rpb24pOworICAgICAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1
bXBSYW5nZXNCeU1ldGFkYXRhKHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCB0aHJl
YWRDYWNoZSwgYWN0aW9uKTsKKyAgICByZXR1cm4gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9i
amVjdChzaXplQ2xhc3MsIGFsbG9jYXRvciwgcmFuZ2VDYWNoZSwgdGhyZWFkQ2FjaGUsIGFjdGlv
bik7CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKFVuaXF1ZUxvY2tIb2xk
ZXImIGxvY2ssIE9iamVjdCBvYmplY3QsIExpbmVDYWNoZSYgbGluZUNhY2hlKQoraW5saW5lIHZv
aWQgSGVhcDo6ZGVyZWZTbWFsbExpbmUoTXV0ZXgqKiBoZWxkTG9jaywgT2JqZWN0IG9iamVjdCwg
VGhyZWFkQ2FjaGUmIHRocmVhZENhY2hlLCBMaXN0PFNtYWxsUGFnZT4mIGZyZWVQYWdlcykKIHsK
LSAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVmKGxvY2spKQorICAgIFNtYWxsUGFnZSogcGFn
ZSA9IG9iamVjdC5wYWdlKCk7CisgICAgcGFnZS0+c3dpdGNoTG9jayhoZWxkTG9jayk7CisgICAg
QkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVm
KHBhZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBv
YmplY3QsIGxpbmVDYWNoZSk7CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShwYWdlLCBvYmplY3Qs
IHRocmVhZENhY2hlLCBmcmVlUGFnZXMpOwogfQogCiBpbmxpbmUgYm9vbCBIZWFwOjppc0xhcmdl
KHZvaWQqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcENv
bnN0YW50cy5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBDb25zdGFudHMuY3BwCmlu
ZGV4IDQ2MDFkMmZiMDE1OTY3NWY0MGU0MWNiZWNhNmE4YzFiOGUyMTk5MzguLjRhZmMwOGQ2OGU2
MTE0OGMxZmRmMGY1MDgyNDFkZjNmMzExNjU5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcENvbnN0YW50cy5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwQ29uc3RhbnRzLmNwcApAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJIZWFw
Q29uc3RhbnRzLmgiCisjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
CiBuYW1lc3BhY2UgYm1hbGxvYyB7CkBAIC0xMjQsOCArMTI1LDMzIEBAIHZvaWQgSGVhcENvbnN0
YW50czo6aW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpCiAgICAgICAgIHJldHVybiBwYWdlU2l6ZU1h
eDsKICAgICB9OwogCisgICAgYXV0byBjb21wdXRlTWF4TGluZUNvdW50ID0gWyZdKHNpemVfdCBz
aXplQ2xhc3MpIHsKKyAgICAgICAgaWYgKHNpemVDbGFzcyA8IGJtYWxsb2M6OnNpemVDbGFzcyhz
bWFsbExpbmVTaXplKSkgeworICAgICAgICAgICAgc2l6ZV90IGxpbmVDb3VudCA9IDA7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IHNtYWxsTGlu
ZUNvdW50KCk7ICsrbGluZU51bWJlcikgeworICAgICAgICAgICAgICAgIGlmIChvYmplY3RDb3Vu
dChzaXplQ2xhc3MsIGxpbmVOdW1iZXIpKQorICAgICAgICAgICAgICAgICAgICArK2xpbmVDb3Vu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaW5lQ291bnQ7CisgICAgICAg
IH0KKworICAgICAgICBzaXplX3QgbGluZUNvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHNpemUg
PSBvYmplY3RTaXplKHNpemVDbGFzcyk7CisgICAgICAgIHNpemVfdCBpdCA9IDA7CisgICAgICAg
IHNpemVfdCBlbmQgPSBwYWdlU2l6ZShwYWdlQ2xhc3Moc2l6ZUNsYXNzKSk7CisgICAgICAgIGZv
ciAoOyBpdCArIHNpemUgPD0gZW5kOyBpdCA9IGl0ICsgc2l6ZSkKKyAgICAgICAgICAgICsrbGlu
ZUNvdW50OworICAgICAgICByZXR1cm4gbGluZUNvdW50OworICAgIH07CisKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemVDbGFzc0NvdW50OyArK2kpCiAgICAgICAgIG1fcGFnZUNsYXNz
ZXNbaV0gPSAoY29tcHV0ZVBhZ2VTaXplKGkpIC0gMSkgLyBzbWFsbFBhZ2VTaXplOworCisgICAg
Ly8gTWF4TGluZUNvdW50IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gcGFnZUNsYXNzIGNhbGN1bGF0
ZWQgYWJvdmUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplQ2xhc3NDb3VudDsgKytp
KSB7CisgICAgICAgIG1fbWF4TGluZUNvdW50c1tpXSA9IGNvbXB1dGVNYXhMaW5lQ291bnQoaSk7
CisgICAgICAgIC8vIGZwcmludGYoc3RkZXJyLCAiJXUgPT4gJXUgPT4gJXVcbiIsICh1bnNpZ25l
ZClpLCAodW5zaWduZWQpb2JqZWN0U2l6ZShpKSwgKHVuc2lnbmVkKW1fbWF4TGluZUNvdW50c1tp
XSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBDb25zdGFudHMuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcENvbnN0YW50cy5oCmluZGV4IGZiNDA3Mzg4ZDNjODRmNmZiZTkzYmQ4ZGUzYjM1Njli
ODEzYjZhZWUuLjA5OGM0MGY2ZWQ4YWExNDAxZWFiYWEwZmUzMjQ1MmNjYjMxZmQ2ZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcENvbnN0YW50cy5oCisrKyBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcENvbnN0YW50cy5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNz
IEhlYXBDb25zdGFudHMgOiBwdWJsaWMgU3RhdGljUGVyUHJvY2VzczxIZWFwQ29uc3RhbnRzPiB7
CiAgICAgaW5saW5lIHNpemVfdCBzbWFsbExpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGJtYWxs
b2M6OnNtYWxsTGluZUNvdW50KG1fdm1QYWdlU2l6ZVBoeXNpY2FsKTsgfQogICAgIGlubGluZSB1
bnNpZ25lZCBjaGFyIHN0YXJ0T2Zmc2V0KHNpemVfdCBzaXplQ2xhc3MsIHNpemVfdCBsaW5lTnVt
YmVyKSBjb25zdCB7IHJldHVybiBsaW5lTWV0YWRhdGEoc2l6ZUNsYXNzLCBsaW5lTnVtYmVyKS5z
dGFydE9mZnNldDsgfQogICAgIGlubGluZSB1bnNpZ25lZCBjaGFyIG9iamVjdENvdW50KHNpemVf
dCBzaXplQ2xhc3MsIHNpemVfdCBsaW5lTnVtYmVyKSBjb25zdCB7IHJldHVybiBsaW5lTWV0YWRh
dGEoc2l6ZUNsYXNzLCBsaW5lTnVtYmVyKS5vYmplY3RDb3VudDsgfQorICAgIGlubGluZSB1bnNp
Z25lZCBjaGFyIG1heExpbmVDb3VudChzaXplX3Qgc2l6ZUNsYXNzKSBjb25zdCB7IHJldHVybiBt
X21heExpbmVDb3VudHNbc2l6ZUNsYXNzXTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlh
bGl6ZUxpbmVNZXRhZGF0YSgpOwpAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBIZWFwQ29uc3RhbnRz
IDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8SGVhcENvbnN0YW50cz4gewogICAgIGNvbnN0IExp
bmVNZXRhZGF0YSogbV9zbWFsbExpbmVNZXRhZGF0YSB7IH07CiAgICAgVmVjdG9yPExpbmVNZXRh
ZGF0YT4gbV9zbWFsbExpbmVNZXRhZGF0YVN0b3JhZ2U7CiAgICAgc3RkOjphcnJheTxzaXplX3Qs
IHNpemVDbGFzc0NvdW50PiBtX3BhZ2VDbGFzc2VzOworICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
c2l6ZUNsYXNzQ291bnQ+IG1fbWF4TGluZUNvdW50czsKIH07CiBERUNMQVJFX1NUQVRJQ19QRVJf
UFJPQ0VTU19TVE9SQUdFKEhlYXBDb25zdGFudHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0xpc3QuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCmluZGV4
IDYzOWVkYzllNGY2ZWNiMzNhM2ZmYmNlNTMxMzBkMjJiMjk4YWMyYTYuLjNkYTc1YjMyMmM0MjE3
NzQ4MDQ0YmZkMTQ0MWJmMDQwMmY1Mzk1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvTGlzdC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGlzdC5oCkBAIC0zMiw2
ICszMiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IExpc3ROb2RlIHsKICAgICBM
aXN0Tm9kZTxUPiogcHJldiB7IG51bGxwdHIgfTsKICAgICBMaXN0Tm9kZTxUPiogbmV4dCB7IG51
bGxwdHIgfTsKKworICAgIGJvb2wgaXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQkFT
U0VSVCghIXByZXYgPT0gISFuZXh0KTsKKyAgICAgICAgcmV0dXJuICEhcHJldjsKKyAgICB9CiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9NdXRleC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NdXRleC5oCmluZGV4IGY0Y2My
YWE0MTFjOTI4MzIyMTI5MWNhODU4MDIwZDMwMThhYTIzYWQuLmJlNmEzZjFiYzFiOTNkMmEzNmZh
NDhkODJhMThhMGM5ZWU0MWNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TXV0ZXguaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL011dGV4LmgKQEAgLTQ4LDkgKzQ4
LDEyIEBAIGNsYXNzIE11dGV4IHsKICAgICBib29sIHRyeV9sb2NrKCk7CiAgICAgdm9pZCB1bmxv
Y2soKTsKIAorICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBCRVhQ
T1JUIHZvaWQgbG9ja1Nsb3dDYXNlKCk7CiAKKyAgICAvLyBFbnN1cmUgdGhhdCBNdXRleCBpcyB6
ZXJvLWluaXRpYWxpemVkLiBTbWFsbFBhZ2UgcmVsaWVzIG9uIHRoYXQuCiAgICAgc3RkOjphdG9t
aWM8Ym9vbD4gbV9mbGFnIHsgZmFsc2UgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2lzU3Bp
bm5pbmcgeyBmYWxzZSB9OwogfTsKQEAgLTkyLDQgKzk1LDIwIEBAIGlubGluZSB2b2lkIE11dGV4
Ojp1bmxvY2soKQogICAgIG1fZmxhZy5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSk7CiB9CiAKK2lubGluZSBib29sIE11dGV4Ojppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZmxhZzsKK30KKworaW5saW5lIHZvaWQgbG9ja1N3aXRjaChNdXRleCoqIGhlbGRM
b2NrLCBNdXRleCogbG9jaykKK3sKKyAgICBpZiAoQkxJS0VMWShsb2NrID09ICpoZWxkTG9jaykp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoKmhlbGRMb2NrKQorICAgICAgICAoKmhlbGRMb2Nr
KS0+dW5sb2NrKCk7CisgICAgKmhlbGRMb2NrID0gbG9jazsKKyAgICBpZiAobG9jaykKKyAgICAg
ICAgbG9jay0+bG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9QZXJQcm9jZXNzLmNwcAppbmRleCBkODJmMjViNWU5OGRkYTljYTZmMGUzM2FkNDgx
NTJjODFkY2QyZGY3Li44NTM3OGU5YmEyNDRkYTI2NGM5OGI0YzEyNTJhZWFjMDY2ZDM2Y2ZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAotI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKKyNpbmNs
dWRlICJBcmVuYS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsK
QEAgLTM1LDI5ICszNSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiAKIHN0YXRpYyBNdXRleCBzX211dGV4OwogCi1zdGF0aWMgY2hhciogc19idW1wQmFzZTsKLXN0
YXRpYyBzaXplX3Qgc19idW1wT2Zmc2V0Owotc3RhdGljIHNpemVfdCBzX2J1bXBMaW1pdDsKLQog
c3RhdGljIFBlclByb2Nlc3NEYXRhKiBzX3RhYmxlW3RhYmxlU2l6ZV07CiAKLS8vIFJldHVybnMg
emVyby1maWxsZWQgbWVtb3J5IGJ5IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KLXN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKLXsKLSAgICBz
X2J1bXBPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc19idW1wT2Zmc2V0
KTsKLSAgICB2b2lkKiByZXN1bHQgPSBzX2J1bXBCYXNlICsgc19idW1wT2Zmc2V0OwotICAgIHNf
YnVtcE9mZnNldCArPSBzaXplOwotICAgIGlmIChzX2J1bXBPZmZzZXQgPD0gc19idW1wTGltaXQp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gdm1TaXplKHNpemUpOwotICAgIHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9j
YXRpb25TaXplKTsKLSAgICBzX2J1bXBCYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRp
b24pOwotICAgIHNfYnVtcE9mZnNldCA9IDA7Ci0gICAgc19idW1wTGltaXQgPSBhbGxvY2F0aW9u
U2l6ZTsKLSAgICByZXR1cm4gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQogUGVyUHJv
Y2Vzc0RhdGEqIGdldFBlclByb2Nlc3NEYXRhKHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIGRp
c2FtYmlndWF0b3IsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KQogewogICAgIExvY2tI
b2xkZXIgbG9jayhzX211dGV4KTsKQEAgLTc2LDEwICs1NSwxMSBAQCBQZXJQcm9jZXNzRGF0YSog
Z2V0UGVyUHJvY2Vzc0RhdGEodW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciogZGlzYW1iaWd1YXRv
ciwgc2l6ZQogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVkOiBDcmVhdGluZyBuZXcgJXNcbiIsIGdldHBpZCgpLCBkaXNhbWJpZ3VhdG9yKTsKLSAgICB2
b2lkKiByYXdEYXRhUHRyID0gYWxsb2NhdGUoc2l6ZW9mKFBlclByb2Nlc3NEYXRhKSwgc3RkOjph
bGlnbm1lbnRfb2Y8UGVyUHJvY2Vzc0RhdGE+Ojp2YWx1ZSk7CisgICAgYXV0byogYXJlbmEgPSBB
cmVuYTo6Z2V0KCk7CisgICAgdm9pZCogcmF3RGF0YVB0ciA9IGFyZW5hLT5hbGxvY2F0ZShzaXpl
b2YoUGVyUHJvY2Vzc0RhdGEpLCBzdGQ6OmFsaWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZh
bHVlKTsKICAgICBQZXJQcm9jZXNzRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFBlclByb2Nlc3NE
YXRhKj4ocmF3RGF0YVB0cik7CiAgICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRpc2FtYmlndWF0
b3I7Ci0gICAgZGF0YS0+bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKKyAgICBk
YXRhLT5tZW1vcnkgPSBhcmVuYS0+YWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKICAgICBkYXRh
LT5zaXplID0gc2l6ZTsKICAgICBkYXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiAgICAgZGF0
YS0+bmV4dCA9IGJ1Y2tldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAppbmRleCA2
MTA2NzhhNjE1N2NlN2YyMTNmYjY2YjhjN2VlNGFhZDE3OTRmMTI3Li41NTY0MjdhNzcwYWVmMjYz
NjUzYjQ0Y2RjZWYwNjQzZjI2MTg1MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NjYXZlbmdlci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
Y3BwCkBAIC05Niw4ICs5Niw4IEBAIFNjYXZlbmdlcjo6U2NhdmVuZ2VyKGNvbnN0IExvY2tIb2xk
ZXImKQogCiB2b2lkIFNjYXZlbmdlcjo6cnVuKCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0
ZXgoKSk7Ci0gICAgcnVuKGxvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOwor
ICAgIHJ1bihsb2NrZXIpOwogfQogCiB2b2lkIFNjYXZlbmdlcjo6cnVuKGNvbnN0IExvY2tIb2xk
ZXImKQpAQCAtMTA4LDggKzEwOCw4IEBAIHZvaWQgU2NhdmVuZ2VyOjpydW4oY29uc3QgTG9ja0hv
bGRlciYpCiAKIHZvaWQgU2NhdmVuZ2VyOjpydW5Tb29uKCkKIHsKLSAgICBMb2NrSG9sZGVyIGxv
Y2sobXV0ZXgoKSk7Ci0gICAgcnVuU29vbihsb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
dXRleCgpKTsKKyAgICBydW5Tb29uKGxvY2tlcik7CiB9CiAKIHZvaWQgU2NhdmVuZ2VyOjpydW5T
b29uKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTI4LDExICsxMjgsMTEgQEAgdm9pZCBTY2F2ZW5n
ZXI6OmRpZFN0YXJ0R3Jvd2luZygpCiAKIHZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJN
ZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0ZXMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrKG11dGV4
KCkpOwotICAgIHNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGxvY2ssIGJ5dGVzKTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKKyAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQ
cmVzc3VyZShsb2NrZXIsIGJ5dGVzKTsKIH0KIAotdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZV
bmRlck1lbW9yeVByZXNzdXJlKGNvbnN0IExvY2tIb2xkZXImIGxvY2ssIHNpemVfdCBieXRlcykK
K3ZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShjb25zdCBMb2Nr
SG9sZGVyJiBsb2NrZXIsIHNpemVfdCBieXRlcykKIHsKICAgICBtX3NjYXZlbmdlckJ5dGVzICs9
IGJ5dGVzOwogICAgIGlmIChtX3NjYXZlbmdlckJ5dGVzIDwgc2NhdmVuZ2VyQnl0ZXNQZXJNZW1v
cnlQcmVzc3VyZUNoZWNrKQpAQCAtMTQ3LDE5ICsxNDcsMTkgQEAgdm9pZCBTY2F2ZW5nZXI6OnNj
aGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKGNvbnN0IExvY2tIb2xkZXImIGxvY2ssIHNpemVf
dCBieXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNl
OwotICAgIHJ1bihsb2NrKTsKKyAgICBydW4obG9ja2VyKTsKIH0KIAogdm9pZCBTY2F2ZW5nZXI6
OnNjaGVkdWxlKHNpemVfdCBieXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7
Ci0gICAgc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUobG9jaywgYnl0ZXMpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgIHNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNz
dXJlKGxvY2tlciwgYnl0ZXMpOwogICAgIAogICAgIGlmICh3aWxsUnVuU29vbigpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNlOwotICAgIHJ1
blNvb24obG9jayk7CisgICAgcnVuU29vbihsb2NrZXIpOwogfQogCiBpbmxpbmUgdm9pZCBkdW1w
U3RhdHMoKQpAQCAtMTgzLDE0ICsxODMsMTQgQEAgaW5saW5lIHZvaWQgZHVtcFN0YXRzKCkKIAog
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTY2F2ZW5nZXI6OnRpbWVTaW5jZUxhc3RGdWxsU2Nh
dmVuZ2UoKQogewotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKKyAgICBVbmlx
dWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6bm93KCkgLSBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lKTsKIH0KIAogI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2NhdmVuZ2VyOjp0
aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlKCkKIHsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2sobXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrZXIobXV0ZXgoKSk7CiAgICAg
cmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM+KHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9sYXN0UGFydGlhbFNjYXZl
bmdlVGltZSk7CiB9CiAjZW5kaWYKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIFNjYXZlbmdlcjo6
c2NhdmVuZ2UoKQogICAgIGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtX3NjYXZlbmdpbmdNdXRleCk7CisgICAgVW5pcXVlTG9j
a0hvbGRlciBsb2NrZXIobV9zY2F2ZW5naW5nTXV0ZXgpOwogCiAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIik7CkBAIC0yMjMsMTQgKzIyMywxNCBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQog
I2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBzaXplX3QgZGVmZXJyZWRE
ZWNvbW1pdHMgPSAwOwogI2VuZGlmCi0gICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
SGVhcDo6bXV0ZXgoKSk7CisgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIo
SGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsg
aS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2Fz
dDxIZWFwS2luZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2lu
ZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrLCBkZWNvbW1pdHRlcik7CisgICAg
ICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5z
Y2F2ZW5nZShoZWFwTG9ja2VyLCBkZWNvbW1pdHRlcik7CiAjZWxzZQotICAgICAgICAgICAgICAg
IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UobG9j
aywgZGVjb21taXR0ZXIsIGRlZmVycmVkRGVjb21taXRzKTsKKyAgICAgICAgICAgICAgICBQZXJQ
cm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLnNjYXZlbmdlKGhlYXBMb2Nr
ZXIsIGRlY29tbWl0dGVyLCBkZWZlcnJlZERlY29tbWl0cyk7CiAjZW5kaWYKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGRlY29tbWl0dGVyLnByb2Nlc3NFYWdlcigpOwpAQCAtMjQ4LDExICsy
NDgsMTEgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKIAogICAgICAgICB7CiAgICAgICAg
ICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJmdWxsIHNjYXZlbmdlIG1hcmsgYWxsIGFzIGVsaWdp
YmxlIHRpbWUiKTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsK
KyAgICAgICAgICAgIExvY2tIb2xkZXIgaGVhcExvY2tlcihIZWFwOjptdXRleCgpKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVy
SGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkubWFya0FsbExhcmdlQXNFbGlnaWJpbGUobG9j
ayk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgp
LT5hdChpKS5tYXJrQWxsTGFyZ2VBc0VsaWdpYmlsZShoZWFwTG9ja2VyKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIFNjYXZlbmdlcjo6
c2NhdmVuZ2UoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2Nr
KG11dGV4KCkpOworICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAg
ICAgICAgbV9sYXN0RnVsbFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6
Om5vdygpOwogICAgIH0KIH0KQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFNjYXZlbmdlcjo6cGFy
dGlhbFNjYXZlbmdlKCkKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobV9zY2F2ZW5naW5nTXV0ZXgpOworICAgIFVuaXF1
ZUxvY2tIb2xkZXIgbG9ja2VyKG1fc2NhdmVuZ2luZ011dGV4KTsKIAogICAgIGlmICh2ZXJib3Nl
KSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS1cbiIpOwpAQCAtMjk3LDE1ICsyOTcsMTUgQEAgdm9pZCBTY2F2ZW5nZXI6OnBhcnRpYWxT
Y2F2ZW5nZSgpCiAgICAgICAgIEJ1bGtEZWNvbW1pdCBkZWNvbW1pdHRlcjsKICAgICAgICAgewog
ICAgICAgICAgICAgUHJpbnRUaW1lIHByaW50VGltZSgiXG5wYXJ0aWFsU2NhdmVuZ2UgdW5kZXIg
bG9jayB0aW1lIik7Ci0gICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0
ZXgoKSk7CisgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0
ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewog
ICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2lu
ZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBI
ZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKTsK
LSAgICAgICAgICAgICAgICBzaXplX3QgZnJlZWFibGVNZW1vcnkgPSBoZWFwLmZyZWVhYmxlTWVt
b3J5KGxvY2spOworICAgICAgICAgICAgICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeSA9IGhlYXAu
ZnJlZWFibGVNZW1vcnkoaGVhcExvY2tlcik7CiAgICAgICAgICAgICAgICAgaWYgKGZyZWVhYmxl
TWVtb3J5IDwgNCAqIE1CKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxvY2ssIGRlY29tbWl0dGVyKTsK
KyAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGhlYXBMb2NrZXIs
IGRlY29tbWl0dGVyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZGVjb21taXR0ZXIu
cHJvY2Vzc0VhZ2VyKCk7CkBAIC0zMTgsMTIgKzMxOCwxMiBAQCB2b2lkIFNjYXZlbmdlcjo6cGFy
dGlhbFNjYXZlbmdlKCkKIAogICAgICAgICB7CiAgICAgICAgICAgICBQcmludFRpbWUgcHJpbnRU
aW1lKCJwYXJ0aWFsU2NhdmVuZ2UgbWFyayBhbGwgYXMgZWxpZ2libGUgdGltZSIpOwotICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgICAgICAgICAgTG9ja0hv
bGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtSGVhcHM7IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlSGVh
cEtpbmQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtp
bmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaGVhcC5tYXJrQWxsTGFy
Z2VBc0VsaWdpYmlsZShsb2NrKTsKKyAgICAgICAgICAgICAgICBoZWFwLm1hcmtBbGxMYXJnZUFz
RWxpZ2liaWxlKGhlYXBMb2NrZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgU2NhdmVuZ2VyOjpwYXJ0aWFsU2NhdmVuZ2UoKQogICAg
IH0KIAogICAgIHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOworICAg
ICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKICAgICAgICAgbV9sYXN0UGFy
dGlhbFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAg
IH0KIH0KQEAgLTM1NSwxMSArMzU1LDExIEBAIHNpemVfdCBTY2F2ZW5nZXI6OmZyZWVhYmxlTWVt
b3J5KCkKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICB7Ci0gICAgICAgIFVuaXF1ZUxv
Y2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKKyAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBo
ZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1I
ZWFwczsgaS0tOykgewogICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19j
YXN0PEhlYXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICByZXN1bHQgKz0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5m
cmVlYWJsZU1lbW9yeShsb2NrKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSBQZXJQcm9jZXNzPFBl
ckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLmZyZWVhYmxlTWVtb3J5KGhlYXBMb2NrZXIp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC00MTIsMTMgKzQxMiwxMyBAQCB2b2lkIFNjYXZlbmdl
cjo6dGhyZWFkUnVuTG9vcCgpCiAgICAgCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OlNsZWVwKSB7Ci0gICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVy
IGxvY2sobXV0ZXgoKSk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KGxvY2ssIFsmXSgp
IHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKKyAgICAgICAgICAgIFVuaXF1
ZUxvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgICAgICAgICAgbV9jb25kaXRpb24ud2Fp
dChsb2NrZXIsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlJ1blNvb24p
IHsKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKLSAgICAgICAg
ICAgIG1fY29uZGl0aW9uLndhaXRfZm9yKGxvY2ssIG1fd2FpdFRpbWUsIFsmXSgpIHsgcmV0dXJu
IG1fc3RhdGUgIT0gU3RhdGU6OlJ1blNvb247IH0pOworICAgICAgICAgICAgVW5pcXVlTG9ja0hv
bGRlciBsb2NrZXIobXV0ZXgoKSk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0X2Zvcihs
b2NrZXIsIG1fd2FpdFRpbWUsIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlJ1blNv
b247IH0pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlNs
ZWVwOwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaCBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxMaW5lLmgKaW5kZXggZDliNzRhYjhiOWZlMzllMDAw
OTI4YmZiNjY1M2U1MDViODljZmQyMi4uZGUyNjcyMDVlODJjNzRkNjEwMTVjMGFiOWViMjA5NmE2
NWMxYjhiMCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbExpbmUuaAor
KysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsTGluZS5oCkBAIC0yOSwxNSArMjksMjEg
QEAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNsdWRlICJP
YmplY3RUeXBlLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CiAK
IG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU21hbGxMaW5lIHsKIHB1YmxpYzoKLSAgICB2
b2lkIHJlZihVbmlxdWVMb2NrSG9sZGVyJiwgdW5zaWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wg
ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpOwotICAgIHVuc2lnbmVkIHJlZkNvdW50KFVuaXF1ZUxv
Y2tIb2xkZXImKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CisgICAgdm9pZCByZWYoU21hbGxQYWdl
KiwgdW5zaWduZWQgY2hhciA9IDEpOworICAgIGJvb2wgZGVyZWYoU21hbGxQYWdlKik7CisgICAg
dW5zaWduZWQgcmVmQ291bnQoU21hbGxQYWdlKiBwYWdlKQorICAgIHsKKyAgICAgICAgQlVOVVNF
RChwYWdlKTsKKyAgICAgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fcmVmQ291bnQ7CisgICAgfQogICAgIAogICAgIGNoYXIqIGJlZ2luKCk7CiAgICAgY2hh
ciogZW5kKCk7CkBAIC01MSwxNCArNTcsMTggQEAgc3RhdGljX2Fzc2VydCgKIAogfTsKIAotaW5s
aW5lIHZvaWQgU21hbGxMaW5lOjpyZWYoVW5pcXVlTG9ja0hvbGRlciYsIHVuc2lnbmVkIGNoYXIg
cmVmQ291bnQpCitpbmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihTbWFsbFBhZ2UqIHBhZ2UsIHVu
c2lnbmVkIGNoYXIgcmVmQ291bnQpCiB7CisgICAgQlVOVVNFRChwYWdlKTsKKyAgICBCQVNTRVJU
KHBhZ2UtPmlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQoIW1fcmVmQ291bnQpOwogICAgIG1fcmVm
Q291bnQgPSByZWZDb3VudDsKIH0KIAotaW5saW5lIGJvb2wgU21hbGxMaW5lOjpkZXJlZihVbmlx
dWVMb2NrSG9sZGVyJikKK2lubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYoU21hbGxQYWdlKiBw
YWdlKQogeworICAgIEJVTlVTRUQocGFnZSk7CisgICAgQkFTU0VSVChwYWdlLT5pc0xvY2tlZCgp
KTsKICAgICBCQVNTRVJUKG1fcmVmQ291bnQpOwogICAgIC0tbV9yZWZDb3VudDsKICAgICByZXR1
cm4gIW1fcmVmQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
UGFnZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAppbmRleCA0MzVlNWY3
MDk3ODBiNjY3MzI1MDdkZDZmYzEyMjFiN2NlZTZlN2M5Li4xN2MxZDg2MjdmYTc4OWIxYjJhNTY0
MGVhN2UyMmU2NjkyODdjMWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Nt
YWxsUGFnZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKQEAgLTM1
LDE4ICszNSwzMiBAQAogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBTbWFsbExpbmU7Citj
bGFzcyBUaHJlYWRDYWNoZTsKIAogY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNt
YWxsUGFnZT4gewogcHVibGljOgotICAgIHZvaWQgcmVmKFVuaXF1ZUxvY2tIb2xkZXImKTsKLSAg
ICBib29sIGRlcmVmKFVuaXF1ZUxvY2tIb2xkZXImKTsKLSAgICB1bnNpZ25lZCByZWZDb3VudChV
bmlxdWVMb2NrSG9sZGVyJikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQorICAgIHZvaWQgcmVmKCk7
CisgICAgYm9vbCBkZXJlZigpOworICAgIHVuc2lnbmVkIHJlZkNvdW50KCkKKyAgICB7CisgICAg
ICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50OworICAg
IH0KICAgICAKICAgICBzaXplX3Qgc2l6ZUNsYXNzKCkgeyByZXR1cm4gbV9zaXplQ2xhc3M7IH0K
ICAgICB2b2lkIHNldFNpemVDbGFzcyhzaXplX3Qgc2l6ZUNsYXNzKSB7IG1fc2l6ZUNsYXNzID0g
c2l6ZUNsYXNzOyB9CiAgICAgCi0gICAgYm9vbCBoYXNGcmVlTGluZXMoVW5pcXVlTG9ja0hvbGRl
ciYpIGNvbnN0IHsgcmV0dXJuIG1faGFzRnJlZUxpbmVzOyB9Ci0gICAgdm9pZCBzZXRIYXNGcmVl
TGluZXMoVW5pcXVlTG9ja0hvbGRlciYsIGJvb2wgaGFzRnJlZUxpbmVzKSB7IG1faGFzRnJlZUxp
bmVzID0gaGFzRnJlZUxpbmVzOyB9CisgICAgYm9vbCBoYXNGcmVlTGluZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQkFTU0VSVChpc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1faGFzRnJl
ZUxpbmVzOworICAgIH0KKyAgICB2b2lkIHNldEhhc0ZyZWVMaW5lcyhib29sIGhhc0ZyZWVMaW5l
cykKKyAgICB7CisgICAgICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CisgICAgICAgIG1faGFzRnJl
ZUxpbmVzID0gaGFzRnJlZUxpbmVzOworICAgIH0KKyAgICB2b2lkIGluaXRIYXNGcmVlTGluZXMo
KSB7IG1faGFzRnJlZUxpbmVzID0gdHJ1ZTsgfQogICAgIAogICAgIGJvb2wgaGFzUGh5c2ljYWxQ
YWdlcygpIHsgcmV0dXJuIG1faGFzUGh5c2ljYWxQYWdlczsgfQogICAgIHZvaWQgc2V0SGFzUGh5
c2ljYWxQYWdlcyhib29sIGhhc1BoeXNpY2FsUGFnZXMpIHsgbV9oYXNQaHlzaWNhbFBhZ2VzID0g
aGFzUGh5c2ljYWxQYWdlczsgfQpAQCAtNjAsMTcgKzc0LDk4IEBAIGNsYXNzIFNtYWxsUGFnZSA6
IHB1YmxpYyBMaXN0Tm9kZTxTbWFsbFBhZ2U+IHsKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7CiAK
ICAgICB1bnNpZ25lZCBjaGFyIHNsaWRlKCkgY29uc3QgeyByZXR1cm4gbV9zbGlkZTsgfQotICAg
IHZvaWQgc2V0U2xpZGUodW5zaWduZWQgY2hhciBzbGlkZSkgeyBtX3NsaWRlID0gc2xpZGU7IH0K
LSAgICAKKworICAgIGJvb2wgaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1faW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0SW5pdGlhbGl6
aW5nRm9yQWxsb2NhdGlvbihib29sIGluaXRpYWxpemluZ0ZvckFsbG9jYXRpb24pIHsgbV9pbml0
aWFsaXppbmdGb3JBbGxvY2F0aW9uID0gaW5pdGlhbGl6aW5nRm9yQWxsb2NhdGlvbjsgfQorCisg
ICAgVGhyZWFkQ2FjaGUqIGNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZTsgfQorICAgIHZv
aWQgc2V0Q2FjaGUoVGhyZWFkQ2FjaGUqIGNhY2hlKSB7IG1fY2FjaGUgPSBjYWNoZTsgfQorCisg
ICAgdm9pZCBpbml0aWFsaXplKHVuc2lnbmVkIGNoYXIgc2xpZGUpCisgICAgeworICAgICAgICBt
X3NsaWRlID0gc2xpZGU7CisgICAgICAgIG1fbXV0ZXhQdHIgPSAmbV9mYWxsYmFja011dGV4Owor
ICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbXV0ZXhQdHItPmlzTG9ja2VkKCk7CisgICAgfQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7
CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIE11dGV4KiBoZWxkTG9jayA9IG51bGxw
dHI7CisgICAgICAgICAgICBNdXRleCogbG9jayA9IG1fbXV0ZXhQdHI7CisgICAgICAgICAgICBp
ZiAobG9ja1dpdGhVbmJpYXMoJmhlbGRMb2NrLCBsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBsb2NrLT51bmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAgICAgIG1fbXV0ZXhQdHItPnVubG9jaygpOworICAg
IH0KKworICAgIHZvaWQgc3dpdGNoTG9jayhNdXRleCoqIGhlbGRMb2NrKQorICAgIHsKKyAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgTXV0ZXgqIGxvY2sgPSBtX211dGV4UHRyOworICAg
ICAgICAgICAgaWYgKEJMSUtFTFkobG9jayA9PSAqaGVsZExvY2spKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgaWYgKCpoZWxkTG9jaykKKyAgICAgICAgICAgICAgICAo
KmhlbGRMb2NrKS0+dW5sb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChsb2NrV2l0aFVuYmlhcyho
ZWxkTG9jaywgbG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgYm9vbCBsb2NrV2l0aFVuYmlhcyhNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9j
aykKKyAgICB7CisgICAgICAgICpoZWxkTG9jayA9IGxvY2s7CisgICAgICAgIGlmIChCTElLRUxZ
KGxvY2stPnRyeV9sb2NrKCkpKQorICAgICAgICAgICAgcmV0dXJuIGxvY2sgPT0gbV9tdXRleFB0
cjsKKworICAgICAgICAvLyBXZSBmb3VuZCB0aGF0IGxvY2sgaXMgY29udGVuZGVkIGJlY2F1c2Ug
dHJ5LWxvY2sgZmFpbGVkLgorICAgICAgICBsb2NrLT5sb2NrKCk7CisgICAgICAgIGlmIChsb2Nr
ICE9IG1fbXV0ZXhQdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KGxvY2sgIT0gJm1fZmFsbGJhY2tNdXRleCkgeworICAgICAgICAgICAgLy8gQ29udGVuZGVkIGFu
ZCB1c2luZyBwZXItY3B1IGxvY2suIENoYW5nZSB0aGlzIFNtYWxsUGFnZSdzIGxvY2sgdG8gZmlu
ZS1ncmFpbmVkIGZhbGxiYWNrIGxvY2suCisgICAgICAgICAgICBtX2ZhbGxiYWNrTXV0ZXgubG9j
aygpOworICAgICAgICAgICAgbV9tdXRleFB0ciA9ICZtX2ZhbGxiYWNrTXV0ZXg7CisgICAgICAg
ICAgICBsb2NrLT51bmxvY2soKTsKKyAgICAgICAgICAgICpoZWxkTG9jayA9ICZtX2ZhbGxiYWNr
TXV0ZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9p
ZCBsb2NrQW5kVHJ5VG9UYWtlQmlhcyhNdXRleCoqIGhlbGRMb2NrLCBNdXRleCogbG9ja1RvQmlh
c1RvKQorICAgIHsKKyAgICAgICAgbV9tdXRleFB0ciA9IGxvY2tUb0JpYXNUbzsKKyAgICAgICAg
QkFTU0VSVChtX211dGV4UHRyID09IGxvY2tUb0JpYXNUbyk7CisgICAgICAgIGxvY2tTd2l0Y2go
aGVsZExvY2ssIGxvY2tUb0JpYXNUbyk7CisgICAgICAgIEJBU1NFUlQobV9tdXRleFB0ciA9PSBs
b2NrVG9CaWFzVG8pOworICAgIH0KKwogcHJpdmF0ZToKKyAgICBNdXRleCBtX2ZhbGxiYWNrTXV0
ZXg7CiAgICAgdW5zaWduZWQgY2hhciBtX2hhc0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBj
aGFyIG1faGFzUGh5c2ljYWxQYWdlczogMTsKICNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQog
ICAgIHVuc2lnbmVkIGNoYXIgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U6IDE7CiAjZW5kaWYKICAg
ICB1bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ6IDc7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NpemVD
bGFzczsKKyAgICB1bnNpZ25lZCBjaGFyIG1fc2l6ZUNsYXNzIHsgMCB9OwogICAgIHVuc2lnbmVk
IGNoYXIgbV9zbGlkZTsKKyAgICB1bnNpZ25lZCBjaGFyIG1faW5pdGlhbGl6aW5nRm9yQWxsb2Nh
dGlvbjsKKworICAgIE11dGV4KiBtX211dGV4UHRyOworICAgIFRocmVhZENhY2hlKiBtX2NhY2hl
IHsgbnVsbHB0ciB9OwogCiBzdGF0aWNfYXNzZXJ0KAogICAgIHNpemVDbGFzc0NvdW50IDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZGVjbHR5cGUobV9zaXplQ2xhc3MpPjo6bWF4KCksCkBAIC03OSwx
NSArMTc0LDE3IEBAIHN0YXRpY19hc3NlcnQoCiAKIHVzaW5nIExpbmVDYWNoZSA9IHN0ZDo6YXJy
YXk8TGlzdDxTbWFsbFBhZ2U+LCBzaXplQ2xhc3NDb3VudD47CiAKLWlubGluZSB2b2lkIFNtYWxs
UGFnZTo6cmVmKFVuaXF1ZUxvY2tIb2xkZXImKQoraW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYo
KQogeworICAgIEJBU1NFUlQoaXNMb2NrZWQoKSk7CiAgICAgQkFTU0VSVCghbV9zbGlkZSk7CiAg
ICAgKyttX3JlZkNvdW50OwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiB9CiAKLWlubGluZSBi
b29sIFNtYWxsUGFnZTo6ZGVyZWYoVW5pcXVlTG9ja0hvbGRlciYpCitpbmxpbmUgYm9vbCBTbWFs
bFBhZ2U6OmRlcmVmKCkKIHsKKyAgICBCQVNTRVJUKGlzTG9ja2VkKCkpOwogICAgIEJBU1NFUlQo
IW1fc2xpZGUpOwogICAgIEJBU1NFUlQobV9yZWZDb3VudCk7CiAgICAgLS1tX3JlZkNvdW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmggYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaAppbmRleCAzNjZjMTU2ZGZl
NDI5YTE0YjIyYTVkNWQ4YWI0ODZkZjQ2YmI5ODU5Li45NDA1ZTYxNGY3MTFkY2UyNmRmN2YxZWUw
MzM0ZDRlODIwNTZjZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRp
Y1BlclByb2Nlc3MuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N0YXRpY1BlclByb2Nl
c3MuaApAQCAtNTksOSArNTksOSBAQCBjbGFzcyBTdGF0aWNQZXJQcm9jZXNzIHsKICAgICBzdGF0
aWMgVCogZ2V0KCkKICAgICB7CiAgICAgICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7Ci0g
ICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIGlmIChCTElLRUxZKG9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICByZXR1cm4gZ2V0U2xvd0Nhc2UoKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgVCogZ2V0RmFzdENhc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9UaHJlYWRDYWNoZS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Ro
cmVhZENhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzkzMmNiYmVlZWVjM2Q5MmM2M2IyMmZlMGFmZDcz
YzI1OTAxM2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9UaHJl
YWRDYWNoZS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUaHJlYWRDYWNoZS5oIgorCisjaW5jbHVkZSAi
QXJlbmEuaCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitzdGF0aWMgTXV0ZXggZnJlZUxpc3RN
dXRleDsKK3N0YXRpYyBUaHJlYWRDYWNoZSogZnJlZUxpc3QgeyBudWxscHRyIH07CitzdGF0aWMg
dW5zaWduZWQgdGhyZWFkSW5kZXggeyAwIH07CisKK1RocmVhZENhY2hlKiBUaHJlYWRDYWNoZTo6
Y3JlYXRlKExpbmVDYWNoZSogbGluZUNhY2hlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKGZy
ZWVMaXN0TXV0ZXgpOworICAgIGlmIChhdXRvKiB0aHJlYWREYXRhID0gZnJlZUxpc3QpIHsKKyAg
ICAgICAgZnJlZUxpc3QgPSB0aHJlYWREYXRhLT5tX25leHQ7CisgICAgICAgIHRocmVhZERhdGEt
Pm1fbGluZUNhY2hlID0gbGluZUNhY2hlOworICAgICAgICB0aHJlYWREYXRhLT5tX25leHQgPSBu
dWxscHRyOworICAgICAgICByZXR1cm4gdGhyZWFkRGF0YTsKKyAgICB9CisgICAgdm9pZCogbWVt
b3J5ID0gQXJlbmE6OmdldCgpLT5hbGxvY2F0ZShzaXplb2YoVGhyZWFkQ2FjaGUpLCBhbGlnbm9m
KFRocmVhZENhY2hlKSk7CisgICAgcmV0dXJuIG5ldyAobWVtb3J5KSBUaHJlYWRDYWNoZSh0aHJl
YWRJbmRleCsrLCBsaW5lQ2FjaGUpOworfQorCit2b2lkIFRocmVhZENhY2hlOjpyZXR1cm5Gb3JS
ZXVzZShUaHJlYWRDYWNoZSogdGhyZWFkRGF0YSkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihm
cmVlTGlzdE11dGV4KTsKKyAgICB0aHJlYWREYXRhLT5tX2xpbmVDYWNoZSA9IG51bGxwdHI7Cisg
ICAgdGhyZWFkRGF0YS0+bV9uZXh0ID0gZnJlZUxpc3Q7CisgICAgZnJlZUxpc3QgPSB0aHJlYWRE
YXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1RocmVhZENhY2hlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1RocmVh
ZENhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMyZWMxM2Y2ZTZhNWVlYzczNmM2NzdiOGQxOGE5YzcyNjM4
YzcyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVGhyZWFkQ2Fj
aGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCUGxhdGZvcm0uaCIKKyNpbmNs
dWRlICJNdXRleC5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgPGNzdGRpbnQ+
CisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworY2xhc3MgVGhyZWFkQ2FjaGUgeworcHVibGljOgor
ICAgIE11dGV4JiBtdXRleCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0KKyAgICBNdXRleCYgcGFnZU11
dGV4KCkgeyByZXR1cm4gbV9wYWdlTXV0ZXg7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBMaW5lQ2FjaGUqIGxpbmVDYWNoZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUNhY2hlOyB9CisKKyAgICBCRVhQT1JUIHN0YXRpYyBUaHJlYWRDYWNoZSog
Y3JlYXRlKExpbmVDYWNoZSopOworICAgIEJFWFBPUlQgc3RhdGljIHZvaWQgcmV0dXJuRm9yUmV1
c2UoVGhyZWFkQ2FjaGUqKTsKKworcHJpdmF0ZToKKyAgICBUaHJlYWRDYWNoZSh1bnNpZ25lZCBp
bmRleCwgTGluZUNhY2hlKiBsaW5lQ2FjaGUpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX2xpbmVDYWNoZShsaW5lQ2FjaGUpCisgICAgeworICAgIH0KKworICAgIE11dGV4
IG1fbXV0ZXg7CisgICAgTXV0ZXggbV9wYWdlTXV0ZXg7CisgICAgdW5zaWduZWQgbV9pbmRleCB7
IDAgfTsKKyAgICBMaW5lQ2FjaGUqIG1fbGluZUNhY2hlIHsgbnVsbHB0ciB9OworICAgIFRocmVh
ZENhY2hlKiBtX25leHQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcAppbmRleCBlZWVlODQ5NDVmYjM5N2FmODZiNzQ1
Y2I1YjE3YTgwNjNiZmRiM2NkLi4xMDQzZTBlNDExNmZkY2IzNjM0NDUwYWUxYzU0MThhNDYxMmMy
MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCisrKyBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAKQEAgLTU4LDE0ICs1OCwxNCBAQCB2
b2lkKiB0cnlMYXJnZVplcm9lZE1lbWFsaWduVmlydHVhbChzaXplX3QgcmVxdWlyZWRBbGlnbm1l
bnQsIHNpemVfdCByZXF1ZXN0ZWRTaQogICAgICAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2lu
ZChraW5kKTsKICAgICAgICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVh
cD4+OjpnZXQoKS0+YXQoa2luZCk7CiAKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhl
YXA6Om11dGV4KCkpOwotICAgICAgICByZXN1bHQgPSBoZWFwLmFsbG9jYXRlTGFyZ2UobG9jaywg
YWxpZ25tZW50LCBzaXplLCBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgVW5p
cXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4KCkpOworICAgICAgICByZXN1bHQg
PSBoZWFwLmFsbG9jYXRlTGFyZ2UoaGVhcExvY2tlciwgYWxpZ25tZW50LCBzaXplLCBGYWlsdXJl
QWN0aW9uOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAg
Ly8gRG9uJ3QgdHJhY2sgdGhpcyBhcyBkaXJ0eSBtZW1vcnkgdGhhdCBkaWN0YXRlcyBob3cgd2Ug
ZHJpdmUgdGhlIHNjYXZlbmdlci4KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFr
ZSBpdCBzbyB0aGF0IHVzZXJzIG9mIHRoaXMgQVBJIGluZm9ybSBibWFsbG9jIHdoaWNoCiAgICAg
ICAgICAgICAvLyBwYWdlcyB0aGV5IGRpcnR5OgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDIwNwotICAgICAgICAgICAgaGVhcC5leHRl
cm5hbERlY29tbWl0KGxvY2ssIHJlc3VsdCwgc2l6ZSk7CisgICAgICAgICAgICBoZWFwLmV4dGVy
bmFsRGVjb21taXQoaGVhcExvY2tlciwgcmVzdWx0LCBzaXplKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtODIsMTAgKzgyLDEwIEBAIHZvaWQgZnJlZUxhcmdlVmlydHVhbCh2b2lkKiBvYmplY3Qs
IHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5kKQogICAgIH0KICAgICBraW5kID0gbWFwVG9BY3Rp
dmVIZWFwS2luZChraW5kKTsKICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2lu
ZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVh
cDo6bXV0ZXgoKSk7CisgICAgVW5pcXVlTG9ja0hvbGRlciBoZWFwTG9ja2VyKEhlYXA6Om11dGV4
KCkpOwogICAgIC8vIEJhbGFuY2Ugb3V0IHRoZSBleHRlcm5hbERlY29tbWl0IHdoZW4gd2UgYWxs
b2NhdGVkIHRoZSB6ZXJvZWQgdmlydHVhbCBtZW1vcnkuCi0gICAgaGVhcC5leHRlcm5hbENvbW1p
dChsb2NrLCBvYmplY3QsIHNpemUpOwotICAgIGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIG9i
amVjdCk7CisgICAgaGVhcC5leHRlcm5hbENvbW1pdChoZWFwTG9ja2VyLCBvYmplY3QsIHNpemUp
OworICAgIGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGhlYXBMb2NrZXIsIG9iamVjdCk7CiB9CiAKIHZv
aWQgc2NhdmVuZ2UoKQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFk
UU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKIHsKICAgICBpZiAoRGVidWdIZWFw
Ojp0cnlHZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhI
ZWFwOjptdXRleCgpKTsKKyAgICBVbmlxdWVMb2NrSG9sZGVyIGhlYXBMb2NrZXIoSGVhcDo6bXV0
ZXgoKSk7CiAgICAgU2NhdmVuZ2VyOjpnZXQoKS0+c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3Mo
b3ZlcnJpZGVDbGFzcyk7CiB9CiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>