<?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>159658</bug_id>
          
          <creation_ts>2016-07-11 17:05:31 -0700</creation_ts>
          <short_desc>Remove CopiedSpace and use MarkedSpace instead</short_desc>
          <delta_ts>2016-09-08 15:14:34 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159643</dependson>
    
    <dependson>160053</dependson>
    
    <dependson>160125</dependson>
    
    <dependson>161100</dependson>
    
    <dependson>161744</dependson>
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1209888</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-11 17:05:31 -0700</bug_when>
    <thetext>This will be super fun!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227720</commentid>
    <comment_count>1</comment_count>
      <attachid>288309</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 13:01:11 -0700</bug_when>
    <thetext>Created attachment 288309
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227732</commentid>
    <comment_count>2</comment_count>
      <attachid>288312</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 13:20:15 -0700</bug_when>
    <thetext>Created attachment 288312
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227827</commentid>
    <comment_count>3</comment_count>
      <attachid>288324</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 14:37:42 -0700</bug_when>
    <thetext>Created attachment 288324
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227830</commentid>
    <comment_count>4</comment_count>
      <attachid>288324</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-08 14:42:12 -0700</bug_when>
    <thetext>Comment on attachment 288324
the patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227867</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 15:14:34 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/205666</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288309</attachid>
            <date>2016-09-08 13:01:11 -0700</date>
            <delta_ts>2016-09-08 13:20:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105013</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTY1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDQxLDkgKzQ0MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9B
bGxvY2F0b3JBdHRyaWJ1dGVzLmNwcAogICAgIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAogICAgIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9Db3BpZWRCbG9jay5jcHAKLSAgICBo
ZWFwL0NvcGllZFNwYWNlLmNwcAotICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9E
ZWZlckdDLmNwcAogICAgIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcAogICAgIGhlYXAvRWRlbkdD
QWN0aXZpdHlDYWxsYmFjay5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDcgKzQwOCw2
IEBACiAJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4NzRFQzE5NEZFQjEyMDBB
QUIyQzEgLyogREZHTWF5RXhpdC5oICovOyB9OwogCQkwRjVBMTI3MzE5MkQ5RkRGMDA4NzY0QTMg
LyogREZHRG9lc0dDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovOyB9Owog
CQkwRjVBMTI3NDE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBMTI3MjE5MkQ5RkRGMDA4NzY0QTMg
LyogREZHRG9lc0dDLmggKi87IH07Ci0JCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5
VG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYg
LyogRlRMVmFsdWVSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAg
Ki87IH07CiAJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4MjE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93
UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDk2LDcg
KzQ5NSw2IEBACiAJCTBGNzkwODU2MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdp
c3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlv
blBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3
QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERG
R0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0
Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZB
MUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggKi87IH07CiAJCTBGN0MzOUZEMUM4
RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGQzFDOEY2NTk1MDA0ODAxNTEgLyog
UmVnRXhwT2JqZWN0SW5saW5lcy5oICovOyB9OwogCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07CkBAIC02
MjYsNyArNjI0LDYgQEAKIAkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
N0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjdGMzlEMTVFRDhFNDYwMEYx
NjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5RTE1RUQ4RTQ2MDBG
MTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFy
cmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRkJBREY1NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQURGNTMxQkQxRjRC
ODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5NjUsMTMgKzE5
NjIsOCBAQAogCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIxNjBGRTcx
NUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8q
IFNsb3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyMTgxRkMyMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3Rz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxODFG
QzExOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gKi87IH07Ci0JCUMyMThEMTQw
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMThEMTNGMTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5
V29ya0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTIxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsKLQkJQzIyMzlEMTgxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjIzOUQxOTE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQy
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQw
NTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0MDMwNTMxNEI0MDRD
OTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLzsgfTsKIAkJQzI0RDMxRTIxNjFDRDY5NTAw
MkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlz
dGljcy5jcHAgKi87IH07CiAJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlz
dGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0
RDMxRTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzI1RDcwOUIxNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzI1RDcwOTkxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tICovOyB9OwpAQCAtMTk5MCwxNyArMTk4MiwxMiBAQAogCQlDMkI5MTZDNTE0REEwNDBDMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuY3BwICovOyB9OwogCQlDMkMwRjdDRDE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwICovOyB9OwogCQlDMkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi87IH07
Ci0JCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQzhEMDJCMTRBM0M2
QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyog
Q29waWVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQ0YzOUMxMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lmgg
Ki87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5
OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1
MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKIAkJQzJFNTI2QkUx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMy
RUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8q
IENvcGllZFNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFQUQyRkIxNEYw
MjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBT
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEu
Y3BwICovOyB9OwotCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZD
OUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGQ0FFMTAxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5
dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkNB
RTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CkBAIC0yNjU0
LDcgKzI2NDEsNiBAQAogCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXlFeGl0Lmg7IHBhdGggPSBk
ZmcvREZHTWF5RXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVBMTI3MTE5
MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RvZXNHQy5jcHA7IHBhdGggPSBkZmcvREZHRG9lc0dDLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTEyNzIxOTJEOUZERjAwODc2NEEzIC8qIERG
R0RvZXNHQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb2VzR0MuaDsg
cGF0aCA9IGRmZy9ERkdEb2VzR0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1
QTUyQ0YxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb3B5VG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5jcHA7IHBhdGggPSBmdGwv
RlRMVmFsdWVSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUE2Mjgy
MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAv
KiBTbG93UGF0aFJldHVyblR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2xvd1BhdGhSZXR1cm5UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzQy
LDcgKzI3MjgsNiBAQAogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3Vu
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291
bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzkwODUzMTlBMjkwQjIw
MEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1NDE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdD
MTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29weUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3QzM5RkExQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjdDMzlGQzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBPYmplY3RJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0MzOUZFMUM5MEM1NUIwMDQ4
MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
T3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yODgxLDcgKzI4NjYsNiBAQAogCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyog
UHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3Bl
cnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI3RjM5MTE1RUQ4
RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI3RjM5MjE1RUQ4RTM4
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGQkFERjUzMUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRCbG9jay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0
UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5NkM3
QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00MjUwLDEyICs0MjM0LDcgQEAKIAkJQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQ
SUNhbGxiYWNrRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJ
Q2FsbGJhY2tGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZD
MDE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBKU0V4cG9ydFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRU
ZXN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZDMTE4QTk0OEZCMDAy
NUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IEpTRXhwb3J0VGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJC
QjgxIC8qIENvcHlXb3JrTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3B5V29ya0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIyMzlEMTIxNjI2
MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAv
KiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
bG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyNDAzMDUzMTRC
NDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwU3RhdGlz
dGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjVENzA5OTE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBKU01hbmFnZWRWYWx1ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQyNzYsMTcgKzQyNTUsMTIgQEAKIAkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1h
cmtlZEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
YXJrZWRBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMwRjdD
QjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHA7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4
RTY1IC8qIENvcGllZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cGllZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUJGMTZFMTVB
ODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJP
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVyT2Jq
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkwMDY2
RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkU1MjZCQjE1OTBF
RjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEFsbG9jYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0
dXJlUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Ry
dWN0dXJlUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkZDOUJE
MjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlQmFz
aWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBEMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyOTAsMTkg
KzUyNjQsNiBAQAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
aCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMu
Y3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290
cy5oICovLAotCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3Iu
aCAqLywKLQkJCQkwRkJBREY1MzFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwICov
LAotCQkJCUMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oICovLAotCQkJ
CUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAqLywKLQkJ
CQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAotCQkJCUMy
RUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovLAotCQkJCUMyQzhEMDJC
MTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCAqLywKLQkJCQkwRjdDMTFB
QzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLywKLQkJCQkwRjVBNTJDRjE3QURE
NzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi8sCi0JCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLywKLQkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQg
LyogQ29weVZpc2l0b3IuaCAqLywKLQkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29w
eVZpc2l0b3JJbmxpbmVzLmggKi8sCi0JCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENv
cHlXb3JrTGlzdC5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAog
CQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3BwICovLApA
QCAtNzM5MywxNyArNzM1NCw3IEBACiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENv
bnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0YyMTg5MUI1QjQwMDMxQzdG
QSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5
MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxv
Y2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIg
LyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3
OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGN0MxMUFE
MUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY1
QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MzQ4NkJCNzFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdv
cmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyog
Y3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEz
Qzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0OTU4
ODFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0
NSwxMSArODk5Niw4IEBACiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVj
dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8q
IENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJCNzE3QjUx
QTA1OTdFMTAwN0FGNEYzIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMEZCQURGNTQxQkQxRjRCODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1RkM4NEIzMUQxRERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3Bp
ZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzIyMzlEMTcxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBMTExMjQ1
MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb3BpZWRB
bGxvY2F0b3JfaAotI2RlZmluZSBDb3BpZWRBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSAiQ29waWVk
QmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIENvcGllZEFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgQ29waWVkQWxsb2Nh
dG9yKCk7Ci0gICAgCi0gICAgYm9vbCBmYXN0UGF0aFNob3VsZFN1Y2NlZWQoc2l6ZV90IGJ5dGVz
KSBjb25zdDsKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZv
aWQqKiBvdXRQdHIpOwotICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlRHVyaW5nQ29weWlu
ZyhzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOwotICAgIENoZWNrZWRCb29sZWFuIHRyeVJl
YWxsb2NhdGUodm9pZCAqb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcyk7
Ci0gICAgdm9pZCogZm9yY2VBbGxvY2F0ZShzaXplX3QgYnl0ZXMpOwotICAgIENvcGllZEJsb2Nr
KiByZXNldEN1cnJlbnRCbG9jaygpOwotICAgIHZvaWQgc2V0Q3VycmVudEJsb2NrKENvcGllZEJs
b2NrKik7Ci0gICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSgpOwotICAgIAotICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9jdXJyZW50QmxvY2s7IH0KLQotICAgIENvcGllZEJs
b2NrKiBjdXJyZW50QmxvY2soKSB7IHJldHVybiBtX2N1cnJlbnRCbG9jazsgfQotCi0gICAgLy8g
WWVzLCB0aGVzZSBhcmUgcHVibGljLiBObywgdGhhdCBkb2Vzbid0IG1lYW4geW91IGNhbiBwbGF5
IHdpdGggdGhlbS4KLSAgICAvLyBJZiBJIGhhZCBtYWRlIHRoZW0gcHJpdmF0ZSB0aGVuIEknZCBo
YXZlIHRvIGxpc3Qgb2ZmIGFsbCBvZiB0aGUgSklUCi0gICAgLy8gY2xhc3NlcyBhbmQgZnVuY3Rp
b25zIHRoYXQgYXJlIGVudGl0bGVkIHRvIG1vZGlmeSB0aGVzZSBkaXJlY3RseSwgYW5kCi0gICAg
Ly8gdGhhdCB3b3VsZCBoYXZlIGJlZW4gZ3Jvc3MuCi0gICAgc2l6ZV90IG1fY3VycmVudFJlbWFp
bmluZzsKLSAgICBjaGFyKiBtX2N1cnJlbnRQYXlsb2FkRW5kOwotICAgIENvcGllZEJsb2NrKiBt
X2N1cnJlbnRCbG9jazsgCi19OwotCi1pbmxpbmUgQ29waWVkQWxsb2NhdG9yOjpDb3BpZWRBbGxv
Y2F0b3IoKQotICAgIDogbV9jdXJyZW50UmVtYWluaW5nKDApCi0gICAgLCBtX2N1cnJlbnRQYXls
b2FkRW5kKDApCi0gICAgLCBtX2N1cnJlbnRCbG9jaygwKQotewotfQotCi1pbmxpbmUgYm9vbCBD
b3BpZWRBbGxvY2F0b3I6OmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0ZXMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5
dGVzKSkpOwotICAgIAotICAgIHJldHVybiBieXRlcyA8PSBtX2N1cnJlbnRSZW1haW5pbmc7Ci19
Ci0KLWlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNp
emVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYnl0ZXMpKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gaW4gYSBncmF0dWl0b3VzbHkgbG93LWxldmVsIG1hbm5lciwgaW4gb3JkZXIg
dG8KLSAgICAvLyBzZXJ2ZSBhcyBhIGtpbmQgb2YgdGVtcGxhdGUgZm9yIHdoYXQgdGhlIEpJVCB3
b3VsZCBkby4gTm90ZSB0aGF0IHRoZQotICAgIC8vIHdheSBpdCdzIHdyaXR0ZW4gaXQgb3VnaHQg
dG8gb25seSByZXF1aXJlIG9uZSByZWdpc3Rlciwgd2hpY2ggZG91YmxlcwotICAgIC8vIGFzIHRo
ZSByZXN1bHQsIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgYSBtaW5pbWFsIGFtb3Vu
dCBvZgotICAgIC8vIGNvbnRyb2wgZmxvdyBzaW1wbGlmaWNhdGlvbiBhbmQgdGhlIGJ5dGVzIGFy
Z3VtZW50IGlzIGEgY29uc3RhbnQuCi0gICAgCi0gICAgc2l6ZV90IGN1cnJlbnRSZW1haW5pbmcg
PSBtX2N1cnJlbnRSZW1haW5pbmc7Ci0gICAgaWYgKGJ5dGVzID4gY3VycmVudFJlbWFpbmluZykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGN1cnJlbnRSZW1haW5pbmcgLT0gYnl0ZXM7Ci0g
ICAgbV9jdXJyZW50UmVtYWluaW5nID0gY3VycmVudFJlbWFpbmluZzsKLSAgICAqb3V0UHRyID0g
bV9jdXJyZW50UGF5bG9hZEVuZCAtIGN1cnJlbnRSZW1haW5pbmcgLSBieXRlczsKLQotICAgIEFT
U0VSVChpczhCeXRlQWxpZ25lZCgqb3V0UHRyKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdD
b3B5aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBpZiAoIXRyeUFsbG9j
YXRlKGJ5dGVzLCBvdXRQdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9jdXJyZW50
QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcoYnl0ZXMpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlSZWFs
bG9jYXRlKAotICAgIHZvaWQqIG9sZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0
ZXMpCi17Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKG9sZFB0cikpOwotICAgIEFTU0VSVChp
czhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRCeXRlcykpKTsKLSAgICBB
U1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3Qnl0ZXMpKSk7
Ci0gICAgCi0gICAgQVNTRVJUKG5ld0J5dGVzID4gb2xkQnl0ZXMpOwotICAgIAotICAgIHNpemVf
dCBhZGRpdGlvbmFsQnl0ZXMgPSBuZXdCeXRlcyAtIG9sZEJ5dGVzOwotICAgIAotICAgIHNpemVf
dCBjdXJyZW50UmVtYWluaW5nID0gbV9jdXJyZW50UmVtYWluaW5nOwotICAgIGlmIChtX2N1cnJl
bnRQYXlsb2FkRW5kIC0gY3VycmVudFJlbWFpbmluZyAtIG9sZEJ5dGVzICE9IHN0YXRpY19jYXN0
PGNoYXIqPihvbGRQdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGFk
ZGl0aW9uYWxCeXRlcyA+IGN1cnJlbnRSZW1haW5pbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBtX2N1cnJlbnRSZW1haW5pbmcgPSBjdXJyZW50UmVtYWluaW5nIC0gYWRkaXRp
b25hbEJ5dGVzOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCogQ29w
aWVkQWxsb2NhdG9yOjpmb3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiBy
ZXN1bHQgPSAwOyAvLyBOZWVkZWQgYmVjYXVzZSBjb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGlz
IHdpbGwgYWx3YXlzIGJlIGFzc2lnbmVkLgotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQg
PSB0cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQWxsb2Nh
dG9yOjpyZXNldEN1cnJlbnRCbG9jaygpCi17Ci0gICAgQ29waWVkQmxvY2sqIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0LT5tX3JlbWFp
bmluZyA9IG1fY3VycmVudFJlbWFpbmluZzsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwot
ICAgICAgICBtX2N1cnJlbnRSZW1haW5pbmcgPSAwOwotICAgICAgICBtX2N1cnJlbnRQYXlsb2Fk
RW5kID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgQ29w
aWVkQWxsb2NhdG9yOjpzZXRDdXJyZW50QmxvY2soQ29waWVkQmxvY2sqIG5ld0Jsb2NrKQotewot
ICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIG1fY3VycmVudEJsb2NrID0gbmV3Qmxv
Y2s7Ci0gICAgQVNTRVJUKG5ld0Jsb2NrKTsKLSAgICBtX2N1cnJlbnRSZW1haW5pbmcgPSBuZXdC
bG9jay0+bV9yZW1haW5pbmc7Ci0gICAgbV9jdXJyZW50UGF5bG9hZEVuZCA9IG5ld0Jsb2NrLT5w
YXlsb2FkRW5kKCk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQWxsb2NhdG9yOjpjdXJyZW50
Q2FwYWNpdHkoKQotewotICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+Y2FwYWNpdHkoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkQmxvY2suY3BwCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVCYWxhbmNl
ID0gZmFsc2U7Ci1zdGF0aWMgc2l6ZV90IGJhbGFuY2U7Ci0KLUNvcGllZEJsb2NrKiBDb3BpZWRC
bG9jazo6Y3JlYXRlTm9aZXJvRmlsbChIZWFwJiBoZWFwLCBzaXplX3QgY2FwYWNpdHkpCi17Ci0g
ICAgaWYgKGNvbXB1dGVCYWxhbmNlKSB7Ci0gICAgICAgIGJhbGFuY2UrKzsKLSAgICAgICAgaWYg
KCEoYmFsYW5jZSAlIDEwKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNvcGllZEJsb2NrIEJhbGFu
Y2U6ICIsIGJhbGFuY2UsICJcbiIpOwotICAgIH0KLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBu
ZXcgKE5vdE51bGwsIGZhc3RBbGlnbmVkTWFsbG9jKENvcGllZEJsb2NrOjpibG9ja1NpemUsIGNh
cGFjaXR5KSkgQ29waWVkQmxvY2soY2FwYWNpdHkpOwotICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9j
ayhjYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGJsb2NrOwotfQotCi12b2lkIENvcGllZEJsb2NrOjpk
ZXN0cm95KEhlYXAmIGhlYXAsIENvcGllZEJsb2NrKiBjb3BpZWRCbG9jaykKLXsKLSAgICBpZiAo
Y29tcHV0ZUJhbGFuY2UpIHsKLSAgICAgICAgYmFsYW5jZS0tOwotICAgICAgICBpZiAoIShiYWxh
bmNlICUgMTApKQotICAgICAgICAgICAgZGF0YUxvZygiQ29waWVkQmxvY2sgQmFsYW5jZTogIiwg
YmFsYW5jZSwgIlxuIik7Ci0gICAgfQotICAgIHNpemVfdCBjYXBhY2l0eSA9IGNvcGllZEJsb2Nr
LT5jYXBhY2l0eSgpOwotICAgIGNvcGllZEJsb2NrLT5+Q29waWVkQmxvY2soKTsKLSAgICBmYXN0
QWxpZ25lZEZyZWUoY29waWVkQmxvY2spOwotICAgIGhlYXAuZGlkRnJlZUJsb2NrKGNhcGFjaXR5
KTsKLX0KLQotQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgc2l6
ZV90IGNhcGFjaXR5KQotewotICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IGNyZWF0ZU5vWmVy
b0ZpbGwoaGVhcCwgY2FwYWNpdHkpOwotICAgIG5ld0Jsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3Mo
KTsKLSAgICByZXR1cm4gbmV3QmxvY2s7Ci19Ci0KLXZvaWQgQ29waWVkQmxvY2s6Onplcm9GaWxs
V2lsZGVybmVzcygpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtZW1zZXQod2lsZGVybmVz
cygpLCAwLCB3aWxkZXJuZXNzU2l6ZSgpKTsKLSNlbHNlCi0gICAgSlNWYWx1ZSBlbXB0eVZhbHVl
OwotICAgIEpTVmFsdWUqIGxpbWl0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHdp
bGRlcm5lc3NFbmQoKSk7Ci0gICAgZm9yIChKU1ZhbHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVy
cHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4od2lsZGVybmVzcygpKTsgY3VycmVudFZhbHVlIDwgbGlt
aXQ7IGN1cnJlbnRWYWx1ZSsrKQotICAgICAgICAqY3VycmVudFZhbHVlID0gZW1wdHlWYWx1ZTsK
LSNlbmRpZgotfQotCi1Db3BpZWRCbG9jazo6Q29waWVkQmxvY2soc2l6ZV90IGNhcGFjaXR5KQot
ICAgIDogRG91Ymx5TGlua2VkTGlzdE5vZGU8Q29waWVkQmxvY2s+KCkKLSAgICAsIG1fY2FwYWNp
dHkoY2FwYWNpdHkpCi0gICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKLSAgICAs
IG1faXNQaW5uZWQoZmFsc2UpCi0gICAgLCBtX2lzT2xkKGZhbHNlKQotICAgICwgbV9saXZlQnl0
ZXMoMCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2xpdmVPYmplY3RzKDApCi0jZW5kaWYKLXsK
LSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZW1h
aW5pbmcpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShub25leGlzdGVudCkKQEAgLTEsMjUzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBDb3BpZWRCbG9ja19oCi0jZGVmaW5lIENvcGllZEJsb2NrX2gKLQotI2luY2x1
ZGUgIkNvcHlXb3JrTGlzdC5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJP
cHRpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KLSNpbmNsdWRlIDx3
dGYvTG9jay5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29waWVkU3BhY2U7Ci0KLWNs
YXNzIENvcGllZEJsb2NrIDogcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPENvcGllZEJsb2Nr
PiB7Ci0gICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Q29waWVkQmxv
Y2s+OwotICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRTcGFjZTsKLSAgICBmcmllbmQgY2xhc3MgQ29w
aWVkQWxsb2NhdG9yOwotcHVibGljOgotICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRlKEhl
YXAmLCBzaXplX3QgPSBibG9ja1NpemUpOwotICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRl
Tm9aZXJvRmlsbChIZWFwJiwgc2l6ZV90ID0gYmxvY2tTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEhlYXAmLCBDb3BpZWRCbG9jayopOwotCi0gICAgdm9pZCBwaW4oKTsKLSAgICBib29s
IGlzUGlubmVkKCk7Ci0KLSAgICBib29sIGlzT2xkKCk7Ci0gICAgYm9vbCBpc092ZXJzaXplKCk7
Ci0gICAgdm9pZCBkaWRQcm9tb3RlKCk7Ci0KLSAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKLSAg
ICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1
bnNpZ25lZCk7Ci0gICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVk
KTsKLSAgICB2b2lkIGRpZFN1cnZpdmVHQygpOwotICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1
bnNpZ25lZCk7Ci0gICAgYm9vbCBzaG91bGRFdmFjdWF0ZSgpOwotICAgIGJvb2wgY2FuQmVSZWN5
Y2xlZCgpOwotCi0gICAgLy8gVGhlIHBheWxvYWQgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sg
dGhhdCBpcyB1c2FibGUgZm9yIGFsbG9jYXRpb25zLgotICAgIGNoYXIqIHBheWxvYWQoKTsKLSAg
ICBjaGFyKiBwYXlsb2FkRW5kKCk7Ci0gICAgc2l6ZV90IHBheWxvYWRDYXBhY2l0eSgpOwotICAg
IAotICAgIC8vIFRoZSBkYXRhIGlzIHRoZSByZWdpb24gb2YgdGhlIGJsb2NrIHRoYXQgaGFzIGJl
ZW4gdXNlZCBmb3IgYWxsb2NhdGlvbnMuCi0gICAgY2hhciogZGF0YSgpOwotICAgIGNoYXIqIGRh
dGFFbmQoKTsKLSAgICBzaXplX3QgZGF0YVNpemUoKTsKLSAgICAKLSAgICAvLyBUaGUgd2lsZGVy
bmVzcyBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2Nh
dGlvbnMKLSAgICAvLyBidXQgaGFzIG5vdCBiZWVuIHNvIHVzZWQuCi0gICAgY2hhciogd2lsZGVy
bmVzcygpOwotICAgIGNoYXIqIHdpbGRlcm5lc3NFbmQoKTsKLSAgICBzaXplX3Qgd2lsZGVybmVz
c1NpemUoKTsKLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpOwotICAgIHNpemVfdCBjYXBhY2l0eSgp
OwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1NpemUgPSA2NCAqIEtCOwotCi0gICAg
Ym9vbCBoYXNXb3JrTGlzdCgpOwotICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QoKTsKLSAgICBM
b2NrJiB3b3JrTGlzdExvY2soKSB7IHJldHVybiBtX3dvcmtMaXN0TG9jazsgfQotCi1wcml2YXRl
OgotICAgIENvcGllZEJsb2NrKHNpemVfdCk7Ci0gICAgdm9pZCB6ZXJvRmlsbFdpbGRlcm5lc3Mo
KTsgLy8gQ2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSB0byB6ZXJvLWZpbGwgdG8gdGhlIGVuZCBv
ZiB0aGUgYmxvY2suCi0KLSAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIENvcGll
ZEJsb2NrKiBtX3ByZXY7Ci0gICAgQ29waWVkQmxvY2sqIG1fbmV4dDsKLQotICAgIHNpemVfdCBt
X2NhcGFjaXR5OwotCi0gICAgTG9jayBtX3dvcmtMaXN0TG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29weVdvcmtMaXN0PiBtX3dvcmtMaXN0OwotCi0gICAgc2l6ZV90IG1fcmVtYWluaW5nOwot
ICAgIGJvb2wgbV9pc1Bpbm5lZCA6IDE7Ci0gICAgYm9vbCBtX2lzT2xkIDogMTsKLSAgICB1bnNp
Z25lZCBtX2xpdmVCeXRlczsKLSNpZm5kZWYgTkRFQlVHCi0gICAgdW5zaWduZWQgbV9saXZlT2Jq
ZWN0czsKLSNlbmRpZgotfTsKLQotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFN1cnZpdmVH
QygpCi17Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFTU0VSVChpc09sZCgpKTsKLSAg
ICBtX2xpdmVCeXRlcyA9IDA7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fbGl2ZU9iamVjdHMgPSAw
OwotI2VuZGlmCi0gICAgbV9pc1Bpbm5lZCA9IGZhbHNlOwotICAgIGlmIChtX3dvcmtMaXN0KQot
ICAgICAgICBtX3dvcmtMaXN0ID0gbnVsbHB0cjsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQmxv
Y2s6OmRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQgYnl0ZXMpCi17Ci0gICAgQVNTRVJUKG1fbGl2
ZUJ5dGVzID49IGJ5dGVzKTsKLSAgICBBU1NFUlQobV9saXZlT2JqZWN0cyk7Ci0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIG1fbGl2ZUJ5dGVzIC09IGJ5dGVzOwotI2lmbmRlZiBOREVCVUcK
LSAgICBtX2xpdmVPYmplY3RzLS07Ci0jZW5kaWYKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19
Ci0KLWlubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5CZVJlY3ljbGVkKCkKLXsKLSAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuICFtX2xpdmVCeXRlczsKLX0KLQotaW5saW5lIGJv
b2wgQ29waWVkQmxvY2s6OnNob3VsZEV2YWN1YXRlKCkKLXsKLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV9saXZlQnl0ZXMpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihwYXlsb2FkQ2FwYWNpdHkoKSkgPD0gT3B0aW9uczo6bWluQ29waWVkQmxv
Y2tVdGlsaXphdGlvbigpOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cGluKCkKLXsK
LSAgICBtX2lzUGlubmVkID0gdHJ1ZTsKLSAgICBpZiAobV93b3JrTGlzdCkKLSAgICAgICAgbV93
b3JrTGlzdCA9IG51bGxwdHI7Ci19Ci0KLWlubGluZSBib29sIENvcGllZEJsb2NrOjppc1Bpbm5l
ZCgpCi17Ci0gICAgcmV0dXJuIG1faXNQaW5uZWQ7Ci19Ci0KLWlubGluZSBib29sIENvcGllZEJs
b2NrOjppc09sZCgpCi17Ci0gICAgcmV0dXJuIG1faXNPbGQ7Ci19Ci0KLWlubGluZSB2b2lkIENv
cGllZEJsb2NrOjpkaWRQcm9tb3RlKCkKLXsKLSAgICBtX2lzT2xkID0gdHJ1ZTsKLX0KLQotaW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT3ZlcnNpemUoKQotewotICAgIHJldHVybiBtX2NhcGFj
aXR5ICE9IGJsb2NrU2l6ZTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIENvcGllZEJsb2NrOjpsaXZl
Qnl0ZXMoKQotewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gbV9saXZlQnl0
ZXM7Ci19Ci0KLWlubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCi17Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZihkb3VibGUpPihzaXplb2YoQ29waWVkQmxvY2spKTsKLX0KLQotaW5saW5lIGNo
YXIqIENvcGllZEJsb2NrOjpwYXlsb2FkRW5kKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyBtX2NhcGFjaXR5OwotfQotCi1pbmxpbmUgc2l6ZV90IENvcGll
ZEJsb2NrOjpwYXlsb2FkQ2FwYWNpdHkoKQotewotICAgIHJldHVybiBwYXlsb2FkRW5kKCkgLSBw
YXlsb2FkKCk7Ci19Ci0KLWlubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6ZGF0YSgpCi17Ci0gICAg
cmV0dXJuIHBheWxvYWQoKTsKLX0KLQotaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpkYXRhRW5k
KCkKLXsKLSAgICByZXR1cm4gcGF5bG9hZEVuZCgpIC0gbV9yZW1haW5pbmc7Ci19Ci0KLWlubGlu
ZSBzaXplX3QgQ29waWVkQmxvY2s6OmRhdGFTaXplKCkKLXsKLSAgICByZXR1cm4gZGF0YUVuZCgp
IC0gZGF0YSgpOwotfQotCi1pbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OndpbGRlcm5lc3MoKQot
ewotICAgIHJldHVybiBkYXRhRW5kKCk7Ci19Ci0KLWlubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6
d2lsZGVybmVzc0VuZCgpCi17Ci0gICAgcmV0dXJuIHBheWxvYWRFbmQoKTsKLX0KLQotaW5saW5l
IHNpemVfdCBDb3BpZWRCbG9jazo6d2lsZGVybmVzc1NpemUoKQotewotICAgIHJldHVybiB3aWxk
ZXJuZXNzRW5kKCkgLSB3aWxkZXJuZXNzKCk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQmxv
Y2s6OnNpemUoKQotewotICAgIHJldHVybiBkYXRhU2l6ZSgpOwotfQotCi1pbmxpbmUgc2l6ZV90
IENvcGllZEJsb2NrOjpjYXBhY2l0eSgpCi17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0K
LWlubGluZSBib29sIENvcGllZEJsb2NrOjpoYXNXb3JrTGlzdCgpCi17Ci0gICAgcmV0dXJuICEh
bV93b3JrTGlzdDsKLX0KLQotaW5saW5lIENvcHlXb3JrTGlzdCYgQ29waWVkQmxvY2s6OndvcmtM
aXN0KCkKLXsKLSAgICByZXR1cm4gKm1fd29ya0xpc3Q7Ci19Ci0KLWlubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9
PSAhIW1fbGl2ZU9iamVjdHMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QmxvY2tJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3BpZWRCbG9ja0lubGluZXNfaAotI2RlZmluZSBDb3Bp
ZWRCbG9ja0lubGluZXNfaAotCi0jaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKLSNpbmNsdWRlICJI
ZWFwLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVw
b3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4s
IHVuc2lnbmVkIGJ5dGVzKQotewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgbV9saXZlT2JqZWN0cysrOwotI2VuZGlmCi0gICAgbV9saXZlQnl0ZXMgKz0gYnl0
ZXM7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBt
X2NhcGFjaXR5KTsKLQotICAgIGlmIChpc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXNob3VsZEV2YWN1YXRlKCkpIHsKLSAgICAgICAgcGluKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fd29ya0xpc3QpCi0gICAgICAgIG1fd29ya0xpc3QgPSBz
dGQ6Om1ha2VfdW5pcXVlPENvcHlXb3JrTGlzdD4oKTsKLQotICAgIG1fd29ya0xpc3QtPmFwcGVu
ZChDb3B5V29ya2xpc3RJdGVtKG93bmVyLCB0b2tlbikpOwotfQotCi1pbmxpbmUgdm9pZCBDb3Bp
ZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29weWluZyh1bnNpZ25lZCBieXRlcykKLXsK
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgLy8gVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUg
bG9ja2VkIGJlY2F1c2UgdGhlIHRocmVhZCB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gb3ducyB0
aGUgY3VycmVudCBibG9jay4KLSAgICBtX2lzT2xkID0gdHJ1ZTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbV9saXZlT2JqZWN0cysrOwotI2VuZGlmCi0gICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7Ci0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRC
bG9jazo6YmxvY2tTaXplKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBD
b3BpZWRCbG9ja0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzUwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1Db3BpZWRTcGFjZTo6Q29waWVkU3Bh
Y2UoSGVhcCogaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQotICAgICwgbV9pbkNvcHlpbmdQaGFz
ZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCi0gICAgLCBtX251bWJl
ck9mTG9hbmVkQmxvY2tzKDApCi0gICAgLCBtX2J5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRv
UmVhbGxvY2F0aW9uKDApCi17Ci19Ci0KLUNvcGllZFNwYWNlOjp+Q29waWVkU3BhY2UoKQotewot
ICAgIHdoaWxlICghbV9vbGRHZW4udG9TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBDb3BpZWRC
bG9jazo6ZGVzdHJveSgqaGVhcCgpLCBtX29sZEdlbi50b1NwYWNlLT5yZW1vdmVIZWFkKCkpOwot
Ci0gICAgd2hpbGUgKCFtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgQ29w
aWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgbV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFk
KCkpOwotCi0gICAgd2hpbGUgKCFtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCi0g
ICAgICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLnJlbW92ZUhlYWQoKSk7Ci0KLSAgICB3aGlsZSAoIW1fbmV3R2VuLnRvU3BhY2UtPmlzRW1w
dHkoKSkKLSAgICAgICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgbV9uZXdHZW4udG9T
cGFjZS0+cmVtb3ZlSGVhZCgpKTsKLQotICAgIHdoaWxlICghbV9uZXdHZW4uZnJvbVNwYWNlLT5p
c0VtcHR5KCkpCi0gICAgICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIG1fbmV3R2Vu
LmZyb21TcGFjZS0+cmVtb3ZlSGVhZCgpKTsKLQotICAgIHdoaWxlICghbV9uZXdHZW4ub3ZlcnNp
emVCbG9ja3MuaXNFbXB0eSgpKQotICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgp
LCBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpOwotCi0gICAgQVNTRVJUKG1f
b2xkR2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFj
ZS0+aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0
eSgpKTsKLSAgICBBU1NFUlQobV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQobV9uZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5v
dmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOwotfQotCi12b2lkIENvcGllZFNwYWNlOjppbml0KCkK
LXsKLSAgICBtX29sZEdlbi50b1NwYWNlID0gJm1fb2xkR2VuLmJsb2NrczE7Ci0gICAgbV9vbGRH
ZW4uZnJvbVNwYWNlID0gJm1fb2xkR2VuLmJsb2NrczI7Ci0gICAgCi0gICAgbV9uZXdHZW4udG9T
cGFjZSA9ICZtX25ld0dlbi5ibG9ja3MxOwotICAgIG1fbmV3R2VuLmZyb21TcGFjZSA9ICZtX25l
d0dlbi5ibG9ja3MyOwotCi0gICAgYWxsb2NhdGVCbG9jaygpOwotfSAgIAotCi1DaGVja2VkQm9v
bGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMsIHZvaWQq
KiBvdXRQdHIpCi17Ci0gICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpKQotICAgICAgICByZXR1cm4g
dHJ5QWxsb2NhdGVPdmVyc2l6ZShieXRlcywgb3V0UHRyKTsKLSAgICAKLSAgICBBU1NFUlQobV9o
ZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBtX2hlYXAt
PmRpZEFsbG9jYXRlKG1fYWxsb2NhdG9yLmN1cnJlbnRDYXBhY2l0eSgpKTsKLQotICAgIGFsbG9j
YXRlQmxvY2soKTsKLQotICAgICpvdXRQdHIgPSBtX2FsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5
dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6
OnRyeUFsbG9jYXRlT3ZlcnNpemUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQotewotICAg
IEFTU0VSVChpc092ZXJzaXplKGJ5dGVzKSk7Ci0gICAgCi0gICAgQ29waWVkQmxvY2sqIGJsb2Nr
ID0gQ29waWVkQmxvY2s6OmNyZWF0ZSgqbV9oZWFwLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
c2l6ZW9mKGRvdWJsZSk+KHNpemVvZihDb3BpZWRCbG9jaykgKyBieXRlcykpOwotICAgIG1fbmV3
R2VuLm92ZXJzaXplQmxvY2tzLnB1c2goYmxvY2spOwotICAgIG1fbmV3R2VuLmJsb2NrRmlsdGVy
LmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgbV9ibG9ja1NldC5hZGQo
YmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzT2xkKCkpOwotICAgIAotICAgIENvcGllZEFs
bG9jYXRvciBhbGxvY2F0b3I7Ci0gICAgYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7
Ci0gICAgKm91dFB0ciA9IGFsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKLSAgICBhbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLQotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUoYmxv
Y2stPmNhcGFjaXR5KCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNoZWNrZWRCb29sZWFu
IENvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSkKLXsKLSAgICBpZiAob2xkU2l6ZSA+PSBuZXdTaXplKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOwotICAgIEFTU0VSVCgh
bV9oZWFwLT52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICAKLSAgICBpZiAoQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzT3ZlcnNpemUoKSB8fCBpc092ZXJzaXplKG5l
d1NpemUpKQotICAgICAgICByZXR1cm4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHB0ciwgb2xkU2l6
ZSwgbmV3U2l6ZSk7Ci0gICAgCi0gICAgaWYgKG1fYWxsb2NhdG9yLnRyeVJlYWxsb2NhdGUob2xk
UHRyLCBvbGRTaXplLCBuZXdTaXplKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2b2lk
KiByZXN1bHQgPSAwOwotICAgIGlmICghdHJ5QWxsb2NhdGUobmV3U2l6ZSwgJnJlc3VsdCkpIHsK
LSAgICAgICAgKnB0ciA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWVt
Y3B5KHJlc3VsdCwgb2xkUHRyLCBvbGRTaXplKTsKLSAgICAqcHRyID0gcmVzdWx0OwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1DaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0
ZU92ZXJzaXplKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLXsK
LSAgICBBU1NFUlQoaXNPdmVyc2l6ZShvbGRTaXplKSB8fCBpc092ZXJzaXplKG5ld1NpemUpKTsK
LSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotCi0gICAgdm9pZCogb2xkUHRyID0gKnB0
cjsKLSAgICAKLSAgICB2b2lkKiBuZXdQdHIgPSAwOwotICAgIGlmICghdHJ5QWxsb2NhdGVPdmVy
c2l6ZShuZXdTaXplLCAmbmV3UHRyKSkgewotICAgICAgICAqcHRyID0gMDsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwgb2xkU2l6ZSk7
Ci0KLSAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xk
UHRyKTsKLSAgICBpZiAob2xkQmxvY2stPmlzT3ZlcnNpemUoKSkgewotICAgICAgICAvLyBGSVhN
RTogRWFnZXJseSBkZWFsbG9jYXRpbmcgdGhlIG9sZCBzcGFjZSBibG9jayBwcm9iYWJseSBidXlz
IG1vcmUgY29uZnVzaW9uIHRoYW4KLSAgICAgICAgLy8gdmFsdWUuCi0gICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ3NTAKLSAgICAgICAgaWYgKG9s
ZEJsb2NrLT5pc09sZCgpKSB7Ci0gICAgICAgICAgICBtX2J5dGVzUmVtb3ZlZEZyb21PbGRTcGFj
ZUR1ZVRvUmVhbGxvY2F0aW9uICs9IG9sZEJsb2NrLT5zaXplKCk7Ci0gICAgICAgICAgICBtX29s
ZEdlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2spOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7Ci0gICAg
ICAgIG1fYmxvY2tTZXQucmVtb3ZlKG9sZEJsb2NrKTsKLSAgICAgICAgQ29waWVkQmxvY2s6OmRl
c3Ryb3koKmhlYXAoKSwgb2xkQmxvY2spOwotICAgIH0KLSAgICAKLSAgICAqcHRyID0gbmV3UHRy
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Js
b2NrKENvcGllZEJsb2NrKiBibG9jaywgQ29waWVkQmxvY2sqKiBleGNoYW5nZSkKLXsKLSAgICBB
U1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAgCi0gICAgaWYgKGV4Y2hhbmdlKQotICAgICAg
ICAqZXhjaGFuZ2UgPSBhbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7Ci0KLSAgICBpZiAo
IWJsb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWJsb2NrLT5kYXRhU2l6ZSgpKSB7
Ci0gICAgICAgIHJlY3ljbGVCb3Jyb3dlZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKLQotICAgIHsKLSAgICAg
ICAgLy8gQWx3YXlzIHB1dCB0aGUgYmxvY2sgaW50byB0aGUgb2xkIGdlbiBiZWNhdXNlIGl0J3Mg
YmVpbmcgcHJvbW90ZWQhCi0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2Nr
KTsKLSAgICAgICAgbV9vbGRHZW4udG9TcGFjZS0+cHVzaChibG9jayk7Ci0gICAgICAgIG1fYmxv
Y2tTZXQuYWRkKGJsb2NrKTsKLSAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAgIEFTU0VSVChtX251bWJl
ck9mTG9hbmVkQmxvY2tzID4gMCk7Ci0gICAgICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsK
LSAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nrcy0tOwotICAgIH0KLX0KLQotdm9pZCBDb3Bp
ZWRTcGFjZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbigpCi17Ci0gICAgQVNTRVJUKGhlYXAoKS0+
b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKTsKLSAgICBBU1NFUlQobV9v
bGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3Bh
Y2UtPmlzRW1wdHkoKSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX25ld0dlbi50b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCi0gICAgICAgIEFTU0VSVCghYmxvY2stPmxpdmVCeXRlcygpKTsKLQotICAgIGZvciAo
Q29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0
ZXMoKSk7Ci0jZW5kaWYKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4u
dG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBi
bG9jay0+ZGlkU3Vydml2ZUdDKCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwotfQotCi12b2lkIENvcGllZFNwYWNl
Ojpkb25lQ29weWluZygpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRC
bG9ja3MpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UgPT0gbV9zaG91bGRE
b0NvcHlQaGFzZSk7Ci0gICAgbV9pbkNvcHlpbmdQaGFzZSA9IGZhbHNlOwotCi0gICAgRG91Ymx5
TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2U7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxD
b3BpZWRCbG9jaz4qIGZyb21TcGFjZTsKLSAgICBUaW55Qmxvb21GaWx0ZXIqIGJsb2NrRmlsdGVy
OwotICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlv
bikgewotICAgICAgICB0b1NwYWNlID0gbV9vbGRHZW4udG9TcGFjZTsKLSAgICAgICAgZnJvbVNw
YWNlID0gbV9vbGRHZW4uZnJvbVNwYWNlOwotICAgICAgICBibG9ja0ZpbHRlciA9ICZtX29sZEdl
bi5ibG9ja0ZpbHRlcjsKLSAgICB9IGVsc2UgewotICAgICAgICB0b1NwYWNlID0gbV9uZXdHZW4u
dG9TcGFjZTsKLSAgICAgICAgZnJvbVNwYWNlID0gbV9uZXdHZW4uZnJvbVNwYWNlOwotICAgICAg
ICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9ja0ZpbHRlcjsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIWZyb21TcGFjZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGZyb21TcGFjZS0+cmVtb3ZlSGVhZCgpOwotICAgICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIGJs
b2NrIHRvIHRoZSBibG9ja1NldCBiZWNhdXNlIGl0IHdhcyBuZXZlciByZW1vdmVkLgotICAgICAg
ICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwotICAgICAgICBibG9ja0ZpbHRl
ci0+YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICAgICAgYmxvY2stPmRp
ZFN1cnZpdmVHQygpOwotICAgICAgICB0b1NwYWNlLT5wdXNoKGJsb2NrKTsKLSAgICB9Ci0KLSAg
ICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pIHsK
LSAgICAgICAgbV9vbGRHZW4udG9TcGFjZS0+YXBwZW5kKCptX25ld0dlbi50b1NwYWNlKTsKLSAg
ICAgICAgbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3R2VuLm92ZXJzaXplQmxv
Y2tzKTsKLSAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKG1fbmV3R2VuLmJsb2NrRmls
dGVyKTsKLSAgICAgICAgbV9uZXdHZW4uYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQobV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9uZXdH
ZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5vdmVyc2l6ZUJs
b2Nrcy5pc0VtcHR5KCkpOwotCi0gICAgYWxsb2NhdGVCbG9jaygpOwotCi0gICAgbV9zaG91bGRE
b0NvcHlQaGFzZSA9IGZhbHNlOwotfQotCi1zaXplX3QgQ29waWVkU3BhY2U6OnNpemUoKQotewot
ICAgIHNpemVfdCBjYWxjdWxhdGVkU2l6ZSA9IDA7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKLQotICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2Nr
OyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2Nr
LT5zaXplKCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJz
aXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAg
Y2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9uZXdHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwotCi0gICAg
Zm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxv
Y2stPnNpemUoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3Zl
cnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAg
ICBjYWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwotCi0gICAgcmV0dXJuIGNhbGN1bGF0
ZWRTaXplOwotfQotCi1zaXplX3QgQ29waWVkU3BhY2U6OmNhcGFjaXR5KCkKLXsKLSAgICBzaXpl
X3QgY2FsY3VsYXRlZENhcGFjaXR5ID0gMDsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgp
KQotICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0KLSAg
ICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFjZS0+aGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkg
Kz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkKLSAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwotCi0g
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi50b1NwYWNlLT5oZWFkKCk7IGJs
b2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSAr
PSBibG9jay0+Y2FwYWNpdHkoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9u
ZXdHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0g
ICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKLQotICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkg
Kz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRlZENhcGFjaXR5Owot
fQotCi1zdGF0aWMgYm9vbCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSwgRG91
Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIGxpc3QpCi17Ci0gICAgdW5zaWduZWQgaXRlcnNT
aW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwotICAgIENvcGllZEJsb2NrKiBjdXJyZW50ID0gbGlzdC0+
aGVhZCgpOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0KCk7Ci0gICAgICAgICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7Ci0gICAgICAgIGlm
IChpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA+PSBIZWFwOjpzX3RpbWVDaGVja1Jlc29sdXRpb24p
IHsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPiBkZWFkbGluZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0
VGltZUNoZWNrID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBDb3BpZWRTcGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCi17Ci0gICAg
cmV0dXJuIGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fb2xkR2VuLnRvU3BhY2UpIAot
ICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi5mcm9tU3Bh
Y2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vbGRHZW4u
b3ZlcnNpemVCbG9ja3MpCi0gICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUs
IG1fbmV3R2VuLnRvU3BhY2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRs
aW5lLCBtX25ld0dlbi5mcm9tU3BhY2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0
KGRlYWRsaW5lLCAmbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkocmV2
aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29waWVkU3BhY2VfaAotI2RlZmluZSBD
b3BpZWRTcGFjZV9oCi0KLSNpbmNsdWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJI
ZWFwT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCi0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KLSNpbmNs
dWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci1j
bGFzcyBDb3BpZWRCbG9jazsKLQotY2xhc3MgQ29waWVkU3BhY2UgewotICAgIGZyaWVuZCBjbGFz
cyBDb3B5VmlzaXRvcjsKLSAgICBmcmllbmQgY2xhc3MgSGVhcDsKLSAgICBmcmllbmQgY2xhc3Mg
U2xvdFZpc2l0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIEpJVDsKLXB1YmxpYzoKLSAgICBDb3BpZWRT
cGFjZShIZWFwKik7Ci0gICAgfkNvcGllZFNwYWNlKCk7Ci0gICAgdm9pZCBpbml0KCk7Ci0KLSAg
ICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tl
ZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKLSAgICAKLSAg
ICBDb3BpZWRBbGxvY2F0b3ImIGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9Ci0K
LSAgICB2b2lkIGRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKTsKLQotICAgIHRlbXBsYXRlIDxIZWFw
T3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgotICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKLSAg
ICB2b2lkIGRvbmVDb3B5aW5nKCk7Ci0gICAgYm9vbCBpc0luQ29weVBoYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbkNvcHlpbmdQaGFzZTsgfQotCi0gICAgdm9pZCBwaW4oQ29waWVkQmxvY2sqKTsK
LSAgICBib29sIGlzUGlubmVkKHZvaWQqKTsKLQotICAgIGJvb2wgY29udGFpbnMoQ29waWVkQmxv
Y2sqKTsKLSAgICBib29sIGNvbnRhaW5zKHZvaWQqLCBDb3BpZWRCbG9jayomKTsKLSAgICAKLSAg
ICB2b2lkIHBpbklmTmVjZXNzYXJ5KHZvaWQqIHBvaW50ZXIpOwotCi0gICAgc2l6ZV90IHNpemUo
KTsKLSAgICBzaXplX3QgY2FwYWNpdHkoKTsKLQotICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUpOwotICAgIGJvb2wgc2hvdWxkRG9Db3B5UGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZERvQ29weVBoYXNlOyB9Ci0KLSAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGJsb2NrRm9y
KHZvaWQqKTsKLQotICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KLSAg
ICAKLSAgICBzaXplX3QgdGFrZUJ5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgICAgICBzdGQ6OnN3
YXAobV9ieXRlc1JlbW92ZWRGcm9tT2xkU3BhY2VEdWVUb1JlYWxsb2NhdGlvbiwgcmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGJv
b2wgaXNPdmVyc2l6ZShzaXplX3QpOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAg
IAotICAgIHZvaWQgYWxsb2NhdGVCbG9jaygpOwotICAgIENvcGllZEJsb2NrKiBhbGxvY2F0ZUJs
b2NrRm9yQ29weWluZ1BoYXNlKCk7Ci0KLSAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2soQ29waWVk
QmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKLSAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhD
b3BpZWRCbG9jayosIEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUpOwotICAgIHZvaWQgcmVj
eWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqKTsKLQotICAgIEhlYXAqIG1faGVhcDsKLQot
ICAgIENvcGllZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKLQotICAgIEhhc2hTZXQ8Q29waWVkQmxv
Y2sqPiBtX2Jsb2NrU2V0OwotCi0gICAgTG9jayBtX3RvU3BhY2VMb2NrOwotCi0gICAgc3RydWN0
IENvcGllZEdlbmVyYXRpb24gewotICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKLSAgICAgICAg
ICAgIDogdG9TcGFjZSgwKQotICAgICAgICAgICAgLCBmcm9tU3BhY2UoMCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3Bh
Y2U7Ci0gICAgICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7Ci0g
ICAgICAgIAotICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOwot
ICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MyOwotICAgICAgICBE
b3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBvdmVyc2l6ZUJsb2NrczsKLQotICAgICAgICBU
aW55Qmxvb21GaWx0ZXIgYmxvY2tGaWx0ZXI7Ci0gICAgfTsKLQotICAgIENvcGllZEdlbmVyYXRp
b24gbV9vbGRHZW47Ci0gICAgQ29waWVkR2VuZXJhdGlvbiBtX25ld0dlbjsKLQotICAgIGJvb2wg
bV9pbkNvcHlpbmdQaGFzZTsKLSAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7Ci0KLSAgICBM
b2NrIG1fbG9hbmVkQmxvY2tzTG9jazsKLSAgICBzaXplX3QgbV9udW1iZXJPZkxvYW5lZEJsb2Nr
czsKLSAgICAKLSAgICBzaXplX3QgbV9ieXRlc1JlbW92ZWRGcm9tT2xkU3BhY2VEdWVUb1JlYWxs
b2NhdGlvbjsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhBbGxvY2F0aW9uU2l6ZSA9
IENvcGllZEJsb2NrOjpibG9ja1NpemUgLyAyOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19i
bG9ja01hc2sgPSB+KENvcGllZEJsb2NrOjpibG9ja1NpemUgLSAxKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ29waWVkU3BhY2VJbmxpbmVzX2gKLSNkZWZpbmUgQ29waWVkU3BhY2VJbmxp
bmVzX2gKLQotI2luY2x1ZGUgIkNvcGllZEJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2Uu
aCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiVk0uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2sp
Ci17Ci0gICAgcmV0dXJuICghbV9uZXdHZW4uYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJl
dF9jYXN0PEJpdHM+KGJsb2NrKSkgfHwgIW1fb2xkR2VuLmJsb2NrRmlsdGVyLnJ1bGVPdXQocmVp
bnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpKQotICAgICAgICAmJiBtX2Jsb2NrU2V0LmNvbnRh
aW5zKGJsb2NrKTsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNvbnRhaW5zKHZvaWQq
IHB0ciwgQ29waWVkQmxvY2sqJiByZXN1bHQpCi17Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0g
YmxvY2tGb3IocHRyKTsKLSAgICBpZiAoY29udGFpbnMoYmxvY2spKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGJsb2NrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gMDsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW4oQ29w
aWVkQmxvY2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5waW4oKTsKLX0KLQotaW5saW5lIHZvaWQg
Q29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCi17Ci0gICAg
Ly8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxvd2luZyB2
YXJpZXRpZXM6Ci0gICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNwYW4gb2Yg
bWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0Ci0gICAgLy8gICAgIG5hdHVyYWwgdGhvdWdoIG5vdCBu
ZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCi0gICAgLy8gMikgIFBvaW50ZXJzIHRvIG9uZSB2
YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVuZCBvZgotICAgIC8vICAgICBhIHNw
YW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRlcmZsaWVz
Ci0gICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3RoZXIgaGFs
ZiBvZiB0aGUKLSAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRzLgotICAgIC8vIDMpICBQb2ludGVy
cyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKLSAg
ICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9tYXRpYywg
YnkgdGhlCi0gICAgLy8gICAgIGNvbXBpbGVyKS4KLSAgICAvLyA0KSAgUG9pbnRlcnMgdG8gdGhl
IGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluIGFyaXNpbmcgZnJvbQotICAgIC8vICAgICBpbmR1
Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQotICAgIC8vICAg
ICBHQy10by1jb21waWxlciBjb250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBhIHBvaW50
ZXIgdG8KLSAgICAvLyAgICAgdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3QgYmUgY29u
c2lkZXJlZCB0byBiZSBhCi0gICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnkuCi0gICAg
Ci0gICAgRW5jb2RlZEpTVmFsdWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVuY29kZWRK
U1ZhbHVlKj4ob3BhcXVlUG9pbnRlcik7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrOwotCi0gICAg
Ly8gSGFuZGxlICgxKSBhbmQgKDMpLgotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBibG9jaykp
Ci0gICAgICAgIHBpbihibG9jayk7Ci0gICAgCi0gICAgLy8gSGFuZGxlICg0KS4gV2UgZG9uJ3Qg
aGF2ZSB0byBleHBsaWNpdGx5IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRoaXMKLSAg
ICAvLyBwb2ludGVyIGJlY2F1c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNvbWV0aGlu
ZyB0aGF0IGNhc2VzICgxKSBhbmQKLSAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikgYmVsb3cg
d291bGRuJ3QgYWxyZWFkeSBjYXRjaC4KLSAgICBwb2ludGVyLS07Ci0gICAgCi0gICAgLy8gSGFu
ZGxlICgyKQotICAgIHBvaW50ZXItLTsKLSAgICBpZiAoY29udGFpbnMocG9pbnRlciwgYmxvY2sp
KQotICAgICAgICBwaW4oYmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVj
eWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaywgSGVhcE9wZXJhdGlvbiBjb2xs
ZWN0aW9uVHlwZSkKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+Y2Fu
QmVSZWN5Y2xlZCgpKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKLSAgICB7Ci0g
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKLSAgICAgICAgbV9ibG9j
a1NldC5yZW1vdmUoYmxvY2spOwotICAgICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNv
bGxlY3Rpb24pCi0gICAgICAgICAgICBtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb2xkR2VuLmZyb21TcGFjZS0+cmVtb3ZlKGJs
b2NrKTsKLSAgICB9Ci0gICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwot
fQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVk
QmxvY2sqIGJsb2NrKQotewotICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIGJsb2Nr
KTsKLQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2Nr
KTsKLSAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKTsKLSAgICAgICAg
QVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwotICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tz
LS07Ci0gICAgfQotfQotCi1pbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjphbGxvY2F0
ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkKLXsKLSAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7
Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwo
Km1faGVhcCk7Ci0KLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9hbmVkQmxv
Y2tzTG9jayk7Ci0gICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoIWJsb2NrLT5kYXRhU2l6ZSgpKTsKLSAgICByZXR1cm4gYmxvY2s7Ci19Ci0KLWlu
bGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKLXsKLSAgICBtX2hlYXAtPmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKLQotICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKCk7Ci0gICAgCi0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNy
ZWF0ZSgqbV9oZWFwKTsKLSAgICAgICAgCi0gICAgbV9uZXdHZW4udG9TcGFjZS0+cHVzaChibG9j
ayk7Ci0gICAgbV9uZXdHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
YmxvY2spKTsKLSAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7Ci0gICAgbV9hbGxvY2F0b3Iuc2V0
Q3VycmVudEJsb2NrKGJsb2NrKTsKLX0KLQotaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNw
YWNlOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCi17Ci0gICAgQVNT
RVJUKCFtX2hlYXAtPnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIEFTU0VSVChi
eXRlcyk7Ci0KLSAgICBpZiAoIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
KQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRyKTsKLSAg
ICAKLSAgICBBU1NFUlQoKm91dFB0cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBi
b29sIENvcGllZFNwYWNlOjppc092ZXJzaXplKHNpemVfdCBieXRlcykKLXsKLSAgICByZXR1cm4g
Ynl0ZXMgPiBzX21heEFsbG9jYXRpb25TaXplOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRTcGFj
ZTo6aXNQaW5uZWQodm9pZCogcHRyKQotewotICAgIHJldHVybiBibG9ja0ZvcihwdHIpLT5tX2lz
UGlubmVkOwotfQotCi1pbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0Zvcih2
b2lkKiBwdHIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihy
ZWludGVycHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKLX0KLQotdGVtcGxh
dGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU+Ci1pbmxpbmUgdm9pZCBDb3BpZWRTcGFj
ZTo6c3RhcnRlZENvcHlpbmcoKQotewotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+
KiBmcm9tU3BhY2U7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIG92ZXJzaXpl
QmxvY2tzOwotICAgIFRpbnlCbG9vbUZpbHRlciogYmxvY2tGaWx0ZXI7Ci0gICAgaWYgKGNvbGxl
Y3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX29sZEdlbi5m
cm9tU3BhY2UtPmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2Ut
PmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgbV9vbGRHZW4udG9TcGFjZS0+YXBwZW5kKCptX25ld0dl
bi50b1NwYWNlKTsKLSAgICAgICAgbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3
R2VuLm92ZXJzaXplQmxvY2tzKTsKLQotICAgICAgICBBU1NFUlQobV9uZXdHZW4udG9TcGFjZS0+
aXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgp
KTsKLSAgICAgICAgQVNTRVJUKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7Ci0K
LSAgICAgICAgc3RkOjpzd2FwKG1fb2xkR2VuLmZyb21TcGFjZSwgbV9vbGRHZW4udG9TcGFjZSk7
Ci0gICAgICAgIGZyb21TcGFjZSA9IG1fb2xkR2VuLmZyb21TcGFjZTsKLSAgICAgICAgb3ZlcnNp
emVCbG9ja3MgPSAmbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3M7Ci0gICAgICAgIGJsb2NrRmlsdGVy
ID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6c3dh
cChtX25ld0dlbi5mcm9tU3BhY2UsIG1fbmV3R2VuLnRvU3BhY2UpOwotICAgICAgICBmcm9tU3Bh
Y2UgPSBtX25ld0dlbi5mcm9tU3BhY2U7Ci0gICAgICAgIG92ZXJzaXplQmxvY2tzID0gJm1fbmV3
R2VuLm92ZXJzaXplQmxvY2tzOwotICAgICAgICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9j
a0ZpbHRlcjsKLSAgICB9Ci0KLSAgICBibG9ja0ZpbHRlci0+cmVzZXQoKTsKLSAgICBtX2FsbG9j
YXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOwot
ICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7Ci0gICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0
ZXMgPSAwOwotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gZnJvbVNwYWNlLT5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghYmxvY2stPmlzUGlubmVkKCkgJiYgYmxvY2stPmNhbkJlUmVjeWNsZWQoKSkg
ewotICAgICAgICAgICAgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrLCBjb2xsZWN0aW9uVHlw
ZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoYmxv
Y2stPmxpdmVCeXRlcygpIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwotICAgICAgICB0b3Rh
bExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7Ci0gICAgICAgIHRvdGFsVXNhYmxlQnl0
ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICBibG9jay0+ZGlkUHJvbW90
ZSgpOwotICAgIH0KLQotICAgIENvcGllZEJsb2NrKiBibG9jayA9IG92ZXJzaXplQmxvY2tzLT5o
ZWFkKCk7Ci0gICAgd2hpbGUgKGJsb2NrKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0g
YmxvY2stPm5leHQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKSB7Ci0gICAgICAg
ICAgICBibG9ja0ZpbHRlci0+YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAg
ICAgICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKLSAg
ICAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwot
ICAgICAgICAgICAgYmxvY2stPmRpZFByb21vdGUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG92ZXJzaXplQmxvY2tzLT5yZW1vdmUoYmxvY2spOwotICAgICAgICAgICAgbV9ibG9j
a1NldC5yZW1vdmUoYmxvY2spOwotICAgICAgICAgICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhl
YXAoKSwgYmxvY2spOwotICAgICAgICB9IAotICAgICAgICBibG9jayA9IG5leHQ7Ci0gICAgfQot
Ci0gICAgZG91YmxlIG1hcmtlZFNwYWNlQnl0ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCkuY2Fw
YWNpdHkoKTsKLSAgICBkb3VibGUgdG90YWxVdGlsaXphdGlvbiA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4odG90YWxMaXZlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJs
ZT4odG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOwotICAgIG1fc2hvdWxkRG9D
b3B5UGhhc2UgPSBtX2hlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlv
biB8fCB0b3RhbFV0aWxpemF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGlsaXphdGlvbigpOwot
ICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFzZSkgewotICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIlNraXBwZWQgY29weWluZywgIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgZGF0
YUxvZ0YoIkRpZCBjb3B5LCAiKTsKLSAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7Ci0g
ICAgQVNTRVJUKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKTsKLSAgICBBU1NFUlQoIW1faW5Db3B5
aW5nUGhhc2UpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcGllZFNwYWNlSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5QmFycmllcl9oCi0j
ZGVmaW5lIENvcHlCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJWTS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29weUJhcnJpZXJCYXNlIHsKLXB1YmxpYzoK
LSAgICBDb3B5QmFycmllckJhc2UoKQotICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9Ci0KLSAgICB2b2lkKiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fdmFsdWU7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IG51bGxw
dHI7IH0KLQotcHJvdGVjdGVkOgotICAgIENvcHlCYXJyaWVyQmFzZShWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBv
d25lciwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9
IHZhbHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIodm9pZCogdmFsdWUpCi0gICAgewotICAgICAg
ICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIG11dGFibGUg
dm9pZCogbV92YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgQ29weUJh
cnJpZXIgOiBwdWJsaWMgQ29weUJhcnJpZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBDb3B5QmFycmll
cigpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDb3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIFQmIHZhbHVlKQotICAgICAgICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3du
ZXIsICZ2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvcHlCYXJyaWVyKFZNJiB2bSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgICAgIDogQ29weUJhcnJpZXJCYXNl
KHZtLCBvd25lciwgdmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIFQqIGdldCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6Omdl
dCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIs
IFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXQodm0sIG93bmVy
LCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVCogdmFs
dWUpCi0gICAgewotICAgICAgICBDb3B5QmFycmllckJhc2U6OnNldFdpdGhvdXRCYXJyaWVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcHlC
YXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZp
c2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ29weVRva2VuX2gKLSNkZWZpbmUgQ29weVRva2VuX2gKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWVudW0gQ29weVRva2VuIHsKLSAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9r
ZW4KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29weVRva2VuX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9u
IDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLQotI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAg
OiBtX2hlYXAoaGVhcCkKLXsKLSAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQo
KSk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2hlYXAubV9zdG9y
YWdlU3BhY2UuZG9uZUZpbGxpbmdCbG9jayhudWxscHRyLCAmYmxvY2spOwotICAgIG1fY29waWVk
QWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7Ci19Ci0KLUNvcHlWaXNpdG9yOjp+Q29w
eVZpc2l0b3IoKQotewotICAgIGlmIChtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIG51bGxwdHIpOwotICAgIAotICAgIFdURjo6cmVsZWFz
ZUZhc3RNYWxsb2NGcmVlTWVtb3J5Rm9yVGhpc1RocmVhZCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2
aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3Iu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIENvcHlWaXNpdG9yX2gKLSNkZWZpbmUgQ29weVZpc2l0b3JfaAotCi0jaW5jbHVkZSAiQ29w
aWVkU3BhY2UuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEhlYXA7Ci0KLWNsYXNzIENvcHlWaXNpdG9yIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb3B5VmlzaXRvcik7Ci1wdWJsaWM6Ci0gICAgQ29weVZpc2l0b3IoSGVhcCYp
OwotICAgIH5Db3B5VmlzaXRvcigpOwotCi0gICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgpOwotCi0g
ICAgLy8gTG93LWxldmVsIEFQSSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9yIGNhc2VzIHdo
ZXJlIHRoZSBvYmplY3QncyBoZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBhcmUgZGlzY29udGlndW91
cyBvciBpZiB0aGUgb2JqZWN0IG9jY3VycyBmcmVxdWVudGx5IGVub3VnaCB0aGF0IHlvdSBuZWVk
IHRvIGZvY3VzIG9uCi0gICAgLy8gcGVyZm9ybWFuY2UuIFVzZSB0aGlzIHdpdGggY2FyZSBhcyBp
dCBpcyBlYXN5IHRvIHNob290IHlvdXJzZWxmIGluIHRoZSBmb290LgotICAgIGJvb2wgY2hlY2tJ
ZlNob3VsZENvcHkodm9pZCopOwotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90KTsK
LSAgICB2b2lkIGRpZENvcHkodm9pZCosIHNpemVfdCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCog
YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90KTsKLSAgICB2b2lkIHZpc2l0SXRlbShDb3B5V29y
a2xpc3RJdGVtKTsKLQotICAgIEhlYXAmIG1faGVhcDsKLSAgICBDb3BpZWRBbGxvY2F0b3IgbV9j
b3BpZWRBbGxvY2F0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAko
cmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBDb3B5VmlzaXRvcklubGluZXNfaAotI2RlZmluZSBDb3B5VmlzaXRvcklubGluZXNf
aAotCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1pbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHko
dm9pZCogb2xkUHRyKQotewotICAgIGlmICghb2xkUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0cik7
Ci0gICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkgfHwgYmxvY2stPmlzUGlubmVkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQqIENv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiBy
ZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBh
c3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVy
aW5nQ29weWluZyhieXRlcywgJnJlc3VsdCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IAotICAgIHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKLSAgICBBU1NFUlQo
cmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfSAgICAgICAKLQotaW5saW5lIHZvaWQqIENv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgQ29w
aWVkQmxvY2sqIG5ld0Jsb2NrID0gMDsKLSAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2UuZG9uZUZp
bGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3Qmxv
Y2spOwotICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7Ci0K
LSAgICB2b2lkKiByZXN1bHQgPSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBt
X2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQp
OwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxp
bmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsK
LSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKLSAg
ICBBU1NFUlQoIWJsb2NrLT5pc092ZXJzaXplKCkpOwotICAgIEFTU0VSVCghYmxvY2stPmlzUGlu
bmVkKCkpOwotCi0gICAgYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcHlWaXNpdG9ySW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V29ya0xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V29ya0xpc3QuaAkocmV2aXNpb24gMjA1NjU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdvcmtMaXN0LmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdv
cmtMaXN0X2gKLSNkZWZpbmUgQ29weVdvcmtMaXN0X2gKLQotI2luY2x1ZGUgIkNvcHlUb2tlbi5o
IgotI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBKU0NlbGw7Ci0KLWNsYXNzIENvcHlXb3JrbGlzdEl0ZW0gewotcHVibGljOgotICAg
IENvcHlXb3JrbGlzdEl0ZW0oKQotICAgICAgICA6IG1fdmFsdWUoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgQ29weVdvcmtsaXN0SXRlbShKU0NlbGwqIGNlbGwsIENvcHlUb2tlbiB0b2tlbikKLSAg
ICAgICAgOiBtX3ZhbHVlKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIHwgc3RhdGljX2Nh
c3Q8dWludHB0cl90Pih0b2tlbikpCi0gICAgewotICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihjZWxsKSAmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obWFzaykpKTsKLSAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odG9rZW4pIDw9IG1hc2spOwotICAg
IH0KLSAgICAKLSAgICBKU0NlbGwqIGNlbGwoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
SlNDZWxsKj4obV92YWx1ZSAmIH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1hc2spKTsgfQotICAg
IENvcHlUb2tlbiB0b2tlbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvcHlUb2tlbj4o
bV92YWx1ZSAmIG1hc2spOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCByZXF1aXJlZEFsaWdubWVudCA9IDg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
c2sgPSByZXF1aXJlZEFsaWdubWVudCAtIDE7Ci0gICAgCi0gICAgdWludHB0cl90IG1fdmFsdWU7
Ci19OwotCi1jbGFzcyBDb3B5V29ya0xpc3RTZWdtZW50IDogcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPENvcHlXb3JrTGlzdFNlZ21lbnQ+IHsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3Vi
bHlMaW5rZWRMaXN0Tm9kZTxDb3B5V29ya0xpc3RTZWdtZW50PjsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgQ29weVdvcmtMaXN0U2VnbWVudCogY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
ZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYmxvY2tTaXplKSkgQ29weVdvcmtMaXN0U2VnbWVudCgp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KENvcHlXb3JrTGlzdFNlZ21l
bnQqIHNlZ21lbnQpCi0gICAgewotICAgICAgICBzZWdtZW50LT5+Q29weVdvcmtMaXN0U2VnbWVu
dCgpOwotICAgICAgICBmYXN0RnJlZShzZWdtZW50KTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgc2l6
ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGJvb2wgaXNGdWxsKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmRhdGEoKVtzaXplKCldKSA+PSBlbmRPZkJsb2NrKCk7IH0KLSAg
ICBDb3B5V29ya2xpc3RJdGVtIGdldChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGRhdGEoKVtpbmRl
eF07IH0KLQotICAgIHZvaWQgYXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgICAgICBkYXRhKClbbV9zaXplXSA9IGl0ZW07
Ci0gICAgICAgIG1fc2l6ZSArPSAxOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YmxvY2tTaXplID0gNTEyOwotCi1wcml2YXRlOgotICAgIENvcHlXb3JrTGlzdFNlZ21lbnQoKQot
ICAgICAgICA6IERvdWJseUxpbmtlZExpc3ROb2RlPENvcHlXb3JrTGlzdFNlZ21lbnQ+KCkKLSAg
ICAgICAgLCBtX3NpemUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgQ29weVdvcmtsaXN0SXRlbSog
ZGF0YSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29weVdvcmtsaXN0SXRlbSo+KHRoaXMg
KyAxKTsgfQotICAgIGNoYXIqIGVuZE9mQmxvY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPih0aGlzKSArIGJsb2NrU2l6ZTsgfQotCi0gICAgQ29weVdvcmtMaXN0U2VnbWVudCog
bV9wcmV2OwotICAgIENvcHlXb3JrTGlzdFNlZ21lbnQqIG1fbmV4dDsKLSAgICBzaXplX3QgbV9z
aXplOwotfTsKLQotY2xhc3MgQ29weVdvcmtMaXN0SXRlcmF0b3IgewotICAgIGZyaWVuZCBjbGFz
cyBDb3B5V29ya0xpc3Q7Ci1wdWJsaWM6Ci0gICAgQ29weVdvcmtsaXN0SXRlbSBnZXQoKSB7IHJl
dHVybiBtX2N1cnJlbnRTZWdtZW50LT5nZXQobV9jdXJyZW50SW5kZXgpOyB9Ci0gICAgQ29weVdv
cmtsaXN0SXRlbSBvcGVyYXRvciooKSB7IHJldHVybiBnZXQoKTsgfQotICAgIENvcHlXb3JrbGlz
dEl0ZW0gb3BlcmF0b3ItPigpIHsgcmV0dXJuIGdldCgpOyB9Ci0KLSAgICBDb3B5V29ya0xpc3RJ
dGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgewotICAgICAgICBtX2N1cnJlbnRJbmRleCsrOwot
Ci0gICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2N1cnJlbnRTZWdtZW50LT5zaXplKCkp
IHsKLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVu
dFNlZ21lbnQgPSBtX2N1cnJlbnRTZWdtZW50LT5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKCFtX2N1cnJlbnRTZWdtZW50IHx8IG1fY3VycmVudFNlZ21lbnQtPnNpemUoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvcHlXb3JrTGlzdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRTZWdtZW50ID09IG90aGVyLm1fY3VycmVudFNlZ21l
bnQgJiYgbV9jdXJyZW50SW5kZXggPT0gb3RoZXIubV9jdXJyZW50SW5kZXg7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb3B5V29ya0xpc3RJdGVyYXRvciYgb3RoZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQot
Ci0gICAgQ29weVdvcmtMaXN0SXRlcmF0b3IoKQotICAgICAgICA6IG1fY3VycmVudFNlZ21lbnQo
MCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgQ29weVdvcmtMaXN0SXRlcmF0b3IoQ29weVdvcmtMaXN0U2VnbWVudCogc3RhcnRTZWdt
ZW50LCBzaXplX3Qgc3RhcnRJbmRleCkKLSAgICAgICAgOiBtX2N1cnJlbnRTZWdtZW50KHN0YXJ0
U2VnbWVudCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbmRleChzdGFydEluZGV4KQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgQ29weVdvcmtMaXN0U2VnbWVudCogbV9jdXJyZW50U2VnbWVudDsKLSAg
ICBzaXplX3QgbV9jdXJyZW50SW5kZXg7Ci19OwotCi1jbGFzcyBDb3B5V29ya0xpc3QgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHR5cGVkZWYgQ29weVdvcmtM
aXN0SXRlcmF0b3IgaXRlcmF0b3I7Ci0KLSAgICBDb3B5V29ya0xpc3QoKTsKLSAgICB+Q29weVdv
cmtMaXN0KCk7Ci0KLSAgICB2b2lkIGFwcGVuZChDb3B5V29ya2xpc3RJdGVtKTsKLSAgICBpdGVy
YXRvciBiZWdpbigpOwotICAgIGl0ZXJhdG9yIGVuZCgpOwotCi1wcml2YXRlOgotICAgIERvdWJs
eUxpbmtlZExpc3Q8Q29weVdvcmtMaXN0U2VnbWVudD4gbV9zZWdtZW50czsKLX07Ci0KLWlubGlu
ZSBDb3B5V29ya0xpc3Q6OkNvcHlXb3JrTGlzdCgpCi17Ci19Ci0KLWlubGluZSBDb3B5V29ya0xp
c3Q6On5Db3B5V29ya0xpc3QoKQotewotICAgIHdoaWxlICghbV9zZWdtZW50cy5pc0VtcHR5KCkp
Ci0gICAgICAgIENvcHlXb3JrTGlzdFNlZ21lbnQ6OmRlc3Ryb3kobV9zZWdtZW50cy5yZW1vdmVI
ZWFkKCkpOwotfQotCi1pbmxpbmUgdm9pZCBDb3B5V29ya0xpc3Q6OmFwcGVuZChDb3B5V29ya2xp
c3RJdGVtIGl0ZW0pCi17Ci0gICAgaWYgKG1fc2VnbWVudHMuaXNFbXB0eSgpIHx8IG1fc2VnbWVu
dHMudGFpbCgpLT5pc0Z1bGwoKSkKLSAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoQ29weVdvcmtM
aXN0U2VnbWVudDo6Y3JlYXRlKCkpOwotCi0gICAgQVNTRVJUKCFtX3NlZ21lbnRzLnRhaWwoKS0+
aXNGdWxsKCkpOwotCi0gICAgbV9zZWdtZW50cy50YWlsKCktPmFwcGVuZChpdGVtKTsKLX0KLQot
aW5saW5lIENvcHlXb3JrTGlzdDo6aXRlcmF0b3IgQ29weVdvcmtMaXN0OjpiZWdpbigpCi17Ci0g
ICAgcmV0dXJuIENvcHlXb3JrTGlzdEl0ZXJhdG9yKG1fc2VnbWVudHMuaGVhZCgpLCAwKTsKLX0K
LQotaW5saW5lIENvcHlXb3JrTGlzdDo6aXRlcmF0b3IgQ29weVdvcmtMaXN0OjplbmQoKQotewot
ICAgIHJldHVybiBDb3B5V29ya0xpc3RJdGVyYXRvcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIENvcHlXb3JrTGlzdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDYgQEAKIAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAi
Q29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1
ZGUgIkVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCkBAIC0yMDIsMTAgKzE5OSw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1BlckN5Y2xlKQogICAg
ICwgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uKGZhbHNlKQogICAgICwgbV90b3RhbEJ5dGVzVmlz
aXRlZCgwKQotICAgICwgbV90b3RhbEJ5dGVzQ29waWVkKDApCiAgICAgLCBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MoTm9PcGVyYXRpb24pCiAgICAgLCBtX29iamVjdFNwYWNlKHRoaXMpCi0gICAgLCBt
X3N0b3JhZ2VTcGFjZSh0aGlzKQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1f
ZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlz
KQpAQCAtMjMzLDcgKzIyOCw2IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICNlbmRpZgogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiB7Ci0g
ICAgbV9zdG9yYWdlU3BhY2UuaW5pdCgpOwogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkp
CiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhp
cywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwog
fQpAQCAtMjQ2LDcgKzI0MCw3IEBAIEhlYXA6On5IZWFwKCkKIAogYm9vbCBIZWFwOjppc1BhZ2Vk
T3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5pc1BhZ2Vk
T3V0KGRlYWRsaW5lKSB8fCBtX3N0b3JhZ2VTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKTsKKyAg
ICByZXR1cm4gbV9vYmplY3RTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKTsKIH0KIAogLy8gVGhl
IFZNIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlIGNvbGxlY3RvciB3aWxsIG5ldmVyIHJ1biBh
Z2Fpbi4KQEAgLTQ5Niw1OCArNDkwLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdj
U3RhcnRUaW1lLAogICAgIHJlc2V0VmlzaXRvcnMoKTsKIH0KIAotdm9pZCBIZWFwOjpjb3B5QmFj
a2luZ1N0b3JlcygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwotICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24p
Ci0gICAgICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nPEVkZW5Db2xsZWN0aW9uPigp
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1
bGxDb2xsZWN0aW9uKTsKLSAgICAgICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlpbmc8RnVs
bENvbGxlY3Rpb24+KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERv
Q29weVBoYXNlKCkpIHsKLSAgICAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVu
Q29sbGVjdGlvbikgewotICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0
eSwgYnV0IGRvbid0IHRocm93IGF3YXkgdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgICAgICBt
X2Jsb2Nrc1RvQ29weS5zaHJpbmsoMCk7Ci0gICAgICAgICAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fc3RvcmFnZVNwYWNlLm1fbmV3R2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LmFw
cGVuZChibG9jayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9vcGVy
YXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKTsKLSAgICAgICAgICAgIFdURjo6Y29w
eVRvVmVjdG9yKG1fc3RvcmFnZVNwYWNlLm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9Db3B5KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3I8VmVjdG9yPENvcGllZEJs
b2NrKj4+IGl0ZXJhdG9yKAotICAgICAgICAgICAgbV9ibG9ja3NUb0NvcHksIHNfYmxvY2tGcmFn
bWVudExlbmd0aCk7Ci0KLSAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3Mgc2FmZSB0byB1c2UgdGhl
IFsmXSBjYXB0dXJlIGxpc3QgaGVyZSwgZXZlbiB0aG91Z2ggd2UncmUgY3JlYXRpbmcgYSB0YXNr
Ci0gICAgICAgIC8vIHRoYXQgb3RoZXIgdGhyZWFkcyBydW4uIFRoYXQncyBiZWNhdXNlIGFmdGVy
IHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgpIHJldHVybnMsIHRoZSB0YXNrCi0gICAgICAgIC8vIHdl
IGhhdmUgY3JlYXRlZCBpcyBub3QgZ29pbmcgdG8gYmUgcnVubmluZyBhbnltb3JlLiBIZW5jZSwg
ZXZlcnl0aGluZyBvbiB0aGUgc3RhY2sgaGVyZQotICAgICAgICAvLyBvdXRsaXZlcyB0aGUgdGFz
ay4KLSAgICAgICAgbV9oZWxwZXJDbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAotICAgICAg
ICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5VmlzaXRvcigq
dGhpcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaXRlcmF0b3IuaXRlcmF0
ZSgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChDb3BpZWRCbG9jayogYmxvY2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2stPmhhc1dvcmtMaXN0KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtM
aXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRl
bSA6IHdvcmtMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCkt
Pm1ldGhvZFRhYmxlKCktPmNvcHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGl0ZW0uY2VsbCgpLCBjb3B5VmlzaXRvciwgaXRlbS50b2tlbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFibG9jay0+bGl2ZUJ5dGVzKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdG9yYWdlU3BhY2UucmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrLCBt
X29wZXJhdGlvbkluUHJvZ3Jlc3MpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0pOwotICAgIH0KLSAgICAKLSAgICBtX3N0b3JhZ2VTcGFjZS5kb25lQ29weWluZygpOwot
fQotCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3Rz
LCB2b2lkKiBzdGFja09yaWdpbiwgdm9pZCogc3RhY2tUb3AsIE1hY2hpbmVUaHJlYWRzOjpSZWdp
c3RlclN0YXRlJiBjYWxsZWVTYXZlZFJlZ2lzdGVycykKIHsKICAgICBtX2ppdFN0dWJSb3V0aW5l
cy0+Y2xlYXJNYXJrcygpOwpAQCAtODIyLDIwICs3NjQsMTIgQEAgdm9pZCBIZWFwOjp1cGRhdGVP
YmplY3RDb3VudHMoZG91YmxlIGdjUwogICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2
ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KICAgICAKLSAgICBzaXplX3QgYnl0ZXNSZW1vdmVk
RnJvbU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRpb24gPQotICAgICAgICBtX3N0b3JhZ2VTcGFjZS50
YWtlQnl0ZXNSZW1vdmVkRnJvbU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRpb24oKTsKLSAgICAKLSAg
ICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgaWYg
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgbV90b3Rh
bEJ5dGVzVmlzaXRlZCA9IDA7Ci0gICAgICAgIG1fdG90YWxCeXRlc0NvcGllZCA9IDA7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdG90YWxCeXRlc0NvcGllZCAtPSBieXRlc1JlbW92ZWRGcm9tT2xk
U3BhY2VEdWVUb1JlYWxsb2NhdGlvbjsKIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3lj
bGUgPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7
Ci0gICAgbV90b3RhbEJ5dGVzQ29waWVkVGhpc0N5Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc0Nv
cGllZCgpICsgdGhyZWFkQnl0ZXNDb3BpZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7Ci0gICAgbV90b3RhbEJ5dGVzQ29w
aWVkICs9IG1fdG90YWxCeXRlc0NvcGllZFRoaXNDeWNsZTsKIH0KIAogdm9pZCBIZWFwOjpyZXNl
dFZpc2l0b3JzKCkKQEAgLTg2MSwxMiArNzk1LDEyIEBAIHNpemVfdCBIZWFwOjpleHRyYU1lbW9y
eVNpemUoKQogCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3Bh
Y2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFNZW1vcnlTaXplKCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgZXh0cmFNZW1vcnlTaXplKCk7CiB9CiAK
IHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2Fw
YWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYU1lbW9yeVNpemUoKTsK
KyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFNZW1vcnlTaXplKCk7
CiB9CiAKIHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC0xMTA3
LDcgKzEwNDEsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpjb2xsZWN0SW1wbChIZWFwCiAg
ICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwogICAgIHN3ZWVwQXJyYXlCdWZm
ZXJzKCk7CiAgICAgc25hcHNob3RNYXJrZWRTcGFjZSgpOwotICAgIGNvcHlCYWNraW5nU3RvcmVz
KCk7CiAgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURl
YWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRD
b2RlKCk7CkBAIC0xMjA1LDggKzExMzgsNiBAQCB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKCkKIHZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQogewogICAgIG1fb2JqZWN0U3Bh
Y2Uuc3RvcEFsbG9jYXRpbmcoKTsKLSAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1
bGxDb2xsZWN0aW9uKQotICAgICAgICBtX3N0b3JhZ2VTcGFjZS5kaWRTdGFydEZ1bGxDb2xsZWN0
aW9uKCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTMxMCw5ICsx
MjQxLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICAvLyBydW4g
YW5vdGhlciBjb2xsZWN0aW9uLiBUaGlzIGlzbid0IHRoZSBzYW1lIGFzIGVpdGhlciBzaXplKCkg
b3IgY2FwYWNpdHkoKSwgdGhvdWdoIGl0IHNob3VsZAogICAgIC8vIGJlIHNvbWV3aGVyZSBiZXR3
ZWVuIHRoZSB0d28uIFRoZSBrZXkgaXMgdG8gbWF0Y2ggdGhlIHNpemUgY2FsY3VsYXRpb25zIGlu
dm9sdmVkIGNhbGxzIHRvCiAgICAgLy8gZGlkQWxsb2NhdGUoKSwgd2hpbGUgbmV2ZXIgZGFuZ2Vy
b3VzbHkgdW5kZXJlc3RpbWF0aW5nIGNhcGFjaXR5KCkuIEluIGV4dHJlbWUgY2FzZXMgb2YKLSAg
ICAvLyBmcmFnbWVudGF0aW9uLCB3ZSBtYXkgaGF2ZSBzaXplKCkgbXVjaCBzbWFsbGVyIHRoYW4g
Y2FwYWNpdHkoKS4gT3VyIGNvbGxlY3RvciBzb21ldGltZXMKLSAgICAvLyB0ZW1wb3JhcmlseSBh
bGxvd3MgdmVyeSBoaWdoIGZyYWdtZW50YXRpb24gYmVjYXVzZSBpdCBkb2Vzbid0IGRlZnJhZ21l
bnQgb2xkIGJsb2NrcyBpbiBjb3BpZWQKLSAgICAvLyBzcGFjZS4KKyAgICAvLyBmcmFnbWVudGF0
aW9uLCB3ZSBtYXkgaGF2ZSBzaXplKCkgbXVjaCBzbWFsbGVyIHRoYW4gY2FwYWNpdHkoKS4KICAg
ICBzaXplX3QgY3VycmVudEhlYXBTaXplID0gMDsKIAogICAgIC8vIEZvciBtYXJrZWQgc3BhY2Us
IHdlIHVzZSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHZpc2l0ZWQuIFRoaXMgbWF0Y2hlcyB0
aGUgbG9naWMgZm9yCkBAIC0xMzI0LDIzICsxMjUzLDYgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxv
Y2F0aW9uTGltaXRzKCkKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygidG90YWxC
eXRlc1Zpc2l0ZWQgPSAiLCBtX3RvdGFsQnl0ZXNWaXNpdGVkLCAiLCBjdXJyZW50SGVhcFNpemUg
PSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOwogCi0gICAgLy8gRm9yIGNvcGllZCBzcGFjZSwg
d2UgdXNlIHRoZSBjYXBhY2l0eSBvZiBzdG9yYWdlIHNwYWNlLiBUaGlzIGlzIGJlY2F1c2UgY29w
aWVkIHNwYWNlIG1heSBnZXQKLSAgICAvLyBiYWRseSBmcmFnbWVudGVkIGJldHdlZW4gZnVsbCBj
b2xsZWN0aW9ucy4gVGhpcyBhcmlzZXMgd2hlbiBlYWNoIGVkZW4gY29sbGVjdGlvbiBldmFjdWF0
ZXMKLSAgICAvLyBtdWNoIGxlc3MgdGhhbiBvbmUgQ29waWVkQmxvY2sncyB3b3J0aCBvZiBzdHVm
Zi4gSXQgY2FuIGFsc28gaGFwcGVuIHdoZW4gQ29waWVkQmxvY2tzIGdldAotICAgIC8vIHBpbm5l
ZCBkdWUgdG8gdmVyeSBzaG9ydC1saXZlZCBvYmplY3RzLiBJbiBzdWNoIGEgY2FzZSwgd2Ugd2Fu
dCB0byBnZXQgdG8gYSBmdWxsIGNvbGxlY3Rpb24KLSAgICAvLyBzb29uZXIgcmF0aGVyIHRoYW4g
bGF0ZXIuIElmIHdlIHVzZWQgbV90b3RhbEJ5dGVzQ29waWVkLCB0aGVuIGZvciBmb3IgZWFjaCBD
b3BpZWRCbG9jayB0aGF0IGFuCi0gICAgLy8gZWRlbiBhbGxvY2F0aW9uIHByb21vdGVkLCB3ZSB3
b3VsZCBvbmx5IGRlZHVjdCB0aGUgb25lIG9iamVjdCdzIHNpemUgZnJvbSBlZGVuIHNpemUuIFRo
aXMKLSAgICAvLyB3b3VsZCBtZWFuIHRoYXQgd2UgY291bGQgImxlYWsiIG1hbnkgQ29waWVkQmxv
Y2tzIGJlZm9yZSB3ZSBkaWQgYSBmdWxsIGNvbGxlY3Rpb24gYW5kCi0gICAgLy8gZGVmcmFnbWVu
dGVkIGFsbCBvZiB0aGVtLiBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2UgbV90b3RhbEJ5dGVzQ29w
aWVkLCBidXQgd2UnZCBuZWVkIHRvCi0gICAgLy8gYXVnbWVudCBpdCB3aXRoIHNvbWV0aGluZyB0
aGF0IGFjY291bnRzIGZvciB0aG9zZSBmcmFnbWVudGVkIGJsb2Nrcy4KLSAgICAvLyBGSVhNRTog
TWFrZSBpdCBwb3NzaWJsZSB0byBjb21wdXRlIGhlYXAgc2l6ZSB1c2luZyBtX3RvdGFsQnl0ZXND
b3BpZWQgcmF0aGVyIHRoYW4KLSAgICAvLyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI2OAotICAgIEFT
U0VSVChtX3RvdGFsQnl0ZXNDb3BpZWQgPD0gbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpKTsKLSAgICBj
dXJyZW50SGVhcFNpemUgKz0gbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKLSAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygic3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgPSAiLCBtX3N0
b3JhZ2VTcGFjZS5jYXBhY2l0eSgpLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJyZW50SGVh
cFNpemUsICJcbiIpOwotCiAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhh
dCBleHRyYU1lbW9yeVNpemUoKSBlbmRzIHVwIGNvcnJlc3BvbmRpbmcgdG8gYWxsb2NhdGlvbi10
aW1lCiAgICAgLy8gZXh0cmEgbWVtb3J5IHJlcG9ydGluZy4KICAgICBjdXJyZW50SGVhcFNpemUg
Kz0gZXh0cmFNZW1vcnlTaXplKCk7CkBAIC0xNjQ2LDE0ICsxNTU4LDYgQEAgc2l6ZV90IEhlYXA6
OnRocmVhZEJ5dGVzVmlzaXRlZCgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc2l6ZV90IEhl
YXA6OnRocmVhZEJ5dGVzQ29waWVkKCkKLXsgICAgICAgCi0gICAgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc0NvcGllZCgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29u
c3QgU2NvcGVkTGFtYmRhPGJvb2woQ29kZUJsb2NrKik+JiBmdW5jKQogewogICAgIC8vIFdlIGRv
bid0IGtub3cgdGhlIGZ1bGwgc2V0IG9mIENvZGVCbG9ja3MgdW50aWwgY29tcGlsYXRpb24gaGFz
IHRlcm1pbmF0ZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
MDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDcgKzIzLDYgQEAKICNkZWZpbmUgSGVhcF9oCiAKICNpbmNsdWRlICJBcnJheUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVT
dGFjay5oIgpAQCAtNTIsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgQ29kZUJsb2NrU2V0OwotY2xhc3MgQ29waWVkU3BhY2U7CiBjbGFzcyBFZGVu
R0NBY3Rpdml0eUNhbGxiYWNrOwogY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrOwpAQCAtMTIwLDcgKzExOCw2IEBAIHB1YmxpYzoKIAogICAgIFZNKiB2
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2Uo
KSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9Ci0gICAgQ29waWVkU3BhY2UmIHN0b3JhZ2VTcGFj
ZSgpIHsgcmV0dXJuIG1fc3RvcmFnZVNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hp
bmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgY29uc3QgU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQpA
QCAtMTUwLDEyICsxNDcsOSBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDbGFzc1R5cGU+IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBl
KHNpemVfdCBieXRlcyk7CiAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JBdXhpbGlh
cnlEYXRhKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxv
Y2F0b3JGb3IoYnl0ZXMpOyB9Ci0gICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9y
KCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KICAgICB2b2lkKiBhbGxv
Y2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCog
dHJ5QWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwogICAg
IHZvaWQqIHRyeVJlYWxsb2NhdGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lk
KiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIENoZWNrZWRC
b29sZWFuIHRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwg
dm9pZCoqKTsKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwq
IGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmli
ZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCopOwogCiAgICAgdHlwZWRlZiB2b2lk
ICgqRmluYWxpemVyKShKU0NlbGwqKTsKQEAgLTI2Myw3ICsyNTcsNiBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICBmcmllbmQgY2xhc3MgQ29w
aWVkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CiAgICAgZnJpZW5kIGNsYXNzIERl
ZmVyR0NGb3JBV2hpbGU7CiAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsK
QEAgLTI3Nyw4ICsyNzAsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFj
ZTsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBN
YXJrZWRCbG9jazsKLSAgICBmcmllbmQgY2xhc3MgQ29waWVkU3BhY2U7Ci0gICAgZnJpZW5kIGNs
YXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICBmcmll
bmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlz
dGljczsKQEAgLTM0Myw3ICszMzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVt
ZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdD
b2RlQmxvY2tzKCk7CiAgICAgdm9pZCByZXNldEFsbG9jYXRvcnMoKTsKLSAgICB2b2lkIGNvcHlC
YWNraW5nU3RvcmVzKCk7CiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB2b2lkIGNsZWFyVW5t
YXJrZWRFeGVjdXRhYmxlcygpOwpAQCAtMzY4LDcgKzM1OCw2IEBAIHByaXZhdGU6CiAKICAgICBz
aXplX3QgdGhyZWFkVmlzaXRDb3VudCgpOwogICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zpc2l0ZWQo
KTsKLSAgICBzaXplX3QgdGhyZWFkQnl0ZXNDb3BpZWQoKTsKICAgICAKICAgICB2b2lkIGZvckVh
Y2hDb2RlQmxvY2tJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTxib29sKENvZGVCbG9jayopPiYpOwog
CkBAIC0zODgsMTMgKzM3NywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uOwogICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOwogICAgIHNpemVfdCBt
X3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlOwotICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNDb3Bp
ZWQ7Ci0gICAgc2l6ZV90IG1fdG90YWxCeXRlc0NvcGllZFRoaXNDeWNsZTsKICAgICAKICAgICBI
ZWFwT3BlcmF0aW9uIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsKICAgICBTdHJ1Y3R1cmVJRFRhYmxl
IG1fc3RydWN0dXJlSURUYWJsZTsKICAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwotICAg
IENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOwogICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNp
emU7CiAgICAgc2l6ZV90IG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZTsKQEAgLTQ2NCw3ICs0
NTAsNiBAQCBwcml2YXRlOgogICAgIExvY2sgbV9vcGFxdWVSb290c011dGV4OwogICAgIEhhc2hT
ZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKLSAgICBWZWN0b3I8Q29waWVkQmxvY2sqPiBtX2Js
b2Nrc1RvQ29weTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0
aCA9IDMyOwogCiAgICAgTGlzdGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+OjpM
aXN0IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miwz
NiArNDkyLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQogICAgIGRyYWlu
KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmVyLCBDb3B5
VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQotewotICAgIEFTU0VSVChieXRl
cyk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7
Ci0gICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkpIHsKLSAgICAgICAgQVNTRVJUKGJ5dGVzIDw9
IGJsb2NrLT5zaXplKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
c2hyaW5rIHRoZSBhbGxvY2F0aW9uIGlmIGJ5dGVzIHdlbnQgYmVsb3cgdGhlIGJsb2NrIHNpemUu
Ci0gICAgICAgIC8vIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlIHRoYXQgb3VyIGFjY291bnRp
bmcgb2YgaG93IG11Y2ggbWVtb3J5IHdlIGFyZSBhY3R1YWxseSB1c2luZwotICAgICAgICAvLyBp
cyBjb3JyZWN0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ0NzQ5Ci0gICAgICAgIGJ5dGVzID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgbV9o
ZWFwLm1fc3RvcmFnZVNwYWNlLnBpbihibG9jayk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGhlYXAo
KS0+bV9zdG9yYWdlU3BhY2UuY29udGFpbnMoYmxvY2spKTsKLQotICAgIExvY2tIb2xkZXIgbG9j
a2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOwotICAgIC8vIFdlIGFsd2F5cyByZXBvcnQgbGl2
ZSBieXRlcywgZXhjZXB0IGlmIGR1cmluZyBhbiBlZGVuIGNvbGxlY3Rpb24gd2Ugc2VlIGFuIG9s
ZCBvYmplY3QgcG9pbnRpbmcgdG8gYW4KLSAgICAvLyBvbGQgYmFja2luZyBzdG9yZSBhbmQgdGhl
IG9sZCBvYmplY3QgaXMgYmVpbmcgbWFya2VkIGJlY2F1c2Ugb2YgdGhlIHJlbWVtYmVyZWQgc2V0
LiBOb3RlIHRoYXQgaWYgd2UKLSAgICAvLyBhc2sgdGhlIG9iamVjdCBpdHNlbGYsIGl0IHdpbGwg
YWx3YXlzIHRlbGwgdXMgdGhhdCBpdCdzIGFuIG9sZCBibGFjayBvYmplY3QgLSBiZWNhdXNlIGV2
ZW4gZHVyaW5nIGFuCi0gICAgLy8gZWRlbiBjb2xsZWN0aW9uIHdlIGhhdmUgYWxyZWFkeSBpbmRp
Y2F0ZWQgdGhhdCB0aGUgb2JqZWN0IGlzIG9sZC4gVGhhdCdzIHdoeSB3ZSB1c2UgdGhlCi0gICAg
Ly8gU2xvdFZpc2l0b3IncyBjYWNoZSBvZiB0aGUgb2JqZWN0J3Mgb2xkIHN0YXRlLgotICAgIGlm
IChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbgotICAgICAg
ICB8fCAhYmxvY2stPmlzT2xkKCkKLSAgICAgICAgfHwgbV9jdXJyZW50T2JqZWN0Q2VsbFN0YXRl
QmVmb3JlVmlzaXRpbmcgIT0gQ2VsbFN0YXRlOjpPbGRHcmV5KSB7Ci0gICAgICAgIG1fYnl0ZXND
b3BpZWQgKz0gYnl0ZXM7Ci0gICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9ja2VyLCBv
d25lciwgdG9rZW4sIGJ5dGVzKTsKLSAgICB9Ci19Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzKCkKIHsKICAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1w
dHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlz
aW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAog
CiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCi0jaW5jbHVkZSAiQ29weVRva2VuLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFx
dWVSb290U2V0LmgiCkBAIC0xMTEsOCArMTEwLDYgQEAgcHVibGljOgogICAgIC8vIHRoaXMgdGhl
biB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCiAgICAgdm9pZCBtYXJrQXV4
aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwogCi0gICAgdm9pZCBjb3B5TGF0ZXIoSlNDZWxsKiwg
Q29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKLSAgICAKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChzaXplX3QpOwogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICB2b2lk
IHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAy
MDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjcgKzEwMSw4IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT5zdG9yYWdlKCksIHN0ZDo6bWF4KHRoaXNPYmplY3QtPm1fbGVuZ3RoLCB0aGlzT2JqZWN0
LT5tX21pbkNhcGFjaXR5KSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2Fs
bGVlKTsKICAgICAKLSAgICBpZiAodGhpc09iamVjdC0+bV9vdmVycmlkZXMpIHsKLSAgICAgICAg
dmlzaXRvci5jb3B5TGF0ZXIoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVu
dHNPdmVycmlkZXNDb3B5VG9rZW4sCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cy5nZXQoKSwgdGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
RGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogdGhpc0NlbGwsIENvcHlW
aXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgRGlyZWN0QXJndW1lbnRz
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5
VG9rZW4pOwotICAgIAotICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3Zl
cnJpZGVzLmdldCgpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJy
aWRlcykpIHsKLSAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+
KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpKTsK
LSAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5t
X2xlbmd0aCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRCYXJy
aWVyKG5ld092ZXJyaWRlcyk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMs
IHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7Ci0gICAgfQorICAgIGlmICh0aGlzT2JqZWN0
LT5tX292ZXJyaWRlcykKKyAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3Qt
Pm1fb3ZlcnJpZGVzLmdldCgpKTsKIH0KIAogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQpAQCAtMTM3LDggKzExOCw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpv
dmVycmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNh
bGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1Zh
bHVlc0Z1bmN0aW9uKCksIERvbnRFbnVtKTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3RvcmU7
Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgb3Zl
cnJpZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7CisgICAgdm9pZCogYmFja2luZ1N0b3JlID0g
dm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBvdmVycmlkZXNTaXplKCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3Rh
dGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0
aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IERpcmVjdEFyZ3VtZW50c19oCiAjZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCiAKLSNpbmNsdWRl
ICJDb3B5QmFycmllci5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRl
ICJEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCIKICNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgi
CiAKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0
ZWRTaXplKEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCos
IENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5hbExl
bmd0aCgpIGNvbnN0CiAgICAgewpAQCAtMTUwLDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAv
LyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1lbnRzIGFuZCBuZXZl
ciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgIHVpbnQzMl90
IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3RoIGRldGVybWluZXMg
dGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFjdHVhbCBjYXBhY2l0
eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQgdGhpcyB3YXkgdG8g
YmUga2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5QmFycmllcjxib29sPiBtX292ZXJyaWRlczsg
Ly8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIg
YXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIEF1eGlsaWFyeUJhcnJpZXI8
Ym9vbCo+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgs
IGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDYgQEAgc2l6
ZV90IEpTQ2VsbDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbAogICAgIHJldHVybiBjZWxsLT5j
ZWxsU2l6ZSgpOwogfQogCi12b2lkIEpTQ2VsbDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBD
b3B5VmlzaXRvciYsIENvcHlUb2tlbikKLXsKLX0KLQogdm9pZCBKU0NlbGw6OmhlYXBTbmFwc2hv
dChKU0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJikKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEz
OCw2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKik7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNu
YXBzaG90QnVpbGRlciYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288312</attachid>
            <date>2016-09-08 13:20:15 -0700</date>
            <delta_ts>2016-09-08 14:37:42 -0700</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>120789</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTY1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDQxLDkgKzQ0MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9B
bGxvY2F0b3JBdHRyaWJ1dGVzLmNwcAogICAgIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAogICAgIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9Db3BpZWRCbG9jay5jcHAKLSAgICBo
ZWFwL0NvcGllZFNwYWNlLmNwcAotICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9E
ZWZlckdDLmNwcAogICAgIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcAogICAgIGhlYXAvRWRlbkdD
QWN0aXZpdHlDYWxsYmFjay5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAy
MDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCi0jaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQVBJVXRpbHMuaCIKICNpbmNsdWRlICJCdXR0ZXJm
bHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJy
b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MDgsNyArNDA4LDYgQEAKIAkJMEY1ODc0RUUxOTRGRUIxMjAwQUFCMkMxIC8qIERG
R01heUV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTg3NEVDMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggKi87IH07CiAJCTBGNUEx
MjczMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTEyNzExOTJEOUZERjAwODc2NEEzIC8qIERG
R0RvZXNHQy5jcHAgKi87IH07CiAJCTBGNUExMjc0MTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2Vz
R0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUEx
MjcyMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLzsgfTsKLQkJMEY1QTUyRDAxN0FE
RDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1QTUyQ0YxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUE2
MjgzMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAv
KiBGVExWYWx1ZVJhbmdlLmNwcCAqLzsgfTsKIAkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8q
IEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUE2MjgyMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjRBMzMxQzg0
RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNs
b3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC00OTYsNyArNDk1LDYgQEAKIAkJMEY3OTA4NTYxOUEyOTBCMjAwRjYzMTBD
IC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc5MDg1NDE5QTI5MEIyMDBGNjMxMEMgLyogREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAw
N0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5oICovOyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0
NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlC
YXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdDMzlGQjFDOEY2MjkzMDA0ODAx
NTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3QzM5RkExQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCAq
LzsgfTsKIAkJMEY3QzM5RkQxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZD
MUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi87IH07CiAJCTBGN0Mz
OUZGMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZFMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdP
cEluZm8uaCAqLzsgfTsKQEAgLTYyNiw3ICs2MjQsNiBAQAogCQkwRkI3RjM5QzE1RUQ4RTQ2MDBG
MTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9y
YWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJl
amVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MjE1RUQ4RTM4
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQkFERjU0MUJEMUY0QjgwMEUwNzNDMSAvKiBD
b3BpZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJBREY1MzFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwICovOyB9Owog
CQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8q
IENvZGVPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTk2NSwxMyArMTk2Miw4IEBACiAJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMEJBOTJDMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4
NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIxODFGQzIxOEE5NDhGQjAwMjVB
MjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5t
bSAqLzsgfTsKLQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxOEQxM0YxNjU1
Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5
VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwotCQlD
MjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE0
MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4
OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAq
LzsgfTsKIAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAy
RkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBD
b3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9Owog
CQlDMjREMzFFMjE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0RDMxRTAxNjFDRDY5NTAw
MkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLzsgfTsKIAkJQzI0RDMxRTMxNjFDRDY5NTAw
MkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjREMzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3Rp
Y3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlD
MjVENzA5QjE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjVENzA5OTE2REU5OUY0MDBGQ0E2
QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gKi87IH07CkBAIC0xOTkwLDE3ICsxOTgyLDEyIEBACiAJ
CUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzQxNERBMDQwQzAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi87IH07CiAJCUMyQzBGN0NEMTdCQkZDNUIw
MDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDMEY3Q0IxN0JCRkM1QjAwNDY0RkU0IC8qIERG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi87IH07CiAJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZF
NCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVk
VHJhbnNpdGlvbnMuaCAqLzsgfTsKLQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGll
ZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyQzhEMDMw
MTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGll
ZEJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUJGMTZFMTVB
ODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi87IH07CiAJCUMyQ0YzOUMyMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8q
IEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkU1MjZCRDE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3Bw
ICovOyB9OwogCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQzE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBQTNG
ODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyog
Q29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDEx
NkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07Ci0JCUMyRkM5QkQzMTY2NDRERkIwMDgxMEQz
MyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJGQ0FFMTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcCAqLzsgfTsKQEAgLTI2NTQsNyArMjY0MSw2IEBACiAJCTBGNTg3NEVDMTk0RkVCMTIwMEFB
QjJDMSAvKiBERkdNYXlFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R01heUV4aXQuaDsgcGF0aCA9IGRmZy9ERkdNYXlFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9lc0dDLmNwcDsgcGF0aCA9IGRm
Zy9ERkdEb2VzR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVBMTI3MjE5
MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0RvZXNHQy5oOyBwYXRoID0gZGZnL0RGR0RvZXNHQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlUb2tlbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVS
YW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJh
bmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRB
MzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI3NDIsNyArMjcyOCw2IEBACiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3OTA4NTMxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzkwODU0MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGN0MxMUFDMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5QmFycmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDMzlGQTFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhw
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlZ0V4cE9iamVjdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3QzM5RkUxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdPcEluZm8uaDsgcGF0aCA9IGRmZy9ERkdPcEluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4ODEsNyArMjg2Niw2IEBACiAJCTBGQjdGMzkw
MTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCQURGNTMxQkQxRjRCODAwRTA3M0MxIC8qIENv
cGllZEJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcGll
ZEJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2lu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTAsMTIgKzQyMzQsNyBAQAogCQlDMjExQjU3NDE3
NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBUElDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMTgxRkMwMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRXhwb3J0VGVzdHMuaDsgcGF0aCA9
IEFQSS90ZXN0cy9KU0V4cG9ydFRlc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMTgxRkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gSlNFeHBvcnRUZXN0cy5tbTsgcGF0aCA9IEFQ
SS90ZXN0cy9KU0V4cG9ydFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
MjE4RDEzRjE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlXb3JrTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDMjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIyMzlEMTQxNjI2MkJERDAwNUFDNUZEIC8q
IENvcHlWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3B5VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5
NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcGllZFNwYWNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBT
dGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBT
dGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTExNjFD
RDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhlYXBTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyNUQ3MDk5MTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTTWFuYWdlZFZhbHVlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI3NiwxNyArNDI1NSwxMiBAQAogCQlDMkI5MTZDNDE0
REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyog
REZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkM4RDAyQjE0QTNDNkIyMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcGllZFNwYWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
MkM4RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQVBJV3JhcHBlck9iamVj
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2
OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0FQSVdyYXBwZXJPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVGltZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNw
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZFNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVk
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQwMTZCQUVF
RTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTI5MCwxOSArNTI2NCw2IEBACiAJCQkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAv
KiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJC
IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCi0JCQkJQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5
IC8qIENvcGllZEFsbG9jYXRvci5oICovLAotCQkJCTBGQkFERjUzMUJEMUY0QjgwMEUwNzNDMSAv
KiBDb3BpZWRCbG9jay5jcHAgKi8sCi0JCQkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8qIENv
cGllZEJsb2NrLmggKi8sCi0JCQkJQzJGQzlCRDIxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJs
b2NrSW5saW5lcy5oICovLAotCQkJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRT
cGFjZS5jcHAgKi8sCi0JCQkJQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNwYWNl
LmggKi8sCi0JCQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oICovLAotCQkJCTBGN0MxMUFDMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oICov
LAotCQkJCTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLywKLQkJCQlD
MjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovLAotCQkJCUMyMjM5
RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovLAotCQkJCUMyMjM5RDE0MTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLywKLQkJCQlDMjE4RDEzRjE2
NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggKi8sCiAJCQkJMkE3QTU4RUUxODA4QTRD
NDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1
NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMEY5NjMwMzcxRDQxOTJDMzAwNTYwOUQ5IC8qIERlc3Ry
dWN0aW9uTW9kZS5jcHAgKi8sCkBAIC03MzkzLDE3ICs3MzU0LDcgQEAKIAkJCQlCQzE4QzNGNjBF
MTZGNUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3
RDIzRjIxODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2Zp
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29w
aWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhF
NjUgLyogQ29waWVkQmxvY2suaCBpbiBIZWFkZXJzICovLAotCQkJCUMyRkM5QkQzMTY2NDRERkIw
MDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyRUFB
M0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDg2QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5
cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyMThEMTQwMTY1NUNG
RDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkY0
MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MDQ1LDExICs4OTk2LDggQEAKIAkJCQkxNDI4MDgyRTEwN0VDMDU3
MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNG
MTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0RjMgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkJBREY1NDFCRDFGNEI4MDBFMDczQzEgLyogQ29w
aWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGQzg0QjMxRDFEREFEOTAwNkI1QzQ2
IC8qIERlYnVnZ2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzI0MDMwNTUxNEI0
MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4
MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBCODY4QkIgLyogRGF0
YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0Yg
LyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMjA1NjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSGVhcFV0aWwuaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
CShub25leGlzdGVudCkKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb3BpZWRBbGxvY2F0b3JfaAotI2RlZmlu
ZSBDb3BpZWRBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKLSNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvcGll
ZEFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgQ29waWVkQWxsb2NhdG9yKCk7Ci0gICAgCi0gICAg
Ym9vbCBmYXN0UGF0aFNob3VsZFN1Y2NlZWQoc2l6ZV90IGJ5dGVzKSBjb25zdDsKLSAgICBDaGVj
a2VkQm9vbGVhbiB0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpOwotICAg
IENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhzaXplX3QgYnl0ZXMsIHZv
aWQqKiBvdXRQdHIpOwotICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGUodm9pZCAqb2xk
UHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcyk7Ci0gICAgdm9pZCogZm9yY2VB
bGxvY2F0ZShzaXplX3QgYnl0ZXMpOwotICAgIENvcGllZEJsb2NrKiByZXNldEN1cnJlbnRCbG9j
aygpOwotICAgIHZvaWQgc2V0Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKik7Ci0gICAgc2l6ZV90
IGN1cnJlbnRDYXBhY2l0eSgpOwotICAgIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9jdXJyZW50QmxvY2s7IH0KLQotICAgIENvcGllZEJsb2NrKiBjdXJyZW50QmxvY2so
KSB7IHJldHVybiBtX2N1cnJlbnRCbG9jazsgfQotCi0gICAgLy8gWWVzLCB0aGVzZSBhcmUgcHVi
bGljLiBObywgdGhhdCBkb2Vzbid0IG1lYW4geW91IGNhbiBwbGF5IHdpdGggdGhlbS4KLSAgICAv
LyBJZiBJIGhhZCBtYWRlIHRoZW0gcHJpdmF0ZSB0aGVuIEknZCBoYXZlIHRvIGxpc3Qgb2ZmIGFs
bCBvZiB0aGUgSklUCi0gICAgLy8gY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGVudGl0
bGVkIHRvIG1vZGlmeSB0aGVzZSBkaXJlY3RseSwgYW5kCi0gICAgLy8gdGhhdCB3b3VsZCBoYXZl
IGJlZW4gZ3Jvc3MuCi0gICAgc2l6ZV90IG1fY3VycmVudFJlbWFpbmluZzsKLSAgICBjaGFyKiBt
X2N1cnJlbnRQYXlsb2FkRW5kOwotICAgIENvcGllZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsgCi19
OwotCi1pbmxpbmUgQ29waWVkQWxsb2NhdG9yOjpDb3BpZWRBbGxvY2F0b3IoKQotICAgIDogbV9j
dXJyZW50UmVtYWluaW5nKDApCi0gICAgLCBtX2N1cnJlbnRQYXlsb2FkRW5kKDApCi0gICAgLCBt
X2N1cnJlbnRCbG9jaygwKQotewotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRBbGxvY2F0b3I6OmZh
c3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlz
OEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ5dGVzKSkpOwotICAgIAotICAg
IHJldHVybiBieXRlcyA8PSBtX2N1cnJlbnRSZW1haW5pbmc7Ci19Ci0KLWlubGluZSBDaGVja2Vk
Qm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoq
IG91dFB0cikKLXsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYnl0ZXMpKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gaW4gYSBn
cmF0dWl0b3VzbHkgbG93LWxldmVsIG1hbm5lciwgaW4gb3JkZXIgdG8KLSAgICAvLyBzZXJ2ZSBh
cyBhIGtpbmQgb2YgdGVtcGxhdGUgZm9yIHdoYXQgdGhlIEpJVCB3b3VsZCBkby4gTm90ZSB0aGF0
IHRoZQotICAgIC8vIHdheSBpdCdzIHdyaXR0ZW4gaXQgb3VnaHQgdG8gb25seSByZXF1aXJlIG9u
ZSByZWdpc3Rlciwgd2hpY2ggZG91YmxlcwotICAgIC8vIGFzIHRoZSByZXN1bHQsIHByb3ZpZGVk
IHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgYSBtaW5pbWFsIGFtb3VudCBvZgotICAgIC8vIGNvbnRy
b2wgZmxvdyBzaW1wbGlmaWNhdGlvbiBhbmQgdGhlIGJ5dGVzIGFyZ3VtZW50IGlzIGEgY29uc3Rh
bnQuCi0gICAgCi0gICAgc2l6ZV90IGN1cnJlbnRSZW1haW5pbmcgPSBtX2N1cnJlbnRSZW1haW5p
bmc7Ci0gICAgaWYgKGJ5dGVzID4gY3VycmVudFJlbWFpbmluZykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGN1cnJlbnRSZW1haW5pbmcgLT0gYnl0ZXM7Ci0gICAgbV9jdXJyZW50UmVtYWlu
aW5nID0gY3VycmVudFJlbWFpbmluZzsKLSAgICAqb3V0UHRyID0gbV9jdXJyZW50UGF5bG9hZEVu
ZCAtIGN1cnJlbnRSZW1haW5pbmcgLSBieXRlczsKLQotICAgIEFTU0VSVChpczhCeXRlQWxpZ25l
ZCgqb3V0UHRyKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIENoZWNrZWRCb29s
ZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRl
cywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBpZiAoIXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVC
eXRlc0R1cmluZ0NvcHlpbmcoYnl0ZXMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUg
Q2hlY2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlSZWFsbG9jYXRlKAotICAgIHZvaWQq
IG9sZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpCi17Ci0gICAgQVNTRVJU
KGlzOEJ5dGVBbGlnbmVkKG9sZFB0cikpOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihvbGRCeXRlcykpKTsKLSAgICBBU1NFUlQoaXM4Qnl0ZUFsaWdu
ZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3Qnl0ZXMpKSk7Ci0gICAgCi0gICAgQVNTRVJU
KG5ld0J5dGVzID4gb2xkQnl0ZXMpOwotICAgIAotICAgIHNpemVfdCBhZGRpdGlvbmFsQnl0ZXMg
PSBuZXdCeXRlcyAtIG9sZEJ5dGVzOwotICAgIAotICAgIHNpemVfdCBjdXJyZW50UmVtYWluaW5n
ID0gbV9jdXJyZW50UmVtYWluaW5nOwotICAgIGlmIChtX2N1cnJlbnRQYXlsb2FkRW5kIC0gY3Vy
cmVudFJlbWFpbmluZyAtIG9sZEJ5dGVzICE9IHN0YXRpY19jYXN0PGNoYXIqPihvbGRQdHIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGFkZGl0aW9uYWxCeXRlcyA+IGN1
cnJlbnRSZW1haW5pbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX2N1cnJl
bnRSZW1haW5pbmcgPSBjdXJyZW50UmVtYWluaW5nIC0gYWRkaXRpb25hbEJ5dGVzOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCogQ29waWVkQWxsb2NhdG9yOjpmb3Jj
ZUFsbG9jYXRlKHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBOZWVk
ZWQgYmVjYXVzZSBjb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGlzIHdpbGwgYWx3YXlzIGJlIGFz
c2lnbmVkLgotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSB0cnlBbGxvY2F0ZShieXRl
cywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRC
bG9jaygpCi17Ci0gICAgQ29waWVkQmxvY2sqIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrOwotICAg
IGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0LT5tX3JlbWFpbmluZyA9IG1fY3VycmVudFJl
bWFpbmluZzsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgICAgICBtX2N1cnJlbnRS
ZW1haW5pbmcgPSAwOwotICAgICAgICBtX2N1cnJlbnRQYXlsb2FkRW5kID0gMDsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpzZXRD
dXJyZW50QmxvY2soQ29waWVkQmxvY2sqIG5ld0Jsb2NrKQotewotICAgIEFTU0VSVCghbV9jdXJy
ZW50QmxvY2spOwotICAgIG1fY3VycmVudEJsb2NrID0gbmV3QmxvY2s7Ci0gICAgQVNTRVJUKG5l
d0Jsb2NrKTsKLSAgICBtX2N1cnJlbnRSZW1haW5pbmcgPSBuZXdCbG9jay0+bV9yZW1haW5pbmc7
Ci0gICAgbV9jdXJyZW50UGF5bG9hZEVuZCA9IG5ld0Jsb2NrLT5wYXlsb2FkRW5kKCk7Ci19Ci0K
LWlubGluZSBzaXplX3QgQ29waWVkQWxsb2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkoKQotewotICAg
IGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+Y2FwYWNpdHkoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmNwcAkocmV2
aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
Y3BwCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Q29waWVkQmxvY2suaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLXN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVCYWxhbmNlID0gZmFsc2U7Ci1zdGF0aWMg
c2l6ZV90IGJhbGFuY2U7Ci0KLUNvcGllZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJv
RmlsbChIZWFwJiBoZWFwLCBzaXplX3QgY2FwYWNpdHkpCi17Ci0gICAgaWYgKGNvbXB1dGVCYWxh
bmNlKSB7Ci0gICAgICAgIGJhbGFuY2UrKzsKLSAgICAgICAgaWYgKCEoYmFsYW5jZSAlIDEwKSkK
LSAgICAgICAgICAgIGRhdGFMb2coIkNvcGllZEJsb2NrIEJhbGFuY2U6ICIsIGJhbGFuY2UsICJc
biIpOwotICAgIH0KLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGZhc3RB
bGlnbmVkTWFsbG9jKENvcGllZEJsb2NrOjpibG9ja1NpemUsIGNhcGFjaXR5KSkgQ29waWVkQmxv
Y2soY2FwYWNpdHkpOwotICAgIGhlYXAuZGlkQWxsb2NhdGVCbG9jayhjYXBhY2l0eSk7Ci0gICAg
cmV0dXJuIGJsb2NrOwotfQotCi12b2lkIENvcGllZEJsb2NrOjpkZXN0cm95KEhlYXAmIGhlYXAs
IENvcGllZEJsb2NrKiBjb3BpZWRCbG9jaykKLXsKLSAgICBpZiAoY29tcHV0ZUJhbGFuY2UpIHsK
LSAgICAgICAgYmFsYW5jZS0tOwotICAgICAgICBpZiAoIShiYWxhbmNlICUgMTApKQotICAgICAg
ICAgICAgZGF0YUxvZygiQ29waWVkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwgIlxuIik7Ci0g
ICAgfQotICAgIHNpemVfdCBjYXBhY2l0eSA9IGNvcGllZEJsb2NrLT5jYXBhY2l0eSgpOwotICAg
IGNvcGllZEJsb2NrLT5+Q29waWVkQmxvY2soKTsKLSAgICBmYXN0QWxpZ25lZEZyZWUoY29waWVk
QmxvY2spOwotICAgIGhlYXAuZGlkRnJlZUJsb2NrKGNhcGFjaXR5KTsKLX0KLQotQ29waWVkQmxv
Y2sqIENvcGllZEJsb2NrOjpjcmVhdGUoSGVhcCYgaGVhcCwgc2l6ZV90IGNhcGFjaXR5KQotewot
ICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IGNyZWF0ZU5vWmVyb0ZpbGwoaGVhcCwgY2FwYWNp
dHkpOwotICAgIG5ld0Jsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKLSAgICByZXR1cm4gbmV3
QmxvY2s7Ci19Ci0KLXZvaWQgQ29waWVkQmxvY2s6Onplcm9GaWxsV2lsZGVybmVzcygpCi17Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtZW1zZXQod2lsZGVybmVzcygpLCAwLCB3aWxkZXJuZXNz
U2l6ZSgpKTsKLSNlbHNlCi0gICAgSlNWYWx1ZSBlbXB0eVZhbHVlOwotICAgIEpTVmFsdWUqIGxp
bWl0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHdpbGRlcm5lc3NFbmQoKSk7Ci0g
ICAgZm9yIChKU1ZhbHVlKiBjdXJyZW50VmFsdWUgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1Zh
bHVlKj4od2lsZGVybmVzcygpKTsgY3VycmVudFZhbHVlIDwgbGltaXQ7IGN1cnJlbnRWYWx1ZSsr
KQotICAgICAgICAqY3VycmVudFZhbHVlID0gZW1wdHlWYWx1ZTsKLSNlbmRpZgotfQotCi1Db3Bp
ZWRCbG9jazo6Q29waWVkQmxvY2soc2l6ZV90IGNhcGFjaXR5KQotICAgIDogRG91Ymx5TGlua2Vk
TGlzdE5vZGU8Q29waWVkQmxvY2s+KCkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAg
LCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKLSAgICAsIG1faXNQaW5uZWQoZmFsc2Up
Ci0gICAgLCBtX2lzT2xkKGZhbHNlKQotICAgICwgbV9saXZlQnl0ZXMoMCkKLSNpZm5kZWYgTkRF
QlVHCi0gICAgLCBtX2xpdmVPYmplY3RzKDApCi0jZW5kaWYKLXsKLSAgICBBU1NFUlQoaXM4Qnl0
ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZW1haW5pbmcpKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRCbG9jay5oCShub25leGlzdGVudCkKQEAgLTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb3BpZWRC
bG9ja19oCi0jZGVmaW5lIENvcGllZEJsb2NrX2gKLQotI2luY2x1ZGUgIkNvcHlXb3JrTGlzdC5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29waWVkU3BhY2U7Ci0KLWNsYXNzIENvcGllZEJsb2NrIDog
cHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPENvcGllZEJsb2NrPiB7Ci0gICAgZnJpZW5kIGNs
YXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Q29waWVkQmxvY2s+OwotICAgIGZyaWVuZCBj
bGFzcyBDb3BpZWRTcGFjZTsKLSAgICBmcmllbmQgY2xhc3MgQ29waWVkQWxsb2NhdG9yOwotcHVi
bGljOgotICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRlKEhlYXAmLCBzaXplX3QgPSBibG9j
a1NpemUpOwotICAgIHN0YXRpYyBDb3BpZWRCbG9jayogY3JlYXRlTm9aZXJvRmlsbChIZWFwJiwg
c2l6ZV90ID0gYmxvY2tTaXplKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhlYXAmLCBDb3Bp
ZWRCbG9jayopOwotCi0gICAgdm9pZCBwaW4oKTsKLSAgICBib29sIGlzUGlubmVkKCk7Ci0KLSAg
ICBib29sIGlzT2xkKCk7Ci0gICAgYm9vbCBpc092ZXJzaXplKCk7Ci0gICAgdm9pZCBkaWRQcm9t
b3RlKCk7Ci0KLSAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKLSAgICB2b2lkIHJlcG9ydExpdmVC
eXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7Ci0gICAgdm9p
ZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKLSAgICB2b2lkIGRpZFN1
cnZpdmVHQygpOwotICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7Ci0gICAgYm9v
bCBzaG91bGRFdmFjdWF0ZSgpOwotICAgIGJvb2wgY2FuQmVSZWN5Y2xlZCgpOwotCi0gICAgLy8g
VGhlIHBheWxvYWQgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBpcyB1c2FibGUgZm9y
IGFsbG9jYXRpb25zLgotICAgIGNoYXIqIHBheWxvYWQoKTsKLSAgICBjaGFyKiBwYXlsb2FkRW5k
KCk7Ci0gICAgc2l6ZV90IHBheWxvYWRDYXBhY2l0eSgpOwotICAgIAotICAgIC8vIFRoZSBkYXRh
IGlzIHRoZSByZWdpb24gb2YgdGhlIGJsb2NrIHRoYXQgaGFzIGJlZW4gdXNlZCBmb3IgYWxsb2Nh
dGlvbnMuCi0gICAgY2hhciogZGF0YSgpOwotICAgIGNoYXIqIGRhdGFFbmQoKTsKLSAgICBzaXpl
X3QgZGF0YVNpemUoKTsKLSAgICAKLSAgICAvLyBUaGUgd2lsZGVybmVzcyBpcyB0aGUgcmVnaW9u
IG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2NhdGlvbnMKLSAgICAvLyBidXQg
aGFzIG5vdCBiZWVuIHNvIHVzZWQuCi0gICAgY2hhciogd2lsZGVybmVzcygpOwotICAgIGNoYXIq
IHdpbGRlcm5lc3NFbmQoKTsKLSAgICBzaXplX3Qgd2lsZGVybmVzc1NpemUoKTsKLSAgICAKLSAg
ICBzaXplX3Qgc2l6ZSgpOwotICAgIHNpemVfdCBjYXBhY2l0eSgpOwotCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBibG9ja1NpemUgPSA2NCAqIEtCOwotCi0gICAgYm9vbCBoYXNXb3JrTGlzdCgp
OwotICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QoKTsKLSAgICBMb2NrJiB3b3JrTGlzdExvY2so
KSB7IHJldHVybiBtX3dvcmtMaXN0TG9jazsgfQotCi1wcml2YXRlOgotICAgIENvcGllZEJsb2Nr
KHNpemVfdCk7Ci0gICAgdm9pZCB6ZXJvRmlsbFdpbGRlcm5lc3MoKTsgLy8gQ2FuIGJlIGNhbGxl
ZCBhdCBhbnkgdGltZSB0byB6ZXJvLWZpbGwgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2suCi0KLSAg
ICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIENvcGllZEJsb2NrKiBtX3ByZXY7Ci0g
ICAgQ29waWVkQmxvY2sqIG1fbmV4dDsKLQotICAgIHNpemVfdCBtX2NhcGFjaXR5OwotCi0gICAg
TG9jayBtX3dvcmtMaXN0TG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29weVdvcmtMaXN0PiBt
X3dvcmtMaXN0OwotCi0gICAgc2l6ZV90IG1fcmVtYWluaW5nOwotICAgIGJvb2wgbV9pc1Bpbm5l
ZCA6IDE7Ci0gICAgYm9vbCBtX2lzT2xkIDogMTsKLSAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgdW5zaWduZWQgbV9saXZlT2JqZWN0czsKLSNlbmRpZgotfTsK
LQotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFN1cnZpdmVHQygpCi17Ci0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIEFTU0VSVChpc09sZCgpKTsKLSAgICBtX2xpdmVCeXRlcyA9IDA7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fbGl2ZU9iamVjdHMgPSAwOwotI2VuZGlmCi0gICAgbV9p
c1Bpbm5lZCA9IGZhbHNlOwotICAgIGlmIChtX3dvcmtMaXN0KQotICAgICAgICBtX3dvcmtMaXN0
ID0gbnVsbHB0cjsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0
ZXModW5zaWduZWQgYnl0ZXMpCi17Ci0gICAgQVNTRVJUKG1fbGl2ZUJ5dGVzID49IGJ5dGVzKTsK
LSAgICBBU1NFUlQobV9saXZlT2JqZWN0cyk7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IG1fbGl2ZUJ5dGVzIC09IGJ5dGVzOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2xpdmVPYmplY3Rz
LS07Ci0jZW5kaWYKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLWlubGluZSBib29sIENv
cGllZEJsb2NrOjpjYW5CZVJlY3ljbGVkKCkKLXsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgcmV0dXJuICFtX2xpdmVCeXRlczsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNo
b3VsZEV2YWN1YXRlKCkKLXsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9saXZlQnl0ZXMpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihwYXls
b2FkQ2FwYWNpdHkoKSkgPD0gT3B0aW9uczo6bWluQ29waWVkQmxvY2tVdGlsaXphdGlvbigpOwot
fQotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cGluKCkKLXsKLSAgICBtX2lzUGlubmVkID0g
dHJ1ZTsKLSAgICBpZiAobV93b3JrTGlzdCkKLSAgICAgICAgbV93b3JrTGlzdCA9IG51bGxwdHI7
Ci19Ci0KLWlubGluZSBib29sIENvcGllZEJsb2NrOjppc1Bpbm5lZCgpCi17Ci0gICAgcmV0dXJu
IG1faXNQaW5uZWQ7Ci19Ci0KLWlubGluZSBib29sIENvcGllZEJsb2NrOjppc09sZCgpCi17Ci0g
ICAgcmV0dXJuIG1faXNPbGQ7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRQcm9t
b3RlKCkKLXsKLSAgICBtX2lzT2xkID0gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkQmxv
Y2s6OmlzT3ZlcnNpemUoKQotewotICAgIHJldHVybiBtX2NhcGFjaXR5ICE9IGJsb2NrU2l6ZTsK
LX0KLQotaW5saW5lIHVuc2lnbmVkIENvcGllZEJsb2NrOjpsaXZlQnl0ZXMoKQotewotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gbV9saXZlQnl0ZXM7Ci19Ci0KLWlubGluZSBj
aGFyKiBDb3BpZWRCbG9jazo6cGF5bG9hZCgpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihkb3VibGUp
PihzaXplb2YoQ29waWVkQmxvY2spKTsKLX0KLQotaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpw
YXlsb2FkRW5kKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykg
KyBtX2NhcGFjaXR5OwotfQotCi1pbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpwYXlsb2FkQ2Fw
YWNpdHkoKQotewotICAgIHJldHVybiBwYXlsb2FkRW5kKCkgLSBwYXlsb2FkKCk7Ci19Ci0KLWlu
bGluZSBjaGFyKiBDb3BpZWRCbG9jazo6ZGF0YSgpCi17Ci0gICAgcmV0dXJuIHBheWxvYWQoKTsK
LX0KLQotaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpkYXRhRW5kKCkKLXsKLSAgICByZXR1cm4g
cGF5bG9hZEVuZCgpIC0gbV9yZW1haW5pbmc7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQmxv
Y2s6OmRhdGFTaXplKCkKLXsKLSAgICByZXR1cm4gZGF0YUVuZCgpIC0gZGF0YSgpOwotfQotCi1p
bmxpbmUgY2hhciogQ29waWVkQmxvY2s6OndpbGRlcm5lc3MoKQotewotICAgIHJldHVybiBkYXRh
RW5kKCk7Ci19Ci0KLWlubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6d2lsZGVybmVzc0VuZCgpCi17
Ci0gICAgcmV0dXJuIHBheWxvYWRFbmQoKTsKLX0KLQotaW5saW5lIHNpemVfdCBDb3BpZWRCbG9j
azo6d2lsZGVybmVzc1NpemUoKQotewotICAgIHJldHVybiB3aWxkZXJuZXNzRW5kKCkgLSB3aWxk
ZXJuZXNzKCk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OnNpemUoKQotewotICAg
IHJldHVybiBkYXRhU2l6ZSgpOwotfQotCi1pbmxpbmUgc2l6ZV90IENvcGllZEJsb2NrOjpjYXBh
Y2l0eSgpCi17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHk7Ci19Ci0KLWlubGluZSBib29sIENvcGll
ZEJsb2NrOjpoYXNXb3JrTGlzdCgpCi17Ci0gICAgcmV0dXJuICEhbV93b3JrTGlzdDsKLX0KLQot
aW5saW5lIENvcHlXb3JrTGlzdCYgQ29waWVkQmxvY2s6OndvcmtMaXN0KCkKLXsKLSAgICByZXR1
cm4gKm1fd29ya0xpc3Q7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjpjaGVja0NvbnNp
c3RlbmN5KCkKLXsKLSAgICBBU1NFUlQoISFtX2xpdmVCeXRlcyA9PSAhIW1fbGl2ZU9iamVjdHMp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjA1NjU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBDb3BpZWRCbG9ja0lubGluZXNfaAotI2RlZmluZSBDb3BpZWRCbG9ja0lubGluZXNfaAot
Ci0jaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tI
b2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQot
ewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9saXZlT2Jq
ZWN0cysrOwotI2VuZGlmCi0gICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7Ci0gICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBtX2NhcGFjaXR5KTsKLQotICAg
IGlmIChpc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3VsZEV2YWN1
YXRlKCkpIHsKLSAgICAgICAgcGluKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fd29ya0xpc3QpCi0gICAgICAgIG1fd29ya0xpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
cHlXb3JrTGlzdD4oKTsKLQotICAgIG1fd29ya0xpc3QtPmFwcGVuZChDb3B5V29ya2xpc3RJdGVt
KG93bmVyLCB0b2tlbikpOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2
ZUJ5dGVzRHVyaW5nQ29weWluZyh1bnNpZ25lZCBieXRlcykKLXsKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgLy8gVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgbG9ja2VkIGJlY2F1c2UgdGhl
IHRocmVhZCB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gb3ducyB0aGUgY3VycmVudCBibG9jay4K
LSAgICBtX2lzT2xkID0gdHJ1ZTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9saXZlT2JqZWN0cysr
OwotI2VuZGlmCi0gICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7Ci0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6YmxvY2tTaXplKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDb3BpZWRCbG9ja0lubGluZXNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2
aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsMzUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNvcGllZFNwYWNlLmgiCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1Db3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKLSAg
ICA6IG1faGVhcChoZWFwKQotICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKLSAgICAsIG1f
c2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCi0gICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDAp
Ci0gICAgLCBtX2J5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0aW9uKDApCi17
Ci19Ci0KLUNvcGllZFNwYWNlOjp+Q29waWVkU3BhY2UoKQotewotICAgIHdoaWxlICghbV9vbGRH
ZW4udG9TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVh
cCgpLCBtX29sZEdlbi50b1NwYWNlLT5yZW1vdmVIZWFkKCkpOwotCi0gICAgd2hpbGUgKCFtX29s
ZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgQ29waWVkQmxvY2s6OmRlc3Ryb3ko
KmhlYXAoKSwgbV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCkpOwotCi0gICAgd2hpbGUg
KCFtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCi0gICAgICAgIENvcGllZEJsb2Nr
OjpkZXN0cm95KCpoZWFwKCksIG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZUhlYWQoKSk7
Ci0KLSAgICB3aGlsZSAoIW1fbmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgQ29w
aWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgbV9uZXdHZW4udG9TcGFjZS0+cmVtb3ZlSGVhZCgp
KTsKLQotICAgIHdoaWxlICghbV9uZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpCi0gICAgICAg
IENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIG1fbmV3R2VuLmZyb21TcGFjZS0+cmVtb3Zl
SGVhZCgpKTsKLQotICAgIHdoaWxlICghbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgp
KQotICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBtX25ld0dlbi5vdmVyc2l6
ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpOwotCi0gICAgQVNTRVJUKG1fb2xkR2VuLnRvU3BhY2UtPmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQobV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
bV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNw
YWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0Vt
cHR5KCkpOwotfQotCi12b2lkIENvcGllZFNwYWNlOjppbml0KCkKLXsKLSAgICBtX29sZEdlbi50
b1NwYWNlID0gJm1fb2xkR2VuLmJsb2NrczE7Ci0gICAgbV9vbGRHZW4uZnJvbVNwYWNlID0gJm1f
b2xkR2VuLmJsb2NrczI7Ci0gICAgCi0gICAgbV9uZXdHZW4udG9TcGFjZSA9ICZtX25ld0dlbi5i
bG9ja3MxOwotICAgIG1fbmV3R2VuLmZyb21TcGFjZSA9ICZtX25ld0dlbi5ibG9ja3MyOwotCi0g
ICAgYWxsb2NhdGVCbG9jaygpOwotfSAgIAotCi1DaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6
dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCi17Ci0gICAg
aWYgKGlzT3ZlcnNpemUoYnl0ZXMpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVPdmVyc2l6
ZShieXRlcywgb3V0UHRyKTsKLSAgICAKLSAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50
VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fYWxs
b2NhdG9yLmN1cnJlbnRDYXBhY2l0eSgpKTsKLQotICAgIGFsbG9jYXRlQmxvY2soKTsKLQotICAg
ICpvdXRQdHIgPSBtX2FsbG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNp
emUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQotewotICAgIEFTU0VSVChpc092ZXJzaXpl
KGJ5dGVzKSk7Ci0gICAgCi0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNy
ZWF0ZSgqbV9oZWFwLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKGRvdWJsZSk+KHNp
emVvZihDb3BpZWRCbG9jaykgKyBieXRlcykpOwotICAgIG1fbmV3R2VuLm92ZXJzaXplQmxvY2tz
LnB1c2goYmxvY2spOwotICAgIG1fbmV3R2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9j
YXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwotICAgIEFTU0VS
VCghYmxvY2stPmlzT2xkKCkpOwotICAgIAotICAgIENvcGllZEFsbG9jYXRvciBhbGxvY2F0b3I7
Ci0gICAgYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7Ci0gICAgKm91dFB0ciA9IGFs
bG9jYXRvci5mb3JjZUFsbG9jYXRlKGJ5dGVzKTsKLSAgICBhbGxvY2F0b3IucmVzZXRDdXJyZW50
QmxvY2soKTsKLQotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUoYmxvY2stPmNhcGFjaXR5KCkpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlS
ZWFsbG9jYXRlKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLXsK
LSAgICBpZiAob2xkU2l6ZSA+PSBuZXdTaXplKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOwotICAgIEFTU0VSVCghbV9oZWFwLT52bSgpLT5pc0lu
aXRpYWxpemluZ09iamVjdCgpKTsKLSAgICAKLSAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9y
KG9sZFB0ciktPmlzT3ZlcnNpemUoKSB8fCBpc092ZXJzaXplKG5ld1NpemUpKQotICAgICAgICBy
ZXR1cm4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAg
Ci0gICAgaWYgKG1fYWxsb2NhdG9yLnRyeVJlYWxsb2NhdGUob2xkUHRyLCBvbGRTaXplLCBuZXdT
aXplKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2b2lkKiByZXN1bHQgPSAwOwotICAg
IGlmICghdHJ5QWxsb2NhdGUobmV3U2l6ZSwgJnJlc3VsdCkpIHsKLSAgICAgICAgKnB0ciA9IDA7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWVtY3B5KHJlc3VsdCwgb2xkUHRy
LCBvbGRTaXplKTsKLSAgICAqcHRyID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVlOwotfQotCi1D
aGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiBw
dHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLXsKLSAgICBBU1NFUlQoaXNPdmVy
c2l6ZShvbGRTaXplKSB8fCBpc092ZXJzaXplKG5ld1NpemUpKTsKLSAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOwotCi0gICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSAgICAKLSAgICB2b2lk
KiBuZXdQdHIgPSAwOwotICAgIGlmICghdHJ5QWxsb2NhdGVPdmVyc2l6ZShuZXdTaXplLCAmbmV3
UHRyKSkgewotICAgICAgICAqcHRyID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwgb2xkU2l6ZSk7Ci0KLSAgICBDb3BpZWRCbG9j
ayogb2xkQmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKLSAgICBpZiAob2xk
QmxvY2stPmlzT3ZlcnNpemUoKSkgewotICAgICAgICAvLyBGSVhNRTogRWFnZXJseSBkZWFsbG9j
YXRpbmcgdGhlIG9sZCBzcGFjZSBibG9jayBwcm9iYWJseSBidXlzIG1vcmUgY29uZnVzaW9uIHRo
YW4KLSAgICAgICAgLy8gdmFsdWUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDQ3NTAKLSAgICAgICAgaWYgKG9sZEJsb2NrLT5pc09sZCgpKSB7
Ci0gICAgICAgICAgICBtX2J5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0aW9u
ICs9IG9sZEJsb2NrLT5zaXplKCk7Ci0gICAgICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nr
cy5yZW1vdmUob2xkQmxvY2spOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fbmV3R2Vu
Lm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7Ci0gICAgICAgIG1fYmxvY2tTZXQucmVt
b3ZlKG9sZEJsb2NrKTsKLSAgICAgICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgb2xk
QmxvY2spOwotICAgIH0KLSAgICAKLSAgICAqcHRyID0gbmV3UHRyOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiBi
bG9jaywgQ29waWVkQmxvY2sqKiBleGNoYW5nZSkKLXsKLSAgICBBU1NFUlQobV9pbkNvcHlpbmdQ
aGFzZSk7Ci0gICAgCi0gICAgaWYgKGV4Y2hhbmdlKQotICAgICAgICAqZXhjaGFuZ2UgPSBhbGxv
Y2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7Ci0KLSAgICBpZiAoIWJsb2NrKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIWJsb2NrLT5kYXRhU2l6ZSgpKSB7Ci0gICAgICAgIHJlY3ljbGVC
b3Jyb3dlZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJsb2Nr
LT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKLQotICAgIHsKLSAgICAgICAgLy8gQWx3YXlzIHB1dCB0
aGUgYmxvY2sgaW50byB0aGUgb2xkIGdlbiBiZWNhdXNlIGl0J3MgYmVpbmcgcHJvbW90ZWQhCi0g
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKLSAgICAgICAgbV9vbGRH
ZW4udG9TcGFjZS0+cHVzaChibG9jayk7Ci0gICAgICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsK
LSAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
YmxvY2spKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9h
bmVkQmxvY2tzTG9jayk7Ci0gICAgICAgIEFTU0VSVChtX251bWJlck9mTG9hbmVkQmxvY2tzID4g
MCk7Ci0gICAgICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKLSAgICAgICAgbV9udW1iZXJP
ZkxvYW5lZEJsb2Nrcy0tOwotICAgIH0KLX0KLQotdm9pZCBDb3BpZWRTcGFjZTo6ZGlkU3RhcnRG
dWxsQ29sbGVjdGlvbigpCi17Ci0gICAgQVNTRVJUKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVz
cygpID09IEZ1bGxDb2xsZWN0aW9uKTsKLSAgICBBU1NFUlQobV9vbGRHZW4uZnJvbVNwYWNlLT5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi50
b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIEFT
U0VSVCghYmxvY2stPmxpdmVCeXRlcygpKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQotICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7Ci0jZW5kaWYKLQot
ICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdD
KCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2st
PmRpZFN1cnZpdmVHQygpOwotfQotCi12b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UgPT0gbV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAg
bV9pbkNvcHlpbmdQaGFzZSA9IGZhbHNlOwotCi0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRC
bG9jaz4qIHRvU3BhY2U7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIGZyb21T
cGFjZTsKLSAgICBUaW55Qmxvb21GaWx0ZXIqIGJsb2NrRmlsdGVyOwotICAgIGlmIChoZWFwKCkt
Pm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikgewotICAgICAgICB0b1Nw
YWNlID0gbV9vbGRHZW4udG9TcGFjZTsKLSAgICAgICAgZnJvbVNwYWNlID0gbV9vbGRHZW4uZnJv
bVNwYWNlOwotICAgICAgICBibG9ja0ZpbHRlciA9ICZtX29sZEdlbi5ibG9ja0ZpbHRlcjsKLSAg
ICB9IGVsc2UgewotICAgICAgICB0b1NwYWNlID0gbV9uZXdHZW4udG9TcGFjZTsKLSAgICAgICAg
ZnJvbVNwYWNlID0gbV9uZXdHZW4uZnJvbVNwYWNlOwotICAgICAgICBibG9ja0ZpbHRlciA9ICZt
X25ld0dlbi5ibG9ja0ZpbHRlcjsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIWZyb21TcGFjZS0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9IGZyb21TcGFjZS0+cmVtb3Zl
SGVhZCgpOwotICAgICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIGJsb2NrIHRvIHRoZSBibG9ja1Nl
dCBiZWNhdXNlIGl0IHdhcyBuZXZlciByZW1vdmVkLgotICAgICAgICBBU1NFUlQobV9ibG9ja1Nl
dC5jb250YWlucyhibG9jaykpOwotICAgICAgICBibG9ja0ZpbHRlci0+YWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwotICAg
ICAgICB0b1NwYWNlLT5wdXNoKGJsb2NrKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVhcCgpLT5vcGVy
YXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pIHsKLSAgICAgICAgbV9vbGRHZW4u
dG9TcGFjZS0+YXBwZW5kKCptX25ld0dlbi50b1NwYWNlKTsKLSAgICAgICAgbV9vbGRHZW4ub3Zl
cnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzKTsKLSAgICAgICAgbV9v
bGRHZW4uYmxvY2tGaWx0ZXIuYWRkKG1fbmV3R2VuLmJsb2NrRmlsdGVyKTsKLSAgICAgICAgbV9u
ZXdHZW4uYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9uZXdHZW4u
dG9TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNwYWNlLT5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOwot
Ci0gICAgYWxsb2NhdGVCbG9jaygpOwotCi0gICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IGZhbHNl
OwotfQotCi1zaXplX3QgQ29waWVkU3BhY2U6OnNpemUoKQotewotICAgIHNpemVfdCBjYWxjdWxh
dGVkU2l6ZSA9IDA7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLnRv
U3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgY2Fs
Y3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJs
b2NrID0gbV9vbGRHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7Ci0KLSAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0g
YmxvY2stPnNpemUoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4u
dG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBj
YWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKLQotICAg
IGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkU2l6ZSAr
PSBibG9jay0+c2l6ZSgpOwotCi0gICAgcmV0dXJuIGNhbGN1bGF0ZWRTaXplOwotfQotCi1zaXpl
X3QgQ29waWVkU3BhY2U6OmNhcGFjaXR5KCkKLXsKLSAgICBzaXplX3QgY2FsY3VsYXRlZENhcGFj
aXR5ID0gMDsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxh
dGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2Nr
KiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9j
ay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5
KCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgY2FsY3Vs
YXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9j
ayogYmxvY2sgPSBtX25ld0dlbi50b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2Nr
LT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHko
KTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4uZnJvbVNwYWNlLT5o
ZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRD
YXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJs
b2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9j
ay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5
KCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRlZENhcGFjaXR5OwotfQotCi1zdGF0aWMgYm9vbCBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSwgRG91Ymx5TGlua2VkTGlzdDxDb3Bp
ZWRCbG9jaz4qIGxpc3QpCi17Ci0gICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sg
PSAwOwotICAgIENvcGllZEJsb2NrKiBjdXJyZW50ID0gbGlzdC0+aGVhZCgpOwotICAgIHdoaWxl
IChjdXJyZW50KSB7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCk7Ci0gICAgICAg
ICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7Ci0gICAgICAgIGlmIChpdGVyc1NpbmNlTGFzdFRp
bWVDaGVjayA+PSBIZWFwOjpzX3RpbWVDaGVja1Jlc29sdXRpb24pIHsKLSAgICAgICAgICAgIGRv
dWJsZSBjdXJyZW50VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPiBkZWFkbGluZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb3BpZWRTcGFj
ZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCi17Ci0gICAgcmV0dXJuIGlzQmxvY2tMaXN0
UGFnZWRPdXQoZGVhZGxpbmUsIG1fb2xkR2VuLnRvU3BhY2UpIAotICAgICAgICB8fCBpc0Jsb2Nr
TGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi5mcm9tU3BhY2UpIAotICAgICAgICB8fCBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MpCi0g
ICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fbmV3R2VuLnRvU3BhY2Up
IAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX25ld0dlbi5mcm9t
U3BhY2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9uZXdH
ZW4ub3ZlcnNpemVCbG9ja3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMjA1NjU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgQ29waWVkU3BhY2VfaAotI2RlZmluZSBDb3BpZWRTcGFjZV9oCi0KLSNp
bmNsdWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEJvb2xlYW4uaD4KLSNpbmNsdWRlIDx3dGYvRG91Ymx5TGlu
a2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci1jbGFzcyBDb3BpZWRCbG9jazsK
LQotY2xhc3MgQ29waWVkU3BhY2UgewotICAgIGZyaWVuZCBjbGFzcyBDb3B5VmlzaXRvcjsKLSAg
ICBmcmllbmQgY2xhc3MgSGVhcDsKLSAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Ci0gICAg
ZnJpZW5kIGNsYXNzIEpJVDsKLXB1YmxpYzoKLSAgICBDb3BpZWRTcGFjZShIZWFwKik7Ci0gICAg
fkNvcGllZFNwYWNlKCk7Ci0gICAgdm9pZCBpbml0KCk7Ci0KLSAgICBDaGVja2VkQm9vbGVhbiB0
cnlBbGxvY2F0ZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxv
Y2F0ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKLSAgICAKLSAgICBDb3BpZWRBbGxvY2F0b3Im
IGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9Ci0KLSAgICB2b2lkIGRpZFN0YXJ0
RnVsbENvbGxlY3Rpb24oKTsKLQotICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rp
b25UeXBlPgotICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKLSAgICB2b2lkIGRvbmVDb3B5aW5n
KCk7Ci0gICAgYm9vbCBpc0luQ29weVBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pbkNvcHlpbmdQ
aGFzZTsgfQotCi0gICAgdm9pZCBwaW4oQ29waWVkQmxvY2sqKTsKLSAgICBib29sIGlzUGlubmVk
KHZvaWQqKTsKLQotICAgIGJvb2wgY29udGFpbnMoQ29waWVkQmxvY2sqKTsKLSAgICBib29sIGNv
bnRhaW5zKHZvaWQqLCBDb3BpZWRCbG9jayomKTsKLSAgICAKLSAgICB2b2lkIHBpbklmTmVjZXNz
YXJ5KHZvaWQqIHBvaW50ZXIpOwotCi0gICAgc2l6ZV90IHNpemUoKTsKLSAgICBzaXplX3QgY2Fw
YWNpdHkoKTsKLQotICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwotICAgIGJv
b2wgc2hvdWxkRG9Db3B5UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERvQ29weVBoYXNl
OyB9Ci0KLSAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGJsb2NrRm9yKHZvaWQqKTsKLQotICAgIEhl
YXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KLSAgICAKLSAgICBzaXplX3QgdGFr
ZUJ5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgICAgICBzdGQ6OnN3YXAobV9ieXRlc1JlbW92ZWRG
cm9tT2xkU3BhY2VEdWVUb1JlYWxsb2NhdGlvbiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6ZShzaXpl
X3QpOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVT
bG93Q2FzZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVP
dmVyc2l6ZShzaXplX3QsIHZvaWQqKik7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0
ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAgIAotICAgIHZvaWQgYWxsb2Nh
dGVCbG9jaygpOwotICAgIENvcGllZEJsb2NrKiBhbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNl
KCk7Ci0KLSAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9j
ayoqKTsKLSAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayosIEhlYXBP
cGVyYXRpb24gY29sbGVjdGlvblR5cGUpOwotICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2so
Q29waWVkQmxvY2sqKTsKLQotICAgIEhlYXAqIG1faGVhcDsKLQotICAgIENvcGllZEFsbG9jYXRv
ciBtX2FsbG9jYXRvcjsKLQotICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0Owot
Ci0gICAgTG9jayBtX3RvU3BhY2VMb2NrOwotCi0gICAgc3RydWN0IENvcGllZEdlbmVyYXRpb24g
ewotICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKLSAgICAgICAgICAgIDogdG9TcGFjZSgwKQot
ICAgICAgICAgICAgLCBmcm9tU3BhY2UoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2U7Ci0gICAgICAgIERvdWJs
eUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7Ci0gICAgICAgIAotICAgICAgICBE
b3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOwotICAgICAgICBEb3VibHlMaW5r
ZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MyOwotICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENv
cGllZEJsb2NrPiBvdmVyc2l6ZUJsb2NrczsKLQotICAgICAgICBUaW55Qmxvb21GaWx0ZXIgYmxv
Y2tGaWx0ZXI7Ci0gICAgfTsKLQotICAgIENvcGllZEdlbmVyYXRpb24gbV9vbGRHZW47Ci0gICAg
Q29waWVkR2VuZXJhdGlvbiBtX25ld0dlbjsKLQotICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsK
LSAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7Ci0KLSAgICBMb2NrIG1fbG9hbmVkQmxvY2tz
TG9jazsKLSAgICBzaXplX3QgbV9udW1iZXJPZkxvYW5lZEJsb2NrczsKLSAgICAKLSAgICBzaXpl
X3QgbV9ieXRlc1JlbW92ZWRGcm9tT2xkU3BhY2VEdWVUb1JlYWxsb2NhdGlvbjsKLQotICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc19tYXhBbGxvY2F0aW9uU2l6ZSA9IENvcGllZEJsb2NrOjpibG9j
a1NpemUgLyAyOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja01hc2sgPSB+KENvcGll
ZEJsb2NrOjpibG9ja1NpemUgLSAxKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5s
aW5lcy5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDI1OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29waWVk
U3BhY2VJbmxpbmVzX2gKLSNkZWZpbmUgQ29waWVkU3BhY2VJbmxpbmVzX2gKLQotI2luY2x1ZGUg
IkNvcGllZEJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJIZWFw
LmgiCi0jaW5jbHVkZSAiVk0uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSBib29sIENv
cGllZFNwYWNlOjpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2spCi17Ci0gICAgcmV0dXJuICgh
bV9uZXdHZW4uYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2Nr
KSkgfHwgIW1fb2xkR2VuLmJsb2NrRmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihibG9jaykpKQotICAgICAgICAmJiBtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKTsKLX0KLQot
aW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNvbnRhaW5zKHZvaWQqIHB0ciwgQ29waWVkQmxvY2sq
JiByZXN1bHQpCi17Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gYmxvY2tGb3IocHRyKTsKLSAg
ICBpZiAoY29udGFpbnMoYmxvY2spKSB7Ci0gICAgICAgIHJlc3VsdCA9IGJsb2NrOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gMDsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW4oQ29waWVkQmxvY2sqIGJsb2NrKQot
ewotICAgIGJsb2NrLT5waW4oKTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbklm
TmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCi17Ci0gICAgLy8gUG9pbnRlcnMgaW50byB0
aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxvd2luZyB2YXJpZXRpZXM6Ci0gICAgLy8g
MSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRo
ZSBtb3N0Ci0gICAgLy8gICAgIG5hdHVyYWwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgbW9z
dCBjb21tb24uCi0gICAgLy8gMikgIFBvaW50ZXJzIHRvIG9uZSB2YWx1ZS1zaXplZCAoOCBieXRl
KSB3b3JkIHBhc3QgdGhlIGVuZCBvZgotICAgIC8vICAgICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlz
IGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRlcmZsaWVzCi0gICAgLy8gICAgIGFuZCBz
aG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3RoZXIgaGFsZiBvZiB0aGUKLSAgICAvLyAg
ICAgYnV0dGVyZmx5IGxhbmRzLgotICAgIC8vIDMpICBQb2ludGVycyB0byB0aGUgaW5uYXJkcyBh
cmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKLSAgICAvLyAgICAgb3B0aW1pemF0
aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9tYXRpYywgYnkgdGhlCi0gICAgLy8gICAg
IGNvbXBpbGVyKS4KLSAgICAvLyA0KSAgUG9pbnRlcnMgdG8gdGhlIGVuZCBvZiBhIHNwYW4gb2Yg
bWVtb3J5IGluIGFyaXNpbmcgZnJvbQotICAgIC8vICAgICBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0
aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQotICAgIC8vICAgICBHQy10by1jb21waWxlciBj
b250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBhIHBvaW50ZXIgdG8KLSAgICAvLyAgICAg
dGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3QgYmUgY29uc2lkZXJlZCB0byBiZSBhCi0g
ICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnkuCi0gICAgCi0gICAgRW5jb2RlZEpTVmFs
dWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVuY29kZWRKU1ZhbHVlKj4ob3BhcXVlUG9p
bnRlcik7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrOwotCi0gICAgLy8gSGFuZGxlICgxKSBhbmQg
KDMpLgotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBibG9jaykpCi0gICAgICAgIHBpbihibG9j
ayk7Ci0gICAgCi0gICAgLy8gSGFuZGxlICg0KS4gV2UgZG9uJ3QgaGF2ZSB0byBleHBsaWNpdGx5
IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRoaXMKLSAgICAvLyBwb2ludGVyIGJlY2F1
c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNvbWV0aGluZyB0aGF0IGNhc2VzICgxKSBh
bmQKLSAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikgYmVsb3cgd291bGRuJ3QgYWxyZWFkeSBj
YXRjaC4KLSAgICBwb2ludGVyLS07Ci0gICAgCi0gICAgLy8gSGFuZGxlICgyKQotICAgIHBvaW50
ZXItLTsKLSAgICBpZiAoY29udGFpbnMocG9pbnRlciwgYmxvY2spKQotICAgICAgICBwaW4oYmxv
Y2spOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2Nr
KENvcGllZEJsb2NrKiBibG9jaywgSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKLXsKLSAg
ICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKTsKLSAg
ICBBU1NFUlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKLSAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2sp
OwotICAgICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCi0gICAgICAg
ICAgICBtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fb2xkR2VuLmZyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKLSAgICB9Ci0gICAg
Q29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBD
b3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQotewot
ICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIGJsb2NrKTsKLQotICAgIHsKLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAgICAgICAgQVNTRVJU
KG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKTsKLSAgICAgICAgQVNTRVJUKG1faW5Db3B5aW5n
UGhhc2UpOwotICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tzLS07Ci0gICAgfQotfQotCi1p
bmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1Bo
YXNlKCkKLXsKLSAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoKm1faGVhcCk7Ci0KLSAgICB7
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAg
IG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWJsb2NrLT5k
YXRhU2l6ZSgpKTsKLSAgICByZXR1cm4gYmxvY2s7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNw
YWNlOjphbGxvY2F0ZUJsb2NrKCkKLXsKLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoKTsKLQotICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7Ci0gICAgCi0g
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZSgqbV9oZWFwKTsKLSAg
ICAgICAgCi0gICAgbV9uZXdHZW4udG9TcGFjZS0+cHVzaChibG9jayk7Ci0gICAgbV9uZXdHZW4u
YmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICBtX2Js
b2NrU2V0LmFkZChibG9jayk7Ci0gICAgbV9hbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2Nr
KTsKLX0KLQotaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZShz
aXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCi17Ci0gICAgQVNTRVJUKCFtX2hlYXAtPnZtKCkt
PmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIEFTU0VSVChieXRlcyk7Ci0KLSAgICBpZiAo
IW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQotICAgICAgICByZXR1cm4g
dHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRyKTsKLSAgICAKLSAgICBBU1NFUlQoKm91
dFB0cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpp
c092ZXJzaXplKHNpemVfdCBieXRlcykKLXsKLSAgICByZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9j
YXRpb25TaXplOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6aXNQaW5uZWQodm9pZCog
cHRyKQotewotICAgIHJldHVybiBibG9ja0ZvcihwdHIpLT5tX2lzUGlubmVkOwotfQotCi1pbmxp
bmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0Zvcih2b2lkKiBwdHIpCi17Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVycHJldF9jYXN0PHNp
emVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKLX0KLQotdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24g
Y29sbGVjdGlvblR5cGU+Ci1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmco
KQotewotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7Ci0gICAg
RG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIG92ZXJzaXplQmxvY2tzOwotICAgIFRpbnlC
bG9vbUZpbHRlciogYmxvY2tGaWx0ZXI7Ci0gICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxD
b2xsZWN0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHko
KSk7Ci0gICAgICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7Ci0KLSAg
ICAgICAgbV9vbGRHZW4udG9TcGFjZS0+YXBwZW5kKCptX25ld0dlbi50b1NwYWNlKTsKLSAgICAg
ICAgbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tz
KTsKLQotICAgICAgICBBU1NFUlQobV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICAg
ICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJU
KG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgc3RkOjpzd2Fw
KG1fb2xkR2VuLmZyb21TcGFjZSwgbV9vbGRHZW4udG9TcGFjZSk7Ci0gICAgICAgIGZyb21TcGFj
ZSA9IG1fb2xkR2VuLmZyb21TcGFjZTsKLSAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9vbGRH
ZW4ub3ZlcnNpemVCbG9ja3M7Ci0gICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2Nr
RmlsdGVyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6c3dhcChtX25ld0dlbi5mcm9tU3Bh
Y2UsIG1fbmV3R2VuLnRvU3BhY2UpOwotICAgICAgICBmcm9tU3BhY2UgPSBtX25ld0dlbi5mcm9t
U3BhY2U7Ci0gICAgICAgIG92ZXJzaXplQmxvY2tzID0gJm1fbmV3R2VuLm92ZXJzaXplQmxvY2tz
OwotICAgICAgICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9ja0ZpbHRlcjsKLSAgICB9Ci0K
LSAgICBibG9ja0ZpbHRlci0+cmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpOwotCi0gICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOwotICAgIHNpemVfdCB0b3RhbExp
dmVCeXRlcyA9IDA7Ci0gICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOwotICAgIGZvciAo
Q29waWVkQmxvY2sqIGJsb2NrID0gZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IG5l
eHQpIHsKLSAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYmxvY2st
PmlzUGlubmVkKCkgJiYgYmxvY2stPmNhbkJlUmVjeWNsZWQoKSkgewotICAgICAgICAgICAgcmVj
eWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrLCBjb2xsZWN0aW9uVHlwZSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoYmxvY2stPmxpdmVCeXRlcygpIDw9
IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwotICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9j
ay0+bGl2ZUJ5dGVzKCk7Ci0gICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxv
YWRDYXBhY2l0eSgpOwotICAgICAgICBibG9jay0+ZGlkUHJvbW90ZSgpOwotICAgIH0KLQotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IG92ZXJzaXplQmxvY2tzLT5oZWFkKCk7Ci0gICAgd2hpbGUg
KGJsb2NrKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQoKTsKLSAg
ICAgICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKSB7Ci0gICAgICAgICAgICBibG9ja0ZpbHRlci0+
YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICAgICAgICAgIHRvdGFsTGl2
ZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKLSAgICAgICAgICAgIHRvdGFsVXNh
YmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgYmxvY2st
PmRpZFByb21vdGUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG92ZXJzaXplQmxv
Y2tzLT5yZW1vdmUoYmxvY2spOwotICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2sp
OwotICAgICAgICAgICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwotICAg
ICAgICB9IAotICAgICAgICBibG9jayA9IG5leHQ7Ci0gICAgfQotCi0gICAgZG91YmxlIG1hcmtl
ZFNwYWNlQnl0ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCkuY2FwYWNpdHkoKTsKLSAgICBkb3Vi
bGUgdG90YWxVdGlsaXphdGlvbiA9IHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxMaXZlQnl0ZXMg
KyBtYXJrZWRTcGFjZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxVc2FibGVCeXRl
cyArIG1hcmtlZFNwYWNlQnl0ZXMpOwotICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSBtX2hlYXAt
Pm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiB8fCB0b3RhbFV0aWxpemF0
aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGlsaXphdGlvbigpOwotICAgIGlmICghbV9zaG91bGRE
b0NvcHlQaGFzZSkgewotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIlNraXBwZWQgY29weWluZywgIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgZGF0YUxvZ0YoIkRpZCBjb3B5LCAi
KTsKLSAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgQVNTRVJUKCFtX251bWJl
ck9mTG9hbmVkQmxvY2tzKTsKLSAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOwotICAgIG1f
aW5Db3B5aW5nUGhhc2UgPSB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIENvcGllZFNwYWNlSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlCYXJyaWVyLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlCYXJyaWVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5QmFycmllcl9oCi0jZGVmaW5lIENvcHlCYXJyaWVy
X2gKLQotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJWTS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQ29weUJhcnJpZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBDb3B5QmFycmllckJh
c2UoKQotICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAg
ICB2b2lkKiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAg
fQotCi0gICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IG51bGxwdHI7IH0KLQotcHJvdGVjdGVk
OgotICAgIENvcHlCYXJyaWVyQmFzZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwotICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0V2l0
aG91dEJhcnJpZXIodm9pZCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0g
dmFsdWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIG11dGFibGUgdm9pZCogbV92YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgQ29weUJhcnJpZXIgOiBwdWJsaWMgQ29w
eUJhcnJpZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBDb3B5QmFycmllcigpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZh
bHVlKQotICAgICAgICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3duZXIsICZ2YWx1ZSkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIENvcHlCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgVCogdmFsdWUpCi0gICAgICAgIDogQ29weUJhcnJpZXJCYXNlKHZtLCBvd25lciwgdmFsdWUp
Ci0gICAgewotICAgIH0KLQotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVCogdmFsdWUpCi0gICAgewotICAgICAg
ICBDb3B5QmFycmllckJhc2U6OnNldFdpdGhvdXRCYXJyaWVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcHlCYXJyaWVyX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVRva2VuX2gK
LSNkZWZpbmUgQ29weVRva2VuX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gQ29weVRva2Vu
IHsKLSAgICBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29weVRva2VuX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29weVZpc2l0b3IuaCIKLQotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQ29w
eVZpc2l0b3I6OkNvcHlWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLXsK
LSAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci0gICAgQ29waWVkQmxv
Y2sqIGJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2UuZG9uZUZpbGxp
bmdCbG9jayhudWxscHRyLCAmYmxvY2spOwotICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhibG9jayk7Ci19Ci0KLUNvcHlWaXNpdG9yOjp+Q29weVZpc2l0b3IoKQotewotICAg
IGlmIChtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faGVhcC5tX3N0b3Jh
Z2VTcGFjZS5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJs
b2NrKCksIG51bGxwdHIpOwotICAgIAotICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5Rm9yVGhpc1RocmVhZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMjA1NjU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcHlWaXNpdG9yX2gK
LSNkZWZpbmUgQ29weVZpc2l0b3JfaAotCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7
Ci0KLWNsYXNzIENvcHlWaXNpdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb3B5Vmlz
aXRvcik7Ci1wdWJsaWM6Ci0gICAgQ29weVZpc2l0b3IoSGVhcCYpOwotICAgIH5Db3B5VmlzaXRv
cigpOwotCi0gICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgpOwotCi0gICAgLy8gTG93LWxldmVsIEFQ
SSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9yIGNhc2VzIHdoZXJlIHRoZSBvYmplY3QncyBo
ZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBhcmUgZGlzY29udGlndW91cyBvciBpZiB0aGUgb2JqZWN0
IG9jY3VycyBmcmVxdWVudGx5IGVub3VnaCB0aGF0IHlvdSBuZWVkIHRvIGZvY3VzIG9uCi0gICAg
Ly8gcGVyZm9ybWFuY2UuIFVzZSB0aGlzIHdpdGggY2FyZSBhcyBpdCBpcyBlYXN5IHRvIHNob290
IHlvdXJzZWxmIGluIHRoZSBmb290LgotICAgIGJvb2wgY2hlY2tJZlNob3VsZENvcHkodm9pZCop
OwotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90KTsKLSAgICB2b2lkIGRpZENvcHko
dm9pZCosIHNpemVfdCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZVNs
b3coc2l6ZV90KTsKLSAgICB2b2lkIHZpc2l0SXRlbShDb3B5V29ya2xpc3RJdGVtKTsKLQotICAg
IEhlYXAmIG1faGVhcDsKLSAgICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjA1NjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5VmlzaXRv
cklubGluZXNfaAotI2RlZmluZSBDb3B5VmlzaXRvcklubGluZXNfaAotCi0jaW5jbHVkZSAiQ29w
eVZpc2l0b3IuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxp
bmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRyKQotewot
ICAgIGlmICghb2xkUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0cik7Ci0gICAgaWYgKGJsb2NrLT5p
c092ZXJzaXplKCkgfHwgYmxvY2stPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21w
aWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAo
TElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywg
JnJlc3VsdCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHJlc3VsdCA9IGFs
bG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfSAgICAgICAKLQotaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0
ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgQ29waWVkQmxvY2sqIG5ld0Jsb2Nr
ID0gMDsKLSAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2UuZG9uZUZpbGxpbmdCbG9jayhtX2NvcGll
ZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwotICAgIG1fY29waWVk
QWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7Ci0KLSAgICB2b2lkKiByZXN1bHQg
PSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50
cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQpOwotICAgIEFTU0VSVChkaWRT
dWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBDb3B5VmlzaXRv
cjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBDb3BpZWRCbG9jayog
YmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5p
c092ZXJzaXplKCkpOwotICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOwotCi0gICAgYmxv
Y2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIENvcHlWaXNpdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5V29ya0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5V29ya0xpc3QuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVdvcmtMaXN0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdvcmtMaXN0X2gKLSNkZWZpbmUg
Q29weVdvcmtMaXN0X2gKLQotI2luY2x1ZGUgIkNvcHlUb2tlbi5oIgotI2luY2x1ZGUgPHd0Zi9E
b3VibHlMaW5rZWRMaXN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU0NlbGw7Ci0K
LWNsYXNzIENvcHlXb3JrbGlzdEl0ZW0gewotcHVibGljOgotICAgIENvcHlXb3JrbGlzdEl0ZW0o
KQotICAgICAgICA6IG1fdmFsdWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgQ29weVdvcmtsaXN0
SXRlbShKU0NlbGwqIGNlbGwsIENvcHlUb2tlbiB0b2tlbikKLSAgICAgICAgOiBtX3ZhbHVlKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0b2tl
bikpCi0gICAgewotICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxs
KSAmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obWFzaykpKTsKLSAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4odG9rZW4pIDw9IG1hc2spOwotICAgIH0KLSAgICAKLSAgICBKU0Nl
bGwqIGNlbGwoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV92YWx1ZSAm
IH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1hc2spKTsgfQotICAgIENvcHlUb2tlbiB0b2tlbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvcHlUb2tlbj4obV92YWx1ZSAmIG1hc2spOyB9
Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZXF1aXJlZEFsaWdu
bWVudCA9IDg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hc2sgPSByZXF1aXJlZEFsaWdu
bWVudCAtIDE7Ci0gICAgCi0gICAgdWludHB0cl90IG1fdmFsdWU7Ci19OwotCi1jbGFzcyBDb3B5
V29ya0xpc3RTZWdtZW50IDogcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPENvcHlXb3JrTGlz
dFNlZ21lbnQ+IHsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxD
b3B5V29ya0xpc3RTZWdtZW50PjsKLXB1YmxpYzoKLSAgICBzdGF0aWMgQ29weVdvcmtMaXN0U2Vn
bWVudCogY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGZhc3RN
YWxsb2MoYmxvY2tTaXplKSkgQ29weVdvcmtMaXN0U2VnbWVudCgpOwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KENvcHlXb3JrTGlzdFNlZ21lbnQqIHNlZ21lbnQpCi0gICAg
ewotICAgICAgICBzZWdtZW50LT5+Q29weVdvcmtMaXN0U2VnbWVudCgpOwotICAgICAgICBmYXN0
RnJlZShzZWdtZW50KTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6
ZTsgfQotICAgIGJvb2wgaXNGdWxsKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
JmRhdGEoKVtzaXplKCldKSA+PSBlbmRPZkJsb2NrKCk7IH0KLSAgICBDb3B5V29ya2xpc3RJdGVt
IGdldChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGRhdGEoKVtpbmRleF07IH0KLQotICAgIHZvaWQg
YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNG
dWxsKCkpOwotICAgICAgICBkYXRhKClbbV9zaXplXSA9IGl0ZW07Ci0gICAgICAgIG1fc2l6ZSAr
PSAxOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gNTEyOwot
Ci1wcml2YXRlOgotICAgIENvcHlXb3JrTGlzdFNlZ21lbnQoKQotICAgICAgICA6IERvdWJseUxp
bmtlZExpc3ROb2RlPENvcHlXb3JrTGlzdFNlZ21lbnQ+KCkKLSAgICAgICAgLCBtX3NpemUoMCkK
LSAgICB7Ci0gICAgfQotCi0gICAgQ29weVdvcmtsaXN0SXRlbSogZGF0YSgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q29weVdvcmtsaXN0SXRlbSo+KHRoaXMgKyAxKTsgfQotICAgIGNoYXIq
IGVuZE9mQmxvY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGJs
b2NrU2l6ZTsgfQotCi0gICAgQ29weVdvcmtMaXN0U2VnbWVudCogbV9wcmV2OwotICAgIENvcHlX
b3JrTGlzdFNlZ21lbnQqIG1fbmV4dDsKLSAgICBzaXplX3QgbV9zaXplOwotfTsKLQotY2xhc3Mg
Q29weVdvcmtMaXN0SXRlcmF0b3IgewotICAgIGZyaWVuZCBjbGFzcyBDb3B5V29ya0xpc3Q7Ci1w
dWJsaWM6Ci0gICAgQ29weVdvcmtsaXN0SXRlbSBnZXQoKSB7IHJldHVybiBtX2N1cnJlbnRTZWdt
ZW50LT5nZXQobV9jdXJyZW50SW5kZXgpOyB9Ci0gICAgQ29weVdvcmtsaXN0SXRlbSBvcGVyYXRv
ciooKSB7IHJldHVybiBnZXQoKTsgfQotICAgIENvcHlXb3JrbGlzdEl0ZW0gb3BlcmF0b3ItPigp
IHsgcmV0dXJuIGdldCgpOyB9Ci0KLSAgICBDb3B5V29ya0xpc3RJdGVyYXRvciYgb3BlcmF0b3Ir
KygpCi0gICAgewotICAgICAgICBtX2N1cnJlbnRJbmRleCsrOwotCi0gICAgICAgIGlmIChtX2N1
cnJlbnRJbmRleCA+PSBtX2N1cnJlbnRTZWdtZW50LT5zaXplKCkpIHsKLSAgICAgICAgICAgIG1f
Y3VycmVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVudFNlZ21lbnQgPSBtX2N1cnJl
bnRTZWdtZW50LT5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJl
bnRTZWdtZW50IHx8IG1fY3VycmVudFNlZ21lbnQtPnNpemUoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
cHlXb3JrTGlzdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2N1cnJlbnRTZWdtZW50ID09IG90aGVyLm1fY3VycmVudFNlZ21lbnQgJiYgbV9jdXJyZW50SW5k
ZXggPT0gb3RoZXIubV9jdXJyZW50SW5kZXg7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDb3B5V29ya0xpc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgfQotCi0gICAgQ29weVdvcmtMaXN0
SXRlcmF0b3IoKQotICAgICAgICA6IG1fY3VycmVudFNlZ21lbnQoMCkKLSAgICAgICAgLCBtX2N1
cnJlbnRJbmRleCgwKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ29weVdvcmtMaXN0
SXRlcmF0b3IoQ29weVdvcmtMaXN0U2VnbWVudCogc3RhcnRTZWdtZW50LCBzaXplX3Qgc3RhcnRJ
bmRleCkKLSAgICAgICAgOiBtX2N1cnJlbnRTZWdtZW50KHN0YXJ0U2VnbWVudCkKLSAgICAgICAg
LCBtX2N1cnJlbnRJbmRleChzdGFydEluZGV4KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29w
eVdvcmtMaXN0U2VnbWVudCogbV9jdXJyZW50U2VnbWVudDsKLSAgICBzaXplX3QgbV9jdXJyZW50
SW5kZXg7Ci19OwotCi1jbGFzcyBDb3B5V29ya0xpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIHR5cGVkZWYgQ29weVdvcmtMaXN0SXRlcmF0b3IgaXRlcmF0
b3I7Ci0KLSAgICBDb3B5V29ya0xpc3QoKTsKLSAgICB+Q29weVdvcmtMaXN0KCk7Ci0KLSAgICB2
b2lkIGFwcGVuZChDb3B5V29ya2xpc3RJdGVtKTsKLSAgICBpdGVyYXRvciBiZWdpbigpOwotICAg
IGl0ZXJhdG9yIGVuZCgpOwotCi1wcml2YXRlOgotICAgIERvdWJseUxpbmtlZExpc3Q8Q29weVdv
cmtMaXN0U2VnbWVudD4gbV9zZWdtZW50czsKLX07Ci0KLWlubGluZSBDb3B5V29ya0xpc3Q6OkNv
cHlXb3JrTGlzdCgpCi17Ci19Ci0KLWlubGluZSBDb3B5V29ya0xpc3Q6On5Db3B5V29ya0xpc3Qo
KQotewotICAgIHdoaWxlICghbV9zZWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIENvcHlXb3Jr
TGlzdFNlZ21lbnQ6OmRlc3Ryb3kobV9zZWdtZW50cy5yZW1vdmVIZWFkKCkpOwotfQotCi1pbmxp
bmUgdm9pZCBDb3B5V29ya0xpc3Q6OmFwcGVuZChDb3B5V29ya2xpc3RJdGVtIGl0ZW0pCi17Ci0g
ICAgaWYgKG1fc2VnbWVudHMuaXNFbXB0eSgpIHx8IG1fc2VnbWVudHMudGFpbCgpLT5pc0Z1bGwo
KSkKLSAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoQ29weVdvcmtMaXN0U2VnbWVudDo6Y3JlYXRl
KCkpOwotCi0gICAgQVNTRVJUKCFtX3NlZ21lbnRzLnRhaWwoKS0+aXNGdWxsKCkpOwotCi0gICAg
bV9zZWdtZW50cy50YWlsKCktPmFwcGVuZChpdGVtKTsKLX0KLQotaW5saW5lIENvcHlXb3JrTGlz
dDo6aXRlcmF0b3IgQ29weVdvcmtMaXN0OjpiZWdpbigpCi17Ci0gICAgcmV0dXJuIENvcHlXb3Jr
TGlzdEl0ZXJhdG9yKG1fc2VnbWVudHMuaGVhZCgpLCAwKTsKLX0KLQotaW5saW5lIENvcHlXb3Jr
TGlzdDo6aXRlcmF0b3IgQ29weVdvcmtMaXN0OjplbmQoKQotewotICAgIHJldHVybiBDb3B5V29y
a0xpc3RJdGVyYXRvcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENv
cHlXb3JrTGlzdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDkgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2aXR5
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yMDIs
MTAgKzE5OSw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAs
IG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1BlckN5Y2xlKQogICAgICwgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uKGZhbHNlKQogICAgICwgbV90b3RhbEJ5dGVzVmlzaXRlZCgwKQotICAgICwgbV90
b3RhbEJ5dGVzQ29waWVkKDApCiAgICAgLCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MoTm9PcGVyYXRp
b24pCiAgICAgLCBtX29iamVjdFNwYWNlKHRoaXMpCi0gICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlz
KQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQpAQCAtMjMzLDcgKzIyOCw2
IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgICwg
bV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiB7Ci0gICAgbV9zdG9yYWdlU3BhY2Uu
aW5pdCgpOwogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkpCiAgICAgICAgIG1fdmVyaWZp
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVy
T2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwogfQpAQCAtMjQ2LDcgKzI0MCw3
IEBAIEhlYXA6On5IZWFwKCkKIAogYm9vbCBIZWFwOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGlu
ZSkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSB8fCBt
X3N0b3JhZ2VTcGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKTsKKyAgICByZXR1cm4gbV9vYmplY3RT
cGFjZS5pc1BhZ2VkT3V0KGRlYWRsaW5lKTsKIH0KIAogLy8gVGhlIFZNIGlzIGJlaW5nIGRlc3Ry
b3llZCBhbmQgdGhlIGNvbGxlY3RvciB3aWxsIG5ldmVyIHJ1biBhZ2Fpbi4KQEAgLTQ5Niw1OCAr
NDkwLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLAogICAgIHJl
c2V0VmlzaXRvcnMoKTsKIH0KIAotdm9pZCBIZWFwOjpjb3B5QmFja2luZ1N0b3JlcygpCi17Ci0g
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlmICht
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24pCi0gICAgICAgIG1fc3RvcmFn
ZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nPEVkZW5Db2xsZWN0aW9uPigpOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKTsKLSAg
ICAgICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlpbmc8RnVsbENvbGxlY3Rpb24+KCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKLSAg
ICAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgewotICAg
ICAgICAgICAgLy8gUmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0IHRocm93
IGF3YXkgdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5zaHJp
bmsoMCk7Ci0gICAgICAgICAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fc3RvcmFnZVNw
YWNlLm1fbmV3R2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4
dCgpKQotICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LmFwcGVuZChibG9jayk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09
IEZ1bGxDb2xsZWN0aW9uKTsKLSAgICAgICAgICAgIFdURjo6Y29weVRvVmVjdG9yKG1fc3RvcmFn
ZVNwYWNlLm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9Db3B5KTsKLSAgICAgICAgfQotCi0gICAgICAg
IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3I8VmVjdG9yPENvcGllZEJsb2NrKj4+IGl0ZXJhdG9yKAot
ICAgICAgICAgICAgbV9ibG9ja3NUb0NvcHksIHNfYmxvY2tGcmFnbWVudExlbmd0aCk7Ci0KLSAg
ICAgICAgLy8gTm90ZSB0aGF0IGl0J3Mgc2FmZSB0byB1c2UgdGhlIFsmXSBjYXB0dXJlIGxpc3Qg
aGVyZSwgZXZlbiB0aG91Z2ggd2UncmUgY3JlYXRpbmcgYSB0YXNrCi0gICAgICAgIC8vIHRoYXQg
b3RoZXIgdGhyZWFkcyBydW4uIFRoYXQncyBiZWNhdXNlIGFmdGVyIHJ1bkZ1bmN0aW9uSW5QYXJh
bGxlbCgpIHJldHVybnMsIHRoZSB0YXNrCi0gICAgICAgIC8vIHdlIGhhdmUgY3JlYXRlZCBpcyBu
b3QgZ29pbmcgdG8gYmUgcnVubmluZyBhbnltb3JlLiBIZW5jZSwgZXZlcnl0aGluZyBvbiB0aGUg
c3RhY2sgaGVyZQotICAgICAgICAvLyBvdXRsaXZlcyB0aGUgdGFzay4KLSAgICAgICAgbV9oZWxw
ZXJDbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAotICAgICAgICAgICAgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5VmlzaXRvcigqdGhpcyk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaXRlcmF0b3IuaXRlcmF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgWyZdIChDb3BpZWRCbG9jayogYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghYmxvY2stPmhhc1dvcmtMaXN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0ID0gYmxvY2stPndvcmtMaXN0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSA6IHdvcmtMaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jZWxsKCktPm1ldGhvZFRhYmxlKCktPmNv
cHlCYWNraW5nU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2Vs
bCgpLCBjb3B5VmlzaXRvciwgaXRlbS50b2tlbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFibG9jay0+bGl2ZUJ5dGVzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdG9y
YWdlU3BhY2UucmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrLCBtX29wZXJhdGlvbkluUHJvZ3Jl
c3MpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAg
ICAKLSAgICBtX3N0b3JhZ2VTcGFjZS5kb25lQ29weWluZygpOwotfQotCiB2b2lkIEhlYXA6Omdh
dGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzLCB2b2lkKiBzdGFja09yaWdp
biwgdm9pZCogc3RhY2tUb3AsIE1hY2hpbmVUaHJlYWRzOjpSZWdpc3RlclN0YXRlJiBjYWxsZWVT
YXZlZFJlZ2lzdGVycykKIHsKICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwpA
QCAtODIyLDIwICs3NjQsMTIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdD
ICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0
Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUp
OwogICAgIH0KICAgICAKLSAgICBzaXplX3QgYnl0ZXNSZW1vdmVkRnJvbU9sZFNwYWNlRHVlVG9S
ZWFsbG9jYXRpb24gPQotICAgICAgICBtX3N0b3JhZ2VTcGFjZS50YWtlQnl0ZXNSZW1vdmVkRnJv
bU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRpb24oKTsKLSAgICAKLSAgICBpZiAobV9vcGVyYXRpb25J
blByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCA9IDA7
Ci0gICAgICAgIG1fdG90YWxCeXRlc0NvcGllZCA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
dG90YWxCeXRlc0NvcGllZCAtPSBieXRlc1JlbW92ZWRGcm9tT2xkU3BhY2VEdWVUb1JlYWxsb2Nh
dGlvbjsKIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPSBtX3Nsb3RWaXNpdG9y
LmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7Ci0gICAgbV90b3RhbEJ5dGVz
Q29waWVkVGhpc0N5Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc0NvcGllZCgpICsgdGhyZWFkQnl0
ZXNDb3BpZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRl
c1Zpc2l0ZWRUaGlzQ3ljbGU7Ci0gICAgbV90b3RhbEJ5dGVzQ29waWVkICs9IG1fdG90YWxCeXRl
c0NvcGllZFRoaXNDeWNsZTsKIH0KIAogdm9pZCBIZWFwOjpyZXNldFZpc2l0b3JzKCkKQEAgLTg2
MSwxMiArNzk1LDEyIEBAIHNpemVfdCBIZWFwOjpleHRyYU1lbW9yeVNpemUoKQogCiBzaXplX3Qg
SGVhcDo6c2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9y
YWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFNZW1vcnlTaXplKCk7CisgICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2Uuc2l6ZSgpICsgZXh0cmFNZW1vcnlTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBh
Y2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFn
ZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYU1lbW9yeVNpemUoKTsKKyAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFNZW1vcnlTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFw
Ojpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC0xMTA3LDcgKzEwNDEsNiBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBIZWFwOjpjb2xsZWN0SW1wbChIZWFwCiAgICAgcHJ1bmVTdGFsZUVudHJp
ZXNGcm9tV2Vha0dDTWFwcygpOwogICAgIHN3ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgc25hcHNo
b3RNYXJrZWRTcGFjZSgpOwotICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CiAgICAgZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0
RW50cmllcygpOwogICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CkBAIC0xMjA1LDgg
KzExMzgsNiBAQCB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHZvaWQgSGVh
cDo6c3RvcEFsbG9jYXRpb24oKQogewogICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKLSAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQotICAg
ICAgICBtX3N0b3JhZ2VTcGFjZS5kaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CiB9CiAKIHZvaWQg
SGVhcDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTMxMCw5ICsxMjQxLDcgQEAgdm9pZCBIZWFw
Ojp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICAvLyBydW4gYW5vdGhlciBjb2xsZWN0aW9u
LiBUaGlzIGlzbid0IHRoZSBzYW1lIGFzIGVpdGhlciBzaXplKCkgb3IgY2FwYWNpdHkoKSwgdGhv
dWdoIGl0IHNob3VsZAogICAgIC8vIGJlIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSB0d28uIFRoZSBr
ZXkgaXMgdG8gbWF0Y2ggdGhlIHNpemUgY2FsY3VsYXRpb25zIGludm9sdmVkIGNhbGxzIHRvCiAg
ICAgLy8gZGlkQWxsb2NhdGUoKSwgd2hpbGUgbmV2ZXIgZGFuZ2Vyb3VzbHkgdW5kZXJlc3RpbWF0
aW5nIGNhcGFjaXR5KCkuIEluIGV4dHJlbWUgY2FzZXMgb2YKLSAgICAvLyBmcmFnbWVudGF0aW9u
LCB3ZSBtYXkgaGF2ZSBzaXplKCkgbXVjaCBzbWFsbGVyIHRoYW4gY2FwYWNpdHkoKS4gT3VyIGNv
bGxlY3RvciBzb21ldGltZXMKLSAgICAvLyB0ZW1wb3JhcmlseSBhbGxvd3MgdmVyeSBoaWdoIGZy
YWdtZW50YXRpb24gYmVjYXVzZSBpdCBkb2Vzbid0IGRlZnJhZ21lbnQgb2xkIGJsb2NrcyBpbiBj
b3BpZWQKLSAgICAvLyBzcGFjZS4KKyAgICAvLyBmcmFnbWVudGF0aW9uLCB3ZSBtYXkgaGF2ZSBz
aXplKCkgbXVjaCBzbWFsbGVyIHRoYW4gY2FwYWNpdHkoKS4KICAgICBzaXplX3QgY3VycmVudEhl
YXBTaXplID0gMDsKIAogICAgIC8vIEZvciBtYXJrZWQgc3BhY2UsIHdlIHVzZSB0aGUgdG90YWwg
bnVtYmVyIG9mIGJ5dGVzIHZpc2l0ZWQuIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgZm9yCkBAIC0x
MzI0LDIzICsxMjUzLDYgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygidG90YWxCeXRlc1Zpc2l0ZWQgPSAiLCBt
X3RvdGFsQnl0ZXNWaXNpdGVkLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJyZW50SGVhcFNp
emUsICJcbiIpOwogCi0gICAgLy8gRm9yIGNvcGllZCBzcGFjZSwgd2UgdXNlIHRoZSBjYXBhY2l0
eSBvZiBzdG9yYWdlIHNwYWNlLiBUaGlzIGlzIGJlY2F1c2UgY29waWVkIHNwYWNlIG1heSBnZXQK
LSAgICAvLyBiYWRseSBmcmFnbWVudGVkIGJldHdlZW4gZnVsbCBjb2xsZWN0aW9ucy4gVGhpcyBh
cmlzZXMgd2hlbiBlYWNoIGVkZW4gY29sbGVjdGlvbiBldmFjdWF0ZXMKLSAgICAvLyBtdWNoIGxl
c3MgdGhhbiBvbmUgQ29waWVkQmxvY2sncyB3b3J0aCBvZiBzdHVmZi4gSXQgY2FuIGFsc28gaGFw
cGVuIHdoZW4gQ29waWVkQmxvY2tzIGdldAotICAgIC8vIHBpbm5lZCBkdWUgdG8gdmVyeSBzaG9y
dC1saXZlZCBvYmplY3RzLiBJbiBzdWNoIGEgY2FzZSwgd2Ugd2FudCB0byBnZXQgdG8gYSBmdWxs
IGNvbGxlY3Rpb24KLSAgICAvLyBzb29uZXIgcmF0aGVyIHRoYW4gbGF0ZXIuIElmIHdlIHVzZWQg
bV90b3RhbEJ5dGVzQ29waWVkLCB0aGVuIGZvciBmb3IgZWFjaCBDb3BpZWRCbG9jayB0aGF0IGFu
Ci0gICAgLy8gZWRlbiBhbGxvY2F0aW9uIHByb21vdGVkLCB3ZSB3b3VsZCBvbmx5IGRlZHVjdCB0
aGUgb25lIG9iamVjdCdzIHNpemUgZnJvbSBlZGVuIHNpemUuIFRoaXMKLSAgICAvLyB3b3VsZCBt
ZWFuIHRoYXQgd2UgY291bGQgImxlYWsiIG1hbnkgQ29waWVkQmxvY2tzIGJlZm9yZSB3ZSBkaWQg
YSBmdWxsIGNvbGxlY3Rpb24gYW5kCi0gICAgLy8gZGVmcmFnbWVudGVkIGFsbCBvZiB0aGVtLiBJ
dCB3b3VsZCBiZSBncmVhdCB0byB1c2UgbV90b3RhbEJ5dGVzQ29waWVkLCBidXQgd2UnZCBuZWVk
IHRvCi0gICAgLy8gYXVnbWVudCBpdCB3aXRoIHNvbWV0aGluZyB0aGF0IGFjY291bnRzIGZvciB0
aG9zZSBmcmFnbWVudGVkIGJsb2Nrcy4KLSAgICAvLyBGSVhNRTogTWFrZSBpdCBwb3NzaWJsZSB0
byBjb21wdXRlIGhlYXAgc2l6ZSB1c2luZyBtX3RvdGFsQnl0ZXNDb3BpZWQgcmF0aGVyIHRoYW4K
LSAgICAvLyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI2OAotICAgIEFTU0VSVChtX3RvdGFsQnl0ZXND
b3BpZWQgPD0gbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpKTsKLSAgICBjdXJyZW50SGVhcFNpemUgKz0g
bV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygic3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgPSAiLCBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0
eSgpLCAiLCBjdXJyZW50SGVhcFNpemUgPSAiLCBjdXJyZW50SGVhcFNpemUsICJcbiIpOwotCiAg
ICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCBleHRyYU1lbW9yeVNpemUo
KSBlbmRzIHVwIGNvcnJlc3BvbmRpbmcgdG8gYWxsb2NhdGlvbi10aW1lCiAgICAgLy8gZXh0cmEg
bWVtb3J5IHJlcG9ydGluZy4KICAgICBjdXJyZW50SGVhcFNpemUgKz0gZXh0cmFNZW1vcnlTaXpl
KCk7CkBAIC0xNjQ2LDE0ICsxNTU4LDYgQEAgc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzVmlzaXRl
ZCgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzQ29w
aWVkKCkKLXsgICAgICAgCi0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiBw
YXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICByZXN1bHQg
Kz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc0NvcGllZCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2NvcGVkTGFtYmRhPGJv
b2woQ29kZUJsb2NrKik+JiBmdW5jKQogewogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGZ1bGwg
c2V0IG9mIENvZGVCbG9ja3MgdW50aWwgY29tcGlsYXRpb24gaGFzIHRlcm1pbmF0ZWQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYg
QEAKICNkZWZpbmUgSGVhcF9oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNp
bmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtNTIsNyAr
NTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUJs
b2NrU2V0OwotY2xhc3MgQ29waWVkU3BhY2U7CiBjbGFzcyBFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
OwogY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwpA
QCAtMTIwLDcgKzExOCw2IEBAIHB1YmxpYzoKIAogICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJu
IG1fdm07IH0KICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVj
dFNwYWNlOyB9Ci0gICAgQ29waWVkU3BhY2UmIHN0b3JhZ2VTcGFjZSgpIHsgcmV0dXJuIG1fc3Rv
cmFnZVNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQpAQCAtMTUwLDEyICsxNDcsOSBA
QCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVz
dHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFs
bG9jYXRvckZvcihieXRlcyk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKHNpemVfdCBieXRlcyk7CiAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JBdXhpbGlhcnlEYXRhKHNpemVfdCBieXRl
cykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hdXhpbGlhcnlBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9
Ci0gICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9y
YWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KICAgICB2b2lkKiBhbGxvY2F0ZUF1eGlsaWFyeShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBdXhpbGlh
cnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QpOwogICAgIHZvaWQqIHRyeVJlYWxsb2Nh
dGVBdXhpbGlhcnkoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBvbGRCYXNlLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRl
U3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCwgdm9pZCoqKTsKLSAgICBDaGVj
a2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZv
aWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgYXNjcmliZU93bmVyKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCopOwogCiAgICAgdHlwZWRlZiB2b2lkICgqRmluYWxpemVyKShKU0Nl
bGwqKTsKQEAgLTI2Myw3ICsyNTcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKLSAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CiAgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0M7CiAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7CiAg
ICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKQEAgLTI3Nyw4ICsyNzAsNiBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBmcmllbmQgY2xh
c3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKLSAgICBm
cmllbmQgY2xhc3MgQ29waWVkU3BhY2U7Ci0gICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSW5jcmVtZW50
YWxTd2VlcGVyOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlzdGljczsKQEAgLTM0Myw3ICsz
MzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAg
ICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CiAgICAg
dm9pZCByZXNldEFsbG9jYXRvcnMoKTsKLSAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVzKCk7CiAg
ICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB2b2lkIGNsZWFyVW5tYXJrZWRFeGVjdXRhYmxlcygp
OwpAQCAtMzY4LDcgKzM1OCw2IEBAIHByaXZhdGU6CiAKICAgICBzaXplX3QgdGhyZWFkVmlzaXRD
b3VudCgpOwogICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKLSAgICBzaXplX3QgdGhy
ZWFkQnl0ZXNDb3BpZWQoKTsKICAgICAKICAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJbXBsKGNv
bnN0IFNjb3BlZExhbWJkYTxib29sKENvZGVCbG9jayopPiYpOwogCkBAIC0zODgsMTMgKzM3Nywx
MCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uOwogICAgIHNp
emVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOwogICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVk
VGhpc0N5Y2xlOwotICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNDb3BpZWQ7Ci0gICAgc2l6ZV90IG1f
dG90YWxCeXRlc0NvcGllZFRoaXNDeWNsZTsKICAgICAKICAgICBIZWFwT3BlcmF0aW9uIG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzczsKICAgICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJs
ZTsKICAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwotICAgIENvcGllZFNwYWNlIG1fc3Rv
cmFnZVNwYWNlOwogICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2Fy
cmF5QnVmZmVyczsKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNpemU7CiAgICAgc2l6ZV90IG1f
ZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZTsKQEAgLTQ2NCw3ICs0NTAsNiBAQCBwcml2YXRlOgog
ICAgIExvY2sgbV9vcGFxdWVSb290c011dGV4OwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVl
Um9vdHM7CiAKLSAgICBWZWN0b3I8Q29waWVkQmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCiAgICAgTGlz
dGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+OjpMaXN0IG1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSGVhcElu
bGluZXNfaAogI2RlZmluZSBIZWFwSW5saW5lc19oCiAKLSNpbmNsdWRlICJDb3B5QmFycmllci5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKICNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtMjk0LDMxICsyOTMsNiBAQCBpbmxpbmUgdm9pZCog
SGVhcDo6dHJ5UmVhbGxvY2F0ZUF1eGlsaWFyCiAgICAgcmV0dXJuIG5ld0Jhc2U7CiB9CiAKLWlu
bGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCi17Ci0gICAgQ2hlY2tlZEJv
b2xlYW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7
Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICBkYXRhTG9nRigiSlNDIEdDIGFs
bG9jYXRpbmcgJWx1IGJ5dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRl
bmRlZE93bmVyLCAqb3V0UHRyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3du
ZXIpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIENoZWNrZWRCb29s
ZWFuIEhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9p
ZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQotewotI2lmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSNlbmRpZgotICAg
IENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRy
LCBvbGRTaXplLCBuZXdTaXplKTsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAg
IGRhdGFMb2dGKCJKU0MgR0MgcmVhbGxvY2F0aW5nICVsdSAtPiAlbHUgYnl0ZXMgb2Ygc3RvcmFn
ZSBmb3IgJXA6ICVwIC0+ICVwLlxuIiwgb2xkU2l6ZSwgbmV3U2l6ZSwgaW50ZW5kZWRPd25lciwg
b2xkUHRyLCAqcHRyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwot
I2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogaW5saW5lIHZvaWQgSGVhcDo6YXNjcmli
ZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogc3RvcmFnZSkKIHsKICNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFZlcmlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVmVyaWZpZXIuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBACiAjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcEl0
ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCkBAIC03NywyNyArNzYsNiBAQCBjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6OnBoYXNl
TmFtZShIZWFwCiAgICAgcmV0dXJuIG51bGxwdHI7IC8vIFNpbGVuY2luZyBhIGNvbXBpbGVyIHdh
cm5pbmcuCiB9CiAKLXN0YXRpYyB2b2lkIGdldEJ1dHRlcmZseURldGFpbHMoSlNPYmplY3QqIG9i
aiwgdm9pZComIGJ1dHRlcmZseUJhc2UsIHNpemVfdCYgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVz
LCBDb3BpZWRCbG9jayomIGJ1dHRlcmZseUJsb2NrKQotewotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+
YnV0dGVyZmx5KCk7Ci0gICAgYnV0dGVyZmx5QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1
cmUpOwotICAgIGJ1dHRlcmZseUJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKGJ1dHRlcmZs
eUJhc2UpOwotCi0gICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5OwotICAgIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlczsKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gb2Jq
LT5oYXNJbmRleGluZ0hlYWRlcigpOwotICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRl
cikpIHsKLSAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7Ci0gICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhzdHJ1Y3R1cmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZUNhcGFjaXR5ID0gMDsK
LSAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLSAgICBidXR0
ZXJmbHlDYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKLX0KLQogdm9pZCBIZWFwVmVyaWZpZXI6OmluaXRpYWxpemVHQ0N5Y2xlKCkKIHsK
ICAgICBIZWFwKiBoZWFwID0gbV9oZWFwOwpAQCAtMTk3LDQyICsxNzUsMTAgQEAgdm9pZCBIZWFw
VmVyaWZpZXI6OnRyaW1EZWFkT2JqZWN0cygpCiAgICAgfQogfQogCi1ib29sIEhlYXBWZXJpZmll
cjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVj
dExpc3QmIGxpc3QpCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3Jh
Z2VTcGFjZShQaGFzZSwgTGl2ZU9iamVjdExpc3QmKQogewotICAgIGF1dG8mIGxpdmVPYmplY3Rz
ID0gbGlzdC5saXZlT2JqZWN0czsKLQotICAgIENvcGllZFNwYWNlJiBzdG9yYWdlU3BhY2UgPSBt
X2hlYXAtPm1fc3RvcmFnZVNwYWNlOwotICAgIGJvb2wgbGlzdE5hbWVQcmludGVkID0gZmFsc2U7
Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
dmVPYmplY3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIExpdmVPYmplY3REYXRhJiBvYmplY3RE
YXRhID0gbGl2ZU9iamVjdHNbaV07Ci0gICAgICAgIGlmIChvYmplY3REYXRhLmlzQ29uZmlybWVk
RGVhZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEpTT2JqZWN0KiBvYmogPSBv
YmplY3REYXRhLm9iajsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmotPmJ1dHRl
cmZseSgpOwotICAgICAgICBpZiAoYnV0dGVyZmx5KSB7Ci0gICAgICAgICAgICB2b2lkKiBidXR0
ZXJmbHlCYXNlOwotICAgICAgICAgICAgc2l6ZV90IGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlczsK
LSAgICAgICAgICAgIENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsKLSAgICAgICAgICAgIGdl
dEJ1dHRlcmZseURldGFpbHMob2JqLCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0eUlu
Qnl0ZXMsIGJ1dHRlcmZseUJsb2NrKTsKLQotICAgICAgICAgICAgaWYgKCFzdG9yYWdlU3BhY2Uu
Y29udGFpbnMoYnV0dGVyZmx5QmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFsaXN0TmFt
ZVByaW50ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlZlcmlmaWNhdGlvbiBA
IHBoYXNlICVzIEZBSUxFRCBpbiBvYmplY3QgbGlzdCAnJXMnIChzaXplICV6dSlcbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBwaGFzZU5hbWUocGhhc2UpLCBsaXN0Lm5hbWUsIGxpdmVPYmpl
Y3RzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3ROYW1lUHJpbnRlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmotPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cnVj
dHVyZUNsYXNzTmFtZSA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZTsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgIGJ1dHRlcmZseSAlcCAoYmFzZSAlcCBzaXplICV6dSBi
bG9jayAlcCkgTk9UIGluIFN0b3JhZ2VTcGFjZSB8IG9iaiAlcCB0eXBlICclcydcbiIsCi0gICAg
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNp
dHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9jaywgb2JqLCBzdHJ1Y3R1cmVDbGFzc05hbWUpOwotICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gc3VjY2VzczsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsg
YWdhaW4uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3NTIKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBIZWFwVmVyaWZpZXI6OnZlcmlmeShIZWFwVmVyaWZp
ZXI6OlBoYXNlIHBoYXNlKQpAQCAtMjU0LDE0ICsyMDAsMTEgQEAgdm9pZCBIZWFwVmVyaWZpZXI6
OnJlcG9ydE9iamVjdChMaXZlT2JqZQogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmot
PnN0cnVjdHVyZSgpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHko
KTsKLSAgICB2b2lkKiBidXR0ZXJmbHlCYXNlOwotICAgIHNpemVfdCBidXR0ZXJmbHlDYXBhY2l0
eUluQnl0ZXM7Ci0gICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZseUJsb2NrOwotICAgIGdldEJ1dHRl
cmZseURldGFpbHMob2JqLCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMs
IGJ1dHRlcmZseUJsb2NrKTsKKyAgICB2b2lkKiBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5LT5i
YXNlKHN0cnVjdHVyZSk7CiAKLSAgICBkYXRhTG9nRigiRk9VTkQgb2JqICVwIHR5cGUgJyVzJyBi
dXR0ZXJmbHkgJXAgKGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIGluIEdDWyVkXSAlcyBsaXN0
ICclcydcbiIsCisgICAgZGF0YUxvZ0YoIkZPVU5EIG9iaiAlcCB0eXBlICclcycgYnV0dGVyZmx5
ICVwIChiYXNlICVwKSBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAogICAgICAgICBvYmosIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKLSAgICAgICAgYnV0dGVyZmx5LCBidXR0
ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2NrLAorICAg
ICAgICBidXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsCiAgICAgICAgIGN5Y2xlSW5kZXgsIGN5Y2xl
LmNvbGxlY3Rpb25UeXBlTmFtZSgpLCBsaXN0Lm5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDYgQEAKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKIAogI2lu
Y2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwUHJvZmls
ZXIuaCIKICNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCkBAIC00OTIsMzYgKzQ4OSw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKICAgICBkcmFpbigpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIoSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRv
a2VuLCB2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBBU1NFUlQoYnl0ZXMpOwotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwotICAgIGlm
IChibG9jay0+aXNPdmVyc2l6ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChieXRlcyA8PSBibG9jay0+
c2l6ZSgpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHNocmluayB0
aGUgYWxsb2NhdGlvbiBpZiBieXRlcyB3ZW50IGJlbG93IHRoZSBibG9jayBzaXplLgotICAgICAg
ICAvLyBGb3Igbm93LCB3ZSBqdXN0IG1ha2Ugc3VyZSB0aGF0IG91ciBhY2NvdW50aW5nIG9mIGhv
dyBtdWNoIG1lbW9yeSB3ZSBhcmUgYWN0dWFsbHkgdXNpbmcKLSAgICAgICAgLy8gaXMgY29ycmVj
dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDc0OQotICAgICAgICBieXRlcyA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIG1faGVhcC5tX3N0
b3JhZ2VTcGFjZS5waW4oYmxvY2spOwotICAgIH0KLQotICAgIEFTU0VSVChoZWFwKCktPm1fc3Rv
cmFnZVNwYWNlLmNvbnRhaW5zKGJsb2NrKSk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmYmxv
Y2stPndvcmtMaXN0TG9jaygpKTsKLSAgICAvLyBXZSBhbHdheXMgcmVwb3J0IGxpdmUgYnl0ZXMs
IGV4Y2VwdCBpZiBkdXJpbmcgYW4gZWRlbiBjb2xsZWN0aW9uIHdlIHNlZSBhbiBvbGQgb2JqZWN0
IHBvaW50aW5nIHRvIGFuCi0gICAgLy8gb2xkIGJhY2tpbmcgc3RvcmUgYW5kIHRoZSBvbGQgb2Jq
ZWN0IGlzIGJlaW5nIG1hcmtlZCBiZWNhdXNlIG9mIHRoZSByZW1lbWJlcmVkIHNldC4gTm90ZSB0
aGF0IGlmIHdlCi0gICAgLy8gYXNrIHRoZSBvYmplY3QgaXRzZWxmLCBpdCB3aWxsIGFsd2F5cyB0
ZWxsIHVzIHRoYXQgaXQncyBhbiBvbGQgYmxhY2sgb2JqZWN0IC0gYmVjYXVzZSBldmVuIGR1cmlu
ZyBhbgotICAgIC8vIGVkZW4gY29sbGVjdGlvbiB3ZSBoYXZlIGFscmVhZHkgaW5kaWNhdGVkIHRo
YXQgdGhlIG9iamVjdCBpcyBvbGQuIFRoYXQncyB3aHkgd2UgdXNlIHRoZQotICAgIC8vIFNsb3RW
aXNpdG9yJ3MgY2FjaGUgb2YgdGhlIG9iamVjdCdzIG9sZCBzdGF0ZS4KLSAgICBpZiAoaGVhcCgp
LT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24KLSAgICAgICAgfHwgIWJs
b2NrLT5pc09sZCgpCi0gICAgICAgIHx8IG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZp
c2l0aW5nICE9IENlbGxTdGF0ZTo6T2xkR3JleSkgewotICAgICAgICBtX2J5dGVzQ29waWVkICs9
IGJ5dGVzOwotICAgICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRv
a2VuLCBieXRlcyk7Ci0gICAgfQotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFx
dWVSb290cygpCiB7CiAgICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNo
b3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDU2
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIFNsb3RWaXNpdG9yX2gKIAogI2luY2x1
ZGUgIkNlbGxTdGF0ZS5oIgotI2luY2x1ZGUgIkNvcHlUb2tlbi5oIgogI2luY2x1ZGUgIkhhbmRs
ZVR5cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BhcXVlUm9vdFNl
dC5oIgpAQCAtMTExLDggKzExMCw2IEBAIHB1YmxpYzoKICAgICAvLyB0aGlzIHRoZW4gdGhlIHNw
YWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFyeShj
b25zdCB2b2lkKiBiYXNlKTsKIAotICAgIHZvaWQgY29weUxhdGVyKEpTQ2VsbCosIENvcHlUb2tl
biwgdm9pZCosIHNpemVfdCk7Ci0gICAgCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQoc2l6ZV90KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgdm9pZCByZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNp
bmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJH
UFJJbmZvLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKLSNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJCdWls
dGluTmFtZXMuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJy
b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlz
aW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxp
emVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4
aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KICAgICBj
b25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKICNpbmNs
dWRlICJCdXR0ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAKQEAgLTg3LDE1ICs4NSw2IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlKFZNJiAKICAgICAgICAgc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcihpbnRlbmRlZE93
bmVyKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImIHZp
c2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsK
LSAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBC
dXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAotICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3
U3BhY2Uoc2l6ZSksCi0gICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCiBpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24g
MjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKLSNpbmNsdWRlICJDb3B5VG9rZW4uaCIKICNpbmNs
dWRlICJKU0NlbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw5ICs0MCw2IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiB2b2lkICgqVmlzaXRDaGlsZHJlbkZ1bmN0aW9u
UHRyKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0
ciB2aXNpdENoaWxkcmVuOwogCi0gICAgdHlwZWRlZiB2b2lkICgqQ29weUJhY2tpbmdTdG9yZUZ1
bmN0aW9uUHRyKShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0gICAgQ29weUJh
Y2tpbmdTdG9yZUZ1bmN0aW9uUHRyIGNvcHlCYWNraW5nU3RvcmU7Ci0KICAgICB0eXBlZGVmIENh
bGxUeXBlICgqR2V0Q2FsbERhdGFGdW5jdGlvblB0cikoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAg
ICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIGdldENhbGxEYXRhOwogCkBAIC0xNTEsNyArMTQ3LDYg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICNkZWZpbmUgQ1JFQVRFX01FVEhPRF9UQUJMRShDbGFz
c05hbWUpIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCiAgICAgICAgICZDbGFz
c05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6Y29weUJhY2tpbmdT
dG9yZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjcgKzEwMSw4IEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHN0ZDo6bWF4KHRoaXNPYmplY3QtPm1f
bGVuZ3RoLCB0aGlzT2JqZWN0LT5tX21pbkNhcGFjaXR5KSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fY2FsbGVlKTsKICAgICAKLSAgICBpZiAodGhpc09iamVjdC0+bV9vdmVy
cmlkZXMpIHsKLSAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCi0gICAgICAgICAgICB0aGlzT2Jq
ZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4sCi0gICAgICAgICAgICB0aGlz
T2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgdGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2Vs
bCogdGhpc0NlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0g
ICAgRGlyZWN0QXJndW1lbnRzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1l
bnRzKj4odGhpc0NlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1
bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOwotICAgIAotICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9
IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKLSAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0g
c3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5v
dmVycmlkZXNTaXplKCkpKTsKLSAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xkT3ZlcnJp
ZGVzLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLnNldFdpdGhvdXRCYXJyaWVyKG5ld092ZXJyaWRlcyk7Ci0gICAgICAgIHZpc2l0b3IuZGlk
Q29weShvbGRPdmVycmlkZXMsIHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7Ci0gICAgfQor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRlcykKKyAgICAgICAgdmlzaXRvci5tYXJrQXV4
aWxpYXJ5KHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpKTsKIH0KIAogU3RydWN0dXJlKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTM3LDggKzExOCw4IEBAIHZvaWQg
RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmpl
Y3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIERvbnRFbnVtKTsKICAgICAKLSAgICB2
b2lkKiBiYWNraW5nU3RvcmU7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UodGhpcywgb3ZlcnJpZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7CisgICAgdm9p
ZCogYmFja2luZ1N0b3JlID0gdm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBvdmVy
cmlkZXNTaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9v
bCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9v
dmVycmlkZXMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAjaWZuZGVmIERpcmVjdEFyZ3VtZW50c19oCiAjZGVmaW5lIERpcmVjdEFyZ3Vt
ZW50c19oCiAKLSNpbmNsdWRlICJDb3B5QmFycmllci5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJh
cnJpZXIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCIKICNpbmNsdWRlICJH
ZW5lcmljQXJndW1lbnRzLmgiCiAKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICAKICAgICB1
aW50MzJfdCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0CiAgICAgewpAQCAtMTUwLDcgKzE0OSw3IEBA
IHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVp
bnQzMl90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQg
YXJndW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3Bl
cnR5LgogICAgIHVpbnQzMl90IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQg
bGVuZ3RoIGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUg
dGhlIGFjdHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFu
Z2UgaXQgdGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5QmFycmllcjxi
b29sPiBtX292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBj
YWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAg
IEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQg
bWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxp
emVkIHByb3BlcnRpZXMuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMTAgKzYxLDYgQEAgc2l6ZV90IEpTQ2VsbDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbAog
ICAgIHJldHVybiBjZWxsLT5jZWxsU2l6ZSgpOwogfQogCi12b2lkIEpTQ2VsbDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbikKLXsKLX0KLQogdm9pZCBK
U0NlbGw6OmhlYXBTbmFwc2hvdChKU0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJikKIHsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDU2
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDcgKzEzOCw2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CiAKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENv
cHlUb2tlbik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBoZWFwU25hcHNo
b3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlz
aW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVu
dmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgSlNM
ZXhpY2FsRW52aXJvbm1lbnRfaAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
Q29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgog
I2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1
LDYgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
cy5oIgotI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCi0jaW5jbHVkZSAiQ29weVZp
c2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAog
CiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5o
IgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2
aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlJlZ0V4
cE9iamVjdC5oIgogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1l
cy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxs
LmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk1Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOCArMTU3LDkgQEAg
Ym9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjppc0luT2JqZWN0U3BhYwogCiBib29sIEpTRG9sbGFy
Vk1Qcm90b3R5cGU6OmlzSW5TdG9yYWdlU3BhY2UoSGVhcCogaGVhcCwgdm9pZCogcHRyKQogewot
ICAgIENvcGllZEJsb2NrKiBjYW5kaWRhdGUgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsK
LSAgICByZXR1cm4gaGVhcC0+c3RvcmFnZVNwYWNlKCkuY29udGFpbnMoY2FuZGlkYXRlKTsKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhpcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzUzCisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBzdHJ1Y3QgQ2VsbEFkZHJlc3NDaGVja0Z1bmN0b3IgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5j
dG9yIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288324</attachid>
            <date>2016-09-08 14:37:42 -0700</date>
            <delta_ts>2016-09-08 14:42:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>128318</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDE2LTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIENvcGllZFNwYWNlIGFuZCB1c2UgTWFya2VkU3BhY2UgaW5zdGVhZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjU4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHJlbW92
ZXMgdGhlIGZpbmFsIGNsaWVudCBvZiBDb3BpZWRTcGFjZSwgdGhlIG92ZXJyaWRlcyBhcnJheSBv
ZiBEaXJlY3RBcmd1bWVudHMuIFRoYXQKKyAgICAgICAgaXMgYSBzaW1wbGUgY2hhbmdlLgorICAg
ICAgICAKKyAgICAgICAgVGhlbiB0aGlzIHN0dWJzIG91dCBzb21lIHJlbWFpbmluZyBpbnRlcm5h
bCBkZWJ1Z2dpbmcgY29kZSB0aGF0IHJlZmVyZW5jZWQgQ29waWVkU3BhY2UgaW4KKyAgICAgICAg
SlNEb2xsYXJWTSBhbmQgSGVhcFZlcmlmaWVyLiBJIGZpbGVkIEZJWE1FcyB0byByZXN0b3JlIHRo
YXQgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIAorICAgICAgICBUaGUgcmVzdCBv
ZiB0aGlzIHBhdGNoIGlzIGRlbGV0aW5nIENvcGllZFNwYWNlLgorCisgICAgICAgICogQVBJL0pT
T2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKToKKyAgICAg
ICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29w
aWVkQmxvY2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29w
aWVkU3BhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlSW5saW5lcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29weUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBoZWFwL0NvcHlUb2tlbi5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0
b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3IuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAq
IGhlYXAvQ29weVdvcmtMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzUGFnZWRP
dXQpOgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0SW1wbCk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BBbGxv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cyk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SGVhcDo6dGhyZWFkQnl0ZXNDb3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAv
SGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OmFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEpOgorICAgICAgICAoSlNDOjpIZWFwOjpz
dG9yYWdlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9yYWdlQWxsb2Nh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsSW5saW5lcy5oOgorICAgICAg
ICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5QWxsb2NhdGVT
dG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dHJ5UmVhbGxvY2F0ZVN0b3Jh
Z2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcFZlcmlmaWVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNlKToKKyAg
ICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpyZXBvcnRPYmplY3QpOgorICAgICAgICAoSlNDOjpn
ZXRCdXR0ZXJmbHlEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmNvcHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5jcHA6CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAgICAgICAgKiBy
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk1Q
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNUHJvdG90eXBlOjppc0luU3Rv
cmFnZVNwYWNlKToKKwogMjAxNi0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIEhlYXAgdmVyc2lvbiBzaG91bGQgYmUgMzItYml0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw5ICs0NDEs
NiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvQWxsb2NhdG9yQXR0cmli
dXRlcy5jcHAKICAgICBoZWFwL0NvZGVCbG9ja1NldC5jcHAKICAgICBoZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcAotICAgIGhlYXAvQ29waWVkQmxvY2suY3BwCi0gICAgaGVhcC9Db3BpZWRTcGFj
ZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAogICAgIGhlYXAvRGVmZXJHQy5jcHAKICAg
ICBoZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAKICAgICBoZWFwL0VkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYg
QEAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkFQSVV0aWxzLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDcg
KzQwOCw2IEBACiAJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4NzRFQzE5NEZF
QjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovOyB9OwogCQkwRjVBMTI3MzE5MkQ5RkRGMDA4
NzY0QTMgLyogREZHRG9lc0dDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICov
OyB9OwogCQkwRjVBMTI3NDE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBMTI3MjE5MkQ5RkRGMDA4
NzY0QTMgLyogREZHRG9lc0dDLmggKi87IH07Ci0JCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAv
KiBDb3B5VG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVBNjI4MzE4OEM5OEQ0MDA3
MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi87IH07CiAJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4
MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAv
KiBTbG93UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NDk2LDcgKzQ5NSw2IEBACiAJCTBGNzkwODU2MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lz
dHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsK
IAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQy
IC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzExQUMxQkMzODYy
QzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
N0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggKi87IH07CiAJCTBGN0Mz
OUZEMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMzlGQzFDOEY2NTk1MDA0ODAx
NTEgLyogUmVnRXhwT2JqZWN0SW5saW5lcy5oICovOyB9OwogCQkwRjdDMzlGRjFDOTBDNTVCMDA0
ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjdDMzlGRTFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggKi87IH07
CkBAIC02MjYsNyArNjI0LDYgQEAKIAkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3Bl
cnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjdGMzlEMTVFRDhF
NDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5RTE1RUQ4
RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNw
YXJzZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRkJBREY1NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQURGNTMx
QkQxRjRCODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTcxNDk2
QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5
NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5NjUs
MTMgKzE5NjIsOCBAQAogCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFy
ZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIx
NjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5
MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyMTgxRkMyMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9y
dFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIxODFGQzExOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gKi87IH07Ci0JCUMy
MThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMThEMTNGMTY1NUNGRDUwMDYyQkI4MSAv
KiBDb3B5V29ya0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTIxNjI2
MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsKLQkJQzIyMzlEMTgxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjIz
OUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
MjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi87IH07CiAJCUMyMkIz
MUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0MDMwNTMx
NEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLzsgfTsKIAkJQzI0RDMxRTIxNjFD
RDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzI0RDMxRTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzI1RDcwOUIxNkRFOTlG
NDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzI1RDcwOTkxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdl
ZFZhbHVlLm1tICovOyB9OwpAQCAtMTk5MCwxNyArMTk4MiwxMiBAQAogCQlDMkI5MTZDNTE0REEw
NDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJr
ZWRBbGxvY2F0b3IuY3BwICovOyB9OwogCQlDMkMwRjdDRDE3QkJGQzVCMDA0NjRGRTQgLyogREZH
RGVzaXJlZFRyYW5zaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNp
dGlvbnMuY3BwICovOyB9OwogCQlDMkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmgg
Ki87IH07Ci0JCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQzhEMDJC
MTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhF
NjUgLyogQ29waWVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQ0YzOUMxMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyog
SlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUg
LyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2Jq
ZWN0LmggKi87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIx
OEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhl
YXBUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKIAkJQzJF
NTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhl
YXBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFQUEzRjgxNDlBODMwODAwRkNF
MTEyIC8qIENvcGllZFNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFQUQy
RkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0Mx
OSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFy
ZURhdGEuY3BwICovOyB9OwotCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxv
Y2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkZDOUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGQ0FFMTAxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUMyRkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUx
N0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CkBA
IC0yNjU0LDcgKzI2NDEsNiBAQAogCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5
RXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXlFeGl0Lmg7IHBh
dGggPSBkZmcvREZHTWF5RXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
MTI3MTE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RvZXNHQy5jcHA7IHBhdGggPSBkZmcvREZHRG9lc0dDLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTEyNzIxOTJEOUZERjAwODc2NEEz
IC8qIERGR0RvZXNHQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb2Vz
R0MuaDsgcGF0aCA9IGRmZy9ERkdEb2VzR0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY1QTUyQ0YxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5jcHA7IHBhdGgg
PSBmdGwvRlRMVmFsdWVSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NUE2MjgyMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJh
bmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUI0QTMyMUM4NEYwRDYwMEYx
QjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2xvd1BhdGhSZXR1cm5UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNzQyLDcgKzI3MjgsNiBAQAogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzkwODUzMTlB
MjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25Q
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1NDE5QTI5MEIyMDBGNjMxMEMgLyog
REZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdT
dHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3QzM5RkExQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjdDMzlGQzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2Jq
ZWN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBPYmpl
Y3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0MzOUZFMUM5MEM1
NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHT3BJbmZvLmg7IHBhdGggPSBkZmcvREZHT3BJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yODgxLDcgKzI4NjYsNiBAQAogCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3
QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb3BlcnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI3RjM5
MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI3RjM5MjE1
RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGQkFERjUzMUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
RkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1
MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MjUwLDEyICs0MjM0LDcgQEAKIAkJQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIz
IC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjE4MUZDMDE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU0V4cG9ydFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNF
eHBvcnRUZXN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZDMTE4QTk0
OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEpTRXhwb3J0VGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBv
cnRUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxOEQxM0YxNjU1Q0ZE
NTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb3B5V29ya0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIyMzlE
MTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1
RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyNDAz
MDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAv
KiBIZWFwU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFw
U3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjVENzA5OTE2REU5
OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBKU01hbmFnZWRWYWx1ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQyNzYsMTcgKzQyNTUsMTIgQEAKIAkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXJrZWRBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5j
cHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNw
YWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFj
ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkUxNEEzQ0VG
QzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcGllZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUJG
MTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdy
YXBwZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFw
cGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5
OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkU1MjZC
QjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEFsbG9jYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyog
U3RydWN0dXJlUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3RydWN0dXJlUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
MkZDOUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVj
b2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBE
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUy
OTAsMTkgKzUyNjQsNiBAQAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxv
Y2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZl
Um9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRp
dmVSb290cy5oICovLAotCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxv
Y2F0b3IuaCAqLywKLQkJCQkwRkJBREY1MzFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2su
Y3BwICovLAotCQkJCUMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oICov
LAotCQkJCUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAq
LywKLQkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAot
CQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovLAotCQkJCUMy
QzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCAqLywKLQkJCQkw
RjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLywKLQkJCQkwRjVBNTJD
RjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi8sCi0JCQkJQzIyMzlEMTIxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLywKLQkJCQlDMjIzOUQxMzE2MjYyQkREMDA1
QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywKLQkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQg
LyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCi0JCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgx
IC8qIENvcHlXb3JrTGlzdC5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovLAogCQkJCTBGOTYzMDM3MUQ0MTkyQzMwMDU2MDlEOSAvKiBEZXN0cnVjdGlvbk1vZGUuY3Bw
ICovLApAQCAtNzM5MywxNyArNzM1NCw3IEBACiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0YyMTg5MUI1QjQw
MDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJs
b2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29w
aWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkVBQTNGQTE0OUE4MzVFMDBG
Q0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyQzhEMDJEMTRBM0M2
RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
N0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzQ4NkJCNzFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmggaW4g
SGVhZGVycyAqLywKLQkJCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyog
Q29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FC
NzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjk0OTU4ODFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLApA
QCAtOTA0NSwxMSArODk5Niw4IEBACiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENv
bnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFD
N0ZBIC8qIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJC
NzE3QjUxQTA1OTdFMTAwN0FGNEYzIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEZCQURGNTQxQkQxRjRCODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1RkM4NEIzMUQxRERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxv
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAv
KiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMzMDFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzIyMzlEMTcx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJB
MTExMjQ1MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAj
aW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXQuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrU2V0LmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBVdGls
LmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKQEAgLTcxLDggKzY5LDYgQEAgaW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZAogewogICAgIG1hcmtIb29rLm1h
cmsocCk7CiAKLSAgICBtX2hlYXAuc3RvcmFnZVNwYWNlKCkucGluSWZOZWNlc3NhcnkocCk7Ci0K
ICAgICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKAogICAgICAgICBt
X2hlYXAsIHZlcnNpb24sIGZpbHRlciwgcCwKICAgICAgICAgWyZdICh2b2lkKiBwKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkocmV2aXNp
b24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9y
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvcGllZEFsbG9jYXRvcl9oCi0jZGVm
aW5lIENvcGllZEFsbG9jYXRvcl9oCi0KLSNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgotI2luY2x1
ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29w
aWVkQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBDb3BpZWRBbGxvY2F0b3IoKTsKLSAgICAKLSAg
ICBib29sIGZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0ZXMpIGNvbnN0OwotICAgIENo
ZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cik7Ci0g
ICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywg
dm9pZCoqIG91dFB0cik7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZSh2b2lkICpv
bGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKTsKLSAgICB2b2lkKiBmb3Jj
ZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7Ci0gICAgQ29waWVkQmxvY2sqIHJlc2V0Q3VycmVudEJs
b2NrKCk7Ci0gICAgdm9pZCBzZXRDdXJyZW50QmxvY2soQ29waWVkQmxvY2sqKTsKLSAgICBzaXpl
X3QgY3VycmVudENhcGFjaXR5KCk7Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2N1cnJlbnRCbG9jazsgfQotCi0gICAgQ29waWVkQmxvY2sqIGN1cnJlbnRCbG9j
aygpIHsgcmV0dXJuIG1fY3VycmVudEJsb2NrOyB9Ci0KLSAgICAvLyBZZXMsIHRoZXNlIGFyZSBw
dWJsaWMuIE5vLCB0aGF0IGRvZXNuJ3QgbWVhbiB5b3UgY2FuIHBsYXkgd2l0aCB0aGVtLgotICAg
IC8vIElmIEkgaGFkIG1hZGUgdGhlbSBwcml2YXRlIHRoZW4gSSdkIGhhdmUgdG8gbGlzdCBvZmYg
YWxsIG9mIHRoZSBKSVQKLSAgICAvLyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZW50
aXRsZWQgdG8gbW9kaWZ5IHRoZXNlIGRpcmVjdGx5LCBhbmQKLSAgICAvLyB0aGF0IHdvdWxkIGhh
dmUgYmVlbiBncm9zcy4KLSAgICBzaXplX3QgbV9jdXJyZW50UmVtYWluaW5nOwotICAgIGNoYXIq
IG1fY3VycmVudFBheWxvYWRFbmQ7Ci0gICAgQ29waWVkQmxvY2sqIG1fY3VycmVudEJsb2NrOyAK
LX07Ci0KLWlubGluZSBDb3BpZWRBbGxvY2F0b3I6OkNvcGllZEFsbG9jYXRvcigpCi0gICAgOiBt
X2N1cnJlbnRSZW1haW5pbmcoMCkKLSAgICAsIG1fY3VycmVudFBheWxvYWRFbmQoMCkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi17Ci19Ci0KLWlubGluZSBib29sIENvcGllZEFsbG9jYXRvcjo6
ZmFzdFBhdGhTaG91bGRTdWNjZWVkKHNpemVfdCBieXRlcykgY29uc3QKLXsKLSAgICBBU1NFUlQo
aXM4Qnl0ZUFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYnl0ZXMpKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIGJ5dGVzIDw9IG1fY3VycmVudFJlbWFpbmluZzsKLX0KLQotaW5saW5lIENoZWNr
ZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lk
Kiogb3V0UHRyKQotewotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0
PHZvaWQqPihieXRlcykpKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBpbiBh
IGdyYXR1aXRvdXNseSBsb3ctbGV2ZWwgbWFubmVyLCBpbiBvcmRlciB0bwotICAgIC8vIHNlcnZl
IGFzIGEga2luZCBvZiB0ZW1wbGF0ZSBmb3Igd2hhdCB0aGUgSklUIHdvdWxkIGRvLiBOb3RlIHRo
YXQgdGhlCi0gICAgLy8gd2F5IGl0J3Mgd3JpdHRlbiBpdCBvdWdodCB0byBvbmx5IHJlcXVpcmUg
b25lIHJlZ2lzdGVyLCB3aGljaCBkb3VibGVzCi0gICAgLy8gYXMgdGhlIHJlc3VsdCwgcHJvdmlk
ZWQgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBhIG1pbmltYWwgYW1vdW50IG9mCi0gICAgLy8gY29u
dHJvbCBmbG93IHNpbXBsaWZpY2F0aW9uIGFuZCB0aGUgYnl0ZXMgYXJndW1lbnQgaXMgYSBjb25z
dGFudC4KLSAgICAKLSAgICBzaXplX3QgY3VycmVudFJlbWFpbmluZyA9IG1fY3VycmVudFJlbWFp
bmluZzsKLSAgICBpZiAoYnl0ZXMgPiBjdXJyZW50UmVtYWluaW5nKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY3VycmVudFJlbWFpbmluZyAtPSBieXRlczsKLSAgICBtX2N1cnJlbnRSZW1h
aW5pbmcgPSBjdXJyZW50UmVtYWluaW5nOwotICAgICpvdXRQdHIgPSBtX2N1cnJlbnRQYXlsb2Fk
RW5kIC0gY3VycmVudFJlbWFpbmluZyAtIGJ5dGVzOwotCi0gICAgQVNTRVJUKGlzOEJ5dGVBbGln
bmVkKCpvdXRQdHIpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJv
b2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5
dGVzLCB2b2lkKiogb3V0UHRyKQotewotICAgIGlmICghdHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2N1cnJlbnRCbG9jay0+cmVwb3J0TGl2
ZUJ5dGVzRHVyaW5nQ29weWluZyhieXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGlu
ZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeVJlYWxsb2NhdGUoCi0gICAgdm9p
ZCogb2xkUHRyLCBzaXplX3Qgb2xkQnl0ZXMsIHNpemVfdCBuZXdCeXRlcykKLXsKLSAgICBBU1NF
UlQoaXM4Qnl0ZUFsaWduZWQob2xkUHRyKSk7Ci0gICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZEJ5dGVzKSkpOwotICAgIEFTU0VSVChpczhCeXRlQWxp
Z25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihuZXdCeXRlcykpKTsKLSAgICAKLSAgICBBU1NF
UlQobmV3Qnl0ZXMgPiBvbGRCeXRlcyk7Ci0gICAgCi0gICAgc2l6ZV90IGFkZGl0aW9uYWxCeXRl
cyA9IG5ld0J5dGVzIC0gb2xkQnl0ZXM7Ci0gICAgCi0gICAgc2l6ZV90IGN1cnJlbnRSZW1haW5p
bmcgPSBtX2N1cnJlbnRSZW1haW5pbmc7Ci0gICAgaWYgKG1fY3VycmVudFBheWxvYWRFbmQgLSBj
dXJyZW50UmVtYWluaW5nIC0gb2xkQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9sZFB0cikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoYWRkaXRpb25hbEJ5dGVzID4g
Y3VycmVudFJlbWFpbmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fY3Vy
cmVudFJlbWFpbmluZyA9IGN1cnJlbnRSZW1haW5pbmcgLSBhZGRpdGlvbmFsQnl0ZXM7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkKiBDb3BpZWRBbGxvY2F0b3I6OmZv
cmNlQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIE5l
ZWRlZCBiZWNhdXNlIGNvbXBpbGVycyBkb24ndCByZWFsaXplIHRoaXMgd2lsbCBhbHdheXMgYmUg
YXNzaWduZWQuCi0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IHRyeUFsbG9jYXRlKGJ5
dGVzLCAmcmVzdWx0KTsKLSAgICBBU1NFUlQoZGlkU3VjY2VlZCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRBbGxvY2F0b3I6OnJlc2V0Q3VycmVu
dEJsb2NrKCkKLXsKLSAgICBDb3BpZWRCbG9jayogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2s7Ci0g
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXN1bHQtPm1fcmVtYWluaW5nID0gbV9jdXJyZW50
UmVtYWluaW5nOwotICAgICAgICBtX2N1cnJlbnRCbG9jayA9IDA7Ci0gICAgICAgIG1fY3VycmVu
dFJlbWFpbmluZyA9IDA7Ci0gICAgICAgIG1fY3VycmVudFBheWxvYWRFbmQgPSAwOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRBbGxvY2F0b3I6OnNl
dEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2spCi17Ci0gICAgQVNTRVJUKCFtX2N1
cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBuZXdCbG9jazsKLSAgICBBU1NFUlQo
bmV3QmxvY2spOwotICAgIG1fY3VycmVudFJlbWFpbmluZyA9IG5ld0Jsb2NrLT5tX3JlbWFpbmlu
ZzsKLSAgICBtX2N1cnJlbnRQYXlsb2FkRW5kID0gbmV3QmxvY2stPnBheWxvYWRFbmQoKTsKLX0K
LQotaW5saW5lIHNpemVfdCBDb3BpZWRBbGxvY2F0b3I6OmN1cnJlbnRDYXBhY2l0eSgpCi17Ci0g
ICAgaWYgKCFtX2N1cnJlbnRCbG9jaykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5jYXBhY2l0eSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9j
ay5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb3BpZWRCbG9jay5oIgotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotc3RhdGljIGNvbnN0IGJvb2wgY29tcHV0ZUJhbGFuY2UgPSBmYWxzZTsKLXN0YXRp
YyBzaXplX3QgYmFsYW5jZTsKLQotQ29waWVkQmxvY2sqIENvcGllZEJsb2NrOjpjcmVhdGVOb1pl
cm9GaWxsKEhlYXAmIGhlYXAsIHNpemVfdCBjYXBhY2l0eSkKLXsKLSAgICBpZiAoY29tcHV0ZUJh
bGFuY2UpIHsKLSAgICAgICAgYmFsYW5jZSsrOwotICAgICAgICBpZiAoIShiYWxhbmNlICUgMTAp
KQotICAgICAgICAgICAgZGF0YUxvZygiQ29waWVkQmxvY2sgQmFsYW5jZTogIiwgYmFsYW5jZSwg
IlxuIik7Ci0gICAgfQotICAgIENvcGllZEJsb2NrKiBibG9jayA9IG5ldyAoTm90TnVsbCwgZmFz
dEFsaWduZWRNYWxsb2MoQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSwgY2FwYWNpdHkpKSBDb3BpZWRC
bG9jayhjYXBhY2l0eSk7Ci0gICAgaGVhcC5kaWRBbGxvY2F0ZUJsb2NrKGNhcGFjaXR5KTsKLSAg
ICByZXR1cm4gYmxvY2s7Ci19Ci0KLXZvaWQgQ29waWVkQmxvY2s6OmRlc3Ryb3koSGVhcCYgaGVh
cCwgQ29waWVkQmxvY2sqIGNvcGllZEJsb2NrKQotewotICAgIGlmIChjb21wdXRlQmFsYW5jZSkg
ewotICAgICAgICBiYWxhbmNlLS07Ci0gICAgICAgIGlmICghKGJhbGFuY2UgJSAxMCkpCi0gICAg
ICAgICAgICBkYXRhTG9nKCJDb3BpZWRCbG9jayBCYWxhbmNlOiAiLCBiYWxhbmNlLCAiXG4iKTsK
LSAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gY29waWVkQmxvY2stPmNhcGFjaXR5KCk7Ci0g
ICAgY29waWVkQmxvY2stPn5Db3BpZWRCbG9jaygpOwotICAgIGZhc3RBbGlnbmVkRnJlZShjb3Bp
ZWRCbG9jayk7Ci0gICAgaGVhcC5kaWRGcmVlQmxvY2soY2FwYWNpdHkpOwotfQotCi1Db3BpZWRC
bG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZShIZWFwJiBoZWFwLCBzaXplX3QgY2FwYWNpdHkpCi17
Ci0gICAgQ29waWVkQmxvY2sqIG5ld0Jsb2NrID0gY3JlYXRlTm9aZXJvRmlsbChoZWFwLCBjYXBh
Y2l0eSk7Ci0gICAgbmV3QmxvY2stPnplcm9GaWxsV2lsZGVybmVzcygpOwotICAgIHJldHVybiBu
ZXdCbG9jazsKLX0KLQotdm9pZCBDb3BpZWRCbG9jazo6emVyb0ZpbGxXaWxkZXJuZXNzKCkKLXsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1lbXNldCh3aWxkZXJuZXNzKCksIDAsIHdpbGRlcm5l
c3NTaXplKCkpOwotI2Vsc2UKLSAgICBKU1ZhbHVlIGVtcHR5VmFsdWU7Ci0gICAgSlNWYWx1ZSog
bGltaXQgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4od2lsZGVybmVzc0VuZCgpKTsK
LSAgICBmb3IgKEpTVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpT
VmFsdWUqPih3aWxkZXJuZXNzKCkpOyBjdXJyZW50VmFsdWUgPCBsaW1pdDsgY3VycmVudFZhbHVl
KyspCi0gICAgICAgICpjdXJyZW50VmFsdWUgPSBlbXB0eVZhbHVlOwotI2VuZGlmCi19Ci0KLUNv
cGllZEJsb2NrOjpDb3BpZWRCbG9jayhzaXplX3QgY2FwYWNpdHkpCi0gICAgOiBEb3VibHlMaW5r
ZWRMaXN0Tm9kZTxDb3BpZWRCbG9jaz4oKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLSAg
ICAsIG1fcmVtYWluaW5nKHBheWxvYWRDYXBhY2l0eSgpKQotICAgICwgbV9pc1Bpbm5lZChmYWxz
ZSkKLSAgICAsIG1faXNPbGQoZmFsc2UpCi0gICAgLCBtX2xpdmVCeXRlcygwKQotI2lmbmRlZiBO
REVCVUcKLSAgICAsIG1fbGl2ZU9iamVjdHMoMCkKLSNlbmRpZgotewotICAgIEFTU0VSVChpczhC
eXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3JlbWFpbmluZykpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEJsb2NrLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvcGll
ZEJsb2NrX2gKLSNkZWZpbmUgQ29waWVkQmxvY2tfaAotCi0jaW5jbHVkZSAiQ29weVdvcmtMaXN0
LmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNs
dWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb3BpZWRTcGFjZTsKLQotY2xhc3MgQ29waWVkQmxvY2sg
OiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q29waWVkQmxvY2s+IHsKLSAgICBmcmllbmQg
Y2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxDb3BpZWRCbG9jaz47Ci0gICAgZnJpZW5k
IGNsYXNzIENvcGllZFNwYWNlOwotICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRBbGxvY2F0b3I7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGUoSGVhcCYsIHNpemVfdCA9IGJs
b2NrU2l6ZSk7Ci0gICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKEhlYXAm
LCBzaXplX3QgPSBibG9ja1NpemUpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGVhcCYsIENv
cGllZEJsb2NrKik7Ci0KLSAgICB2b2lkIHBpbigpOwotICAgIGJvb2wgaXNQaW5uZWQoKTsKLQot
ICAgIGJvb2wgaXNPbGQoKTsKLSAgICBib29sIGlzT3ZlcnNpemUoKTsKLSAgICB2b2lkIGRpZFBy
b21vdGUoKTsKLQotICAgIHVuc2lnbmVkIGxpdmVCeXRlcygpOwotICAgIHZvaWQgcmVwb3J0TGl2
ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKLSAgICB2
b2lkIHJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcodW5zaWduZWQpOwotICAgIHZvaWQgZGlk
U3Vydml2ZUdDKCk7Ci0gICAgdm9pZCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKLSAgICBi
b29sIHNob3VsZEV2YWN1YXRlKCk7Ci0gICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7Ci0KLSAgICAv
LyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBm
b3IgYWxsb2NhdGlvbnMuCi0gICAgY2hhciogcGF5bG9hZCgpOwotICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKLSAgICBzaXplX3QgcGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgCi0gICAgLy8gVGhlIGRh
dGEgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmxvY2sgdGhhdCBoYXMgYmVlbiB1c2VkIGZvciBhbGxv
Y2F0aW9ucy4KLSAgICBjaGFyKiBkYXRhKCk7Ci0gICAgY2hhciogZGF0YUVuZCgpOwotICAgIHNp
emVfdCBkYXRhU2l6ZSgpOwotICAgIAotICAgIC8vIFRoZSB3aWxkZXJuZXNzIGlzIHRoZSByZWdp
b24gb2YgdGhlIGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucwotICAgIC8vIGJ1
dCBoYXMgbm90IGJlZW4gc28gdXNlZC4KLSAgICBjaGFyKiB3aWxkZXJuZXNzKCk7Ci0gICAgY2hh
ciogd2lsZGVybmVzc0VuZCgpOwotICAgIHNpemVfdCB3aWxkZXJuZXNzU2l6ZSgpOwotICAgIAot
ICAgIHNpemVfdCBzaXplKCk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5KCk7Ci0KLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGJsb2NrU2l6ZSA9IDY0ICogS0I7Ci0KLSAgICBib29sIGhhc1dvcmtMaXN0
KCk7Ci0gICAgQ29weVdvcmtMaXN0JiB3b3JrTGlzdCgpOwotICAgIExvY2smIHdvcmtMaXN0TG9j
aygpIHsgcmV0dXJuIG1fd29ya0xpc3RMb2NrOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29waWVkQmxv
Y2soc2l6ZV90KTsKLSAgICB2b2lkIHplcm9GaWxsV2lsZGVybmVzcygpOyAvLyBDYW4gYmUgY2Fs
bGVkIGF0IGFueSB0aW1lIHRvIHplcm8tZmlsbCB0byB0aGUgZW5kIG9mIHRoZSBibG9jay4KLQot
ICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQ29waWVkQmxvY2sqIG1fcHJldjsK
LSAgICBDb3BpZWRCbG9jayogbV9uZXh0OwotCi0gICAgc2l6ZV90IG1fY2FwYWNpdHk7Ci0KLSAg
ICBMb2NrIG1fd29ya0xpc3RMb2NrOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb3B5V29ya0xpc3Q+
IG1fd29ya0xpc3Q7Ci0KLSAgICBzaXplX3QgbV9yZW1haW5pbmc7Ci0gICAgYm9vbCBtX2lzUGlu
bmVkIDogMTsKLSAgICBib29sIG1faXNPbGQgOiAxOwotICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVz
OwotI2lmbmRlZiBOREVCVUcKLSAgICB1bnNpZ25lZCBtX2xpdmVPYmplY3RzOwotI2VuZGlmCi19
OwotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKLXsKLSAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgQVNTRVJUKGlzT2xkKCkpOwotICAgIG1fbGl2ZUJ5dGVzID0g
MDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9saXZlT2JqZWN0cyA9IDA7Ci0jZW5kaWYKLSAgICBt
X2lzUGlubmVkID0gZmFsc2U7Ci0gICAgaWYgKG1fd29ya0xpc3QpCi0gICAgICAgIG1fd29ya0xp
c3QgPSBudWxscHRyOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVC
eXRlcyh1bnNpZ25lZCBieXRlcykKLXsKLSAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0gYnl0ZXMp
OwotICAgIEFTU0VSVChtX2xpdmVPYmplY3RzKTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgbV9saXZlQnl0ZXMgLT0gYnl0ZXM7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fbGl2ZU9iamVj
dHMtLTsKLSNlbmRpZgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotaW5saW5lIGJvb2wg
Q29waWVkQmxvY2s6OmNhbkJlUmVjeWNsZWQoKQotewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICByZXR1cm4gIW1fbGl2ZUJ5dGVzOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6
c2hvdWxkRXZhY3VhdGUoKQotewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX2xpdmVCeXRlcykgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHBh
eWxvYWRDYXBhY2l0eSgpKSA8PSBPcHRpb25zOjptaW5Db3BpZWRCbG9ja1V0aWxpemF0aW9uKCk7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjpwaW4oKQotewotICAgIG1faXNQaW5uZWQg
PSB0cnVlOwotICAgIGlmIChtX3dvcmtMaXN0KQotICAgICAgICBtX3dvcmtMaXN0ID0gbnVsbHB0
cjsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzUGlubmVkKCkKLXsKLSAgICByZXR1
cm4gbV9pc1Bpbm5lZDsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT2xkKCkKLXsK
LSAgICByZXR1cm4gbV9pc09sZDsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFBy
b21vdGUoKQotewotICAgIG1faXNPbGQgPSB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRC
bG9jazo6aXNPdmVyc2l6ZSgpCi17Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHkgIT0gYmxvY2tTaXpl
OwotfQotCi1pbmxpbmUgdW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCi17Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBtX2xpdmVCeXRlczsKLX0KLQotaW5saW5l
IGNoYXIqIENvcGllZEJsb2NrOjpwYXlsb2FkKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKGRvdWJs
ZSk+KHNpemVvZihDb3BpZWRCbG9jaykpOwotfQotCi1pbmxpbmUgY2hhciogQ29waWVkQmxvY2s6
OnBheWxvYWRFbmQoKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSArIG1fY2FwYWNpdHk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OnBheWxvYWRD
YXBhY2l0eSgpCi17Ci0gICAgcmV0dXJuIHBheWxvYWRFbmQoKSAtIHBheWxvYWQoKTsKLX0KLQot
aW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gcGF5bG9hZCgp
OwotfQotCi1pbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OmRhdGFFbmQoKQotewotICAgIHJldHVy
biBwYXlsb2FkRW5kKCkgLSBtX3JlbWFpbmluZzsKLX0KLQotaW5saW5lIHNpemVfdCBDb3BpZWRC
bG9jazo6ZGF0YVNpemUoKQotewotICAgIHJldHVybiBkYXRhRW5kKCkgLSBkYXRhKCk7Ci19Ci0K
LWlubGluZSBjaGFyKiBDb3BpZWRCbG9jazo6d2lsZGVybmVzcygpCi17Ci0gICAgcmV0dXJuIGRh
dGFFbmQoKTsKLX0KLQotaW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjp3aWxkZXJuZXNzRW5kKCkK
LXsKLSAgICByZXR1cm4gcGF5bG9hZEVuZCgpOwotfQotCi1pbmxpbmUgc2l6ZV90IENvcGllZEJs
b2NrOjp3aWxkZXJuZXNzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIHdpbGRlcm5lc3NFbmQoKSAtIHdp
bGRlcm5lc3MoKTsKLX0KLQotaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6c2l6ZSgpCi17Ci0g
ICAgcmV0dXJuIGRhdGFTaXplKCk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OmNh
cGFjaXR5KCkKLXsKLSAgICByZXR1cm4gbV9jYXBhY2l0eTsKLX0KLQotaW5saW5lIGJvb2wgQ29w
aWVkQmxvY2s6Omhhc1dvcmtMaXN0KCkKLXsKLSAgICByZXR1cm4gISFtX3dvcmtMaXN0OwotfQot
Ci1pbmxpbmUgQ29weVdvcmtMaXN0JiBDb3BpZWRCbG9jazo6d29ya0xpc3QoKQotewotICAgIHJl
dHVybiAqbV93b3JrTGlzdDsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmNoZWNrQ29u
c2lzdGVuY3koKQotewotICAgIEFTU0VSVCghIW1fbGl2ZUJ5dGVzID09ICEhbV9saXZlT2JqZWN0
cyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMDU2
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENvcGllZEJsb2NrSW5saW5lc19oCi0jZGVmaW5lIENvcGllZEJsb2NrSW5saW5lc19o
Ci0KLSNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoTG9j
a0hvbGRlciYsIEpTQ2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMp
Ci17Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2xpdmVP
YmplY3RzKys7Ci0jZW5kaWYKLSAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IG1fY2FwYWNpdHkpOwotCi0g
ICAgaWYgKGlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkRXZh
Y3VhdGUoKSkgewotICAgICAgICBwaW4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV93b3JrTGlzdCkKLSAgICAgICAgbV93b3JrTGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29weVdvcmtMaXN0PigpOwotCi0gICAgbV93b3JrTGlzdC0+YXBwZW5kKENvcHlXb3JrbGlzdEl0
ZW0ob3duZXIsIHRva2VuKSk7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkIGJ5dGVzKQotewotICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICAvLyBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBsb2NrZWQgYmVjYXVzZSB0
aGUgdGhyZWFkIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBvd25zIHRoZSBjdXJyZW50IGJsb2Nr
LgotICAgIG1faXNPbGQgPSB0cnVlOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2xpdmVPYmplY3Rz
Kys7Ci0jZW5kaWYKLSAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcGllZEJsb2NrSW5saW5l
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShy
ZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFj
ZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29waWVkU3BhY2UuaCIKLQotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLUNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQot
ICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX2luQ29weWluZ1BoYXNlKGZhbHNlKQotICAgICwg
bV9zaG91bGREb0NvcHlQaGFzZShmYWxzZSkKLSAgICAsIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3Mo
MCkKLSAgICAsIG1fYnl0ZXNSZW1vdmVkRnJvbU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRpb24oMCkK
LXsKLX0KLQotQ29waWVkU3BhY2U6On5Db3BpZWRTcGFjZSgpCi17Ci0gICAgd2hpbGUgKCFtX29s
ZEdlbi50b1NwYWNlLT5pc0VtcHR5KCkpCi0gICAgICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpo
ZWFwKCksIG1fb2xkR2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQoKSk7Ci0KLSAgICB3aGlsZSAoIW1f
b2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJv
eSgqaGVhcCgpLCBtX29sZEdlbi5mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKSk7Ci0KLSAgICB3aGls
ZSAoIW1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSkKLSAgICAgICAgQ29waWVkQmxv
Y2s6OmRlc3Ryb3koKmhlYXAoKSwgbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MucmVtb3ZlSGVhZCgp
KTsKLQotICAgIHdoaWxlICghbV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBD
b3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBtX25ld0dlbi50b1NwYWNlLT5yZW1vdmVIZWFk
KCkpOwotCi0gICAgd2hpbGUgKCFtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAg
ICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgbV9uZXdHZW4uZnJvbVNwYWNlLT5yZW1v
dmVIZWFkKCkpOwotCi0gICAgd2hpbGUgKCFtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5
KCkpCi0gICAgICAgIENvcGllZEJsb2NrOjpkZXN0cm95KCpoZWFwKCksIG1fbmV3R2VuLm92ZXJz
aXplQmxvY2tzLnJlbW92ZUhlYWQoKSk7Ci0KLSAgICBBU1NFUlQobV9vbGRHZW4udG9TcGFjZS0+
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9vbGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOwotICAgIEFTU0VS
VChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5mcm9t
U3BhY2UtPmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmlz
RW1wdHkoKSk7Ci19Ci0KLXZvaWQgQ29waWVkU3BhY2U6OmluaXQoKQotewotICAgIG1fb2xkR2Vu
LnRvU3BhY2UgPSAmbV9vbGRHZW4uYmxvY2tzMTsKLSAgICBtX29sZEdlbi5mcm9tU3BhY2UgPSAm
bV9vbGRHZW4uYmxvY2tzMjsKLSAgICAKLSAgICBtX25ld0dlbi50b1NwYWNlID0gJm1fbmV3R2Vu
LmJsb2NrczE7Ci0gICAgbV9uZXdHZW4uZnJvbVNwYWNlID0gJm1fbmV3R2VuLmJsb2NrczI7Ci0K
LSAgICBhbGxvY2F0ZUJsb2NrKCk7Ci19ICAgCi0KLUNoZWNrZWRCb29sZWFuIENvcGllZFNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAg
ICBpZiAoaXNPdmVyc2l6ZShieXRlcykpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJz
aXplKGJ5dGVzLCBvdXRQdHIpOwotICAgIAotICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9h
bGxvY2F0b3IuY3VycmVudENhcGFjaXR5KCkpOwotCi0gICAgYWxsb2NhdGVCbG9jaygpOwotCi0g
ICAgKm91dFB0ciA9IG1fYWxsb2NhdG9yLmZvcmNlQWxsb2NhdGUoYnl0ZXMpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1DaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVy
c2l6ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCi17Ci0gICAgQVNTRVJUKGlzT3ZlcnNp
emUoYnl0ZXMpKTsKLSAgICAKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6
Y3JlYXRlKCptX2hlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoZG91YmxlKT4o
c2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzKSk7Ci0gICAgbV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3MucHVzaChibG9jayk7Ci0gICAgbV9uZXdHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7Ci0gICAgQVNT
RVJUKCFibG9jay0+aXNPbGQoKSk7Ci0gICAgCi0gICAgQ29waWVkQWxsb2NhdG9yIGFsbG9jYXRv
cjsKLSAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKLSAgICAqb3V0UHRyID0g
YWxsb2NhdG9yLmZvcmNlQWxsb2NhdGUoYnl0ZXMpOwotICAgIGFsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpOwotCi0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShibG9jay0+Y2FwYWNpdHkoKSk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRy
eVJlYWxsb2NhdGUodm9pZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQot
ewotICAgIGlmIChvbGRTaXplID49IG5ld1NpemUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0gICAgQVNTRVJUKCFtX2hlYXAtPnZtKCktPmlz
SW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIAotICAgIGlmIChDb3BpZWRTcGFjZTo6YmxvY2tG
b3Iob2xkUHRyKS0+aXNPdmVyc2l6ZSgpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCi0gICAgICAg
IHJldHVybiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKLSAg
ICAKLSAgICBpZiAobV9hbGxvY2F0b3IudHJ5UmVhbGxvY2F0ZShvbGRQdHIsIG9sZFNpemUsIG5l
d1NpemUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0g
ICAgaWYgKCF0cnlBbGxvY2F0ZShuZXdTaXplLCAmcmVzdWx0KSkgewotICAgICAgICAqcHRyID0g
MDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtZW1jcHkocmVzdWx0LCBvbGRQ
dHIsIG9sZFNpemUpOwotICAgICpwdHIgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUNoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9pZCoq
IHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQotewotICAgIEFTU0VSVChpc092
ZXJzaXplKG9sZFNpemUpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpOwotICAgIEFTU0VSVChuZXdT
aXplID4gb2xkU2l6ZSk7Ci0KLSAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOwotICAgIAotICAgIHZv
aWQqIG5ld1B0ciA9IDA7Ci0gICAgaWYgKCF0cnlBbGxvY2F0ZU92ZXJzaXplKG5ld1NpemUsICZu
ZXdQdHIpKSB7Ci0gICAgICAgICpwdHIgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBvbGRTaXplKTsKLQotICAgIENvcGllZEJs
b2NrKiBvbGRCbG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpOwotICAgIGlmIChv
bGRCbG9jay0+aXNPdmVyc2l6ZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBFYWdlcmx5IGRlYWxs
b2NhdGluZyB0aGUgb2xkIHNwYWNlIGJsb2NrIHByb2JhYmx5IGJ1eXMgbW9yZSBjb25mdXNpb24g
dGhhbgotICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NDc1MAotICAgICAgICBpZiAob2xkQmxvY2stPmlzT2xkKCkp
IHsKLSAgICAgICAgICAgIG1fYnl0ZXNSZW1vdmVkRnJvbU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRp
b24gKz0gb2xkQmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLnJlbW92ZShvbGRCbG9jayk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9uZXdH
ZW4ub3ZlcnNpemVCbG9ja3MucmVtb3ZlKG9sZEJsb2NrKTsKLSAgICAgICAgbV9ibG9ja1NldC5y
ZW1vdmUob2xkQmxvY2spOwotICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBv
bGRCbG9jayk7Ci0gICAgfQotICAgIAotICAgICpwdHIgPSBuZXdQdHI7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sq
IGJsb2NrLCBDb3BpZWRCbG9jayoqIGV4Y2hhbmdlKQotewotICAgIEFTU0VSVChtX2luQ29weWlu
Z1BoYXNlKTsKLSAgICAKLSAgICBpZiAoZXhjaGFuZ2UpCi0gICAgICAgICpleGNoYW5nZSA9IGFs
bG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKTsKLQotICAgIGlmICghYmxvY2spCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghYmxvY2stPmRhdGFTaXplKCkpIHsKLSAgICAgICAgcmVjeWNs
ZUJvcnJvd2VkQmxvY2soYmxvY2spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYmxv
Y2stPnplcm9GaWxsV2lsZGVybmVzcygpOwotCi0gICAgewotICAgICAgICAvLyBBbHdheXMgcHV0
IHRoZSBibG9jayBpbnRvIHRoZSBvbGQgZ2VuIGJlY2F1c2UgaXQncyBiZWluZyBwcm9tb3RlZCEK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwotICAgICAgICBtX29s
ZEdlbi50b1NwYWNlLT5wdXNoKGJsb2NrKTsKLSAgICAgICAgbV9ibG9ja1NldC5hZGQoYmxvY2sp
OwotICAgICAgICBtX29sZEdlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihibG9jaykpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2FuZWRCbG9ja3NMb2NrKTsKLSAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3Mg
PiAwKTsKLSAgICAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwotICAgICAgICBtX251bWJl
ck9mTG9hbmVkQmxvY2tzLS07Ci0gICAgfQotfQotCi12b2lkIENvcGllZFNwYWNlOjpkaWRTdGFy
dEZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dy
ZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pOwotICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2Ut
PmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsK
LQotI2lmbmRlZiBOREVCVUcKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2Vu
LnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAg
QVNTRVJUKCFibG9jay0+bGl2ZUJ5dGVzKCkpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxv
Y2sgPSBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2Nr
LT5uZXh0KCkpCi0gICAgICAgIEFTU0VSVCghYmxvY2stPmxpdmVCeXRlcygpKTsKLSNlbmRpZgot
Ci0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi50b1NwYWNlLT5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZl
R0MoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVC
bG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBibG9j
ay0+ZGlkU3Vydml2ZUdDKCk7Ci19Ci0KLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNlKTsKLSAg
ICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7Ci0KLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGll
ZEJsb2NrPiogdG9TcGFjZTsKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogZnJv
bVNwYWNlOwotICAgIFRpbnlCbG9vbUZpbHRlciogYmxvY2tGaWx0ZXI7Ci0gICAgaWYgKGhlYXAo
KS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKSB7Ci0gICAgICAgIHRv
U3BhY2UgPSBtX29sZEdlbi50b1NwYWNlOwotICAgICAgICBmcm9tU3BhY2UgPSBtX29sZEdlbi5m
cm9tU3BhY2U7Ci0gICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHRvU3BhY2UgPSBtX25ld0dlbi50b1NwYWNlOwotICAgICAg
ICBmcm9tU3BhY2UgPSBtX25ld0dlbi5mcm9tU3BhY2U7Ci0gICAgICAgIGJsb2NrRmlsdGVyID0g
Jm1fbmV3R2VuLmJsb2NrRmlsdGVyOwotICAgIH0KLQotICAgIHdoaWxlICghZnJvbVNwYWNlLT5p
c0VtcHR5KCkpIHsKLSAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gZnJvbVNwYWNlLT5yZW1v
dmVIZWFkKCk7Ci0gICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2Nr
U2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCi0gICAgICAgIEFTU0VSVChtX2Jsb2Nr
U2V0LmNvbnRhaW5zKGJsb2NrKSk7Ci0gICAgICAgIGJsb2NrRmlsdGVyLT5hZGQocmVpbnRlcnBy
ZXRfY2FzdDxCaXRzPihibG9jaykpOwotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7Ci0g
ICAgICAgIHRvU3BhY2UtPnB1c2goYmxvY2spOwotICAgIH0KLQotICAgIGlmIChoZWFwKCktPm9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgewotICAgICAgICBtX29sZEdl
bi50b1NwYWNlLT5hcHBlbmQoKm1fbmV3R2VuLnRvU3BhY2UpOwotICAgICAgICBtX29sZEdlbi5v
dmVyc2l6ZUJsb2Nrcy5hcHBlbmQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOwotICAgICAgICBt
X29sZEdlbi5ibG9ja0ZpbHRlci5hZGQobV9uZXdHZW4uYmxvY2tGaWx0ZXIpOwotICAgICAgICBt
X25ld0dlbi5ibG9ja0ZpbHRlci5yZXNldCgpOwotICAgIH0KLQotICAgIEFTU0VSVChtX25ld0dl
bi50b1NwYWNlLT5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7
Ci0KLSAgICBhbGxvY2F0ZUJsb2NrKCk7Ci0KLSAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gZmFs
c2U7Ci19Ci0KLXNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCi17Ci0gICAgc2l6ZV90IGNhbGN1
bGF0ZWRTaXplID0gMDsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4u
dG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBj
YWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX29sZEdlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKLQotICAg
IGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkU2l6ZSAr
PSBibG9jay0+c2l6ZSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dl
bi50b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAg
IGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7Ci0KLSAgICBmb3IgKENvcGllZEJsb2Nr
KiBibG9jayA9IG1fbmV3R2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9j
ay0+bmV4dCgpKQotICAgICAgICBjYWxjdWxhdGVkU2l6ZSArPSBibG9jay0+c2l6ZSgpOwotCi0g
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFk
KCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRTaXpl
ICs9IGJsb2NrLT5zaXplKCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRlZFNpemU7Ci19Ci0KLXNp
emVfdCBDb3BpZWRTcGFjZTo6Y2FwYWNpdHkoKQotewotICAgIHNpemVfdCBjYWxjdWxhdGVkQ2Fw
YWNpdHkgPSAwOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi50b1Nw
YWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1
bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKLQotICAgIGZvciAoQ29waWVkQmxv
Y2sqIGJsb2NrID0gbV9vbGRHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJs
b2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNp
dHkoKTsKLQotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVC
bG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBjYWxj
dWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0KLSAgICBmb3IgKENvcGllZEJs
b2NrKiBibG9jayA9IG1fbmV3R2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxv
Y2stPm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0
eSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi5mcm9tU3BhY2Ut
PmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgY2FsY3VsYXRl
ZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJs
b2NrLT5uZXh0KCkpCi0gICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNp
dHkoKTsKLQotICAgIHJldHVybiBjYWxjdWxhdGVkQ2FwYWNpdHk7Ci19Ci0KLXN0YXRpYyBib29s
IGlzQmxvY2tMaXN0UGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lLCBEb3VibHlMaW5rZWRMaXN0PENv
cGllZEJsb2NrPiogbGlzdCkKLXsKLSAgICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVj
ayA9IDA7Ci0gICAgQ29waWVkQmxvY2sqIGN1cnJlbnQgPSBsaXN0LT5oZWFkKCk7Ci0gICAgd2hp
bGUgKGN1cnJlbnQpIHsKLSAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKTsKLSAgICAg
ICAgKytpdGVyc1NpbmNlTGFzdFRpbWVDaGVjazsKLSAgICAgICAgaWYgKGl0ZXJzU2luY2VMYXN0
VGltZUNoZWNrID49IEhlYXA6OnNfdGltZUNoZWNrUmVzb2x1dGlvbikgewotICAgICAgICAgICAg
ZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
LSAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+IGRlYWRsaW5lKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENvcGllZFNw
YWNlOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKLXsKLSAgICByZXR1cm4gaXNCbG9ja0xp
c3RQYWdlZE91dChkZWFkbGluZSwgbV9vbGRHZW4udG9TcGFjZSkgCi0gICAgICAgIHx8IGlzQmxv
Y2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fb2xkR2VuLmZyb21TcGFjZSkgCi0gICAgICAgIHx8
IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsICZtX29sZEdlbi5vdmVyc2l6ZUJsb2NrcykK
LSAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9uZXdHZW4udG9TcGFj
ZSkgCi0gICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fbmV3R2VuLmZy
b21TcGFjZSkgCi0gICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsICZtX25l
d0dlbi5vdmVyc2l6ZUJsb2Nrcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAyMDU2NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShub25leGlzdGVudCkK
QEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBDb3BpZWRTcGFjZV9oCi0jZGVmaW5lIENvcGllZFNwYWNlX2gKLQot
I2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgotI2luY2x1ZGUgPHd0Zi9Eb3VibHlM
aW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9j
ay5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSGVhcDsKLWNsYXNzIENvcGllZEJsb2Nr
OwotCi1jbGFzcyBDb3BpZWRTcGFjZSB7Ci0gICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwot
ICAgIGZyaWVuZCBjbGFzcyBIZWFwOwotICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAg
ICBmcmllbmQgY2xhc3MgSklUOwotcHVibGljOgotICAgIENvcGllZFNwYWNlKEhlYXAqKTsKLSAg
ICB+Q29waWVkU3BhY2UoKTsKLSAgICB2b2lkIGluaXQoKTsKLQotICAgIENoZWNrZWRCb29sZWFu
IHRyeUFsbG9jYXRlKHNpemVfdCwgdm9pZCoqKTsKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFs
bG9jYXRlKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAgIAotICAgIENvcGllZEFsbG9jYXRv
ciYgYWxsb2NhdG9yKCkgeyByZXR1cm4gbV9hbGxvY2F0b3I7IH0KLQotICAgIHZvaWQgZGlkU3Rh
cnRGdWxsQ29sbGVjdGlvbigpOwotCi0gICAgdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVj
dGlvblR5cGU+Ci0gICAgdm9pZCBzdGFydGVkQ29weWluZygpOwotICAgIHZvaWQgZG9uZUNvcHlp
bmcoKTsKLSAgICBib29sIGlzSW5Db3B5UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2luQ29weWlu
Z1BoYXNlOyB9Ci0KLSAgICB2b2lkIHBpbihDb3BpZWRCbG9jayopOwotICAgIGJvb2wgaXNQaW5u
ZWQodm9pZCopOwotCi0gICAgYm9vbCBjb250YWlucyhDb3BpZWRCbG9jayopOwotICAgIGJvb2wg
Y29udGFpbnModm9pZCosIENvcGllZEJsb2NrKiYpOwotICAgIAotICAgIHZvaWQgcGluSWZOZWNl
c3Nhcnkodm9pZCogcG9pbnRlcik7Ci0KLSAgICBzaXplX3Qgc2l6ZSgpOwotICAgIHNpemVfdCBj
YXBhY2l0eSgpOwotCi0gICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7Ci0gICAg
Ym9vbCBzaG91bGREb0NvcHlQaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9Db3B5UGhh
c2U7IH0KLQotICAgIHN0YXRpYyBDb3BpZWRCbG9jayogYmxvY2tGb3Iodm9pZCopOwotCi0gICAg
SGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQotICAgIAotICAgIHNpemVfdCB0
YWtlQnl0ZXNSZW1vdmVkRnJvbU9sZFNwYWNlRHVlVG9SZWFsbG9jYXRpb24oKQotICAgIHsKLSAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2J5dGVzUmVtb3Zl
ZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0aW9uLCByZXN1bHQpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNp
emVfdCk7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0
ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0
ZU92ZXJzaXplKHNpemVfdCwgdm9pZCoqKTsKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9j
YXRlT3ZlcnNpemUodm9pZCoqLCBzaXplX3QsIHNpemVfdCk7Ci0gICAgCi0gICAgdm9pZCBhbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgQ29waWVkQmxvY2sqIGFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhh
c2UoKTsKLQotICAgIHZvaWQgZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayosIENvcGllZEJs
b2NrKiopOwotICAgIHZvaWQgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiwgSGVh
cE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSk7Ci0gICAgdm9pZCByZWN5Y2xlQm9ycm93ZWRCbG9j
ayhDb3BpZWRCbG9jayopOwotCi0gICAgSGVhcCogbV9oZWFwOwotCi0gICAgQ29waWVkQWxsb2Nh
dG9yIG1fYWxsb2NhdG9yOwotCi0gICAgSGFzaFNldDxDb3BpZWRCbG9jayo+IG1fYmxvY2tTZXQ7
Ci0KLSAgICBMb2NrIG1fdG9TcGFjZUxvY2s7Ci0KLSAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlv
biB7Ci0gICAgICAgIENvcGllZEdlbmVyYXRpb24oKQotICAgICAgICAgICAgOiB0b1NwYWNlKDAp
Ci0gICAgICAgICAgICAsIGZyb21TcGFjZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogdG9TcGFjZTsKLSAgICAgICAgRG91
Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIGZyb21TcGFjZTsKLSAgICAgICAgCi0gICAgICAg
IERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+IGJsb2NrczE7Ci0gICAgICAgIERvdWJseUxp
bmtlZExpc3Q8Q29waWVkQmxvY2s+IGJsb2NrczI7Ci0gICAgICAgIERvdWJseUxpbmtlZExpc3Q8
Q29waWVkQmxvY2s+IG92ZXJzaXplQmxvY2tzOwotCi0gICAgICAgIFRpbnlCbG9vbUZpbHRlciBi
bG9ja0ZpbHRlcjsKLSAgICB9OwotCi0gICAgQ29waWVkR2VuZXJhdGlvbiBtX29sZEdlbjsKLSAg
ICBDb3BpZWRHZW5lcmF0aW9uIG1fbmV3R2VuOwotCi0gICAgYm9vbCBtX2luQ29weWluZ1BoYXNl
OwotICAgIGJvb2wgbV9zaG91bGREb0NvcHlQaGFzZTsKLQotICAgIExvY2sgbV9sb2FuZWRCbG9j
a3NMb2NrOwotICAgIHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwotICAgIAotICAgIHNp
emVfdCBtX2J5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxvY2F0aW9uOwotCi0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzX21heEFsbG9jYXRpb25TaXplID0gQ29waWVkQmxvY2s6OmJs
b2NrU2l6ZSAvIDI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrTWFzayA9IH4oQ29w
aWVkQmxvY2s6OmJsb2NrU2l6ZSAtIDEpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlSW5saW5lcy5oCShub25leGlzdGVudCkKQEAgLTEsMjU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb3Bp
ZWRTcGFjZUlubGluZXNfaAotI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZXNfaAotCi0jaW5jbHVk
ZSAiQ29waWVkQmxvY2suaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkhl
YXAuaCIKLSNpbmNsdWRlICJWTS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIGJvb2wg
Q29waWVkU3BhY2U6OmNvbnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICByZXR1cm4g
KCFtX25ld0dlbi5ibG9ja0ZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKSB8fCAhbV9vbGRHZW4uYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJp
dHM+KGJsb2NrKSkpCi0gICAgICAgICYmIG1fYmxvY2tTZXQuY29udGFpbnMoYmxvY2spOwotfQot
Ci1pbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnModm9pZCogcHRyLCBDb3BpZWRCbG9j
ayomIHJlc3VsdCkKLXsKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBibG9ja0ZvcihwdHIpOwot
ICAgIGlmIChjb250YWlucyhibG9jaykpIHsKLSAgICAgICAgcmVzdWx0ID0gYmxvY2s7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXN1bHQgPSAwOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbihDb3BpZWRCbG9jayogYmxvY2sp
Ci17Ci0gICAgYmxvY2stPnBpbigpOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGlu
SWZOZWNlc3Nhcnkodm9pZCogb3BhcXVlUG9pbnRlcikKLXsKLSAgICAvLyBQb2ludGVycyBpbnRv
IHRoZSBjb3BpZWQgc3BhY2UgY29tZSBpbiB0aGUgZm9sbG93aW5nIHZhcmlldGllczoKLSAgICAv
LyAxKSAgUG9pbnRlcnMgdG8gdGhlIHN0YXJ0IG9mIGEgc3BhbiBvZiBtZW1vcnkuIFRoaXMgaXMg
dGhlIG1vc3QKLSAgICAvLyAgICAgbmF0dXJhbCB0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBt
b3N0IGNvbW1vbi4KLSAgICAvLyAyKSAgUG9pbnRlcnMgdG8gb25lIHZhbHVlLXNpemVkICg4IGJ5
dGUpIHdvcmQgcGFzdCB0aGUgZW5kIG9mCi0gICAgLy8gICAgIGEgc3BhbiBvZiBtZW1vcnkuIFRo
aXMgY3VycmVudGx5IG9jY3VycyB3aXRoIHNlbWktYnV0dGVyZmxpZXMKLSAgICAvLyAgICAgYW5k
IHNob3VsZCBiZSBmaXhlZCBzb29uLCBvbmNlIHRoZSBvdGhlciBoYWxmIG9mIHRoZQotICAgIC8v
ICAgICBidXR0ZXJmbHkgbGFuZHMuCi0gICAgLy8gMykgIFBvaW50ZXJzIHRvIHRoZSBpbm5hcmRz
IGFyaXNpbmcgZnJvbSBsb29wIGluZHVjdGlvbiB2YXJpYWJsZQotICAgIC8vICAgICBvcHRpbWl6
YXRpb25zIChlaXRoZXIgbWFudWFsIG9uZXMgb3IgYXV0b21hdGljLCBieSB0aGUKLSAgICAvLyAg
ICAgY29tcGlsZXIpLgotICAgIC8vIDQpICBQb2ludGVycyB0byB0aGUgZW5kIG9mIGEgc3BhbiBv
ZiBtZW1vcnkgaW4gYXJpc2luZyBmcm9tCi0gICAgLy8gICAgIGluZHVjdGlvbiB2YXJpYWJsZSBv
cHRpbWl6YXRpb25zIGNvbWJpbmVkIHdpdGggdGhlCi0gICAgLy8gICAgIEdDLXRvLWNvbXBpbGVy
IGNvbnRyYWN0IGxhaWQgb3V0IGluIHRoZSBDIHNwZWM6IGEgcG9pbnRlciB0bwotICAgIC8vICAg
ICB0aGUgZW5kIG9mIGEgc3BhbiBvZiBtZW1vcnkgbXVzdCBiZSBjb25zaWRlcmVkIHRvIGJlIGEK
LSAgICAvLyAgICAgcG9pbnRlciB0byB0aGF0IG1lbW9yeS4KLSAgICAKLSAgICBFbmNvZGVkSlNW
YWx1ZSogcG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihvcGFxdWVQ
b2ludGVyKTsKLSAgICBDb3BpZWRCbG9jayogYmxvY2s7Ci0KLSAgICAvLyBIYW5kbGUgKDEpIGFu
ZCAoMykuCi0gICAgaWYgKGNvbnRhaW5zKHBvaW50ZXIsIGJsb2NrKSkKLSAgICAgICAgcGluKGJs
b2NrKTsKLSAgICAKLSAgICAvLyBIYW5kbGUgKDQpLiBXZSBkb24ndCBoYXZlIHRvIGV4cGxpY2l0
bHkgY2hlY2sgYW5kIHBpbiB0aGUgYmxvY2sgdW5kZXIgdGhpcwotICAgIC8vIHBvaW50ZXIgYmVj
YXVzZSBpdCBjYW5ub3QgcG9zc2libHkgcG9pbnQgdG8gc29tZXRoaW5nIHRoYXQgY2FzZXMgKDEp
IGFuZAotICAgIC8vICgzKSBhYm92ZSBvciBjYXNlICgyKSBiZWxvdyB3b3VsZG4ndCBhbHJlYWR5
IGNhdGNoLgotICAgIHBvaW50ZXItLTsKLSAgICAKLSAgICAvLyBIYW5kbGUgKDIpCi0gICAgcG9p
bnRlci0tOwotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBibG9jaykpCi0gICAgICAgIHBpbihi
bG9jayk7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxv
Y2soQ29waWVkQmxvY2sqIGJsb2NrLCBIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQotewot
ICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOwot
ICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwotICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9j
ayk7Ci0gICAgICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVjdGlvbikKLSAgICAg
ICAgICAgIG1fbmV3R2VuLmZyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwotICAgIH0KLSAg
ICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7Ci19Ci0KLWlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCi17
Ci0gICAgQ29waWVkQmxvY2s6OmRlc3Ryb3koKmhlYXAoKSwgYmxvY2spOwotCi0gICAgewotICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvYW5lZEJsb2Nrc0xvY2spOwotICAgICAgICBBU1NF
UlQobV9udW1iZXJPZkxvYW5lZEJsb2NrcyA+IDApOwotICAgICAgICBBU1NFUlQobV9pbkNvcHlp
bmdQaGFzZSk7Ci0gICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKLSAgICB9Ci19Ci0K
LWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5n
UGhhc2UoKQotewotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKLSAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbCgqbV9oZWFwKTsKLQotICAg
IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAgICAg
ICAgbV9udW1iZXJPZkxvYW5lZEJsb2NrcysrOwotICAgIH0KLQotICAgIEFTU0VSVCghYmxvY2st
PmRhdGFTaXplKCkpOwotICAgIHJldHVybiBibG9jazsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVk
U3BhY2U6OmFsbG9jYXRlQmxvY2soKQotewotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5
T3JEZWZlcigpOwotCi0gICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLSAgICAK
LSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKCptX2hlYXApOwot
ICAgICAgICAKLSAgICBtX25ld0dlbi50b1NwYWNlLT5wdXNoKGJsb2NrKTsKLSAgICBtX25ld0dl
bi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwotICAgIG1f
YmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxv
Y2spOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRl
KHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBBU1NFUlQoIW1faGVhcC0+dm0o
KS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgQVNTRVJUKGJ5dGVzKTsKLQotICAgIGlm
ICghbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cikpCi0gICAgICAgIHJldHVy
biB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwotICAgIAotICAgIEFTU0VSVCgq
b3V0UHRyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoc2l6ZV90IGJ5dGVzKQotewotICAgIHJldHVybiBieXRlcyA+IHNfbWF4QWxs
b2NhdGlvblNpemU7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjppc1Bpbm5lZCh2b2lk
KiBwdHIpCi17Ci0gICAgcmV0dXJuIGJsb2NrRm9yKHB0ciktPm1faXNQaW5uZWQ7Ci19Ci0KLWlu
bGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmJsb2NrRm9yKHZvaWQqIHB0cikKLXsKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3BpZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8
c2l6ZV90PihwdHIpICYgc19ibG9ja01hc2spOwotfQotCi10ZW1wbGF0ZSA8SGVhcE9wZXJhdGlv
biBjb2xsZWN0aW9uVHlwZT4KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWlu
ZygpCi17Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIGZyb21TcGFjZTsKLSAg
ICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogb3ZlcnNpemVCbG9ja3M7Ci0gICAgVGlu
eUJsb29tRmlsdGVyKiBibG9ja0ZpbHRlcjsKLSAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRnVs
bENvbGxlY3Rpb24pIHsKLSAgICAgICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFjZS0+aXNFbXB0
eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKLQot
ICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5hcHBlbmQoKm1fbmV3R2VuLnRvU3BhY2UpOwotICAg
ICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5hcHBlbmQobV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3MpOwotCi0gICAgICAgIEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpOwotICAg
ICAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwotICAgICAgICBBU1NF
UlQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKLQotICAgICAgICBzdGQ6OnN3
YXAobV9vbGRHZW4uZnJvbVNwYWNlLCBtX29sZEdlbi50b1NwYWNlKTsKLSAgICAgICAgZnJvbVNw
YWNlID0gbV9vbGRHZW4uZnJvbVNwYWNlOwotICAgICAgICBvdmVyc2l6ZUJsb2NrcyA9ICZtX29s
ZEdlbi5vdmVyc2l6ZUJsb2NrczsKLSAgICAgICAgYmxvY2tGaWx0ZXIgPSAmbV9vbGRHZW4uYmxv
Y2tGaWx0ZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RkOjpzd2FwKG1fbmV3R2VuLmZyb21T
cGFjZSwgbV9uZXdHZW4udG9TcGFjZSk7Ci0gICAgICAgIGZyb21TcGFjZSA9IG1fbmV3R2VuLmZy
b21TcGFjZTsKLSAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3M7Ci0gICAgICAgIGJsb2NrRmlsdGVyID0gJm1fbmV3R2VuLmJsb2NrRmlsdGVyOwotICAgIH0K
LQotICAgIGJsb2NrRmlsdGVyLT5yZXNldCgpOwotICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKCk7Ci0KLSAgICBDb3BpZWRCbG9jayogbmV4dCA9IDA7Ci0gICAgc2l6ZV90IHRvdGFs
TGl2ZUJ5dGVzID0gMDsKLSAgICBzaXplX3QgdG90YWxVc2FibGVCeXRlcyA9IDA7Ci0gICAgZm9y
IChDb3BpZWRCbG9jayogYmxvY2sgPSBmcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0g
bmV4dCkgewotICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKLSAgICAgICAgaWYgKCFibG9j
ay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKSB7Ci0gICAgICAgICAgICBy
ZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2ssIGNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChibG9jay0+bGl2ZUJ5dGVzKCkg
PD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7Ci0gICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJs
b2NrLT5saXZlQnl0ZXMoKTsKLSAgICAgICAgdG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5
bG9hZENhcGFjaXR5KCk7Ci0gICAgICAgIGJsb2NrLT5kaWRQcm9tb3RlKCk7Ci0gICAgfQotCi0g
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gb3ZlcnNpemVCbG9ja3MtPmhlYWQoKTsKLSAgICB3aGls
ZSAoYmxvY2spIHsKLSAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBibG9jay0+bmV4dCgpOwot
ICAgICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRmlsdGVy
LT5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwotICAgICAgICAgICAgdG90YWxM
aXZlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgdG90YWxV
c2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICBibG9j
ay0+ZGlkUHJvbW90ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3ZlcnNpemVC
bG9ja3MtPnJlbW92ZShibG9jayk7Ci0gICAgICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9j
ayk7Ci0gICAgICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveSgqaGVhcCgpLCBibG9jayk7Ci0g
ICAgICAgIH0gCi0gICAgICAgIGJsb2NrID0gbmV4dDsKLSAgICB9Ci0KLSAgICBkb3VibGUgbWFy
a2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOwotICAgIGRv
dWJsZSB0b3RhbFV0aWxpemF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3RhbExpdmVCeXRl
cyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3RhbFVzYWJsZUJ5
dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7Ci0gICAgbV9zaG91bGREb0NvcHlQaGFzZSA9IG1faGVh
cC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uIHx8IHRvdGFsVXRpbGl6
YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0aWxpemF0aW9uKCk7Ci0gICAgaWYgKCFtX3Nob3Vs
ZERvQ29weVBoYXNlKSB7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAg
ICAgZGF0YUxvZygiU2tpcHBlZCBjb3B5aW5nLCAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICBkYXRhTG9nRigiRGlkIGNvcHks
ICIpOwotICAgIEFTU0VSVChtX3Nob3VsZERvQ29weVBoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVt
YmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIEFTU0VSVCghbV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAg
bV9pbkNvcHlpbmdQaGFzZSA9IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gQ29waWVkU3BhY2VJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weUJhcnJpZXIuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weUJhcnJpZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcHlCYXJyaWVyX2gKLSNkZWZpbmUgQ29weUJhcnJp
ZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZNLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBDb3B5QmFycmllckJhc2UgewotcHVibGljOgotICAgIENvcHlCYXJyaWVy
QmFzZSgpCi0gICAgICAgIDogbV92YWx1ZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQot
ICAgIHZvaWQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgQ29weUJhcnJpZXJCYXNlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9p
ZCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9p
ZCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRX
aXRob3V0QmFycmllcih2b2lkKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUg
PSB2YWx1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSB2b2lkKiBtX3ZhbHVlOwot
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5QmFycmllciA6IHB1YmxpYyBD
b3B5QmFycmllckJhc2UgewotcHVibGljOgotICAgIENvcHlCYXJyaWVyKCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIENvcHlCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYg
dmFsdWUpCi0gICAgICAgIDogQ29weUJhcnJpZXJCYXNlKHZtLCBvd25lciwgJnZhbHVlKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgQ29weUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93
bmVyLCBUKiB2YWx1ZSkKLSAgICAgICAgOiBDb3B5QmFycmllckJhc2Uodm0sIG93bmVyLCB2YWx1
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVCogZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0KCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAg
ewotICAgICAgICBDb3B5QmFycmllckJhc2U6OnNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRob3V0QmFycmllcihUKiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29weUJhcnJpZXJfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDIwNTY1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShub25leGlzdGVudCkKQEAg
LTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5VG9rZW5f
aAotI2RlZmluZSBDb3B5VG9rZW5faAotCi1uYW1lc3BhY2UgSlNDIHsKLQotZW51bSBDb3B5VG9r
ZW4gewotICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbgotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDb3B5VG9rZW5faApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb3B5VmlzaXRvci5oIgotCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1D
b3B5VmlzaXRvcjo6Q29weVZpc2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQot
ewotICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKLSAgICBDb3BpZWRC
bG9jayogYmxvY2sgPSBudWxscHRyOwotICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5kb25lRmls
bGluZ0Jsb2NrKG51bGxwdHIsICZibG9jayk7Ci0gICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3Vy
cmVudEJsb2NrKGJsb2NrKTsKLX0KLQotQ29weVZpc2l0b3I6On5Db3B5VmlzaXRvcigpCi17Ci0g
ICAgaWYgKG1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9oZWFwLm1fc3Rv
cmFnZVNwYWNlLmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50
QmxvY2soKSwgbnVsbHB0cik7Ci0gICAgCi0gICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVN
ZW1vcnlGb3JUaGlzVGhyZWFkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5oCShyZXZpc2lvbiAyMDU2NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5oCShub25leGlzdGVudCkK
QEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVZpc2l0b3Jf
aAotI2RlZmluZSBDb3B5VmlzaXRvcl9oCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSGVh
cDsKLQotY2xhc3MgQ29weVZpc2l0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvcHlW
aXNpdG9yKTsKLXB1YmxpYzoKLSAgICBDb3B5VmlzaXRvcihIZWFwJik7Ci0gICAgfkNvcHlWaXNp
dG9yKCk7Ci0KLSAgICB2b2lkIGNvcHlGcm9tU2hhcmVkKCk7Ci0KLSAgICAvLyBMb3ctbGV2ZWwg
QVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdz
IGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmpl
Y3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KLSAg
ICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hv
b3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCi0gICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weSh2b2lk
Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QpOwotICAgIHZvaWQgZGlkQ29w
eSh2b2lkKiwgc2l6ZV90KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNl
U2xvdyhzaXplX3QpOwotICAgIHZvaWQgdmlzaXRJdGVtKENvcHlXb3JrbGlzdEl0ZW0pOwotCi0g
ICAgSGVhcCYgbV9oZWFwOwotICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMDU2NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcHlWaXNp
dG9ySW5saW5lc19oCi0jZGVmaW5lIENvcHlWaXNpdG9ySW5saW5lc19oCi0KLSNpbmNsdWRlICJD
b3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlu
bGluZSBib29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIpCi17
Ci0gICAgaWYgKCFvbGRQdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKLSAgICBpZiAoYmxvY2st
PmlzT3ZlcnNpemUoKSB8fCBibG9jay0+aXNQaW5uZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9j
YXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENv
bXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgotICAgIGlm
IChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKGJ5dGVz
LCAmcmVzdWx0KSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0g
YWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19ICAgICAgIAotCi1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9j
YXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKLXsKLSAgICBDb3BpZWRCbG9jayogbmV3Qmxv
Y2sgPSAwOwotICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5kb25lRmlsbGluZ0Jsb2NrKG1fY29w
aWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZuZXdCbG9jayk7Ci0gICAgbV9jb3Bp
ZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG5ld0Jsb2NrKTsKLQotICAgIHZvaWQqIHJlc3Vs
dCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9y
LnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRp
ZFN1Y2NlZWQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIENvcHlWaXNp
dG9yOjpkaWRDb3B5KHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQotewotICAgIENvcGllZEJsb2Nr
KiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwotICAgIEFTU0VSVCghYmxvY2st
PmlzT3ZlcnNpemUoKSk7Ci0gICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7Ci0KLSAgICBi
bG9jay0+ZGlkRXZhY3VhdGVCeXRlcyhieXRlcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gQ29weVZpc2l0b3JJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlXb3JrTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlXb3JrTGlzdC5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5V29ya0xpc3QuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE5OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5V29ya0xpc3RfaAotI2RlZmlu
ZSBDb3B5V29ya0xpc3RfaAotCi0jaW5jbHVkZSAiQ29weVRva2VuLmgiCi0jaW5jbHVkZSA8d3Rm
L0RvdWJseUxpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTQ2VsbDsK
LQotY2xhc3MgQ29weVdvcmtsaXN0SXRlbSB7Ci1wdWJsaWM6Ci0gICAgQ29weVdvcmtsaXN0SXRl
bSgpCi0gICAgICAgIDogbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBDb3B5V29ya2xp
c3RJdGVtKEpTQ2VsbCogY2VsbCwgQ29weVRva2VuIHRva2VuKQotICAgICAgICA6IG1fdmFsdWUo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHRv
a2VuKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNl
bGwpICYgc3RhdGljX2Nhc3Q8dWludHB0cl90PihtYXNrKSkpOwotICAgICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pih0b2tlbikgPD0gbWFzayk7Ci0gICAgfQotICAgIAotICAgIEpT
Q2VsbCogY2VsbCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX3ZhbHVl
ICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4obWFzaykpOyB9Ci0gICAgQ29weVRva2VuIHRva2Vu
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29weVRva2VuPihtX3ZhbHVlICYgbWFzayk7
IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlcXVpcmVkQWxp
Z25tZW50ID0gODsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWFzayA9IHJlcXVpcmVkQWxp
Z25tZW50IC0gMTsKLSAgICAKLSAgICB1aW50cHRyX3QgbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENv
cHlXb3JrTGlzdFNlZ21lbnQgOiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q29weVdvcmtM
aXN0U2VnbWVudD4gewotICAgIGZyaWVuZCBjbGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2Rl
PENvcHlXb3JrTGlzdFNlZ21lbnQ+OwotcHVibGljOgotICAgIHN0YXRpYyBDb3B5V29ya0xpc3RT
ZWdtZW50KiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgZmFz
dE1hbGxvYyhibG9ja1NpemUpKSBDb3B5V29ya0xpc3RTZWdtZW50KCk7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koQ29weVdvcmtMaXN0U2VnbWVudCogc2VnbWVudCkKLSAg
ICB7Ci0gICAgICAgIHNlZ21lbnQtPn5Db3B5V29ya0xpc3RTZWdtZW50KCk7Ci0gICAgICAgIGZh
c3RGcmVlKHNlZ21lbnQpOwotICAgIH0KLQotICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9z
aXplOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PigmZGF0YSgpW3NpemUoKV0pID49IGVuZE9mQmxvY2soKTsgfQotICAgIENvcHlXb3JrbGlzdEl0
ZW0gZ2V0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gZGF0YSgpW2luZGV4XTsgfQotCi0gICAgdm9p
ZCBhcHBlbmQoQ29weVdvcmtsaXN0SXRlbSBpdGVtKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7Ci0gICAgICAgIGRhdGEoKVttX3NpemVdID0gaXRlbTsKLSAgICAgICAgbV9zaXpl
ICs9IDE7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1NpemUgPSA1MTI7
Ci0KLXByaXZhdGU6Ci0gICAgQ29weVdvcmtMaXN0U2VnbWVudCgpCi0gICAgICAgIDogRG91Ymx5
TGlua2VkTGlzdE5vZGU8Q29weVdvcmtMaXN0U2VnbWVudD4oKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBDb3B5V29ya2xpc3RJdGVtKiBkYXRhKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxDb3B5V29ya2xpc3RJdGVtKj4odGhpcyArIDEpOyB9Ci0gICAgY2hh
ciogZW5kT2ZCbG9jaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsg
YmxvY2tTaXplOyB9Ci0KLSAgICBDb3B5V29ya0xpc3RTZWdtZW50KiBtX3ByZXY7Ci0gICAgQ29w
eVdvcmtMaXN0U2VnbWVudCogbV9uZXh0OwotICAgIHNpemVfdCBtX3NpemU7Ci19OwotCi1jbGFz
cyBDb3B5V29ya0xpc3RJdGVyYXRvciB7Ci0gICAgZnJpZW5kIGNsYXNzIENvcHlXb3JrTGlzdDsK
LXB1YmxpYzoKLSAgICBDb3B5V29ya2xpc3RJdGVtIGdldCgpIHsgcmV0dXJuIG1fY3VycmVudFNl
Z21lbnQtPmdldChtX2N1cnJlbnRJbmRleCk7IH0KLSAgICBDb3B5V29ya2xpc3RJdGVtIG9wZXJh
dG9yKigpIHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgQ29weVdvcmtsaXN0SXRlbSBvcGVyYXRvci0+
KCkgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgIENvcHlXb3JrTGlzdEl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4Kys7Ci0KLSAgICAgICAgaWYgKG1f
Y3VycmVudEluZGV4ID49IG1fY3VycmVudFNlZ21lbnQtPnNpemUoKSkgewotICAgICAgICAgICAg
bV9jdXJyZW50SW5kZXggPSAwOwotICAgICAgICAgICAgbV9jdXJyZW50U2VnbWVudCA9IG1fY3Vy
cmVudFNlZ21lbnQtPm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW1fY3Vy
cmVudFNlZ21lbnQgfHwgbV9jdXJyZW50U2VnbWVudC0+c2l6ZSgpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q29weVdvcmtMaXN0SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fY3VycmVudFNlZ21lbnQgPT0gb3RoZXIubV9jdXJyZW50U2VnbWVudCAmJiBtX2N1cnJlbnRJ
bmRleCA9PSBvdGhlci5tX2N1cnJlbnRJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IENvcHlXb3JrTGlzdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0KLSAgICBDb3B5V29ya0xp
c3RJdGVyYXRvcigpCi0gICAgICAgIDogbV9jdXJyZW50U2VnbWVudCgwKQotICAgICAgICAsIG1f
Y3VycmVudEluZGV4KDApCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDb3B5V29ya0xp
c3RJdGVyYXRvcihDb3B5V29ya0xpc3RTZWdtZW50KiBzdGFydFNlZ21lbnQsIHNpemVfdCBzdGFy
dEluZGV4KQotICAgICAgICA6IG1fY3VycmVudFNlZ21lbnQoc3RhcnRTZWdtZW50KQotICAgICAg
ICAsIG1fY3VycmVudEluZGV4KHN0YXJ0SW5kZXgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBD
b3B5V29ya0xpc3RTZWdtZW50KiBtX2N1cnJlbnRTZWdtZW50OwotICAgIHNpemVfdCBtX2N1cnJl
bnRJbmRleDsKLX07Ci0KLWNsYXNzIENvcHlXb3JrTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBDb3B5V29ya0xpc3RJdGVyYXRvciBpdGVy
YXRvcjsKLQotICAgIENvcHlXb3JrTGlzdCgpOwotICAgIH5Db3B5V29ya0xpc3QoKTsKLQotICAg
IHZvaWQgYXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0pOwotICAgIGl0ZXJhdG9yIGJlZ2luKCk7Ci0g
ICAgaXRlcmF0b3IgZW5kKCk7Ci0KLXByaXZhdGU6Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3B5
V29ya0xpc3RTZWdtZW50PiBtX3NlZ21lbnRzOwotfTsKLQotaW5saW5lIENvcHlXb3JrTGlzdDo6
Q29weVdvcmtMaXN0KCkKLXsKLX0KLQotaW5saW5lIENvcHlXb3JrTGlzdDo6fkNvcHlXb3JrTGlz
dCgpCi17Ci0gICAgd2hpbGUgKCFtX3NlZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgQ29weVdv
cmtMaXN0U2VnbWVudDo6ZGVzdHJveShtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKSk7Ci19Ci0KLWlu
bGluZSB2b2lkIENvcHlXb3JrTGlzdDo6YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0gaXRlbSkKLXsK
LSAgICBpZiAobV9zZWdtZW50cy5pc0VtcHR5KCkgfHwgbV9zZWdtZW50cy50YWlsKCktPmlzRnVs
bCgpKQotICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZChDb3B5V29ya0xpc3RTZWdtZW50OjpjcmVh
dGUoKSk7Ci0KLSAgICBBU1NFUlQoIW1fc2VnbWVudHMudGFpbCgpLT5pc0Z1bGwoKSk7Ci0KLSAg
ICBtX3NlZ21lbnRzLnRhaWwoKS0+YXBwZW5kKGl0ZW0pOwotfQotCi1pbmxpbmUgQ29weVdvcmtM
aXN0OjppdGVyYXRvciBDb3B5V29ya0xpc3Q6OmJlZ2luKCkKLXsKLSAgICByZXR1cm4gQ29weVdv
cmtMaXN0SXRlcmF0b3IobV9zZWdtZW50cy5oZWFkKCksIDApOwotfQotCi1pbmxpbmUgQ29weVdv
cmtMaXN0OjppdGVyYXRvciBDb3B5V29ya0xpc3Q6OmVuZCgpCi17Ci0gICAgcmV0dXJuIENvcHlX
b3JrTGlzdEl0ZXJhdG9yKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
Q29weVdvcmtMaXN0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsOSArMjMsNiBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgot
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRWRlbkdDQWN0aXZp
dHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTIw
MiwxMCArMTk5LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9tYXhIZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCiAgICAgLCBtX3Nob3VsZERvRnVs
bENvbGxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3RvdGFsQnl0ZXNWaXNpdGVkKDApCi0gICAgLCBt
X3RvdGFsQnl0ZXNDb3BpZWQoMCkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJh
dGlvbikKICAgICAsIG1fb2JqZWN0U3BhY2UodGhpcykKLSAgICAsIG1fc3RvcmFnZVNwYWNlKHRo
aXMpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFN
ZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCkBAIC0yMzMsNyArMjI4
LDYgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogI2VuZGlmCiAgICAg
LCBtX2hlbHBlckNsaWVudCgmaGVhcEhlbHBlclBvb2woKSkKIHsKLSAgICBtX3N0b3JhZ2VTcGFj
ZS5pbml0KCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmlmeUhlYXAoKSkKICAgICAgICAgbV92ZXJp
ZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVyPih0aGlzLCBPcHRpb25zOjpudW1i
ZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24oKSk7CiB9CkBAIC0yNDYsNyArMjQw
LDcgQEAgSGVhcDo6fkhlYXAoKQogCiBib29sIEhlYXA6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRs
aW5lKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUpIHx8
IG1fc3RvcmFnZVNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUpOworICAgIHJldHVybiBtX29iamVj
dFNwYWNlLmlzUGFnZWRPdXQoZGVhZGxpbmUpOwogfQogCiAvLyBUaGUgVk0gaXMgYmVpbmcgZGVz
dHJveWVkIGFuZCB0aGUgY29sbGVjdG9yIHdpbGwgbmV2ZXIgcnVuIGFnYWluLgpAQCAtNDk2LDU4
ICs0OTAsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAg
cmVzZXRWaXNpdG9ycygpOwogfQogCi12b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKLXsK
LSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgaWYg
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikKLSAgICAgICAgbV9zdG9y
YWdlU3BhY2Uuc3RhcnRlZENvcHlpbmc8RWRlbkNvbGxlY3Rpb24+KCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pOwot
ICAgICAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZzxGdWxsQ29sbGVjdGlvbj4oKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9zdG9yYWdlU3BhY2Uuc2hvdWxkRG9Db3B5UGhhc2UoKSkgewot
ICAgICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKSB7Ci0g
ICAgICAgICAgICAvLyBSZXNldCB0aGUgdmVjdG9yIHRvIGJlIGVtcHR5LCBidXQgZG9uJ3QgdGhy
b3cgYXdheSB0aGUgYmFja2luZyBzdG9yZS4KLSAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnNo
cmluaygwKTsKLSAgICAgICAgICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9zdG9yYWdl
U3BhY2UubV9uZXdHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCi0gICAgICAgICAgICAgICAgbV9ibG9ja3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PT0gRnVsbENvbGxlY3Rpb24pOwotICAgICAgICAgICAgV1RGOjpjb3B5VG9WZWN0b3IobV9zdG9y
YWdlU3BhY2UubV9ibG9ja1NldCwgbV9ibG9ja3NUb0NvcHkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUGFyYWxsZWxWZWN0b3JJdGVyYXRvcjxWZWN0b3I8Q29waWVkQmxvY2sqPj4gaXRlcmF0b3Io
Ci0gICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weSwgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKLQot
ICAgICAgICAvLyBOb3RlIHRoYXQgaXQncyBzYWZlIHRvIHVzZSB0aGUgWyZdIGNhcHR1cmUgbGlz
dCBoZXJlLCBldmVuIHRob3VnaCB3ZSdyZSBjcmVhdGluZyBhIHRhc2sKLSAgICAgICAgLy8gdGhh
dCBvdGhlciB0aHJlYWRzIHJ1bi4gVGhhdCdzIGJlY2F1c2UgYWZ0ZXIgcnVuRnVuY3Rpb25JblBh
cmFsbGVsKCkgcmV0dXJucywgdGhlIHRhc2sKLSAgICAgICAgLy8gd2UgaGF2ZSBjcmVhdGVkIGlz
IG5vdCBnb2luZyB0byBiZSBydW5uaW5nIGFueW1vcmUuIEhlbmNlLCBldmVyeXRoaW5nIG9uIHRo
ZSBzdGFjayBoZXJlCi0gICAgICAgIC8vIG91dGxpdmVzIHRoZSB0YXNrLgotICAgICAgICBtX2hl
bHBlckNsaWVudC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCi0gICAgICAgICAgICBbJl0gKCkgewot
ICAgICAgICAgICAgICAgIENvcHlWaXNpdG9yIGNvcHlWaXNpdG9yKCp0aGlzKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpdGVyYXRvci5pdGVyYXRlKAotICAgICAgICAgICAg
ICAgICAgICBbJl0gKENvcGllZEJsb2NrKiBibG9jaykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFibG9jay0+aGFzV29ya0xpc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QgPSBibG9jay0+d29ya0xpc3QoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoQ29weVdvcmtsaXN0SXRlbSBpdGVtIDogd29ya0xpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNlbGwoKS0+bWV0aG9kVGFibGUoKS0+
Y29weUJhY2tpbmdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5j
ZWxsKCksIGNvcHlWaXNpdG9yLCBpdGVtLnRva2VuKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0
b3JhZ2VTcGFjZS5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2ssIG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgfQot
ICAgIAotICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVDb3B5aW5nKCk7Ci19Ci0KIHZvaWQgSGVhcDo6
Z2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMsIHZvaWQqIHN0YWNrT3Jp
Z2luLCB2b2lkKiBzdGFja1RvcCwgTWFjaGluZVRocmVhZHM6OlJlZ2lzdGVyU3RhdGUmIGNhbGxl
ZVNhdmVkUmVnaXN0ZXJzKQogewogICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7
CkBAIC04MjIsMjAgKzc2NCwxMiBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3Vi
bGUgZ2NTCiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIg
R0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlz
aXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGlt
ZSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBieXRlc1JlbW92ZWRGcm9tT2xkU3BhY2VEdWVU
b1JlYWxsb2NhdGlvbiA9Ci0gICAgICAgIG1fc3RvcmFnZVNwYWNlLnRha2VCeXRlc1JlbW92ZWRG
cm9tT2xkU3BhY2VEdWVUb1JlYWxsb2NhdGlvbigpOwotICAgIAotICAgIGlmIChtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICBpZiAobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0g
MDsKLSAgICAgICAgbV90b3RhbEJ5dGVzQ29waWVkID0gMDsKLSAgICB9IGVsc2UKLSAgICAgICAg
bV90b3RhbEJ5dGVzQ29waWVkIC09IGJ5dGVzUmVtb3ZlZEZyb21PbGRTcGFjZUR1ZVRvUmVhbGxv
Y2F0aW9uOwogCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0
b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKLSAgICBtX3RvdGFsQnl0
ZXNDb3BpZWRUaGlzQ3ljbGUgPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzQ29waWVkKCkgKyB0aHJlYWRC
eXRlc0NvcGllZCgpOwogICAgIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV90b3RhbEJ5
dGVzVmlzaXRlZFRoaXNDeWNsZTsKLSAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgKz0gbV90b3RhbEJ5
dGVzQ29waWVkVGhpc0N5Y2xlOwogfQogCiB2b2lkIEhlYXA6OnJlc2V0VmlzaXRvcnMoKQpAQCAt
ODYxLDEyICs3OTUsMTIgQEAgc2l6ZV90IEhlYXA6OmV4dHJhTWVtb3J5U2l6ZSgpCiAKIHNpemVf
dCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0
b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYU1lbW9yeVNpemUoKTsKKyAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5zaXplKCkgKyBleHRyYU1lbW9yeVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNh
cGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9y
YWdlU3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhTWVtb3J5U2l6ZSgpOworICAgIHJldHVybiBtX29i
amVjdFNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYU1lbW9yeVNpemUoKTsKIH0KIAogc2l6ZV90IEhl
YXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkKQEAgLTExMDcsNyArMTA0MSw2IEBAIE5F
VkVSX0lOTElORSB2b2lkIEhlYXA6OmNvbGxlY3RJbXBsKEhlYXAKICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CiAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICBzbmFw
c2hvdE1hcmtlZFNwYWNlKCk7Ci0gICAgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xp
c3RFbnRyaWVzKCk7CiAgICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTEyMDUs
OCArMTEzOCw2IEBAIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogdm9pZCBI
ZWFwOjpzdG9wQWxsb2NhdGlvbigpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGlu
ZygpOwotICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCi0g
ICAgICAgIG1fc3RvcmFnZVNwYWNlLmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKTsKIH0KIAogdm9p
ZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xMzEwLDkgKzEyNDEsNyBAQCB2b2lkIEhl
YXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQogICAgIC8vIHJ1biBhbm90aGVyIGNvbGxlY3Rp
b24uIFRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgZWl0aGVyIHNpemUoKSBvciBjYXBhY2l0eSgpLCB0
aG91Z2ggaXQgc2hvdWxkCiAgICAgLy8gYmUgc29tZXdoZXJlIGJldHdlZW4gdGhlIHR3by4gVGhl
IGtleSBpcyB0byBtYXRjaCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgY2FsbHMgdG8K
ICAgICAvLyBkaWRBbGxvY2F0ZSgpLCB3aGlsZSBuZXZlciBkYW5nZXJvdXNseSB1bmRlcmVzdGlt
YXRpbmcgY2FwYWNpdHkoKS4gSW4gZXh0cmVtZSBjYXNlcyBvZgotICAgIC8vIGZyYWdtZW50YXRp
b24sIHdlIG1heSBoYXZlIHNpemUoKSBtdWNoIHNtYWxsZXIgdGhhbiBjYXBhY2l0eSgpLiBPdXIg
Y29sbGVjdG9yIHNvbWV0aW1lcwotICAgIC8vIHRlbXBvcmFyaWx5IGFsbG93cyB2ZXJ5IGhpZ2gg
ZnJhZ21lbnRhdGlvbiBiZWNhdXNlIGl0IGRvZXNuJ3QgZGVmcmFnbWVudCBvbGQgYmxvY2tzIGlu
IGNvcGllZAotICAgIC8vIHNwYWNlLgorICAgIC8vIGZyYWdtZW50YXRpb24sIHdlIG1heSBoYXZl
IHNpemUoKSBtdWNoIHNtYWxsZXIgdGhhbiBjYXBhY2l0eSgpLgogICAgIHNpemVfdCBjdXJyZW50
SGVhcFNpemUgPSAwOwogCiAgICAgLy8gRm9yIG1hcmtlZCBzcGFjZSwgd2UgdXNlIHRoZSB0b3Rh
bCBudW1iZXIgb2YgYnl0ZXMgdmlzaXRlZC4gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBmb3IKQEAg
LTEzMjQsMjMgKzEyNTMsNiBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJ0b3RhbEJ5dGVzVmlzaXRlZCA9ICIs
IG1fdG90YWxCeXRlc1Zpc2l0ZWQsICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFw
U2l6ZSwgIlxuIik7CiAKLSAgICAvLyBGb3IgY29waWVkIHNwYWNlLCB3ZSB1c2UgdGhlIGNhcGFj
aXR5IG9mIHN0b3JhZ2Ugc3BhY2UuIFRoaXMgaXMgYmVjYXVzZSBjb3BpZWQgc3BhY2UgbWF5IGdl
dAotICAgIC8vIGJhZGx5IGZyYWdtZW50ZWQgYmV0d2VlbiBmdWxsIGNvbGxlY3Rpb25zLiBUaGlz
IGFyaXNlcyB3aGVuIGVhY2ggZWRlbiBjb2xsZWN0aW9uIGV2YWN1YXRlcwotICAgIC8vIG11Y2gg
bGVzcyB0aGFuIG9uZSBDb3BpZWRCbG9jaydzIHdvcnRoIG9mIHN0dWZmLiBJdCBjYW4gYWxzbyBo
YXBwZW4gd2hlbiBDb3BpZWRCbG9ja3MgZ2V0Ci0gICAgLy8gcGlubmVkIGR1ZSB0byB2ZXJ5IHNo
b3J0LWxpdmVkIG9iamVjdHMuIEluIHN1Y2ggYSBjYXNlLCB3ZSB3YW50IHRvIGdldCB0byBhIGZ1
bGwgY29sbGVjdGlvbgotICAgIC8vIHNvb25lciByYXRoZXIgdGhhbiBsYXRlci4gSWYgd2UgdXNl
ZCBtX3RvdGFsQnl0ZXNDb3BpZWQsIHRoZW4gZm9yIGZvciBlYWNoIENvcGllZEJsb2NrIHRoYXQg
YW4KLSAgICAvLyBlZGVuIGFsbG9jYXRpb24gcHJvbW90ZWQsIHdlIHdvdWxkIG9ubHkgZGVkdWN0
IHRoZSBvbmUgb2JqZWN0J3Mgc2l6ZSBmcm9tIGVkZW4gc2l6ZS4gVGhpcwotICAgIC8vIHdvdWxk
IG1lYW4gdGhhdCB3ZSBjb3VsZCAibGVhayIgbWFueSBDb3BpZWRCbG9ja3MgYmVmb3JlIHdlIGRp
ZCBhIGZ1bGwgY29sbGVjdGlvbiBhbmQKLSAgICAvLyBkZWZyYWdtZW50ZWQgYWxsIG9mIHRoZW0u
IEl0IHdvdWxkIGJlIGdyZWF0IHRvIHVzZSBtX3RvdGFsQnl0ZXNDb3BpZWQsIGJ1dCB3ZSdkIG5l
ZWQgdG8KLSAgICAvLyBhdWdtZW50IGl0IHdpdGggc29tZXRoaW5nIHRoYXQgYWNjb3VudHMgZm9y
IHRob3NlIGZyYWdtZW50ZWQgYmxvY2tzLgotICAgIC8vIEZJWE1FOiBNYWtlIGl0IHBvc3NpYmxl
IHRvIGNvbXB1dGUgaGVhcCBzaXplIHVzaW5nIG1fdG90YWxCeXRlc0NvcGllZCByYXRoZXIgdGhh
bgotICAgIC8vIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkKLSAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjY4Ci0gICAgQVNTRVJUKG1fdG90YWxCeXRl
c0NvcGllZCA8PSBtX3N0b3JhZ2VTcGFjZS5zaXplKCkpOwotICAgIGN1cnJlbnRIZWFwU2l6ZSAr
PSBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJzdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSA9ICIsIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCksICIsIGN1cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7Ci0K
ICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IGV4dHJhTWVtb3J5U2l6
ZSgpIGVuZHMgdXAgY29ycmVzcG9uZGluZyB0byBhbGxvY2F0aW9uLXRpbWUKICAgICAvLyBleHRy
YSBtZW1vcnkgcmVwb3J0aW5nLgogICAgIGN1cnJlbnRIZWFwU2l6ZSArPSBleHRyYU1lbW9yeVNp
emUoKTsKQEAgLTE2NDYsMTQgKzE1NTgsNiBAQCBzaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXNWaXNp
dGVkKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXND
b3BpZWQoKQoteyAgICAgICAKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8m
IHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIHJlc3Vs
dCArPSBwYXJhbGxlbFZpc2l0b3ItPmJ5dGVzQ29waWVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCiB7CiAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgZnVs
bCBzZXQgb2YgQ29kZUJsb2NrcyB1bnRpbCBjb21waWxhdGlvbiBoYXMgdGVybWluYXRlZC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMs
NiBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0jaW5jbHVk
ZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgog
I2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCkBAIC01Miw3
ICs1MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2Rl
QmxvY2tTZXQ7Ci1jbGFzcyBDb3BpZWRTcGFjZTsKIGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2s7CiBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7
CkBAIC0xMjAsNyArMTE4LDYgQEAgcHVibGljOgogCiAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1
cm4gbV92bTsgfQogICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2U7IH0KLSAgICBDb3BpZWRTcGFjZSYgc3RvcmFnZVNwYWNlKCkgeyByZXR1cm4gbV9z
dG9yYWdlU3BhY2U7IH0KICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJl
dHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nsb3RWaXNpdG9yOyB9CkBAIC0xNTAsMTIgKzE0Nyw5
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck9iamVjdFdpdGhE
ZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5kZXN0cnVjdG9y
QWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4g
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKTsK
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvckF1eGlsaWFyeURhdGEoc2l6ZV90IGJ5
dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmF1eGlsaWFyeUFsbG9jYXRvckZvcihieXRlcyk7
IH0KLSAgICBDb3BpZWRBbGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0
b3JhZ2VTcGFjZS5hbGxvY2F0b3IoKTsgfQogICAgIHZvaWQqIGFsbG9jYXRlQXV4aWxpYXJ5KEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90KTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUF1eGls
aWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCk7CiAgICAgdm9pZCogdHJ5UmVhbGxv
Y2F0ZUF1eGlsaWFyeShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqIG9sZEJhc2UsIHNpemVf
dCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2Nh
dGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwotICAgIENo
ZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwg
dm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCB2b2lkKik7CiAKICAgICB0eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpT
Q2VsbCopOwpAQCAtMjYzLDcgKzI1Nyw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICBm
cmllbmQgY2xhc3MgRGVmZXJHQzsKICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGlsZTsK
ICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwpAQCAtMjc3LDggKzI3MCw2
IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwogICAgIGZyaWVuZCBj
bGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwotICAg
IGZyaWVuZCBjbGFzcyBDb3BpZWRTcGFjZTsKLSAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwpAQCAtMzQzLDcg
KzMzNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsK
ICAgICB2b2lkIHdyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoKTsKICAg
ICB2b2lkIHJlc2V0QWxsb2NhdG9ycygpOwotICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsK
ICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVz
KCk7CkBAIC0zNjgsNyArMzU4LDYgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCB0aHJlYWRWaXNp
dENvdW50KCk7CiAgICAgc2l6ZV90IHRocmVhZEJ5dGVzVmlzaXRlZCgpOwotICAgIHNpemVfdCB0
aHJlYWRCeXRlc0NvcGllZCgpOwogICAgIAogICAgIHZvaWQgZm9yRWFjaENvZGVCbG9ja0ltcGwo
Y29uc3QgU2NvcGVkTGFtYmRhPGJvb2woQ29kZUJsb2NrKik+Jik7CiAKQEAgLTM4OCwxMyArMzc3
LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb247CiAgICAg
c2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0
ZWRUaGlzQ3ljbGU7Ci0gICAgc2l6ZV90IG1fdG90YWxCeXRlc0NvcGllZDsKLSAgICBzaXplX3Qg
bV90b3RhbEJ5dGVzQ29waWVkVGhpc0N5Y2xlOwogICAgIAogICAgIEhlYXBPcGVyYXRpb24gbV9v
cGVyYXRpb25JblByb2dyZXNzOwogICAgIFN0cnVjdHVyZUlEVGFibGUgbV9zdHJ1Y3R1cmVJRFRh
YmxlOwogICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7Ci0gICAgQ29waWVkU3BhY2UgbV9z
dG9yYWdlU3BhY2U7CiAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1f
YXJyYXlCdWZmZXJzOwogICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5U2l6ZTsKICAgICBzaXplX3Qg
bV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplOwpAQCAtNDY0LDcgKzQ1MCw2IEBAIHByaXZhdGU6
CiAgICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7CiAgICAgSGFzaFNldDx2b2lkKj4gbV9vcGFx
dWVSb290czsKIAotICAgIFZlY3RvcjxDb3BpZWRCbG9jayo+IG1fYmxvY2tzVG9Db3B5OwogICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdtZW50TGVuZ3RoID0gMzI7CiAKICAgICBM
aXN0YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxs
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBD
ZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVkZSAiTGFyZ2VBbGxvY2F0aW9uLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lv
biAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIEhlYXBJbmxpbmVzX2gKICNk
ZWZpbmUgSGVhcElubGluZXNfaAogCi0jaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRl
ICJIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXIuaCIKQEAgLTI5NCwzMSArMjkzLDYgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeVJl
YWxsb2NhdGVBdXhpbGlhcgogICAgIHJldHVybiBuZXdCYXNlOwogfQogCi1pbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwg
c2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQotewotICAgIENoZWNrZWRCb29sZWFuIHJlc3Vs
dCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpOwotI2lmIEVOQUJM
RShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVs
dSBieXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAuXG4iLCBieXRlcywgaW50ZW5kZWRPd25lciwg
Km91dFB0cik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKLSNlbmRp
ZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0
cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiBwdHIsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLXsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQotICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0jZW5kaWYKLSAgICBDaGVja2VkQm9v
bGVhbiByZXN1bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlSZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwg
bmV3U2l6ZSk7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICBkYXRhTG9nRigi
SlNDIEdDIHJlYWxsb2NhdGluZyAlbHUgLT4gJWx1IGJ5dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAl
cCAtPiAlcC5cbiIsIG9sZFNpemUsIG5ld1NpemUsIGludGVuZGVkT3duZXIsIG9sZFB0ciwgKnB0
cik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKLSNlbmRpZgotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KIGlubGluZSB2b2lkIEhlYXA6OmFzY3JpYmVPd25lcihKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqIHN0b3JhZ2UpCiB7CiAjaWYgRU5BQkxFKEFMTE9DQVRJ
T05fTE9HR0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlm
aWVyLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFZlcmlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1
ZGUgIkhlYXBWZXJpZmllci5oIgogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29w
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgpAQCAt
NzcsMjcgKzc2LDYgQEAgY29uc3QgY2hhciogSGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUoSGVhcAog
ICAgIHJldHVybiBudWxscHRyOyAvLyBTaWxlbmNpbmcgYSBjb21waWxlciB3YXJuaW5nLgogfQog
Ci1zdGF0aWMgdm9pZCBnZXRCdXR0ZXJmbHlEZXRhaWxzKEpTT2JqZWN0KiBvYmosIHZvaWQqJiBi
dXR0ZXJmbHlCYXNlLCBzaXplX3QmIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgQ29waWVkQmxv
Y2sqJiBidXR0ZXJmbHlCbG9jaykKLXsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+
c3RydWN0dXJlKCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmotPmJ1dHRlcmZseSgp
OwotICAgIGJ1dHRlcmZseUJhc2UgPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKTsKLSAgICBi
dXR0ZXJmbHlCbG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihidXR0ZXJmbHlCYXNlKTsKLQot
ICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKLSAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXM7Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IG9iai0+aGFzSW5kZXhp
bmdIZWFkZXIoKTsKLSAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Ci0gICAg
ICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0
eShzdHJ1Y3R1cmUpOwotICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0
dXJlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0gICAgYnV0dGVyZmx5Q2FwYWNp
dHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci19
Ci0KIHZvaWQgSGVhcFZlcmlmaWVyOjppbml0aWFsaXplR0NDeWNsZSgpCiB7CiAgICAgSGVhcCog
aGVhcCA9IG1faGVhcDsKQEAgLTE5Nyw0MiArMTc1LDEwIEBAIHZvaWQgSGVhcFZlcmlmaWVyOjp0
cmltRGVhZE9iamVjdHMoKQogICAgIH0KIH0KIAotYm9vbCBIZWFwVmVyaWZpZXI6OnZlcmlmeUJ1
dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UoUGhhc2UgcGhhc2UsIExpdmVPYmplY3RMaXN0JiBsaXN0
KQorYm9vbCBIZWFwVmVyaWZpZXI6OnZlcmlmeUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UoUGhh
c2UsIExpdmVPYmplY3RMaXN0JikKIHsKLSAgICBhdXRvJiBsaXZlT2JqZWN0cyA9IGxpc3QubGl2
ZU9iamVjdHM7Ci0KLSAgICBDb3BpZWRTcGFjZSYgc3RvcmFnZVNwYWNlID0gbV9oZWFwLT5tX3N0
b3JhZ2VTcGFjZTsKLSAgICBib29sIGxpc3ROYW1lUHJpbnRlZCA9IGZhbHNlOwotICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5z
aXplKCk7IGkrKykgewotICAgICAgICBMaXZlT2JqZWN0RGF0YSYgb2JqZWN0RGF0YSA9IGxpdmVP
YmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0RGF0YS5pc0NvbmZpcm1lZERlYWQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBKU09iamVjdCogb2JqID0gb2JqZWN0RGF0YS5v
Ymo7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsKLSAg
ICAgICAgaWYgKGJ1dHRlcmZseSkgewotICAgICAgICAgICAgdm9pZCogYnV0dGVyZmx5QmFzZTsK
LSAgICAgICAgICAgIHNpemVfdCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXM7Ci0gICAgICAgICAg
ICBDb3BpZWRCbG9jayogYnV0dGVyZmx5QmxvY2s7Ci0gICAgICAgICAgICBnZXRCdXR0ZXJmbHlE
ZXRhaWxzKG9iaiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0
ZXJmbHlCbG9jayk7Ci0KLSAgICAgICAgICAgIGlmICghc3RvcmFnZVNwYWNlLmNvbnRhaW5zKGJ1
dHRlcmZseUJsb2NrKSkgewotICAgICAgICAgICAgICAgIGlmICghbGlzdE5hbWVQcmludGVkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJWZXJpZmljYXRpb24gQCBwaGFzZSAlcyBG
QUlMRUQgaW4gb2JqZWN0IGxpc3QgJyVzJyAoc2l6ZSAlenUpXG4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgcGhhc2VOYW1lKHBoYXNlKSwgbGlzdC5uYW1lLCBsaXZlT2JqZWN0cy5zaXplKCkp
OwotICAgICAgICAgICAgICAgICAgICBsaXN0TmFtZVByaW50ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5z
dHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHJ1Y3R1cmVDbGFzc05h
bWUgPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWU7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICBidXR0ZXJmbHkgJXAgKGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIE5P
VCBpbiBTdG9yYWdlU3BhY2UgfCBvYmogJXAgdHlwZSAnJXMnXG4iLAotICAgICAgICAgICAgICAg
ICAgICBidXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywg
YnV0dGVyZmx5QmxvY2ssIG9iaiwgc3RydWN0dXJlQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHN1Y2Nlc3M7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGFnYWluLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzUyCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgSGVhcFZlcmlmaWVyOjp2ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZSBw
aGFzZSkKQEAgLTI1NCwxNCArMjAwLDExIEBAIHZvaWQgSGVhcFZlcmlmaWVyOjpyZXBvcnRPYmpl
Y3QoTGl2ZU9iamUKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUo
KTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7Ci0gICAgdm9p
ZCogYnV0dGVyZmx5QmFzZTsKLSAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOwot
ICAgIENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsKLSAgICBnZXRCdXR0ZXJmbHlEZXRhaWxz
KG9iaiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlC
bG9jayk7CisgICAgdm9pZCogYnV0dGVyZmx5QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1
cmUpOwogCi0gICAgZGF0YUxvZ0YoIkZPVU5EIG9iaiAlcCB0eXBlICclcycgYnV0dGVyZmx5ICVw
IChiYXNlICVwIHNpemUgJXp1IGJsb2NrICVwKSBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAor
ICAgIGRhdGFMb2dGKCJGT1VORCBvYmogJXAgdHlwZSAnJXMnIGJ1dHRlcmZseSAlcCAoYmFzZSAl
cCkgaW4gR0NbJWRdICVzIGxpc3QgJyVzJ1xuIiwKICAgICAgICAgb2JqLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLT5jbGFzc05hbWUsCi0gICAgICAgIGJ1dHRlcmZseSwgYnV0dGVyZmx5QmFzZSwg
YnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9jaywKKyAgICAgICAgYnV0dGVy
Zmx5LCBidXR0ZXJmbHlCYXNlLAogICAgICAgICBjeWNsZUluZGV4LCBjeWNsZS5jb2xsZWN0aW9u
VHlwZU5hbWUoKSwgbGlzdC5uYW1lKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsy
OCw2IEBACiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJDb25z
ZXJ2YXRpdmVSb290cy5oIgotI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcFByb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgpAQCAtNDkyLDM2ICs0ODksNiBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCiAgICAgZHJhaW4oKTsKIH0KIAotdm9pZCBTbG90
VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdm9pZCog
cHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgQVNTRVJUKGJ5dGVzKTsKLSAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKLSAgICBpZiAoYmxvY2stPmlz
T3ZlcnNpemUoKSkgewotICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gYmxvY2stPnNpemUoKSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzaHJpbmsgdGhlIGFsbG9jYXRp
b24gaWYgYnl0ZXMgd2VudCBiZWxvdyB0aGUgYmxvY2sgc2l6ZS4KLSAgICAgICAgLy8gRm9yIG5v
dywgd2UganVzdCBtYWtlIHN1cmUgdGhhdCBvdXIgYWNjb3VudGluZyBvZiBob3cgbXVjaCBtZW1v
cnkgd2UgYXJlIGFjdHVhbGx5IHVzaW5nCi0gICAgICAgIC8vIGlzIGNvcnJlY3QuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ3NDkKLSAgICAg
ICAgYnl0ZXMgPSBibG9jay0+c2l6ZSgpOwotICAgICAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2Uu
cGluKGJsb2NrKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5j
b250YWlucyhibG9jaykpOwotCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJmJsb2NrLT53b3JrTGlz
dExvY2soKSk7Ci0gICAgLy8gV2UgYWx3YXlzIHJlcG9ydCBsaXZlIGJ5dGVzLCBleGNlcHQgaWYg
ZHVyaW5nIGFuIGVkZW4gY29sbGVjdGlvbiB3ZSBzZWUgYW4gb2xkIG9iamVjdCBwb2ludGluZyB0
byBhbgotICAgIC8vIG9sZCBiYWNraW5nIHN0b3JlIGFuZCB0aGUgb2xkIG9iamVjdCBpcyBiZWlu
ZyBtYXJrZWQgYmVjYXVzZSBvZiB0aGUgcmVtZW1iZXJlZCBzZXQuIE5vdGUgdGhhdCBpZiB3ZQot
ICAgIC8vIGFzayB0aGUgb2JqZWN0IGl0c2VsZiwgaXQgd2lsbCBhbHdheXMgdGVsbCB1cyB0aGF0
IGl0J3MgYW4gb2xkIGJsYWNrIG9iamVjdCAtIGJlY2F1c2UgZXZlbiBkdXJpbmcgYW4KLSAgICAv
LyBlZGVuIGNvbGxlY3Rpb24gd2UgaGF2ZSBhbHJlYWR5IGluZGljYXRlZCB0aGF0IHRoZSBvYmpl
Y3QgaXMgb2xkLiBUaGF0J3Mgd2h5IHdlIHVzZSB0aGUKLSAgICAvLyBTbG90VmlzaXRvcidzIGNh
Y2hlIG9mIHRoZSBvYmplY3QncyBvbGQgc3RhdGUuCi0gICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9u
SW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uCi0gICAgICAgIHx8ICFibG9jay0+aXNPbGQo
KQotICAgICAgICB8fCBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyAhPSBD
ZWxsU3RhdGU6Ok9sZEdyZXkpIHsKLSAgICAgICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKLSAg
ICAgICAgYmxvY2stPnJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyLCB0b2tlbiwgYnl0ZXMp
OwotICAgIH0KLX0KLSAgICAKIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQog
ewogICAgIEFTU0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBi
ZSBjYWxsZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogI2RlZmluZSBTbG90VmlzaXRvcl9oCiAKICNpbmNsdWRlICJDZWxsU3Rh
dGUuaCIKLSNpbmNsdWRlICJDb3B5VG9rZW4uaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgog
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKQEAgLTEx
MSw4ICsxMTAsNiBAQCBwdWJsaWM6CiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJl
IGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCog
YmFzZSk7CiAKLSAgICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBz
aXplX3QpOwotICAgIAogICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7
CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemVfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29w
eUJhcnJpZXIuaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUg
IkpJVC5oIgogCiAjaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NjU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NjU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgot
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHJl
dmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFy
eUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBWTTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBBdXhpbGlhcnlCYXJyaWVyIHsKIHB1YmxpYzoKKyAg
ICAvLyBUaGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSBtX3ZhbHVlIGJlY2F1c2UgSSB3b3JyeSBhYm91
dCBwZXJmb3JtYW5jZSBvbiBQTFQsIG9yIHNvbWV0aGluZy4KICAgICBBdXhpbGlhcnlCYXJyaWVy
KCkgeyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShW
TSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKik7Ci0g
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24o
Q29weVZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwogICAgIAogICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIq
IGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhp
cyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBA
QAogCiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCi0j
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCkBAIC04NywxNSArODUs
NiBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgCiAgICAgICAgIHN0
cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIoaW50ZW5kZWRPd25lciksIEluZGV4aW5nSGVhZGVy
KCksIDApOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17Ci0gICAgc2l6ZV90IHNpemUgPSB0
b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBm
cm9tQmFzZSgKLSAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHNpemUpLAotICAgICAg
ICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQogaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
ICAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw2IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb25zdHJ1Y3RE
YXRhLmgiCi0jaW5jbHVkZSAiQ29weVRva2VuLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNDEsOSArNDAsNiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAg
IHR5cGVkZWYgdm9pZCAoKlZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0cikoSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKICAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgdmlzaXRDaGlsZHJlbjsKIAot
ICAgIHR5cGVkZWYgdm9pZCAoKkNvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0cikoSlNDZWxsKiwg
Q29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotICAgIENvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0
ciBjb3B5QmFja2luZ1N0b3JlOwotCiAgICAgdHlwZWRlZiBDYWxsVHlwZSAoKkdldENhbGxEYXRh
RnVuY3Rpb25QdHIpKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgR2V0Q2FsbERhdGFGdW5jdGlv
blB0ciBnZXRDYWxsRGF0YTsKIApAQCAtMTUxLDcgKzE0Nyw2IEBAIHN0cnVjdCBNZXRob2RUYWJs
ZSB7CiAjZGVmaW5lIENSRUFURV9NRVRIT0RfVEFCTEUoQ2xhc3NOYW1lKSB7IFwKICAgICAgICAg
JkNsYXNzTmFtZTo6ZGVzdHJveSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVu
LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmNvcHlCYWNraW5nU3RvcmUsIFwKICAgICAgICAgJkNs
YXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0
RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjA1
NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkQmxvY2tJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQz
LDYgKzQxLDggQEAgRGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMoVk0mIHZtLAogICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9taW5DYXBhY2l0eShjYXBhY2l0eSkKIHsKKyAg
ICBtX292ZXJyaWRlcy5jbGVhcigpOworICAgIAogICAgIC8vIFdoZW4gd2UgY29uc3RydWN0IHRo
ZSBvYmplY3QgZnJvbSBDKysgY29kZSwgd2UgZXhwZWN0IHRoZSBjYXBhY2l0eSB0byBiZSBhdCBs
ZWFzdCBhcyBsYXJnZSBhcwogICAgIC8vIGxlbmd0aC4gSklULWFsbG9jYXRlZCBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0cyBwbGF5IGV2aWwgdHJpY2tzLCB0aG91Z2guCiAgICAgQVNTRVJUKGNhcGFj
aXR5ID49IGxlbmd0aCk7CkBAIC0xMDEsMjcgKzEwMSw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
Ojp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0
LT5zdG9yYWdlKCksIHN0ZDo6bWF4KHRoaXNPYmplY3QtPm1fbGVuZ3RoLCB0aGlzT2JqZWN0LT5t
X21pbkNhcGFjaXR5KSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGVl
KTsKICAgICAKLSAgICBpZiAodGhpc09iamVjdC0+bV9vdmVycmlkZXMpIHsKLSAgICAgICAgdmlz
aXRvci5jb3B5TGF0ZXIoCi0gICAgICAgICAgICB0aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNP
dmVycmlkZXNDb3B5VG9rZW4sCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5n
ZXQoKSwgdGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGly
ZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogdGhpc0NlbGwsIENvcHlWaXNp
dG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgRGlyZWN0QXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpc0NlbGwpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9r
ZW4pOwotICAgIAotICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLmdldCgpOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJyaWRl
cykpIHsKLSAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZp
c2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpKTsKLSAg
ICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5tX2xl
bmd0aCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRCYXJyaWVy
KG5ld092ZXJyaWRlcyk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIHRo
aXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7Ci0gICAgfQorICAgIGlmICh0aGlzT2JqZWN0LT5t
X292ZXJyaWRlcykKKyAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1f
b3ZlcnJpZGVzLmdldCgpKTsKIH0KIAogU3RydWN0dXJlKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQpAQCAtMTM3LDggKzExOCw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVy
cmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
ZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVl
c0Z1bmN0aW9uKCksIERvbnRFbnVtKTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3RvcmU7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgb3ZlcnJp
ZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7CisgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0u
aGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeSh0aGlzLCBvdmVycmlkZXNTaXplKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGlj
X2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0aGlz
LCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJ
KHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERp
cmVjdEFyZ3VtZW50c19oCiAjZGVmaW5lIERpcmVjdEFyZ3VtZW50c19oCiAKLSNpbmNsdWRlICJD
b3B5QmFycmllci5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHNPZmZzZXQuaCIKICNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCiAK
QEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRT
aXplKEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENv
cHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICAKICAgICB1aW50MzJfdCBpbnRlcm5hbExlbmd0
aCgpIGNvbnN0CiAgICAgewpAQCAtMTUwLDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBB
bHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3
aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgIHVpbnQzMl90IG1f
bWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3RoIGRldGVybWluZXMgdGhl
IGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFjdHVhbCBjYXBhY2l0eSwg
b3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQgdGhpcyB3YXkgdG8gYmUg
a2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5QmFycmllcjxib29sPiBtX292ZXJyaWRlczsgLy8g
SWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJl
IGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9v
bCo+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNh
bGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lu
Y2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSw2IEBAIHNpemVfdCBKU0NlbGw6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gY2VsbC0+Y2VsbFNpemUoKTsKIH0KIAot
dm9pZCBKU0NlbGw6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5
VG9rZW4pCi17Ci19Ci0KIHZvaWQgSlNDZWxsOjpoZWFwU25hcHNob3QoSlNDZWxsKiwgSGVhcFNu
YXBzaG90QnVpbGRlciYpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCop
OwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlND
ZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyMDU2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw2IEBACiAjZGVmaW5lIEpTTGV4aWNhbEVudmlyb25tZW50X2gKIAogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
RW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU2
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDEwICsyNSw2IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogI2lu
Y2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMu
aCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRv
ci5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkN1c3RvbUdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJv
ckNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMjA1NjU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgg
KzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CiAKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgog
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCi0j
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50bE9iamVjdC5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAkocmV2aXNpb24gMjA1
NjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2Vha01hcERhdGEuaCIKIAotI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTY1
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDEwICsxNTUsMTEgQEAgYm9vbCBKU0RvbGxhclZNUHJv
dG90eXBlOjppc0luT2JqZWN0U3BhYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU0Rv
bGxhclZNUHJvdG90eXBlOjppc0luU3RvcmFnZVNwYWNlKEhlYXAqIGhlYXAsIHZvaWQqIHB0cikK
K2Jvb2wgSlNEb2xsYXJWTVByb3RvdHlwZTo6aXNJblN0b3JhZ2VTcGFjZShIZWFwKiwgdm9pZCop
CiB7Ci0gICAgQ29waWVkQmxvY2sqIGNhbmRpZGF0ZSA9IENvcGllZFNwYWNlOjpibG9ja0Zvcihw
dHIpOwotICAgIHJldHVybiBoZWFwLT5zdG9yYWdlU3BhY2UoKS5jb250YWlucyhjYW5kaWRhdGUp
OworICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0aGlzLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3NTMKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHN0cnVjdCBDZWxsQWRkcmVzc0NoZWNrRnVuY3RvciA6IE1hcmtlZEJsb2NrOjpDb3Vu
dEZ1bmN0b3Igewo=
</data>
<flag name="review"
          id="311676"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>