<?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>153288</bug_id>
          
          <creation_ts>2016-01-20 14:50:10 -0800</creation_ts>
          <short_desc>B3 should have load elimination</short_desc>
          <delta_ts>2016-01-21 11:55:29 -0800</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>153200</dependson>
          <blocked>150507</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1157062</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-20 14:50:10 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157063</commentid>
    <comment_count>1</comment_count>
      <attachid>269389</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-20 14:50:59 -0800</bug_when>
    <thetext>Created attachment 269389
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157305</commentid>
    <comment_count>2</comment_count>
      <attachid>269456</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 09:19:34 -0800</bug_when>
    <thetext>Created attachment 269456
close to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157330</commentid>
    <comment_count>3</comment_count>
      <attachid>269464</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 10:14:12 -0800</bug_when>
    <thetext>Created attachment 269464
passes all tests

I don&apos;t know if it speeds anything up, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157339</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-01-21 10:32:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created attachment 269464 [details]
&gt; passes all tests
&gt; 
&gt; I don&apos;t know if it speeds anything up, yet.

r=me!!!!!! :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157351</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 10:55:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Created attachment 269464 [details]
&gt; &gt; passes all tests
&gt; &gt; 
&gt; &gt; I don&apos;t know if it speeds anything up, yet.
&gt; 
&gt; r=me!!!!!! :D

Booo, no speed-up this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157352</commentid>
    <comment_count>6</comment_count>
      <attachid>269470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 10:55:53 -0800</bug_when>
    <thetext>Created attachment 269470
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157353</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 10:57:40 -0800</bug_when>
    <thetext>Attachment 269470 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157363</commentid>
    <comment_count>8</comment_count>
      <attachid>269472</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 11:05:52 -0800</bug_when>
    <thetext>Created attachment 269472
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157364</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 11:07:03 -0800</bug_when>
    <thetext>Attachment 269472 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157365</commentid>
    <comment_count>10</comment_count>
      <attachid>269473</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 11:08:40 -0800</bug_when>
    <thetext>Created attachment 269473
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157366</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-21 11:09:59 -0800</bug_when>
    <thetext>Attachment 269473 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157375</commentid>
    <comment_count>12</comment_count>
      <attachid>269473</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-01-21 11:46:01 -0800</bug_when>
    <thetext>Comment on attachment 269473
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157378</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-21 11:55:29 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/195417</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269389</attachid>
            <date>2016-01-20 14:50:59 -0800</date>
            <delta_ts>2016-01-21 09:19:34 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47611</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUzNTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwxMCBAQAogCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3MTRDQTUx
NkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IH07CisJCTBGNzI1
Q0E3MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0Ez
MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAq
LzsgfTsKKwkJMEY3MjVDQTgxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmggKi87IH07CisJCTBGNzI1Q0E5MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVD
QTUxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi87IH07CisJCTBGNzI1Q0FBMUM1
MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0E2MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
aCAqLzsgfTsKIAkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBG
NzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1QThDQzFCMDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lU2V0LmNwcCAqLzsgfTsKQEAgLTI2MjcsNiArMjYzMSwxMCBAQAogCQkwRjcwMjVBODE3MTRC
MEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHBhdGggPSBiMy9CM0VsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3
MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNTFDNTAzREVEMDBBRDk0M0Eg
LyogQjNQdXJlQ1NFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
UHVyZUNTRS5jcHA7IHBhdGggPSBiMy9CM1B1cmVDU0UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHVyZUNTRS5oOyBwYXRoID0gYjMvQjNQdXJl
Q1NFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVBNTAyOEQwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQy
NjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRp
bmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc1Nyw2ICs0NzY1LDgg
QEAKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggKi8sCiAJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAorCQkJCTBGNzI1Q0EzMUM1
MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLywK
KwkJCQkwRjcyNUNBNDFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5oICovLAogCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5j
eUNsYXNzLmNwcCAqLywKIAkJCQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVu
Y3lDbGFzcy5oICovLAogCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50
ZWRCbG9jay5oICovLApAQCAtNDgwMyw2ICs0ODEzLDggQEAKIAkJCQkwRkVDODRFMTFCREFDREFD
MDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAogCQkJCTBGRUM4NEUyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAogCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRjcyNUNBNTFDNTAzREVEMDBBRDk0M0Eg
LyogQjNQdXJlQ1NFLmNwcCAqLywKKwkJCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQ
dXJlQ1NFLmggKi8sCiAJCQkJNDM0MjJBNjQxQzE2MjIxRTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91
YmxlVG9GbG9hdC5jcHAgKi8sCiAJCQkJNDM0MjJBNjUxQzE2MjIxRTAwRTJFQjk4IC8qIEIzUmVk
dWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKQEAgLTcyODksNiArNzMwMSw3IEBACiAJCQkJMEZDOTdG
M0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZH
SklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzI1Q0E4MUM1MDNERUQwMEFEOTQz
QSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6
eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzYxNCw2ICs3NjI3LDcgQEAKIAkJCQlBMUQ3
OTJGRDFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTFENzkyRkYxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkUxQjQ1QTM2MDAwQ0M3RjZDIC8qIElu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzI1
Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
RDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NTE2NUQzMUJERjBCOUUw
MDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTg4NDEsNiArODg1NSw3IEBACiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNzI1Q0E3MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2Vy
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyODYsNiArOTMwMSw3IEBACiAJCQkJMTRE
MkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzBCNzkxOTgxQzAyNEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBOTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJl
Q1NFLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBN
YXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJG
QSAvKiBCM1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0hl
YXBSYW5nZS5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1
cmVDU0UuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZVNldC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgQ1NFIHsKK3B1YmxpYzoKKyAgICBDU0UoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1f
cHJvYyhwcm9jKQorICAgICAgICAsIG1faW1wdXJlQmxvY2tEYXRhKHByb2Muc2l6ZSgpKQorICAg
ICAgICAsIG1faW5zZXJ0aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7CisgICAgICAgIG1f
ZG9taW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAg
ICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9kYXRhID0gJm1faW1wdXJlQmxv
Y2tEYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK21faW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gYmxv
Y2stPmF0KG1faW5kZXgpOworICAgICAgICAgICAgICAgIHByb2Nlc3MoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQgcHJvY2VzcygpCisgICAgeworICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0
aW9uKCk7CisKKyAgICAgICAgaWYgKG1fcHVyZUNTRS5wcm9jZXNzKG1fdmFsdWUsIG1fZG9taW5h
dG9ycykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcygp
KTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IG1fdmFsdWUtPmVmZmVj
dHMoKS53cml0ZXMpCisgICAgICAgICAgICBjbG9iYmVyKHdyaXRlcyk7CisgICAgICAgIAorICAg
ICAgICBpZiAoTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
KQorICAgICAgICAgICAgcHJvY2Vzc01lbW9yeShtZW1vcnkpOworICAgIH0KKworICAgIHZvaWQg
Y2xvYmJlcihIZWFwUmFuZ2Ugd3JpdGVzKQorICAgIHsKKyAgICAgICAgbV9kYXRhLT53cml0ZXMu
YWRkKHdyaXRlcyk7CisgICAgICAgIAorICAgICAgICBtX2RhdGEtPm1lbW9yeVZhbHVlcy5yZW1v
dmVJZigKKyAgICAgICAgICAgIFsmXSAoY29uc3QgSGFzaE1hcDxWYWx1ZSosIE1hdGNoZXM+OjpL
ZXlWYWx1ZVBhaXJUeXBlJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZW50cnku
dmFsdWUucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWVtb3J5
VmFsdWUqIG1lbW9yeSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWVtb3J5LT5yYW5nZSgpLm92ZXJsYXBzKHdyaXRlcyk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS5pc0VtcHR5KCk7CisgICAgICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NNZW1vcnkoTWVtb3J5VmFsdWUqIG1l
bW9yeSkKKyAgICB7CisgICAgICAgIFZhbHVlKiBwdHIgPSBtZW1vcnktPmxhc3RDaGlsZCgpOwor
ICAgICAgICBIZWFwUmFuZ2UgcmFuZ2UgPSBtZW1vcnktPnJhbmdlKCk7CisgICAgICAgIGludDMy
X3Qgb2Zmc2V0ID0gbWVtb3J5LT5vZmZzZXQoKTsKKyAgICAgICAgVHlwZSB0eXBlID0gbWVtb3J5
LT50eXBlKCk7CisKKyAgICAgICAgLy8gRklYTUU6IEVtcG93ZXIgdGhpcyB0byBpbnNlcnQgY2Fz
dHMgYW5kIHNoaWZ0cy4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWVtb3J5LT5vcGNvZGUo
KSkgeworICAgICAgICBjYXNlIExvYWQ4WjogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1h
dGNoID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAo
TWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDggfHwgY2FuZGlkYXRlLT5vcGNvZGUo
KSA9PSBTdG9yZTgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxh
Y2UobWF0Y2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5
VmFsdWUobWVtb3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBMb2FkOFM6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1v
cnlWYWx1ZSgKKyAgICAgICAgICAgICAgICBwdHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBj
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRl
LT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRh
dGUtPm9wY29kZSgpID09IExvYWQ4UyB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlOCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2gtPm9wY29kZSgpID09IFN0b3JlOCkgeworICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihTRXh0OCwgbV92YWx1ZS0+b3JpZ2luKCks
IG1hdGNoLT5jaGlsZCgwKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVwbGFjZShtYXRjaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQxNlo6IHsKKyAgICAgICAgICAg
IE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1ZSgKKyAgICAgICAgICAgICAgICBw
dHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQxNiB8fCBj
YW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlMTYpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkMTZTOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1
ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwg
WyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkMTZTIHx8IGNhbmRpZGF0ZS0+
b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gtPm9wY29kZSgpID09IFN0b3Jl
MTYpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oU0V4
dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVl
KG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
TG9hZDogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVl
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9mZnNldCgp
ICE9IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRp
ZGF0ZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9y
ZSAmJiBjYW5kaWRhdGUtPmNoaWxkKDApLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9y
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU4
OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhTG9nKCJCYWQgbWVtb3J5IHZh
bHVlOiAiLCBkZWVwRHVtcChtX3Byb2MsIG1fdmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgcmVwbGFjZShNZW1vcnlWYWx1ZSogbWF0Y2gpCisgICAgewor
ICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAobWF0Y2gtPmlzU3RvcmUoKSkKKyAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRl
bnRpdHkobWF0Y2gtPmNoaWxkKDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUo
TWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIGFkZE1lbW9yeVZhbHVlKCpkYXRh
LCBtZW1vcnkpOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoSW1wdXJlQmxvY2tE
YXRhJiBkYXRhLCBNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAgICAgICAgVmVjdG9yPE1l
bW9yeVZhbHVlKiwgMT4mIG1hdGNoZXMgPQorICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXMu
YWRkKG1lbW9yeS0+bGFzdENoaWxkKCksIFZlY3RvcjxNZW1vcnlWYWx1ZSosIDE+KCkpLml0ZXJh
dG9yLT52YWx1ZTsKKworICAgICAgICBpZiAobWF0Y2hlcy5jb250YWlucyhtZW1vcnkpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1lbW9yeSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgorICAgIE1lbW9yeVZhbHVlKiBmaW5k
TWVtb3J5VmFsdWUoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZp
bHRlcikKKyAgICB7CisgICAgICAgIGF1dG8gZmluZCA9IFsmXSAoSW1wdXJlQmxvY2tEYXRhJiBk
YXRhKSAtPiBNZW1vcnlWYWx1ZSogeworICAgICAgICAgICAgYXV0byBpdGVyID0gZGF0YS5tZW1v
cnlWYWx1ZXMuZmluZChwdHIpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZGF0YS5tZW1vcnlW
YWx1ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBjYW5kaWRh
dGUgOiBpdGVyLT52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyKGNhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9OworCisgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKCptX2Rh
dGEpKQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworCisgICAgICAgIGlmIChtX2RhdGEtPndy
aXRlcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKj4gd29ya2xpc3Q7CisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgOD4gc2Vlbkxpc3Q7CisKKyAgICAgICAgd29ya2xpc3QucHVzaEFs
bChtX2Jsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNo
ID0gbnVsbHB0cjsKKworICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgeworICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2NrKTsKKworICAgICAg
ICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdOwor
CisgICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLnN0cmljdGx5RG9taW5hdGVzKGJsb2NrLCBt
X2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1hdGNoID0gZmluZChkYXRhKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGF0YS53cml0ZXMub3ZlcmxhcHMocmFuZ2UpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoQWxsKGJsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IHNlZW5MaXN0KQorICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobV9p
bXB1cmVCbG9ja0RhdGFbYmxvY2tdLCBtYXRjaCk7CisgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1h
dGNoKTsKKworICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0
b3I8VmFsdWUqLCAxPiBNYXRjaGVzOworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisKKyAgICBE
b21pbmF0b3JzJiBtX2RvbWluYXRvcnM7CisgICAgUHVyZUNTRSBtX3B1cmVDU0U7CisKKyAgICBz
dHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0
ZXM7CisKKyAgICAgICAgLy8gTWFwcyBhbiBhZGRyZXNzIGJhc2UgdG8gYWxsIG9mIHRoZSBNZW1v
cnlWYWx1ZXMgdGhhdCBkbyB0aGluZ3MgdG8gaXQuIEFmdGVyIHdlJ3JlIGRvbmUKKyAgICAgICAg
Ly8gcHJvY2Vzc2luZyBhIG1hcCwgdGhpcyB0ZWxscyB1cyB0aGUgdmFsdWVzIGF0IHRhaWwuCisg
ICAgICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8TWVtb3J5VmFsdWUqLCAxPj4gbWVtb3J5VmFs
dWVzOworICAgIH07CisKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+
IG1faW1wdXJlQmxvY2tEYXRhOworCisgICAgSW1wdXJlQmxvY2tEYXRhKiBtX2RhdGE7CisKKyAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUq
IG1fdmFsdWU7CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisKKyAgICBib29s
IG1fY2hhbmdlZCB7IGZhbHNlIH07Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
Ym9vbCBlbGltaW5hdGVDb21tb25TdWJleHByZXNpb25zKFByb2NlZHVyZSYgcHJvYykKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zIik7CisKKyAgICBDU0UgY3NlKHByb2MpOworICAgIHJldHVybiBjc2UucnVuKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5h
dGVDb21tb25TdWJleHByZXNzaW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc19oCisjZGVm
aW5lIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
KworLy8gVGhpcyBkb2VzIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiAo
Q1NFKSBvdmVyIGJvdGggcHVyZSB2YWx1ZXMgYW5kIG1lbW9yeSBhY2Nlc3Nlcy4KKworYm9vbCBl
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NTM1NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBA
QCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIHJlZHVj
ZURvdWJsZVRvRmxvYXQocHJvY2VkdXJlKTsKIAogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9j
ZWR1cmUpOworICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUp
OwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVy
ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDUwNwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9u
IDE5NTM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewogCiBjbGFzcyBIZWFwUmFuZ2UgewogcHVibGljOgorICAgIHR5cGVkZWYgdW5zaWduZWQgVHlw
ZTsKKyAgICAKICAgICBIZWFwUmFuZ2UoKQogICAgICAgICA6IG1fYmVnaW4oMCkKICAgICAgICAg
LCBtX2VuZCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmgJKHJldmlzaW9uIDE5NTM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCisgICAgYm9vbCBpc0VtcHR5KCkgY29udHMgeyByZXR1cm4gbV9pbnNlcnRpb25z
LmlzRW1wdHkoKTsgfQorCiAgICAgUHJvY2VkdXJlJiBjb2RlKCkgeyByZXR1cm4gbV9wcm9jZWR1
cmU7IH0KIAogICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZp
c2lvbiAxOTUzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBIZWFw
UmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFu
Z2UoY29uc3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KIAorICAgIGJv
b2wgaXNTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9CisgICAgYm9vbCBp
c0xvYWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorCiAgICAgc2l6ZV90IGFj
Y2Vzc0J5dGVTaXplKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1B1cmVDU0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1B1cmVDU0UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHVyZUNTRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHVyZUNTRTo6UHVyZUNTRSgpCit7Cit9CisKK1B1
cmVDU0U6On5QdXJlQ1NFKCkKK3sKK30KKwordm9pZCBQdXJlQ1NFOjpjbGVhcigpCit7CisgICAg
bV9tYXAuY2xlYXIoKTsKK30KKworYm9vbCBQdXJlQ1NFOjpwcm9jZXNzKFZhbHVlKiB2YWx1ZSwg
RG9taW5hdG9ycyYgZG9taW5hdG9ycykKK3sKKyAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IElk
ZW50aXR5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWYWx1ZUtleSBrZXkgPSB2YWx1
ZS0+a2V5KCk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE1h
dGNoZXMmIG1hdGNoZXMgPSBtX21hcC5hZGQoa2V5LCBNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1
ZTsKKworICAgIGZvciAoVmFsdWUqIG1hdGNoIDogbWF0Y2hlcykgeworICAgICAgICBpZiAoZG9t
aW5hdG9ycy5kb21pbmF0ZXMobWF0Y2gtPm93bmVyLCB2YWx1ZS0+b3duZXIpKSB7CisgICAgICAg
ICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1hdGNoZXMuYXBwZW5kKHZhbHVlKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHVyZUNTRS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVD
U0UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQdXJlQ1NFX2gKKyNkZWZpbmUgQjNQ
dXJlQ1NFX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlS2V5Lmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBEb21pbmF0b3JzOworY2xhc3Mg
VmFsdWU7CisKK3R5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworLy8gVGhpcyBp
cyBhIHJldXNhYmxlIHV0aWxpdHkgZm9yIGRvaW5nIHB1cmUgQ1NFLiBZb3UgY2FuIHVzZSBpdCB0
byBkbyBwdXJlIENTRSBvbiBhIHByb2dyYW0gYnkganVzdAorLy8gcHJvY2VlZGluZyBpbiBvcmRl
ciBhbiBjYWxsaW5nIHByb2Nlc3MoKS4KK2NsYXNzIFB1cmVDU0UgeworcHVibGljOgorICAgIFB1
cmVDU0UoKTsKKyAgICB+UHVyZUNTRSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgYm9v
bCBwcm9jZXNzKFZhbHVlKiwgRG9taW5hdG9ycyYpOworICAgIAorcHJpdmF0ZToKKyAgICBIYXNo
TWFwPFZhbHVlS2V5LCBNYXRjaGVzPiBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHVyZUNTRV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAJKHJldmlzaW9uIDE5NTM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJC
M1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNW
YWx1ZUtleS5oIgpAQCAtMjgwLDcgKzI4MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgbV9w
cm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3By
b2MuZG9taW5hdG9ycygpOyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAg
bV9wdXJlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3B1cmVDU0UuY2xlYXIoKTsKIAog
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9y
ZGVyKCkpIHsKICAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkBAIC0xNTUwLDMxICsx
NTUxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7
Ci0gICAgICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIHB1cmUgZG9taW5hdG9yLWJhc2Vk
IENTRS4gSW4gdGhlIGZ1dHVyZSB3ZSBjb3VsZCBhZGQgbG9hZCBlbGltaW5hdGlvbi4KLSAgICAg
ICAgLy8gTm90ZSB0aGF0IGlmIHdlIGFkZCBsb2FkIGVsaW1pbmF0aW9uLCB3ZSBzaG91bGQgZG8g
aXQgYnkgZGlyZWN0bHkgbWF0Y2hpbmcgbG9hZCBhbmQgc3RvcmUKLSAgICAgICAgLy8gaW5zdHJ1
Y3Rpb25zIGluc3RlYWQgb2YgdXNpbmcgdGhlIFZhbHVlS2V5IGZ1bmN0aW9uYWxpdHkgb3IgZG9p
bmcgREZHIEhlYXBMb2NhdGlvbi1saWtlCi0gICAgICAgIC8vIHRoaW5ncy4KLQotICAgICAgICAv
LyBEb24ndCBib3RoZXIgd2l0aCBpZGVudGl0aWVzLiBXZSBraWxsIHRob3NlIGFueXdheS4KLSAg
ICAgICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIFZhbHVlS2V5IGtleSA9IG1fdmFsdWUtPmtleSgpOwotICAgICAgICBp
ZiAoIWtleSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxW
YWx1ZSosIDE+JiBtYXRjaGVzID0gbV9wdXJlVmFsdWVzLmFkZChrZXksIFZlY3RvcjxWYWx1ZSos
IDE+KCkpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICAvLyBSZXBsYWNlIHRoaXMgdmFsdWUg
d2l0aCB3aGljaGV2ZXIgdmFsdWUgZG9taW5hdGVzIHVzLgotICAgICAgICBmb3IgKFZhbHVlKiBt
YXRjaCA6IG1hdGNoZXMpIHsKLSAgICAgICAgICAgIGlmIChtX2RvbWluYXRvcnMtPmRvbWluYXRl
cyhtYXRjaC0+b3duZXIsIG1fdmFsdWUtPm93bmVyKSkgewotICAgICAgICAgICAgICAgIG1fdmFs
dWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobWF0Y2gpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV92YWx1ZSk7CisgICAgICAgIG1fY2hhbmdl
ZCB8PSBtX3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsKICAgICB9CiAK
ICAgICB2b2lkIHNpbXBsaWZ5Q0ZHKCkKQEAgLTE4NDAsNyArMTgxNyw3IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKICAgICBWYWx1ZSogbV92YWx1ZSB7IG51bGxwdHIg
fTsKICAgICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07Ci0gICAgSGFzaE1h
cDxWYWx1ZUtleSwgVmVjdG9yPFZhbHVlKiwgMT4+IG1fcHVyZVZhbHVlczsKKyAgICBQdXJlQ1NF
IG1fcHVyZUNTRTsKICAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2No
YW5nZWRDRkcgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguaAkocmV2aXNpb24gMTk1MzU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMy
LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBQcm9jZWR1cmU7
CiAKLS8vIERvZXMgc3RyZW5ndGggcmVkdWN0aW9uLCBjb25zdGFudCBmb2xkaW5nLCBjYW5vbmlj
YWxpemF0aW9uLCBDRkcgc2ltcGxpZmljYXRpb24sIERDRSwgYW5kIENTRS4gVGhpcwotLy8gcGhh
c2UgcnVucyB0aG9zZSBvcHRpbWl6YXRpb25zIHRvIGZpeHBvaW50LiBUaGUgZ29hbCBvZiB0aGUg
cGhhc2UgaXMgdG8gZHJhbWF0aWNhbGx5IHJlZHVjZSB0aGUKLS8vIGNvbXBsZXhpdHkgb2YgdGhl
IGNvZGUuIEluIHRoZSBmdXR1cmUsIGl0J3MgcHJlZmVyYWJsZSB0byBhZGQgb3B0aW1pemF0aW9u
cyB0byB0aGlzIHBoYXNlIHJhdGhlciB0aGFuCi0vLyBjcmVhdGluZyBuZXcgb3B0aW1pemF0aW9u
cyBiZWNhdXNlIHRoZW4gdGhlIG9wdGltaXphdGlvbnMgY2FuIHBhcnRpY2lwYXRlIGluIHRoZSBm
aXhwb2ludC4gSG93ZXZlciwKLS8vIHRoaXMgcGhhc2Ugc2hvdWxkbid0IGJlY29tZSB0b28gZXhw
ZW5zaXZlLCBzbyBleHBlbnNpdmUgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgc2VwYXJhdGUuCisv
LyBEb2VzIHN0cmVuZ3RoIHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXph
dGlvbiwgQ0ZHIHNpbXBsaWZpY2F0aW9uLCBEQ0UsIGFuZCB2ZXJ5CisvLyBzaW1wbGUgQ1NFLiBU
aGlzIHBoYXNlIHJ1bnMgdGhvc2Ugb3B0aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwg
b2YgdGhlIHBoYXNlIGlzIHRvCisvLyBkcmFtYXRpY2FsbHkgcmVkdWNlIHRoZSBjb21wbGV4aXR5
IG9mIHRoZSBjb2RlLiBJbiB0aGUgZnV0dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGlt
aXphdGlvbnMKKy8vIHRvIHRoaXMgcGhhc2UgcmF0aGVyIHRoYW4gY3JlYXRpbmcgbmV3IG9wdGlt
aXphdGlvbnMgYmVjYXVzZSB0aGVuIHRoZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZQor
Ly8gaW4gdGhlIGZpeHBvaW50LiBIb3dldmVyLCBiZWNhdXNlIG9mIHRoZSBtYW55IGludGVybG9j
a2luZyBvcHRpbWl6YXRpb25zLCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvCisvLyBhZGQgc29waGlz
dGljYXRlZCBvcHRpbWl6YXRpb25zIHRvIGl0LiBGb3IgdGhhdCByZWFzb24gd2UgaGF2ZSBmdWxs
IENTRSBpbiBhIGRpZmZlcmVudCBwaGFzZSwgZm9yCisvLyBleGFtcGxlLgogCiBib29sIHJlZHVj
ZVN0cmVuZ3RoKFByb2NlZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgJKHJldmlzaW9uIDE5NTM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gZXhwZXJp
bWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRoZSBiYWNrZW5kIGZvciB0aGUg
RlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwgdHVybiBvdXQuIEZvciBub3cs
IHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNlcyBCMy4gUmVtZW1iZXIgdG8g
c2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0jZGVmaW5lIEZUTF9VU0VTX0Iz
IDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9kZTsKIApJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUzNTcpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9t
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2
MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjQ1NzA0MzFCRTVC
NThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMu
aCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDQ0MUJFODM0
NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNzI1Q0FDMUM1MDQ2MTYwMEFE
OTQzQSAvKiBSYW5nZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi87IH07CiAJ
CTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87IH07CiAJCTBG
ODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovOyB9OwpAQCAtMzMyLDYgKzMzMyw3IEBACiAJCTBGMzUwMTYzMUJCMjU4
QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIx
QkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1
NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzYsNiArODc4LDcgQEAKIAkJCQlBOEE0NzJGQjE1
MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4
MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFBODI1QjAw
NDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjcyNUNBQjFDNTA0NjE2MDBB
RDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovLAogCQkJCUE4QTQ3MkZFMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFj
a1RyZWUuaCAqLywKIAkJCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggKi8sCkBA
IC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3M0I0MTUxQTgyNUIwMDQxMjNGRiAvKiBmYXN0
LWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBG
YXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNDNDE1MUE4MjVCMDA0MTIz
RkYgLyogRmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3MjVDQUMxQzUwNDYxNjAw
QUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMzhGRDdCRDE2ODk1M0U4
MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzYx
MTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0I2MTUxQTgyNUIwMDQxMjNGRiAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkocmV2aXNpb24gMTk1MzU3KQorKysg
U291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZQorICAgIGJvb2wgcHVzaEFsbChjb25zdCBJdGVyYWJs
ZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAg
ICBmb3IgKE5vZGUgbm9kZSA6IGl0ZXJhYmxlKQorICAgICAgICAgICAgcmVzdWx0IHw9IHB1c2go
bm9kZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KICAgICBib29sIG5vdEVtcHR5
KCkgY29uc3QgeyByZXR1cm4gIW1fc3RhY2suaXNFbXB0eSgpOyB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0
aEV4dHJhcy5oCShyZXZpc2lvbiAxOTUzNTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw2ICs0MTksMjAgQEAgaW5saW5lIFQgbGVmdFNoaWZ0
V2l0aFNhdHVyYXRpb24oVCB2YWx1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIENoZWNr
IGlmIHR3byByYW5nZXMgb3ZlcmxhcCBhc3N1bWluZyB0aGF0IG5laXRoZXIgcmFuZ2UgaXMgZW1w
dHkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbm9uRW1wdHlSYW5nZXNPdmVy
bGFwKFQgbGVmdE1pbiwgVCBsZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4KQoreworICAg
IEFTU0VSVChsZWZ0TWluIDwgbGVmdE1heCk7CisgICAgQVNTRVJUKHJpZ2h0TWluIDwgcmlnaHRN
YXgpOworICAgIAorICAgIGlmIChsZWZ0TWluIDw9IHJpZ2h0TWluICYmIGxlZnRNYXggPiByaWdo
dE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4g
JiYgcmlnaHRNYXggPiBsZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIC8vIFBhc3MgcmFuZ2VzIHdpdGggdGhlIG1pbiBiZWluZyBpbmNsdXNpdmUg
YW5kIHRoZSBtYXggYmVpbmcgZXhjbHVzaXZlLiBGb3IgZXhhbXBsZSwgdGhpcyBzaG91bGQKIC8v
IHJldHVybiBmYWxzZToKIC8vCkBAIC00MzQsMTIgKzQ0OCw4IEBAIGlubGluZSBib29sIHJhbmdl
c092ZXJsYXAoVCBsZWZ0TWluLCBUIGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChy
aWdodE1pbiA9PSByaWdodE1heCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlm
IChsZWZ0TWluIDw9IHJpZ2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBsZWZ0
TWluKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gbm9uRW1wdHlSYW5nZXNPdmVybGFwKGxlZnRNaW4sIGxlZnRNYXgsIHJpZ2h0TWluLCByaWdo
dE1heCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvUmFu
Z2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFdURl9SYW5nZVNldF9oCisjZGVmaW5lIFdURl9SYW5nZVNldF9oCisKKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCisvLyBBIFJhbmdlU2V0IGlzIGEgc2V0IG9mIG51bWVyaWNhbCByYW5nZXMu
IEEgdmFsdWUgYmVsb25ncyB0byB0aGUgc2V0IGlmIGl0IGlzIHdpdGhpbiBhbnkgb2YgdGhlCisv
LyByYW5nZXMuIEEgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2V0IGlmIGV2ZXJ5IHZhbHVlIGluIHRo
ZSByYW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQuIEEgcmFuZ2Ugb3ZlcmxhcHMKKy8vIHRoZSBzZXQg
aWYgYW55IHZhbHVlIGluIHRoZSByYW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQuIFlvdSBjYW4gYWRk
IHJhbmdlcyBhbmQgcXVlcnkgcmFuZ2UKKy8vIG1lbWJlcnNoaXAuIFRoZSBpbnRlcm5hbCByZXBy
ZXNlbnRhdGlvbiBpcyBhIGxpc3Qgb2YgcmFuZ2VzIHRoYXQgZ2V0cyBwZXJpb2RpY2FsbHkgY29t
cGFjdGVkLiBUaGlzCisvLyByZXByZXNlbnRhdGlvbiBpcyBvcHRpbWFsIHNvIGxvbmcgYXMgdGhl
IG51bWJlciBvZiBkaXN0aW5jdCByYW5nZXMgdGVuZHMgdG8gYmUgc21hbGwsIGFuZCB0aGUKKy8v
IG51bWJlciBvZiByYW5nZSBzZXRzIHRlbmRzIHRvIGJlIHNtYWxsIGFzIHdlbGwuIFRoaXMgd29y
a3MgcmVhc29uYWJseSB3ZWxsIGluIGEgYnVuY2ggb2YgY29tcGlsZXIKKy8vIGFsZ29yaXRobXMs
IHdoZXJlIHRoZSB0b3AgcmFuZ2UgZW5kcyB1cCBiZWluZyB1c2VkIGEgbG90LgorLy8KKy8vIFRo
ZSBpbml0aWFsIHVzZXIgb2YgdGhpcyBpcyBKU0M6OkIzOjpIZWFwUmFuZ2UsIHdoaWNoIGlzIHVz
ZWQgdG8gcGVyZm9ybSBhbGlhcyBhbmFseXNpcy4gWW91IGNhbgorLy8gbW9kZWwgbmV3IHVzZXJz
IG9uIHRoYXQgY2xhc3MuIEJhc2ljYWxseSwgeW91IG5lZWQgdG8gZGVmaW5lOgorLy8KKy8vIFQ6
OlR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgcmFuZ2UuIEhlYXBSYW5nZSB1
c2VzIHVuc2lnbmVkLgorLy8gVChUOjpUeXBlIGJlZ2luLCBUOjpUeXBlIGVuZCkgLSBjb25zdHJ1
Y3QgYSBuZXcgcmFuZ2UuCisvLyBUOjpUeXBlIFQ6OmJlZ2luKCkgY29uc3QgLSBpbnN0YW5jZSBt
ZXRob2QgZ2l2aW5nIHRoZSBpbmNsdXNpdmUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZS4KKy8vIFQ6
OlR5cGUgVDo6ZW5kKCkgY29uc3QgLSBpbnN0YW5jZSBtZXRob2QgZ2l2aW5nIHRoZSBleGNsdXNp
dmUgZW5kIG9mIHRoZSByYW5nZS4KKy8vIHZvaWQgVDo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IC0gc29tZSBraW5kIG9mIGR1bXBpbmcuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJhbmdlVHlwZT4K
K2NsYXNzIFJhbmdlU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJhbmdlVHlw
ZSBSYW5nZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJhbmdlOjpUeXBlIFR5cGU7CisKKyAgICBS
YW5nZVNldCgpCisgICAgeworICAgIH0KKworICAgIH5SYW5nZVNldCgpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgYWRkKGNvbnN0IFJhbmdlJiByYW5nZSkKKyAgICB7CisgICAgICAgIGlmIChy
YW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSByYW5nZSBzZXQgdG8gYmVjb21lIHRvcCBpbiBh
IGxvdCBvZiBjYXNlcy4gV2UgYWxzbyBleHBlY3QgdGhlIHNhbWUgcmFuZ2UgdG8KKyAgICAgICAg
Ly8gYmUgYWRkZWQgcmVwZWF0ZWRseS4gVGhhdCdzIHdoeSB0aGlzIGlzIGhlcmUuCisgICAgICAg
IGlmICghbV9yYW5nZXMuaXNFbXB0eSgpICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXMubGFz
dCgpLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9pc0NvbXBhY3Qg
PSBmYWxzZTsKKworICAgICAgICAvLyBXZSBhcHBlbmQgd2l0aG91dCBjb21wYWN0aW5nIG9ubHkg
aWYgZG9pbmcgc28gaXMgZ3VhcmFudGVlZCBub3QgdG8gcmVzaXplIHRoZSB2ZWN0b3IuCisgICAg
ICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgeworICAg
ICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7CisgICAgICAgIGNvbXBh
Y3QoKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFJhbmdlJiByYW5nZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChyYW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBmaW5kUmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yYW5nZXMuc2l6
ZSgpCisgICAgICAgICAgICAmJiBzdWJzdW1lc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4ICsgMV0s
IHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaW5kZXggPCBt
X3Jhbmdlcy5zaXplKCkKKyAgICAgICAgICAgICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNb
aW5kZXhdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCAtIDEpIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAg
ICAgICAmJiBzdWJzdW1lc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4IC0gMV0sIHJhbmdlKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAocmFuZ2UuYmVnaW4oKSA9PSByYW5nZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gZmluZFJhbmdlKHJhbmdl
KTsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAg
JiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jhbmdlc1tpbmRleCArIDFdLCByYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9yYW5nZXMuc2l6ZSgpCisg
ICAgICAgICAgICAmJiBvdmVybGFwc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4XSwgcmFuZ2UpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5kZXggLSAxKSA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNO
b25FbXB0eShtX3Jhbmdlc1tpbmRleCAtIDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgbV9yYW5nZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmFuZ2VT
ZXQqPih0aGlzKS0+Y29tcGFjdCgpOworICAgICAgICBvdXQucHJpbnQobGlzdER1bXAobV9yYW5n
ZXMpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBSYXcoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG91dC5wcmludCgieyIsIGxpc3REdW1wKG1fcmFuZ2VzKSwgIiwgaXND
b21wYWN0ID0gIiwgbV9pc0NvbXBhY3QsICJ9Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgY29tcGFjdCgpCisgICAgeworICAgICAgICBpZiAobV9pc0NvbXBhY3QpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fcmFuZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9pc0NvbXBhY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9yYW5nZXMuYmVnaW4oKSwgbV9yYW5n
ZXMuZW5kKCksCisgICAgICAgICAgICBbJl0gKGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYg
YikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuYmVnaW4oKSA8IGIuYmVnaW4o
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHVuc2lnbmVkIHNyY0luZGV4ID0gMTsKKyAg
ICAgICAgdW5zaWduZWQgZHN0SW5kZXggPSAxOworICAgICAgICBSYW5nZSogbGFzdFJhbmdlID0g
Jm1fcmFuZ2VzWzBdOworICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCBtX3Jhbmdlcy5zaXplKCkp
IHsKKyAgICAgICAgICAgIFJhbmdlIHJhbmdlID0gbV9yYW5nZXNbc3JjSW5kZXgrK107CisgICAg
ICAgICAgICBBU1NFUlQocmFuZ2UuYmVnaW4oKSA+PSBsYXN0UmFuZ2UtPmJlZ2luKCkpOworICAg
ICAgICAgICAgaWYgKHJhbmdlLmVuZCgpIDw9IGxhc3RSYW5nZS0+ZW5kKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA8PSBsYXN0UmFu
Z2UtPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgKmxhc3RSYW5nZSA9IFJhbmdlKGxhc3RSYW5n
ZS0+YmVnaW4oKSwgcmFuZ2UuZW5kKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKCFvdmVybGFwKCpsYXN0UmFuZ2UsIHJhbmdl
KSk7CisgICAgICAgICAgICBsYXN0UmFuZ2UgPSAmbV9yYW5nZXNbZHN0SW5kZXgrK107CisgICAg
ICAgICAgICAqbGFzdFJhbmdlID0gcmFuZ2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yYW5nZXMu
cmVzaXplKGRzdEluZGV4KTsKKworICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBib29sIG92ZXJsYXBOb25FbXB0eShjb25zdCBSYW5nZSYgYSwgY29u
c3QgUmFuZ2UmIGIpCisgICAgeworICAgICAgICByZXR1cm4gbm9uRW1wdHlSYW5nZXNPdmVybGFw
KGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpLCBiLmVuZCgpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBzdWJzdW1lc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYg
YikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmJlZ2luKCkgPD0gYi5iZWdpbigpICYmIGEuZW5k
KCkgPj0gYi5lbmQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmaW5kUmFuZ2UoY29uc3QgUmFu
Z2UmIHJhbmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgY29tcGFjdCgpOworCisgICAgICAgIGNv
bnN0IFJhbmdlKiBmb3VuZCA9IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoPGNvbnN0IFJhbmdlLCBU
eXBlPigKKyAgICAgICAgICAgIG1fcmFuZ2VzLCBtX3Jhbmdlcy5zaXplKCksIHJhbmdlLmJlZ2lu
KCksIFsmXSAoY29uc3QgUmFuZ2UqIHJhbmdlKSAtPiBUeXBlIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmFuZ2UtPmJlZ2luKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFmb3Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKKworICAgICAgICByZXR1cm4gZm91bmQg
LSBtX3Jhbmdlcy5iZWdpbigpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmFuZ2UsIDg+IG1f
cmFuZ2VzOworICAgIGJvb2wgbV9pc0NvbXBhY3QgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9SYW5nZVNldF9oCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4
dHJhcy5oCShyZXZpc2lvbiAxOTUzNTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIGlubGluZSBBcnJheUVsZW1lbnRU
eXBlKiBiaW5hcnlTZWFyY2hJbXAKICAgICAgICAgQVNTRVJUKG1vZGUgIT0gS2V5TXVzdEJlUHJl
c2VudEluQXJyYXkgfHwgc2l6ZSk7CiAgICAgfQogICAgIAotICAgIGlmIChtb2RlID09IEtleU1p
Z2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKKyAgICBpZiAobW9kZSAhPSBLZXlNdXN0
QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAg
QXJyYXlFbGVtZW50VHlwZSogcmVzdWx0ID0gJmFycmF5W29mZnNldF07CkBAIC0yMzAsMzggKzIz
MCwzOCBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wCiAKIC8vIElm
IHRoZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwg
YW5kIGJlaGF2ZSBsaWtlIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoIGluIHJlbGVhc2UgYnVpbGRz
LgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxl
bWVudFR5cGUqIGJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5
VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBB
cnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGFy
cmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAvLyBSZXR1cm4gemVybyBpZiB0aGUg
ZWxlbWVudCBpcyBub3QgZm91bmQuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBl
LCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RL
ZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKEFycmF5VHlwZSYg
YXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0g
RXh0cmFjdEtleSgpKQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChB
cnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RL
ZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJj
aEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBL
ZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkp
OwogfQogCiAvLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhlIGxlZnQs
IG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVuIGZvdW5k
LgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxl
bWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVf
dCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5
VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1w
bDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIFJldHVy
bkFkamFjZW50RWxlbWVudElmS2V5SXNOb3RQcmVzZW50PihhcnJheSwgc2l6ZSwga2V5LCBleHRy
YWN0S2V5KTsKIH0KIAogLy8gVmFyaWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0Lgog
dGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVu
dFR5cGUqIGJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwg
S2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGlu
ZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwg
c2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0g
RXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVu
dFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudElu
QXJyYXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RL
ZXkpOwogfQogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5
VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFy
cmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBz
aXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RL
ZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJy
YXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5
JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJ
bXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5
TWlnaHROb3RCZVByZXNlbnRJbkFycmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwg
c2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVu
dFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0
cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJj
aChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJh
Y3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBl
KiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qg
c2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0
S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwg
S2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktl
eUlzTm90UHJlc2VudD4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNpemUsIGtleSwg
ZXh0cmFjdEtleSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269456</attachid>
            <date>2016-01-21 09:19:34 -0800</date>
            <delta_ts>2016-01-21 10:14:12 -0800</delta_ts>
            <desc>close to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU0MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY3LDYgKzQ2NywxMCBAQAogCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3MTRDQTUx
NkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IH07CisJCTBGNzI1
Q0E3MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0Ez
MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAq
LzsgfTsKKwkJMEY3MjVDQTgxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmggKi87IH07CisJCTBGNzI1Q0E5MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVD
QTUxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi87IH07CisJCTBGNzI1Q0FBMUM1
MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0E2MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
aCAqLzsgfTsKIAkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFu
dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
MjVDQUQxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovOyB9Owog
CQkwRjcyNUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQz
QjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NDNCQUExNkI4
ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBB
Uk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CkBAIC0yNjQ3LDYgKzI2NTEsMTAgQEAKIAkJMEY3
MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNzI1Q0EzMUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwOyBwYXRoID0gYjMvQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4
cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuaDsgcGF0aCA9IGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTUxQzUwM0RF
RDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1B1cmVDU0UuY3BwOyBwYXRoID0gYjMvQjNQdXJlQ1NFLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNT
RS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1B1cmVDU0UuaDsgcGF0aCA9
IGIzL0IzUHVyZUNTRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRDFD
NTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIz
L0IzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBi
My9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDc4Myw2ICs0NzkxLDggQEAKIAkJCQkwRjZCOEFENzFDNEVEREEyMDA5Njkw
NTIgLyogQjNEdXBsaWNhdGVUYWlscy5oICovLAogCQkJCTBGRUM4NUM0MUJFMTZGNUEwMDgwRkY3
NCAvKiBCM0VmZmVjdHMuY3BwICovLAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCAqLywKKwkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5h
dGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCisJCQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5
NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKIAkJCQkwRjZCOEFF
MDFDNEVGRTE3MDA5NjkwNTIgLyogQjNGaXhTU0EuY3BwICovLAogCQkJCTBGNkI4QUUxMUM0RUZF
MTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5oICovLAogCQkJCTBGNzI1Q0FEMUM1MDZEM0IwMEFEOTQz
QSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLywKQEAgLTQ4MzQsNiArNDg0NCw4IEBACiAJ
CQkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywKIAkJCQkw
RkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKIAkJCQkwRkVDODRF
MzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJMEY3MjVD
QTUxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi8sCisJCQkJMEY3MjVDQTYxQzUw
M0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovLAogCQkJCTQzNDIyQTY0MUMxNjIyMUUwMEUy
RUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwICovLAogCQkJCTQzNDIyQTY1MUMxNjIy
MUUwMEUyRUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCAqLywKIAkJCQkwRkVDODVCNzFC
RTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCkBAIC03MzI0LDYgKzcz
MzYsNyBAQAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzNDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjcy
NUNBODFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZp
bmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8q
IERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1
RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTc2NTEsNiAr
NzY2NCw3IEBACiAJCQkJQTFENzkyRkQxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3Jt
YXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRDc5MkZGMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRs
TnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMjU4NDZFMUI0
NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjcyNUNBQTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMUQ3OTMwMTFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkYxQjQ1QTM2MDAwQ0M3
RjZDIC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTUxNjVEMzFCREYwQjlFMDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODgwLDYgKzg4OTQsNyBAQAogCQkJCUE3RDlBMjk0MTdB
MEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJp
bGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBNzFDNTAzREVEMDBBRDk0M0Eg
LyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZH
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3QTBCOENDMDA3NzNB
RDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzI4LDYg
KzkzNDMsNyBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwQjc5MTk4MUMwMjRBMjkwMDI0ODFFMiAvKiBH
ZW5lcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3MjVDQTkxQzUwM0RF
RDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFB
OTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM3
MzA4QzFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
RWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmts
aXN0LmgiCisjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2Uu
aCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM01lbW9y
eVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtl
eS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2VTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK3R5cGVkZWYgVmVjdG9yPE1lbW9yeVZhbHVlKiwgMT4g
TWVtb3J5TWF0Y2hlczsKKworc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CisgICAgUmFuZ2VTZXQ8
SGVhcFJhbmdlPiB3cml0ZXM7CisgICAgCisgICAgLy8gTWFwcyBhbiBhZGRyZXNzIGJhc2UgdG8g
YWxsIG9mIHRoZSBNZW1vcnlWYWx1ZXMgdGhhdCBkbyB0aGluZ3MgdG8gaXQuIEFmdGVyIHdlJ3Jl
IGRvbmUKKyAgICAvLyBwcm9jZXNzaW5nIGEgbWFwLCB0aGlzIHRlbGxzIHVzIHRoZSB2YWx1ZXMg
YXQgdGFpbC4KKyAgICBIYXNoTWFwPFZhbHVlKiwgTWVtb3J5TWF0Y2hlcz4gbWVtb3J5VmFsdWVz
OworfTsKKworY2xhc3MgQ1NFIHsKK3B1YmxpYzoKKyAgICBDU0UoUHJvY2VkdXJlJiBwcm9jKQor
ICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1fZG9taW5hdG9ycyhwcm9jLmRvbWlu
YXRvcnMoKSkKKyAgICAgICAgLCBtX2ltcHVyZUJsb2NrRGF0YShwcm9jLnNpemUoKSkKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOworICAgICAgICAKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkp
IHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIG1fZGF0YSA9ICZt
X2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBt
X2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9IGJsb2NrLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS0+cGVyZm9y
bVN1YnN0aXR1dGlvbigpOworCisgICAgICAgIGlmIChtX3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVl
LCBtX2RvbWluYXRvcnMpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUtPmVmZmVjdHMo
KS53cml0ZXMoKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEhlYXBSYW5nZSB3cml0ZXMgPSBtX3Zh
bHVlLT5lZmZlY3RzKCkud3JpdGVzKQorICAgICAgICAgICAgY2xvYmJlcih3cml0ZXMpOworICAg
ICAgICAKKyAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKSkKKyAgICAgICAgICAgIHByb2Nlc3NNZW1vcnkobWVtb3J5KTsKKyAgICB9CisK
KyAgICB2b2lkIGNsb2JiZXIoSGVhcFJhbmdlIHdyaXRlcykKKyAgICB7CisgICAgICAgIG1fZGF0
YS0+d3JpdGVzLmFkZCh3cml0ZXMpOworICAgICAgICAKKyAgICAgICAgbV9kYXRhLT5tZW1vcnlW
YWx1ZXMucmVtb3ZlSWYoCisgICAgICAgICAgICBbJl0gKEhhc2hNYXA8VmFsdWUqLCBNZW1vcnlN
YXRjaGVzPjo6S2V5VmFsdWVQYWlyVHlwZSYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIGVudHJ5LnZhbHVlLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKE1lbW9yeVZhbHVlKiBtZW1vcnkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1lbW9yeS0+cmFuZ2UoKS5vdmVybGFwcyh3cml0ZXMpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkudmFsdWUuaXNFbXB0eSgp
OworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNzTWVtb3J5KE1lbW9y
eVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBWYWx1ZSogcHRyID0gbWVtb3J5LT5sYXN0
Q2hpbGQoKTsKKyAgICAgICAgSGVhcFJhbmdlIHJhbmdlID0gbWVtb3J5LT5yYW5nZSgpOworICAg
ICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeS0+b2Zmc2V0KCk7CisgICAgICAgIFR5cGUgdHlw
ZSA9IG1lbW9yeS0+dHlwZSgpOworCisgICAgICAgIC8vIEZJWE1FOiBFbXBvd2VyIHRoaXMgdG8g
aW5zZXJ0IG1vcmUgY2FzdHMgYW5kIHNoaWZ0cy4gRm9yIGV4YW1wbGUsIGEgTG9hZDggY291bGQg
bWF0Y2ggYQorICAgICAgICAvLyBTdG9yZSBhbmQgbWFzayB0aGUgcmVzdWx0LiBZb3UgY291bGQg
ZXZlbiBoYXZlOgorICAgICAgICAvLworICAgICAgICAvLyBTdG9yZShAdmFsdWUsIEBwdHIsIG9m
ZnNldCA9IDApCisgICAgICAgIC8vIExvYWQ4WihAcHRyLCBvZmZzZXQgPSAyKQorICAgICAgICAv
LworICAgICAgICAvLyBXaGljaCBjb3VsZCBiZSB0dXJuZWQgaW50byBzb21ldGhpbmcgbGlrZSB0
aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBTdG9yZShAdmFsdWUsIEBwdHIsIG9mZnNldCA9
IDApCisgICAgICAgIC8vIFpTaHIoQHZhbHVlLCAxNikKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobWVtb3J5LT5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExvYWQ4WjogeworICAgICAgICAg
ICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAgICAgICAg
IHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9mZnNldAorICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDhaIHx8
IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTG9hZDhTOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1
ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwg
WyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkOFMgfHwgY2FuZGlkYXRlLT5v
cGNvZGUoKSA9PSBTdG9yZTgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoLT5vcGNvZGUoKSA9PSBTdG9yZTgp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgU0V4dDgsIG1fdmFsdWUtPm9yaWdpbigp
LCBtYXRjaC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJlcGxhY2UobWF0Y2gpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkMTZaOiB7CisgICAgICAgICAg
ICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAgICAgICAg
cHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0CisgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkMTZaIHx8
IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBpZiAocmVwbGFjZShtYXRjaCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQxNlM6IHsKKyAgICAgICAgICAgIE1lbW9yeVZh
bHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1ZSgKKyAgICAgICAgICAgICAgICBwdHIsIHJhbmdl
LCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQxNlMgfHwgY2FuZGlkYXRl
LT5vcGNvZGUoKSA9PSBTdG9yZTE2KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaC0+b3Bjb2RlKCkgPT0gU3Rv
cmUxNikgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBTRXh0MTYsIG1fdmFsdWUtPm9y
aWdpbigpLCBtYXRjaC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlcGxhY2UobWF0Y2gpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkOiB7CisgICAgICAg
ICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAgICAg
ICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b2Zmc2V0KCkgIT0gb2Zmc2V0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQgJiYgY2FuZGlkYXRlLT50eXBlKCkgPT0g
dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlICYmIGNhbmRpZGF0ZS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2Ug
U3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZTogeworICAgICAgICAgICAgYWRkTWVtb3J5VmFs
dWUobWVtb3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGRhdGFMb2coIkJhZCBtZW1vcnkgdmFsdWU6ICIsIGRlZXBEdW1w
KG1fcHJvYywgbV92YWx1ZSksICJcbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ym9vbCByZXBsYWNlKE1lbW9yeVZhbHVlKiBtYXRjaCkKKyAgICB7CisgICAgICAgIGlmICghbWF0
Y2gpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtYXRjaC0+aXNTdG9y
ZSgpKQorICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtYXRjaC0+Y2hp
bGQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG1hdGNoKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdm9pZCBhZGRNZW1vcnlWYWx1ZShNZW1vcnlWYWx1ZSogbWVt
b3J5KQorICAgIHsKKyAgICAgICAgYWRkTWVtb3J5VmFsdWUoKm1fZGF0YSwgbWVtb3J5KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZE1lbW9yeVZhbHVlKEltcHVyZUJsb2NrRGF0YSYgZGF0YSwgTWVt
b3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIE1lbW9yeU1hdGNoZXMmIG1hdGNoZXMg
PQorICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXMuYWRkKG1lbW9yeS0+bGFzdENoaWxkKCks
IE1lbW9yeU1hdGNoZXMoKSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGlmIChtYXRjaGVz
LmNvbnRhaW5zKG1lbW9yeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWF0Y2hl
cy5hcHBlbmQobWVtb3J5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXI+
CisgICAgTWVtb3J5VmFsdWUqIGZpbmRNZW1vcnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2Ug
cmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQorICAgIHsKKyAgICAgICAgYXV0byBmaW5kID0g
WyZdIChJbXB1cmVCbG9ja0RhdGEmIGRhdGEpIC0+IE1lbW9yeVZhbHVlKiB7CisgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBkYXRhLm1lbW9yeVZhbHVlcy5maW5kKHB0cik7CisgICAgICAgICAgICBp
ZiAoaXRlciAhPSBkYXRhLm1lbW9yeVZhbHVlcy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGZv
ciAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmaWx0ZXIoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKE1lbW9yeVZh
bHVlKiBtYXRjaCA9IGZpbmQoKm1fZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisK
KyAgICAgICAgaWYgKG1fZGF0YS0+d3JpdGVzLm92ZXJsYXBzKHJhbmdlKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gc2Vlbkxpc3Q7CisKKyAgICAgICAgd29ya2xpc3Qu
cHVzaEFsbChtX2Jsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisKKyAgICAgICAgTWVtb3J5VmFsdWUq
IG1hdGNoID0gbnVsbHB0cjsKKworICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3
b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2NrKTsKKwor
ICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0RhdGFbYmxv
Y2tdOworCisgICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLnN0cmljdGx5RG9taW5hdGVzKGJs
b2NrLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1hdGNoID0gZmluZChkYXRhKTsKKyAg
ICAgICAgICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGF0YS53cml0ZXMub3ZlcmxhcHMocmFu
Z2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoQWxsKGJsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IHNlZW5MaXN0KQorICAgICAgICAgICAgYWRkTWVtb3J5VmFs
dWUobV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdLCBtYXRjaCk7CisgICAgICAgIGFkZE1lbW9yeVZh
bHVlKG1hdGNoKTsKKworICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfQorCisgICAgdHlwZWRl
ZiBWZWN0b3I8VmFsdWUqLCAxPiBNYXRjaGVzOworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisK
KyAgICBEb21pbmF0b3JzJiBtX2RvbWluYXRvcnM7CisgICAgUHVyZUNTRSBtX3B1cmVDU0U7Cisg
ICAgCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZUJs
b2NrRGF0YTsKKworICAgIEltcHVyZUJsb2NrRGF0YSogbV9kYXRhOworCisgICAgQmFzaWNCbG9j
ayogbV9ibG9jazsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOwor
CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworCisgICAgYm9vbCBtX2NoYW5nZWQg
eyBmYWxzZSB9OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgZWxpbWlu
YXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShwcm9jLCAiZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMiKTsKKwor
ICAgIENTRSBjc2UocHJvYyk7CisgICAgcmV0dXJuIGNzZS5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zX2gKKyNkZWZpbmUgQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9uc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlz
IGRvZXMgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIChDU0UpIG92ZXIg
Ym90aCBwdXJlIHZhbHVlcyBhbmQgbWVtb3J5IGFjY2Vzc2VzLgorCitib29sIGVsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0VsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIz
RHVwbGljYXRlVGFpbHMuaCIKKyNpbmNsdWRlICJCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzTGVn
YWxpemVNZW1vcnlPZmZzZXRzLmgiCiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgpAQCAtODks
NiArOTAsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAKICAg
ICBpZiAob3B0TGV2ZWwgPj0gMSkgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUp
OworICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOwogICAg
ICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDE5NTQw
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBIZWFwUmFuZ2UgewogcHVibGljOgorICAgIHR5cGVkZWYgdW5zaWduZWQgVHlwZTsKKyAg
ICAKICAgICBIZWFwUmFuZ2UoKQogICAgICAgICA6IG1fYmVnaW4oMCkKICAgICAgICAgLCBtX2Vu
ZCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRpb25zLmlzRW1w
dHkoKTsgfQorCiAgICAgUHJvY2VkdXJlJiBjb2RlKCkgeyByZXR1cm4gbV9wcm9jZWR1cmU7IH0K
IAogICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAx
OTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBIZWFwUmFuZ2Um
IHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFuZ2UoY29u
c3QgSGVhcFJhbmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KIAorICAgIGJvb2wgaXNT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9CisgICAgYm9vbCBpc0xvYWQo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorCiAgICAgc2l6ZV90IGFjY2Vzc0J5
dGVTaXplKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1B1cmVDU0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1B1cmVDU0UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHVyZUNTRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworUHVyZUNTRTo6UHVyZUNTRSgpCit7Cit9CisKK1B1cmVDU0U6
On5QdXJlQ1NFKCkKK3sKK30KKwordm9pZCBQdXJlQ1NFOjpjbGVhcigpCit7CisgICAgbV9tYXAu
Y2xlYXIoKTsKK30KKworYm9vbCBQdXJlQ1NFOjpwcm9jZXNzKFZhbHVlKiB2YWx1ZSwgRG9taW5h
dG9ycyYgZG9taW5hdG9ycykKK3sKKyAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5
KCk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE1hdGNoZXMm
IG1hdGNoZXMgPSBtX21hcC5hZGQoa2V5LCBNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKwor
ICAgIGZvciAoVmFsdWUqIG1hdGNoIDogbWF0Y2hlcykgeworICAgICAgICBpZiAoZG9taW5hdG9y
cy5kb21pbmF0ZXMobWF0Y2gtPm93bmVyLCB2YWx1ZS0+b3duZXIpKSB7CisgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1hdGNoZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNT
RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQdXJlQ1NFX2gKKyNkZWZpbmUgQjNQdXJlQ1NF
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBEb21pbmF0b3JzOworY2xhc3MgVmFsdWU7
CisKK3R5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworLy8gVGhpcyBpcyBhIHJl
dXNhYmxlIHV0aWxpdHkgZm9yIGRvaW5nIHB1cmUgQ1NFLiBZb3UgY2FuIHVzZSBpdCB0byBkbyBw
dXJlIENTRSBvbiBhIHByb2dyYW0gYnkganVzdAorLy8gcHJvY2VlZGluZyBpbiBvcmRlciBhbiBj
YWxsaW5nIHByb2Nlc3MoKS4KK2NsYXNzIFB1cmVDU0UgeworcHVibGljOgorICAgIFB1cmVDU0Uo
KTsKKyAgICB+UHVyZUNTRSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgYm9vbCBwcm9j
ZXNzKFZhbHVlKiwgRG9taW5hdG9ycyYpOworICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPFZh
bHVlS2V5LCBNYXRjaGVzPiBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHVyZUNTRV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkIzUGhh
c2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJCM1Vwc2ls
b25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtl
eS5oIgpAQCAtMjgyLDcgKzI4Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgbV9wcm9jLnJl
c2V0VmFsdWVPd25lcnMoKTsKICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2MuZG9t
aW5hdG9ycygpOyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgbV9wdXJl
VmFsdWVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3B1cmVDU0UuY2xlYXIoKTsKIAogICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkp
IHsKICAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkBAIC0xNzUxLDMxICsxNzUyLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7Ci0gICAg
ICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIHB1cmUgZG9taW5hdG9yLWJhc2VkIENTRS4g
SW4gdGhlIGZ1dHVyZSB3ZSBjb3VsZCBhZGQgbG9hZCBlbGltaW5hdGlvbi4KLSAgICAgICAgLy8g
Tm90ZSB0aGF0IGlmIHdlIGFkZCBsb2FkIGVsaW1pbmF0aW9uLCB3ZSBzaG91bGQgZG8gaXQgYnkg
ZGlyZWN0bHkgbWF0Y2hpbmcgbG9hZCBhbmQgc3RvcmUKLSAgICAgICAgLy8gaW5zdHJ1Y3Rpb25z
IGluc3RlYWQgb2YgdXNpbmcgdGhlIFZhbHVlS2V5IGZ1bmN0aW9uYWxpdHkgb3IgZG9pbmcgREZH
IEhlYXBMb2NhdGlvbi1saWtlCi0gICAgICAgIC8vIHRoaW5ncy4KLQotICAgICAgICAvLyBEb24n
dCBib3RoZXIgd2l0aCBpZGVudGl0aWVzLiBXZSBraWxsIHRob3NlIGFueXdheS4KLSAgICAgICAg
aWYgKG1fdmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIFZhbHVlS2V5IGtleSA9IG1fdmFsdWUtPmtleSgpOwotICAgICAgICBpZiAoIWtl
eSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZSos
IDE+JiBtYXRjaGVzID0gbV9wdXJlVmFsdWVzLmFkZChrZXksIFZlY3RvcjxWYWx1ZSosIDE+KCkp
Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICAvLyBSZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCB3
aGljaGV2ZXIgdmFsdWUgZG9taW5hdGVzIHVzLgotICAgICAgICBmb3IgKFZhbHVlKiBtYXRjaCA6
IG1hdGNoZXMpIHsKLSAgICAgICAgICAgIGlmIChtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhtYXRj
aC0+b3duZXIsIG1fdmFsdWUtPm93bmVyKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJl
cGxhY2VXaXRoSWRlbnRpdHkobWF0Y2gpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV92YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlZCB8PSBt
X3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsKICAgICB9CiAKICAgICB2
b2lkIHNpbXBsaWZ5Q0ZHKCkKQEAgLTIwNDIsNyArMjAxOSw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9pbmRleCB7IDAgfTsKICAgICBWYWx1ZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKICAg
ICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07Ci0gICAgSGFzaE1hcDxWYWx1
ZUtleSwgVmVjdG9yPFZhbHVlKiwgMT4+IG1fcHVyZVZhbHVlczsKKyAgICBQdXJlQ1NFIG1fcHVy
ZUNTRTsKICAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2NoYW5nZWRD
RkcgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguaAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDEzIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBQcm9jZWR1cmU7CiAKLS8v
IERvZXMgc3RyZW5ndGggcmVkdWN0aW9uLCBjb25zdGFudCBmb2xkaW5nLCBjYW5vbmljYWxpemF0
aW9uLCBDRkcgc2ltcGxpZmljYXRpb24sIERDRSwgYW5kIENTRS4gVGhpcwotLy8gcGhhc2UgcnVu
cyB0aG9zZSBvcHRpbWl6YXRpb25zIHRvIGZpeHBvaW50LiBUaGUgZ29hbCBvZiB0aGUgcGhhc2Ug
aXMgdG8gZHJhbWF0aWNhbGx5IHJlZHVjZSB0aGUKLS8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUu
IEluIHRoZSBmdXR1cmUsIGl0J3MgcHJlZmVyYWJsZSB0byBhZGQgb3B0aW1pemF0aW9ucyB0byB0
aGlzIHBoYXNlIHJhdGhlciB0aGFuCi0vLyBjcmVhdGluZyBuZXcgb3B0aW1pemF0aW9ucyBiZWNh
dXNlIHRoZW4gdGhlIG9wdGltaXphdGlvbnMgY2FuIHBhcnRpY2lwYXRlIGluIHRoZSBmaXhwb2lu
dC4gSG93ZXZlciwKLS8vIHRoaXMgcGhhc2Ugc2hvdWxkbid0IGJlY29tZSB0b28gZXhwZW5zaXZl
LCBzbyBleHBlbnNpdmUgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgc2VwYXJhdGUuCisvLyBEb2Vz
IHN0cmVuZ3RoIHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXphdGlvbiwg
Q0ZHIHNpbXBsaWZpY2F0aW9uLCBEQ0UsIGFuZCB2ZXJ5CisvLyBzaW1wbGUgQ1NFLiBUaGlzIHBo
YXNlIHJ1bnMgdGhvc2Ugb3B0aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwgb2YgdGhl
IHBoYXNlIGlzIHRvCisvLyBkcmFtYXRpY2FsbHkgcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIHRo
ZSBjb2RlLiBJbiB0aGUgZnV0dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGltaXphdGlv
bnMKKy8vIHRvIHRoaXMgcGhhc2UgcmF0aGVyIHRoYW4gY3JlYXRpbmcgbmV3IG9wdGltaXphdGlv
bnMgYmVjYXVzZSB0aGVuIHRoZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZQorLy8gaW4g
dGhlIGZpeHBvaW50LiBIb3dldmVyLCBiZWNhdXNlIG9mIHRoZSBtYW55IGludGVybG9ja2luZyBv
cHRpbWl6YXRpb25zLCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvCisvLyBhZGQgc29waGlzdGljYXRl
ZCBvcHRpbWl6YXRpb25zIHRvIGl0LiBGb3IgdGhhdCByZWFzb24gd2UgaGF2ZSBmdWxsIENTRSBp
biBhIGRpZmZlcmVudCBwaGFzZSwgZm9yCisvLyBleGFtcGxlLgogCiBib29sIHJlZHVjZVN0cmVu
Z3RoKFByb2NlZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw2ICszNzEsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBWQUxJREFURSghKHZhbHVlLT5lZmZlY3RzKCkud3JpdGVzICYmIHZhbHVlLT5rZXkoKSks
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRs
ZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJh
Y2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJu
IG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIz
LiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZp
bmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBGVExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwog
CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE5NTQwOSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CiAJ
CTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2Mjkg
LyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnVi
YmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY3MjVD
QUMxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VT
ZXQuaCAqLzsgfTsKIAkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjQx
Qjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkwRjgyNEE2OTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3Qu
aCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CkBAIC0zMzIsNiArMzMzLDcgQEAKIAkJ
MEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmtpbmdMb3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJraW5nTG90
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBB
RCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1Bv
aW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3Niw2ICs4NzgsNyBAQAog
CQkJCUE4QTQ3MkZCMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJ
CUE4QTQ3MkZDMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlBOEE0
NzJGRDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBGNzI1
Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8sCiAJCQkJQThBNDcyRkUxNTFBODI1QjAwNDEy
M0ZGIC8qIFJlZEJsYWNrVHJlZS5oICovLAogCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAv
KiBSZWYuaCAqLywKQEAgLTExNjgsNiArMTE3MSw3IEBACiAJCQkJQThBNDczQjQxNTFBODI1QjAw
NDEyM0ZGIC8qIGZhc3QtZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBQzUxNTRGQjIy
RTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0M0
MTUxQTgyNUIwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjcy
NUNBQzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIz
OEZEN0JEMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RDMzNjExNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczQjYxNTFBODI1QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2EuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTk1NDA5KQorKysg
U291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTksNiArNDE5
LDIwIEBAIGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCisvLyBDaGVjayBpZiB0d28gcmFuZ2VzIG92ZXJsYXAgYXNzdW1pbmcg
dGhhdCBuZWl0aGVyIHJhbmdlIGlzIGVtcHR5LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGlu
ZSBib29sIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdo
dE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBBU1NFUlQobGVmdE1pbiA8IGxlZnRNYXgpOworICAg
IEFTU0VSVChyaWdodE1pbiA8IHJpZ2h0TWF4KTsKKyAgICAKKyAgICBpZiAobGVmdE1pbiA8PSBy
aWdodE1pbiAmJiBsZWZ0TWF4ID4gcmlnaHRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChyaWdodE1pbiA8PSBsZWZ0TWluICYmIHJpZ2h0TWF4ID4gbGVmdE1pbikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBQYXNzIHJhbmdlcyB3aXRo
IHRoZSBtaW4gYmVpbmcgaW5jbHVzaXZlIGFuZCB0aGUgbWF4IGJlaW5nIGV4Y2x1c2l2ZS4gRm9y
IGV4YW1wbGUsIHRoaXMgc2hvdWxkCiAvLyByZXR1cm4gZmFsc2U6CiAvLwpAQCAtNDM0LDEyICs0
NDgsOCBAQCBpbmxpbmUgYm9vbCByYW5nZXNPdmVybGFwKFQgbGVmdE1pbiwgVCBsCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAocmlnaHRNaW4gPT0gcmlnaHRNYXgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4
ID4gcmlnaHRNaW4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChyaWdodE1pbiA8PSBs
ZWZ0TWluICYmIHJpZ2h0TWF4ID4gbGVmdE1pbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChsZWZ0TWlu
LCBsZWZ0TWF4LCByaWdodE1pbiwgcmlnaHRNYXgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfUmFuZ2VTZXRfaAorI2RlZmlu
ZSBXVEZfUmFuZ2VTZXRfaAorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBSYW5nZVNldCBpcyBh
IHNldCBvZiBudW1lcmljYWwgcmFuZ2VzLiBBIHZhbHVlIGJlbG9uZ3MgdG8gdGhlIHNldCBpZiBp
dCBpcyB3aXRoaW4gYW55IG9mIHRoZQorLy8gcmFuZ2VzLiBBIHJhbmdlIGJlbG9uZ3MgdG8gdGhl
IHNldCBpZiBldmVyeSB2YWx1ZSBpbiB0aGUgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2V0LiBBIHJh
bmdlIG92ZXJsYXBzCisvLyB0aGUgc2V0IGlmIGFueSB2YWx1ZSBpbiB0aGUgcmFuZ2UgYmVsb25n
cyB0byB0aGUgc2V0LiBZb3UgY2FuIGFkZCByYW5nZXMgYW5kIHF1ZXJ5IHJhbmdlCisvLyBtZW1i
ZXJzaGlwLiBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgYSBsaXN0IG9mIHJhbmdlcyB0
aGF0IGdldHMgcGVyaW9kaWNhbGx5IGNvbXBhY3RlZC4gVGhpcworLy8gcmVwcmVzZW50YXRpb24g
aXMgb3B0aW1hbCBzbyBsb25nIGFzIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgcmFuZ2VzIHRlbmRz
IHRvIGJlIHNtYWxsLCBhbmQgdGhlCisvLyBudW1iZXIgb2YgcmFuZ2Ugc2V0cyB0ZW5kcyB0byBi
ZSBzbWFsbCBhcyB3ZWxsLiBUaGlzIHdvcmtzIHJlYXNvbmFibHkgd2VsbCBpbiBhIGJ1bmNoIG9m
IGNvbXBpbGVyCisvLyBhbGdvcml0aG1zLCB3aGVyZSB0aGUgdG9wIHJhbmdlIGVuZHMgdXAgYmVp
bmcgdXNlZCBhIGxvdC4KKy8vCisvLyBUaGUgaW5pdGlhbCB1c2VyIG9mIHRoaXMgaXMgSlNDOjpC
Mzo6SGVhcFJhbmdlLCB3aGljaCBpcyB1c2VkIHRvIHBlcmZvcm0gYWxpYXMgYW5hbHlzaXMuIFlv
dSBjYW4KKy8vIG1vZGVsIG5ldyB1c2VycyBvbiB0aGF0IGNsYXNzLiBCYXNpY2FsbHksIHlvdSBu
ZWVkIHRvIGRlZmluZToKKy8vCisvLyBUOjpUeXBlIC0gdGhlIHR5cGUgb2YgdGhlIG1lbWJlcnMg
b2YgdGhlIHJhbmdlLiBIZWFwUmFuZ2UgdXNlcyB1bnNpZ25lZC4KKy8vIFQoVDo6VHlwZSBiZWdp
biwgVDo6VHlwZSBlbmQpIC0gY29uc3RydWN0IGEgbmV3IHJhbmdlLgorLy8gVDo6VHlwZSBUOjpi
ZWdpbigpIGNvbnN0IC0gaW5zdGFuY2UgbWV0aG9kIGdpdmluZyB0aGUgaW5jbHVzaXZlIGJlZ2lu
bmluZyBvZiB0aGUgcmFuZ2UuCisvLyBUOjpUeXBlIFQ6OmVuZCgpIGNvbnN0IC0gaW5zdGFuY2Ug
bWV0aG9kIGdpdmluZyB0aGUgZXhjbHVzaXZlIGVuZCBvZiB0aGUgcmFuZ2UuCisvLyB2b2lkIFQ6
OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCAtIHNvbWUga2luZCBvZiBkdW1waW5nLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSYW5nZVR5cGU+CitjbGFzcyBSYW5nZVNldCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBSYW5nZVR5cGUgUmFuZ2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBSYW5nZTo6VHlw
ZSBUeXBlOworCisgICAgUmFuZ2VTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICB+UmFuZ2VTZXQo
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGFkZChjb25zdCBSYW5nZSYgcmFuZ2UpCisgICAg
eworICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSByYW5nZS5lbmQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgcmFuZ2Ugc2V0IHRv
IGJlY29tZSB0b3AgaW4gYSBsb3Qgb2YgY2FzZXMuIFdlIGFsc28gZXhwZWN0IHRoZSBzYW1lIHJh
bmdlIHRvCisgICAgICAgIC8vIGJlIGFkZGVkIHJlcGVhdGVkbHkuIFRoYXQncyB3aHkgdGhpcyBp
cyBoZXJlLgorICAgICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSAmJiBzdWJzdW1lc05vbkVt
cHR5KG1fcmFuZ2VzLmxhc3QoKSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1faXNDb21wYWN0ID0gZmFsc2U7CisKKyAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQg
Y29tcGFjdGluZyBvbmx5IGlmIGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0
aGUgdmVjdG9yLgorICAgICAgICBpZiAobV9yYW5nZXMuc2l6ZSgpICsgMSA8IG1fcmFuZ2VzLmNh
cGFjaXR5KCkpIHsKKyAgICAgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFuZ2Up
OworICAgICAgICBjb21wYWN0KCk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhjb25zdCBS
YW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSBy
YW5nZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gZmluZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKGluZGV4ICsg
MSA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgc3Vic3VtZXNOb25FbXB0eShtX3Jh
bmdlc1tpbmRleCArIDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBzdWJzdW1lc05v
bkVtcHR5KG1fcmFuZ2VzW2luZGV4XSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXggLSAxKSA8IG1fcmFuZ2Vz
LnNpemUoKQorICAgICAgICAgICAgJiYgc3Vic3VtZXNOb25FbXB0eShtX3Jhbmdlc1tpbmRleCAt
IDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUmFuZ2UmIHJhbmdlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2UuZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGZpbmRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3Jhbmdlcy5zaXpl
KCkKKyAgICAgICAgICAgICYmIG92ZXJsYXBzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXggKyAxXSwg
cmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpbmRleCA8IG1f
cmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jhbmdlc1tp
bmRleF0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4IC0gMSkgPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAg
ICAgICYmIG92ZXJsYXBzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXggLSAxXSwgcmFuZ2UpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fcmFuZ2VzLmNsZWFyKCk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBj
b25zdF9jYXN0PFJhbmdlU2V0Kj4odGhpcyktPmNvbXBhY3QoKTsKKyAgICAgICAgb3V0LnByaW50
KGxpc3REdW1wKG1fcmFuZ2VzKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wUmF3KFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoInsiLCBsaXN0RHVtcCht
X3JhbmdlcyksICIsIGlzQ29tcGFjdCA9ICIsIG1faXNDb21wYWN0LCAifSIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIGNvbXBhY3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb21w
YWN0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3Jhbmdlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIG1faXNDb21wYWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fcmFuZ2Vz
LmJlZ2luKCksIG1fcmFuZ2VzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBSYW5nZSYg
YSwgY29uc3QgUmFuZ2UmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmJl
Z2luKCkgPCBiLmJlZ2luKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICB1bnNpZ25lZCBz
cmNJbmRleCA9IDE7CisgICAgICAgIHVuc2lnbmVkIGRzdEluZGV4ID0gMTsKKyAgICAgICAgUmFu
Z2UqIGxhc3RSYW5nZSA9ICZtX3Jhbmdlc1swXTsKKyAgICAgICAgd2hpbGUgKHNyY0luZGV4IDwg
bV9yYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBSYW5nZSByYW5nZSA9IG1fcmFuZ2VzW3Ny
Y0luZGV4KytdOworICAgICAgICAgICAgQVNTRVJUKHJhbmdlLmJlZ2luKCkgPj0gbGFzdFJhbmdl
LT5iZWdpbigpKTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5lbmQoKSA8PSBsYXN0UmFuZ2UtPmVu
ZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJhbmdlLmJl
Z2luKCkgPD0gbGFzdFJhbmdlLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICpsYXN0UmFuZ2Ug
PSBSYW5nZShsYXN0UmFuZ2UtPmJlZ2luKCksIHJhbmdlLmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghb3ZlcmxhcCgq
bGFzdFJhbmdlLCByYW5nZSkpOworICAgICAgICAgICAgbGFzdFJhbmdlID0gJm1fcmFuZ2VzW2Rz
dEluZGV4KytdOworICAgICAgICAgICAgKmxhc3RSYW5nZSA9IHJhbmdlOworICAgICAgICB9Cisg
ICAgICAgIG1fcmFuZ2VzLnJlc2l6ZShkc3RJbmRleCk7CisKKyAgICAgICAgbV9pc0NvbXBhY3Qg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBvdmVybGFwc05vbkVtcHR5KGNv
bnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBub25F
bXB0eVJhbmdlc092ZXJsYXAoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCksIGIuZW5kKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1YnN1bWVzTm9uRW1wdHkoY29uc3QgUmFuZ2Um
IGEsIGNvbnN0IFJhbmdlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuYmVnaW4oKSA8PSBi
LmJlZ2luKCkgJiYgYS5lbmQoKSA+PSBiLmVuZCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZp
bmRSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9j
YXN0PFJhbmdlU2V0Kj4odGhpcyktPmNvbXBhY3QoKTsKKworICAgICAgICBjb25zdCBSYW5nZSog
Zm91bmQgPSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxjb25zdCBSYW5nZSwgVHlwZT4oCisgICAg
ICAgICAgICBtX3JhbmdlcywgbV9yYW5nZXMuc2l6ZSgpLCByYW5nZS5iZWdpbigpLCBbJl0gKGNv
bnN0IFJhbmdlKiByYW5nZSkgLT4gVHlwZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdl
LT5iZWdpbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAg
ICAgICByZXR1cm4gVUlOVF9NQVg7CisKKyAgICAgICAgcmV0dXJuIGZvdW5kIC0gbV9yYW5nZXMu
YmVnaW4oKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFJhbmdlLCA4PiBtX3JhbmdlczsKKyAg
ICBib29sIG1faXNDb21wYWN0IHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6UmFuZ2VTZXQ7CisKKyNlbmRpZiAvLyBXVEZfUmFuZ2VTZXRfaAorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMjEyLDcgKzIxMiw3IEBAIGlubGluZSBBcnJheUVsZW1lbnRU
eXBlKiBiaW5hcnlTZWFyY2hJbXAKICAgICAgICAgQVNTRVJUKG1vZGUgIT0gS2V5TXVzdEJlUHJl
c2VudEluQXJyYXkgfHwgc2l6ZSk7CiAgICAgfQogICAgIAotICAgIGlmIChtb2RlID09IEtleU1p
Z2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKKyAgICBpZiAobW9kZSAhPSBLZXlNdXN0
QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAg
QXJyYXlFbGVtZW50VHlwZSogcmVzdWx0ID0gJmFycmF5W29mZnNldF07CkBAIC0yMzAsMzggKzIz
MCwzOCBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wCiAKIC8vIElm
IHRoZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwg
YW5kIGJlaGF2ZSBsaWtlIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoIGluIHJlbGVhc2UgYnVpbGRz
LgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxl
bWVudFR5cGUqIGJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5
VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBB
cnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGFy
cmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAvLyBSZXR1cm4gemVybyBpZiB0aGUg
ZWxlbWVudCBpcyBub3QgZm91bmQuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBl
LCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RL
ZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKEFycmF5VHlwZSYg
YXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0g
RXh0cmFjdEtleSgpKQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChB
cnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RL
ZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJj
aEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBL
ZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkp
OwogfQogCiAvLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhlIGxlZnQs
IG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVuIGZvdW5k
LgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxl
bWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVf
dCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5
VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1w
bDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIFJldHVy
bkFkamFjZW50RWxlbWVudElmS2V5SXNOb3RQcmVzZW50PihhcnJheSwgc2l6ZSwga2V5LCBleHRy
YWN0S2V5KTsKIH0KIAogLy8gVmFyaWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0Lgog
dGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVu
dFR5cGUqIGJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwg
S2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGlu
ZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwg
c2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0g
RXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVu
dFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudElu
QXJyYXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RL
ZXkpOwogfQogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5
VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFy
cmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBz
aXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RL
ZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJy
YXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5
JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJ
bXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5
TWlnaHROb3RCZVByZXNlbnRJbkFycmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwg
c2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVu
dFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0
cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJj
aChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJh
Y3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBl
KiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qg
c2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0
S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwg
S2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktl
eUlzTm90UHJlc2VudD4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNpemUsIGtleSwg
ZXh0cmFjdEtleSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269464</attachid>
            <date>2016-01-21 10:14:12 -0800</date>
            <delta_ts>2016-01-21 10:55:53 -0800</delta_ts>
            <desc>passes all tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50197</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU0MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY3LDYgKzQ2NywxMCBAQAogCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3MTRDQTUx
NkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IH07CisJCTBGNzI1
Q0E3MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0Ez
MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAq
LzsgfTsKKwkJMEY3MjVDQTgxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zLmggKi87IH07CisJCTBGNzI1Q0E5MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVD
QTUxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi87IH07CisJCTBGNzI1Q0FBMUM1
MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0E2MUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0Uu
aCAqLzsgfTsKIAkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFu
dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
MjVDQUQxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovOyB9Owog
CQkwRjcyNUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQz
QjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NDNCQUExNkI4
ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBB
Uk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CkBAIC0yNjQ3LDYgKzI2NTEsMTAgQEAKIAkJMEY3
MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0Ey
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNzI1Q0EzMUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwOyBwYXRoID0gYjMvQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4
cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuaDsgcGF0aCA9IGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTUxQzUwM0RF
RDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1B1cmVDU0UuY3BwOyBwYXRoID0gYjMvQjNQdXJlQ1NFLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNT
RS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1B1cmVDU0UuaDsgcGF0aCA9
IGIzL0IzUHVyZUNTRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRDFD
NTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIz
L0IzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBi
My9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDc4Myw2ICs0NzkxLDggQEAKIAkJCQkwRjZCOEFENzFDNEVEREEyMDA5Njkw
NTIgLyogQjNEdXBsaWNhdGVUYWlscy5oICovLAogCQkJCTBGRUM4NUM0MUJFMTZGNUEwMDgwRkY3
NCAvKiBCM0VmZmVjdHMuY3BwICovLAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCAqLywKKwkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5h
dGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCisJCQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5
NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKIAkJCQkwRjZCOEFF
MDFDNEVGRTE3MDA5NjkwNTIgLyogQjNGaXhTU0EuY3BwICovLAogCQkJCTBGNkI4QUUxMUM0RUZF
MTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5oICovLAogCQkJCTBGNzI1Q0FEMUM1MDZEM0IwMEFEOTQz
QSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLywKQEAgLTQ4MzQsNiArNDg0NCw4IEBACiAJ
CQkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywKIAkJCQkw
RkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKIAkJCQkwRkVDODRF
MzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJMEY3MjVD
QTUxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgKi8sCisJCQkJMEY3MjVDQTYxQzUw
M0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovLAogCQkJCTQzNDIyQTY0MUMxNjIyMUUwMEUy
RUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwICovLAogCQkJCTQzNDIyQTY1MUMxNjIy
MUUwMEUyRUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCAqLywKIAkJCQkwRkVDODVCNzFC
RTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCkBAIC03MzI0LDYgKzcz
MzYsNyBAQAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzNDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjcy
NUNBODFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZp
bmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8q
IERGR0p1bXBSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1
RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTc2NTEsNiAr
NzY2NCw3IEBACiAJCQkJQTFENzkyRkQxQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3Jt
YXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRDc5MkZGMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRs
TnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMjU4NDZFMUI0
NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjcyNUNBQTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMUQ3OTMwMTFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkYxQjQ1QTM2MDAwQ0M3
RjZDIC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTUxNjVEMzFCREYwQjlFMDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODgwLDYgKzg4OTQsNyBAQAogCQkJCUE3RDlBMjk0MTdB
MEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJp
bGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBNzFDNTAzREVEMDBBRDk0M0Eg
LyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZH
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMzE3QTBCOENDMDA3NzNB
RDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzI4LDYg
KzkzNDMsNyBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwQjc5MTk4MUMwMjRBMjkwMDI0ODFFMiAvKiBH
ZW5lcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3MjVDQTkxQzUwM0RF
RDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFB
OTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM3
MzA4QzFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
RWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmts
aXN0LmgiCisjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2Uu
aCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM01lbW9y
eVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtl
eS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2VTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisv
LyBGSVhNRTogV2UgY291bGQgdHJlYXQgUGF0Y2hwb2ludHMgd2l0aCBhIG5vbi1lbXB0eSBzZXQg
b2YgcmVhZHMgYXMgYSAibWVtb3J5IHZhbHVlIiBhbmQgc29tZWhvdworLy8gZWxpbWluYXRlIHJl
ZHVuZGFudCBvbmVzLiBXZSB3b3VsZCBuZWVkIHNvbWUgd2F5IG9mIGRldGVybWluaW5nIGlmIHR3
byBwYXRjaHBvaW50cyBhcmUgcmVwbGFjYWJsZS4KKy8vIEl0IGRvZXNuJ3Qgc2VlbSByaWdodCB0
byB1c2UgdGhlIHJlYWRzIHNldCBmb3IgdGhpcy4gV2UgY291bGQgdXNlIHRoZSBnZW5lcmF0b3Is
IGJ1dCB0aGF0IGZlZWxzCisvLyBsYW1lIGJlY2F1c2UgdGhlIEZUTCB3aWxsIHByZXR0eSBtdWNo
IHVzZSBhIHVuaXF1ZSBnZW5lcmF0b3IgZm9yIGVhY2ggcGF0Y2hwb2ludCBldmVuIHdoZW4gdHdv
CisvLyBwYXRjaHBvaW50cyBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBmYXIgYXMgQ1NFIHdv
dWxkIGJlIGNvbmNlcm5lZC4gV2UgY291bGQgaW52ZW50IHNvbWV0aGluZworLy8gbGlrZSBhICJ2
YWx1ZSBJRCIgZm9yIHBhdGNocG9pbnRzLiBCeSBkZWZhdWx0LCBlYWNoIG9uZSBnZXRzIGEgdW5p
cXVlIHZhbHVlIElELCBidXQgRlRMIGNvdWxkIGZvcmNlCisvLyBzb21lIHBhdGNocG9pbnRzIHRv
IHNoYXJlIHRoZSBzYW1lIG9uZSBhcyBhIHNpZ25hbCB0aGF0IHRoZXkgd2lsbCByZXR1cm4gdGhl
IHNhbWUgdmFsdWUgaWYgZXhlY3V0ZWQKKy8vIGluIHRoZSBzYW1lIGhlYXAgd2l0aCB0aGUgc2Ft
ZSBpbnB1dHMuCisKK3R5cGVkZWYgVmVjdG9yPE1lbW9yeVZhbHVlKiwgMT4gTWVtb3J5TWF0Y2hl
czsKKworc3RydWN0IEltcHVyZUJsb2NrRGF0YSB7CisgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3
cml0ZXM7CisgICAgCisgICAgLy8gTWFwcyBhbiBhZGRyZXNzIGJhc2UgdG8gYWxsIG9mIHRoZSBN
ZW1vcnlWYWx1ZXMgdGhhdCBkbyB0aGluZ3MgdG8gaXQuIEFmdGVyIHdlJ3JlIGRvbmUKKyAgICAv
LyBwcm9jZXNzaW5nIGEgbWFwLCB0aGlzIHRlbGxzIHVzIHRoZSB2YWx1ZXMgYXQgdGFpbC4KKyAg
ICBIYXNoTWFwPFZhbHVlKiwgTWVtb3J5TWF0Y2hlcz4gbWVtb3J5VmFsdWVzOworfTsKKworY2xh
c3MgQ1NFIHsKK3B1YmxpYzoKKyAgICBDU0UoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1f
cHJvYyhwcm9jKQorICAgICAgICAsIG1fZG9taW5hdG9ycyhwcm9jLmRvbWluYXRvcnMoKSkKKyAg
ICAgICAgLCBtX2ltcHVyZUJsb2NrRGF0YShwcm9jLnNpemUoKSkKKyAgICAgICAgLCBtX2luc2Vy
dGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkIzIGJlZm9yZSBDU0U6XG4i
LCBtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsK
KworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAg
ICBtX2RhdGEgPSAmbV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdOworICAgICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgbV9kYXRhLT53cml0ZXMuYWRk
KHZhbHVlLT5lZmZlY3RzKCkud3JpdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAg
ICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIG1fZGF0YSA9ICZtX2ltcHVy
ZUJsb2NrRGF0YVtibG9ja107CisgICAgICAgICAgICBtX3dyaXRlcy5jbGVhcigpOworICAgICAg
ICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRl
eCkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBibG9jay0+YXQobV9pbmRleCk7CisgICAg
ICAgICAgICAgICAgcHJvY2VzcygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9j
aGFuZ2VkOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKCkKKyAgICB7
CisgICAgICAgIG1fdmFsdWUtPnBlcmZvcm1TdWJzdGl0dXRpb24oKTsKKworICAgICAgICBpZiAo
bV9wdXJlQ1NFLnByb2Nlc3MobV92YWx1ZSwgbV9kb21pbmF0b3JzKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFtX3ZhbHVlLT5lZmZlY3RzKCkud3JpdGVzKCkpOworICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChIZWFwUmFuZ2Ugd3JpdGVzID0gbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKKyAgICAgICAg
ICAgIGNsb2JiZXIod3JpdGVzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChNZW1vcnlWYWx1ZSog
bWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCisgICAgICAgICAgICBwcm9jZXNz
TWVtb3J5KG1lbW9yeSk7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKEhlYXBSYW5nZSB3cml0
ZXMpCisgICAgeworICAgICAgICBtX3dyaXRlcy5hZGQod3JpdGVzKTsKKyAgICAgICAgCisgICAg
ICAgIG1fZGF0YS0+bWVtb3J5VmFsdWVzLnJlbW92ZUlmKAorICAgICAgICAgICAgWyZdIChIYXNo
TWFwPFZhbHVlKiwgTWVtb3J5TWF0Y2hlcz46OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5yZW1vdmVBbGxNYXRjaGluZygKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogbWVtb3J5KSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1vcnktPnJhbmdlKCkub3ZlcmxhcHMod3Jp
dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQg
cHJvY2Vzc01lbW9yeShNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAgICAgICAgVmFsdWUq
IHB0ciA9IG1lbW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgIEhlYXBSYW5nZSByYW5nZSA9IG1l
bW9yeS0+cmFuZ2UoKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnktPm9mZnNldCgp
OworICAgICAgICBUeXBlIHR5cGUgPSBtZW1vcnktPnR5cGUoKTsKKworICAgICAgICAvLyBGSVhN
RTogRW1wb3dlciB0aGlzIHRvIGluc2VydCBtb3JlIGNhc3RzIGFuZCBzaGlmdHMuIEZvciBleGFt
cGxlLCBhIExvYWQ4IGNvdWxkIG1hdGNoIGEKKyAgICAgICAgLy8gU3RvcmUgYW5kIG1hc2sgdGhl
IHJlc3VsdC4gWW91IGNvdWxkIGV2ZW4gaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3Rv
cmUoQHZhbHVlLCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBMb2FkOFooQHB0ciwgb2Zm
c2V0ID0gMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hpY2ggY291bGQgYmUgdHVybmVkIGlu
dG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcmUoQHZh
bHVlLCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBaU2hyKEB2YWx1ZSwgMTYpCisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBM
b2FkOFo6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1
ZSgKKyAgICAgICAgICAgICAgICBwdHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRh
dGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZz
ZXQoKSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9w
Y29kZSgpID09IExvYWQ4WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlOCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAocmVwbGFjZShtYXRjaCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQ4UzogeworICAg
ICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAg
ICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9mZnNl
dAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9h
ZDhTIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4KTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaC0+
b3Bjb2RlKCkgPT0gU3RvcmU4KSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNFeHQ4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1l
bW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTG9h
ZDE2WjogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVl
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNl
dCgpID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bj
b2RlKCkgPT0gTG9hZDE2WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlMTYpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkMTZTOiB7Cisg
ICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAg
ICAgICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zm
c2V0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBM
b2FkMTZTIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2gtPm9wY29kZSgpID09IFN0b3JlMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwg
U0V4dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZh
bHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2UgTG9hZDogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZh
bHVlKAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRp
ZGF0ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9mZnNl
dCgpICE9IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNh
bmRpZGF0ZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBT
dG9yZSAmJiBjYW5kaWRhdGUtPmNoaWxkKDApLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNo
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1l
bW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3Rv
cmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAg
ICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhTG9nKCJCYWQgbWVtb3J5
IHZhbHVlOiAiLCBkZWVwRHVtcChtX3Byb2MsIG1fdmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgcmVwbGFjZShNZW1vcnlWYWx1ZSogbWF0Y2gpCisgICAg
eworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWxpbWluYXRpbmcgIiwgKm1f
dmFsdWUsICIgZHVlIHRvICIsICptYXRjaCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAo
bWF0Y2gtPmlzU3RvcmUoKSkKKyAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRp
dHkobWF0Y2gtPmNoaWxkKDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoTWVt
b3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIGFkZE1lbW9yeVZhbHVlKCptX2RhdGEs
IG1lbW9yeSk7CisgICAgfQorCisgICAgdm9pZCBhZGRNZW1vcnlWYWx1ZShJbXB1cmVCbG9ja0Rh
dGEmIGRhdGEsIE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBNZW1vcnlNYXRj
aGVzJiBtYXRjaGVzID0KKyAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzLmFkZChtZW1vcnkt
Pmxhc3RDaGlsZCgpLCBNZW1vcnlNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgICAg
ICBpZiAobWF0Y2hlcy5jb250YWlucyhtZW1vcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIG1hdGNoZXMuYXBwZW5kKG1lbW9yeSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRmlsdGVyPgorICAgIE1lbW9yeVZhbHVlKiBmaW5kTWVtb3J5VmFsdWUoVmFsdWUqIHB0
ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKKyAgICB7CisgICAgICAg
IGF1dG8gZmluZCA9IFsmXSAoSW1wdXJlQmxvY2tEYXRhJiBkYXRhKSAtPiBNZW1vcnlWYWx1ZSog
eworICAgICAgICAgICAgYXV0byBpdGVyID0gZGF0YS5tZW1vcnlWYWx1ZXMuZmluZChwdHIpOwor
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZGF0YS5tZW1vcnlWYWx1ZXMuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUgOiBpdGVyLT52YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9OworCisgICAgICAg
IGlmIChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKCptX2RhdGEpKQorICAgICAgICAgICAgcmV0
dXJuIG1hdGNoOworCisgICAgICAgIGlmIChtX3dyaXRlcy5vdmVybGFwcyhyYW5nZSkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0
OworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OworCisgICAgICAgIHdv
cmtsaXN0LnB1c2hBbGwobV9ibG9jay0+cHJlZGVjZXNzb3JzKCkpOworCisgICAgICAgIE1lbW9y
eVZhbHVlKiBtYXRjaCA9IG51bGxwdHI7CisKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIHNlZW5MaXN0LmFwcGVuZChibG9j
ayk7CisKKyAgICAgICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tE
YXRhW2Jsb2NrXTsKKworICAgICAgICAgICAgaWYgKG1fZG9taW5hdG9ycy5zdHJpY3RseURvbWlu
YXRlcyhibG9jaywgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGZpbmQoZGF0
YSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJs
YXBzKHJhbmdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAg
ICAgd29ya2xpc3QucHVzaEFsbChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKKyAgICAgICAgICAgIGFkZE1l
bW9yeVZhbHVlKG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXSwgbWF0Y2gpOworICAgICAgICBhZGRN
ZW1vcnlWYWx1ZShtYXRjaCk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNoOworICAgIH0KKworICAg
IHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworICAgIFByb2NlZHVyZSYgbV9w
cm9jOworCisgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0b3JzOworICAgIFB1cmVDU0UgbV9wdXJl
Q1NFOworICAgIAorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEltcHVyZUJsb2NrRGF0YT4gbV9p
bXB1cmVCbG9ja0RhdGE7CisKKyAgICBJbXB1cmVCbG9ja0RhdGEqIG1fZGF0YTsKKyAgICBSYW5n
ZVNldDxIZWFwUmFuZ2U+IG1fd3JpdGVzOworCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOworCisgICAgSW5zZXJ0aW9u
U2V0IG1faW5zZXJ0aW9uU2V0OworCisgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OworfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgZWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShw
cm9jLCAiZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMiKTsKKworICAgIENTRSBjc2UocHJv
Yyk7CisgICAgcmV0dXJuIGNzZS5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21t
b25TdWJleHByZXNzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zX2gKKyNkZWZpbmUgQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9uc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgZ2xvYmFsIGNv
bW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIChDU0UpIG92ZXIgYm90aCBwdXJlIHZhbHVl
cyBhbmQgbWVtb3J5IGFjY2Vzc2VzLgorCitib29sIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2
aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzRHVwbGljYXRlVGFpbHMu
aCIKKyNpbmNsdWRlICJCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCiAjaW5jbHVk
ZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzTGVnYWxpemVNZW1vcnlPZmZz
ZXRzLmgiCiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgpAQCAtNzgsNiArNzksNyBAQCB2b2lk
IGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgaWYgKG9wdExldmVsID49
IDEpIHsKICAgICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICBy
ZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBkdXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOwog
ICAgICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAxOTU0MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgSGVh
cFJhbmdlIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7CisgICAgCiAgICAg
SGVhcFJhbmdlKCkKICAgICAgICAgOiBtX2JlZ2luKDApCiAgICAgICAgICwgbV9lbmQoMCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAx
OTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zZXJ0aW9ucy5pc0VtcHR5KCk7IH0K
KwogICAgIFByb2NlZHVyZSYgY29kZSgpIHsgcmV0dXJuIG1fcHJvY2VkdXJlOyB9CiAKICAgICB2
b2lkIGFwcGVuZEluc2VydGlvbihjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMTk1NDA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNiArNjAsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBS
YW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CiAKKyAgICBib29sIGlzU3RvcmUoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
dXJlQ1NFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJl
Q1NFLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVD
U0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzUHVyZUNTRS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRG9t
aW5hdG9ycy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK1B1cmVDU0U6OlB1cmVDU0UoKQoreworfQorCitQdXJlQ1NFOjp+UHVyZUNT
RSgpCit7Cit9CisKK3ZvaWQgUHVyZUNTRTo6Y2xlYXIoKQoreworICAgIG1fbWFwLmNsZWFyKCk7
Cit9CisKK2Jvb2wgUHVyZUNTRTo6cHJvY2VzcyhWYWx1ZSogdmFsdWUsIERvbWluYXRvcnMmIGRv
bWluYXRvcnMpCit7CisgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAg
IGlmICgha2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBNYXRjaGVzJiBtYXRjaGVz
ID0gbV9tYXAuYWRkKGtleSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBmb3Ig
KFZhbHVlKiBtYXRjaCA6IG1hdGNoZXMpIHsKKyAgICAgICAgaWYgKGRvbWluYXRvcnMuZG9taW5h
dGVzKG1hdGNoLT5vd25lciwgdmFsdWUtPm93bmVyKSkgeworICAgICAgICAgICAgdmFsdWUtPnJl
cGxhY2VXaXRoSWRlbnRpdHkobWF0Y2gpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtYXRjaGVzLmFwcGVuZCh2YWx1ZSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzUHVyZUNTRV9oCisjZGVmaW5lIEIzUHVyZUNTRV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIFZhbHVlOworCit0eXBl
ZGVmIFZlY3RvcjxWYWx1ZSosIDE+IE1hdGNoZXM7CisKKy8vIFRoaXMgaXMgYSByZXVzYWJsZSB1
dGlsaXR5IGZvciBkb2luZyBwdXJlIENTRS4gWW91IGNhbiB1c2UgaXQgdG8gZG8gcHVyZSBDU0Ug
b24gYSBwcm9ncmFtIGJ5IGp1c3QKKy8vIHByb2NlZWRpbmcgaW4gb3JkZXIgYW4gY2FsbGluZyBw
cm9jZXNzKCkuCitjbGFzcyBQdXJlQ1NFIHsKK3B1YmxpYzoKKyAgICBQdXJlQ1NFKCk7CisgICAg
flB1cmVDU0UoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgcHJvY2VzcyhWYWx1
ZSosIERvbWluYXRvcnMmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxWYWx1ZUtleSwg
TWF0Y2hlcz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1B1cmVDU0VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAx
OTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUu
aCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUu
aCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKQEAg
LTI4Miw3ICsyODMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVl
T3duZXJzKCk7CiAgICAgICAgICAgICBtX2RvbWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMo
KTsgLy8gUmVjb21wdXRlIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIG1fcHVyZVZhbHVlcy5j
bGVhcigpOworICAgICAgICAgICAgbV9wdXJlQ1NFLmNsZWFyKCk7CiAKICAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAg
ICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpAQCAtMTc1MSwzMSArMTc1Miw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHJlcGxhY2VJZlJlZHVuZGFudCgpCiAgICAgewotICAgICAgICAvLyBU
aGlzIGRvZXMgYSB2ZXJ5IHNpbXBsZSBwdXJlIGRvbWluYXRvci1iYXNlZCBDU0UuIEluIHRoZSBm
dXR1cmUgd2UgY291bGQgYWRkIGxvYWQgZWxpbWluYXRpb24uCi0gICAgICAgIC8vIE5vdGUgdGhh
dCBpZiB3ZSBhZGQgbG9hZCBlbGltaW5hdGlvbiwgd2Ugc2hvdWxkIGRvIGl0IGJ5IGRpcmVjdGx5
IG1hdGNoaW5nIGxvYWQgYW5kIHN0b3JlCi0gICAgICAgIC8vIGluc3RydWN0aW9ucyBpbnN0ZWFk
IG9mIHVzaW5nIHRoZSBWYWx1ZUtleSBmdW5jdGlvbmFsaXR5IG9yIGRvaW5nIERGRyBIZWFwTG9j
YXRpb24tbGlrZQotICAgICAgICAvLyB0aGluZ3MuCi0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVy
IHdpdGggaWRlbnRpdGllcy4gV2Uga2lsbCB0aG9zZSBhbnl3YXkuCi0gICAgICAgIGlmIChtX3Zh
bHVlLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBWYWx1ZUtleSBrZXkgPSBtX3ZhbHVlLT5rZXkoKTsKLSAgICAgICAgaWYgKCFrZXkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWUqLCAxPiYgbWF0
Y2hlcyA9IG1fcHVyZVZhbHVlcy5hZGQoa2V5LCBWZWN0b3I8VmFsdWUqLCAxPigpKS5pdGVyYXRv
ci0+dmFsdWU7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHZhbHVlIHdpdGggd2hpY2hldmVy
IHZhbHVlIGRvbWluYXRlcyB1cy4KLSAgICAgICAgZm9yIChWYWx1ZSogbWF0Y2ggOiBtYXRjaGVz
KSB7Ci0gICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobWF0Y2gtPm93bmVy
LCBtX3ZhbHVlLT5vd25lcikpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0
aElkZW50aXR5KG1hdGNoKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IG1hdGNoZXMuYXBwZW5kKG1fdmFsdWUpOworICAgICAgICBtX2NoYW5nZWQgfD0gbV9wdXJlQ1NF
LnByb2Nlc3MobV92YWx1ZSwgKm1fZG9taW5hdG9ycyk7CiAgICAgfQogCiAgICAgdm9pZCBzaW1w
bGlmeUNGRygpCkBAIC0yMDQyLDcgKzIwMTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
aW5kZXggeyAwIH07CiAgICAgVmFsdWUqIG1fdmFsdWUgeyBudWxscHRyIH07CiAgICAgRG9taW5h
dG9ycyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OwotICAgIEhhc2hNYXA8VmFsdWVLZXksIFZl
Y3RvcjxWYWx1ZSosIDE+PiBtX3B1cmVWYWx1ZXM7CisgICAgUHVyZUNTRSBtX3B1cmVDU0U7CiAg
ICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jaGFuZ2VkQ0ZHIHsgZmFs
c2UgfTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBEb2VzIHN0
cmVuZ3RoIHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXphdGlvbiwgQ0ZH
IHNpbXBsaWZpY2F0aW9uLCBEQ0UsIGFuZCBDU0UuIFRoaXMKLS8vIHBoYXNlIHJ1bnMgdGhvc2Ug
b3B0aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwgb2YgdGhlIHBoYXNlIGlzIHRvIGRy
YW1hdGljYWxseSByZWR1Y2UgdGhlCi0vLyBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLiBJbiB0aGUg
ZnV0dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGltaXphdGlvbnMgdG8gdGhpcyBwaGFz
ZSByYXRoZXIgdGhhbgotLy8gY3JlYXRpbmcgbmV3IG9wdGltaXphdGlvbnMgYmVjYXVzZSB0aGVu
IHRoZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZSBpbiB0aGUgZml4cG9pbnQuIEhvd2V2
ZXIsCi0vLyB0aGlzIHBoYXNlIHNob3VsZG4ndCBiZWNvbWUgdG9vIGV4cGVuc2l2ZSwgc28gZXhw
ZW5zaXZlIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIHNlcGFyYXRlLgorLy8gRG9lcyBzdHJlbmd0
aCByZWR1Y3Rpb24sIGNvbnN0YW50IGZvbGRpbmcsIGNhbm9uaWNhbGl6YXRpb24sIENGRyBzaW1w
bGlmaWNhdGlvbiwgRENFLCBhbmQgdmVyeQorLy8gc2ltcGxlIENTRS4gVGhpcyBwaGFzZSBydW5z
IHRob3NlIG9wdGltaXphdGlvbnMgdG8gZml4cG9pbnQuIFRoZSBnb2FsIG9mIHRoZSBwaGFzZSBp
cyB0bworLy8gZHJhbWF0aWNhbGx5IHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGUgY29kZS4g
SW4gdGhlIGZ1dHVyZSwgaXQncyBwcmVmZXJhYmxlIHRvIGFkZCBvcHRpbWl6YXRpb25zCisvLyB0
byB0aGlzIHBoYXNlIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvcHRpbWl6YXRpb25zIGJlY2F1
c2UgdGhlbiB0aGUgb3B0aW1pemF0aW9ucyBjYW4gcGFydGljaXBhdGUKKy8vIGluIHRoZSBmaXhw
b2ludC4gSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgbWFueSBpbnRlcmxvY2tpbmcgb3B0aW1pemF0
aW9ucywgaXQgY2FuIGJlIGRpZmZpY3VsdCB0bworLy8gYWRkIHNvcGhpc3RpY2F0ZWQgb3B0aW1p
emF0aW9ucyB0byBpdC4gRm9yIHRoYXQgcmVhc29uIHdlIGhhdmUgZnVsbCBDU0UgaW4gYSBkaWZm
ZXJlbnQgcGhhc2UsIGZvcgorLy8gZXhhbXBsZS4KIAogYm9vbCByZWR1Y2VTdHJlbmd0aChQcm9j
ZWR1cmUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAko
cmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNiArMzcxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVkFM
SURBVEUoISh2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcyAmJiB2YWx1ZS0+a2V5KCkpLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4g
ZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRoZSBiYWNrZW5kIGZv
ciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwgdHVybiBvdXQuIEZv
ciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNlcyBCMy4gUmVtZW1i
ZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0jZGVmaW5lIEZUTF9V
U0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9kZTsKIApJbmRleDog
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU0MDkp
CisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFr
UmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjQ1NzA0
MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWlu
YXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDQ0
MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNzI1Q0FDMUM1MDQ2
MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi87
IH07CiAJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAw
MDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAwMkUz
NDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87IH07
CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovOyB9OwpAQCAtMzMyLDYgKzMzMyw3IEBACiAJCTBGMzUwMTYz
MUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdM
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3
UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzYsNiArODc4LDcgQEAKIAkJCQlBOEE0
NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJG
QzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjcyNUNBQjFDNTA0
NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCUE4QTQ3MkZFMTUxQTgyNUIwMDQxMjNGRiAvKiBS
ZWRCbGFja1RyZWUuaCAqLywKIAkJCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmgg
Ki8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3M0I0MTUxQTgyNUIwMDQxMjNGRiAv
KiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3
MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNDNDE1MUE4MjVC
MDA0MTIzRkYgLyogRmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3MjVDQUMxQzUw
NDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMzhGRDdCRDE2
ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUQzMzYxMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0I2MTUxQTgyNUIwMDQxMjNGRiAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDE5LDYgKzQxOSwyMCBAQCBp
bmxpbmUgVCBsZWZ0U2hpZnRXaXRoU2F0dXJhdGlvbihUIHZhbHVlCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorLy8gQ2hlY2sgaWYgdHdvIHJhbmdlcyBvdmVybGFwIGFzc3VtaW5nIHRoYXQgbmVp
dGhlciByYW5nZSBpcyBlbXB0eS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBu
b25FbXB0eVJhbmdlc092ZXJsYXAoVCBsZWZ0TWluLCBUIGxlZnRNYXgsIFQgcmlnaHRNaW4sIFQg
cmlnaHRNYXgpCit7CisgICAgQVNTRVJUKGxlZnRNaW4gPCBsZWZ0TWF4KTsKKyAgICBBU1NFUlQo
cmlnaHRNaW4gPCByaWdodE1heCk7CisgICAgCisgICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4g
JiYgbGVmdE1heCA+IHJpZ2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmln
aHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+IGxlZnRNaW4pCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUGFzcyByYW5nZXMgd2l0aCB0aGUgbWlu
IGJlaW5nIGluY2x1c2l2ZSBhbmQgdGhlIG1heCBiZWluZyBleGNsdXNpdmUuIEZvciBleGFtcGxl
LCB0aGlzIHNob3VsZAogLy8gcmV0dXJuIGZhbHNlOgogLy8KQEAgLTQzNCwxMiArNDQ4LDggQEAg
aW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKHJpZ2h0TWluID09IHJpZ2h0TWF4KQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVmdE1heCA+IHJpZ2h0
TWluKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAm
JiByaWdodE1heCA+IGxlZnRNaW4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBub25FbXB0eVJhbmdlc092ZXJsYXAobGVmdE1pbiwgbGVmdE1h
eCwgcmlnaHRNaW4sIHJpZ2h0TWF4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Jh
bmdlU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1JhbmdlU2V0X2gKKyNkZWZpbmUgV1RGX1Jh
bmdlU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgUmFuZ2VTZXQgaXMgYSBzZXQgb2Yg
bnVtZXJpY2FsIHJhbmdlcy4gQSB2YWx1ZSBiZWxvbmdzIHRvIHRoZSBzZXQgaWYgaXQgaXMgd2l0
aGluIGFueSBvZiB0aGUKKy8vIHJhbmdlcy4gQSByYW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQgaWYg
ZXZlcnkgdmFsdWUgaW4gdGhlIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNldC4gQSByYW5nZSBvdmVy
bGFwcworLy8gdGhlIHNldCBpZiBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIGJlbG9uZ3MgdG8gdGhl
IHNldC4gWW91IGNhbiBhZGQgcmFuZ2VzIGFuZCBxdWVyeSByYW5nZQorLy8gbWVtYmVyc2hpcC4g
VGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGEgbGlzdCBvZiByYW5nZXMgdGhhdCBnZXRz
IHBlcmlvZGljYWxseSBjb21wYWN0ZWQuIFRoaXMKKy8vIHJlcHJlc2VudGF0aW9uIGlzIG9wdGlt
YWwgc28gbG9uZyBhcyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHJhbmdlcyB0ZW5kcyB0byBiZSBz
bWFsbCwgYW5kIHRoZQorLy8gbnVtYmVyIG9mIHJhbmdlIHNldHMgdGVuZHMgdG8gYmUgc21hbGwg
YXMgd2VsbC4gVGhpcyB3b3JrcyByZWFzb25hYmx5IHdlbGwgaW4gYSBidW5jaCBvZiBjb21waWxl
cgorLy8gYWxnb3JpdGhtcywgd2hlcmUgdGhlIHRvcCByYW5nZSBlbmRzIHVwIGJlaW5nIHVzZWQg
YSBsb3QuCisvLworLy8gVGhlIGluaXRpYWwgdXNlciBvZiB0aGlzIGlzIEpTQzo6QjM6OkhlYXBS
YW5nZSwgd2hpY2ggaXMgdXNlZCB0byBwZXJmb3JtIGFsaWFzIGFuYWx5c2lzLiBZb3UgY2FuCisv
LyBtb2RlbCBuZXcgdXNlcnMgb24gdGhhdCBjbGFzcy4gQmFzaWNhbGx5LCB5b3UgbmVlZCB0byBk
ZWZpbmU6CisvLworLy8gVDo6VHlwZSAtIHRoZSB0eXBlIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBy
YW5nZS4gSGVhcFJhbmdlIHVzZXMgdW5zaWduZWQuCisvLyBUKFQ6OlR5cGUgYmVnaW4sIFQ6OlR5
cGUgZW5kKSAtIGNvbnN0cnVjdCBhIG5ldyByYW5nZS4KKy8vIFQ6OlR5cGUgVDo6YmVnaW4oKSBj
b25zdCAtIGluc3RhbmNlIG1ldGhvZCBnaXZpbmcgdGhlIGluY2x1c2l2ZSBiZWdpbm5pbmcgb2Yg
dGhlIHJhbmdlLgorLy8gVDo6VHlwZSBUOjplbmQoKSBjb25zdCAtIGluc3RhbmNlIG1ldGhvZCBn
aXZpbmcgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIHJhbmdlLgorLy8gdm9pZCBUOjpkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgLSBzb21lIGtpbmQgb2YgZHVtcGluZy4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmFuZ2VUeXBlPgorY2xhc3MgUmFuZ2VTZXQgeworcHVibGljOgorICAgIHR5cGVkZWYg
UmFuZ2VUeXBlIFJhbmdlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFuZ2U6OlR5cGUgVHlwZTsK
KworICAgIFJhbmdlU2V0KCkKKyAgICB7CisgICAgfQorCisgICAgflJhbmdlU2V0KCkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBhZGQoY29uc3QgUmFuZ2UmIHJhbmdlKQorICAgIHsKKyAgICAg
ICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2UuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICAvLyBXZSBleHBlY3QgdGhlIHJhbmdlIHNldCB0byBiZWNvbWUg
dG9wIGluIGEgbG90IG9mIGNhc2VzLiBXZSBhbHNvIGV4cGVjdCB0aGUgc2FtZSByYW5nZSB0bwor
ICAgICAgICAvLyBiZSBhZGRlZCByZXBlYXRlZGx5LiBUaGF0J3Mgd2h5IHRoaXMgaXMgaGVyZS4K
KyAgICAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkgJiYgc3Vic3VtZXNOb25FbXB0eShtX3Jh
bmdlcy5sYXN0KCksIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2lz
Q29tcGFjdCA9IGZhbHNlOworCisgICAgICAgIC8vIFdlIGFwcGVuZCB3aXRob3V0IGNvbXBhY3Rp
bmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0byByZXNpemUgdGhlIHZlY3Rv
ci4KKyAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEgPCBtX3Jhbmdlcy5jYXBhY2l0eSgp
KSB7CisgICAgICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFuZ2UpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICAg
ICAgY29tcGFjdCgpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoY29uc3QgUmFuZ2UmIHJh
bmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2UuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGZpbmRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3Jh
bmdlcy5zaXplKCkKKyAgICAgICAgICAgICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNbaW5k
ZXggKyAxXSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChp
bmRleCA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgc3Vic3VtZXNOb25FbXB0eSht
X3Jhbmdlc1tpbmRleF0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4IC0gMSkgPCBtX3Jhbmdlcy5zaXplKCkK
KyAgICAgICAgICAgICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXggLSAxXSwgcmFu
Z2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFJhbmdlJiByYW5nZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChyYW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBmaW5kUmFu
Z2UocmFuZ2UpOworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAg
ICAgICAgICAmJiBvdmVybGFwc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4ICsgMV0sIHJhbmdlKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaW5kZXggPCBtX3Jhbmdlcy5z
aXplKCkKKyAgICAgICAgICAgICYmIG92ZXJsYXBzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXhdLCBy
YW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmRleCAtIDEpIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBv
dmVybGFwc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4IC0gMV0sIHJhbmdlKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBj
bGVhcigpCisgICAgeworICAgICAgICBtX3Jhbmdlcy5jbGVhcigpOworICAgICAgICBtX2lzQ29t
cGFjdCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PFJhbmdlU2V0Kj4odGhpcyktPmNvbXBhY3Qo
KTsKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1wKG1fcmFuZ2VzKSk7CisgICAgfQorCisgICAg
dm9pZCBkdW1wUmF3KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQu
cHJpbnQoInsiLCBsaXN0RHVtcChtX3JhbmdlcyksICIsIGlzQ29tcGFjdCA9ICIsIG1faXNDb21w
YWN0LCAifSIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXBhY3QoKQorICAgIHsK
KyAgICAgICAgaWYgKG1faXNDb21wYWN0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1faXNDb21wYWN0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c29ydCgK
KyAgICAgICAgICAgIG1fcmFuZ2VzLmJlZ2luKCksIG1fcmFuZ2VzLmVuZCgpLAorICAgICAgICAg
ICAgWyZdIChjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIHJldHVybiBhLmJlZ2luKCkgPCBiLmJlZ2luKCk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICB1bnNpZ25lZCBzcmNJbmRleCA9IDE7CisgICAgICAgIHVuc2lnbmVkIGRzdElu
ZGV4ID0gMTsKKyAgICAgICAgUmFuZ2UqIGxhc3RSYW5nZSA9ICZtX3Jhbmdlc1swXTsKKyAgICAg
ICAgd2hpbGUgKHNyY0luZGV4IDwgbV9yYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBSYW5n
ZSByYW5nZSA9IG1fcmFuZ2VzW3NyY0luZGV4KytdOworICAgICAgICAgICAgQVNTRVJUKHJhbmdl
LmJlZ2luKCkgPj0gbGFzdFJhbmdlLT5iZWdpbigpKTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5l
bmQoKSA8PSBsYXN0UmFuZ2UtPmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPD0gbGFzdFJhbmdlLT5lbmQoKSkgeworICAgICAg
ICAgICAgICAgICpsYXN0UmFuZ2UgPSBSYW5nZShsYXN0UmFuZ2UtPmJlZ2luKCksIHJhbmdlLmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVCghb3ZlcmxhcCgqbGFzdFJhbmdlLCByYW5nZSkpOworICAgICAgICAgICAgbGFz
dFJhbmdlID0gJm1fcmFuZ2VzW2RzdEluZGV4KytdOworICAgICAgICAgICAgKmxhc3RSYW5nZSA9
IHJhbmdlOworICAgICAgICB9CisgICAgICAgIG1fcmFuZ2VzLnJlc2l6ZShkc3RJbmRleCk7CisK
KyAgICAgICAgbV9pc0NvbXBhY3QgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCBvdmVybGFwc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBub25FbXB0eVJhbmdlc092ZXJsYXAoYS5iZWdpbigpLCBhLmVuZCgp
LCBiLmJlZ2luKCksIGIuZW5kKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHN1YnN1bWVz
Tm9uRW1wdHkoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdlJiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGEuYmVnaW4oKSA8PSBiLmJlZ2luKCkgJiYgYS5lbmQoKSA+PSBiLmVuZCgpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGZpbmRSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdF9jYXN0PFJhbmdlU2V0Kj4odGhpcyktPmNvbXBhY3QoKTsKKwor
ICAgICAgICBjb25zdCBSYW5nZSogZm91bmQgPSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxjb25z
dCBSYW5nZSwgVHlwZT4oCisgICAgICAgICAgICBtX3JhbmdlcywgbV9yYW5nZXMuc2l6ZSgpLCBy
YW5nZS5iZWdpbigpLCBbJl0gKGNvbnN0IFJhbmdlKiByYW5nZSkgLT4gVHlwZSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlLT5iZWdpbigpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CisKKyAgICAgICAgcmV0
dXJuIGZvdW5kIC0gbV9yYW5nZXMuYmVnaW4oKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFJh
bmdlLCA4PiBtX3JhbmdlczsKKyAgICBib29sIG1faXNDb21wYWN0IHsgdHJ1ZSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmFuZ2VTZXQ7CisKKyNlbmRpZiAvLyBX
VEZfUmFuZ2VTZXRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTk1NDA5
KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjEyLDcgKzIxMiw3IEBA
IGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2hJbXAKICAgICAgICAgQVNTRVJU
KG1vZGUgIT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkgfHwgc2l6ZSk7CiAgICAgfQogICAgIAot
ICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKKyAg
ICBpZiAobW9kZSAhPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgQXJyYXlFbGVtZW50VHlwZSogcmVzdWx0ID0gJmFycmF5W29m
ZnNldF07CkBAIC0yMzAsMzggKzIzMCwzOCBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmlu
YXJ5U2VhcmNoSW1wCiAKIC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYg
YXNzZXJ0cyBhcmUgZW5hYmxlZCwgYW5kIGJlaGF2ZSBsaWtlIGFwcHJveGltYXRlQmluYXJ5U2Vh
cmNoIGluIHJlbGVhc2UgYnVpbGRzLgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlw
ZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0
S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFy
cmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlU
eXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBl
eHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBs
PEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVz
dEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAv
LyBSZXR1cm4gemVybyBpZiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5
cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5Qmlu
YXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0
cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQoraW5saW5lIEFycmF5RWxlbWVudFR5
cGUqIHRyeUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlw
ZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAg
ICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJy
YXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBz
aXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAvLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBp
cyBlaXRoZXIgdG8gdGhlIGxlZnQsIG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQg
d291bGQgaGF2ZSBiZWVuIGZvdW5kLgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlw
ZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0
S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFy
cmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRy
YWN0S2V5ID0gRXh0cmFjdEtleSgpKQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGlt
YXRlQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtl
eSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICBy
ZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5
cGUsIEV4dHJhY3RLZXksIFJldHVybkFkamFjZW50RWxlbWVudElmS2V5SXNOb3RQcmVzZW50Pihh
cnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIAogLy8gVmFyaWFudHMgb2YgdGhlIGFi
b3ZlIHRoYXQgdXNlIGNvbnN0LgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwg
dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5
PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUm
IGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9
IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goY29u
c3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRy
YWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlT
ZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtl
eSwgS2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkp
LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVt
ZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBF
eHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChjb25z
dCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlC
aW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUg
a2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAg
IHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5
VHlwZSwgRXh0cmFjdEtleSwgS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5Pihjb25zdF9jYXN0
PEFycmF5VHlwZSY+KGFycmF5KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIHRlbXBsYXRl
PHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFy
cmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBh
cHByb3hpbWF0ZUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6
ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lu
bGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChjb25zdCBBcnJh
eVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkm
IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaElt
cGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1
cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJlc2VudD4oY29uc3RfY2FzdDxBcnJheVR5cGUm
PihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269470</attachid>
            <date>2016-01-21 10:55:53 -0800</date>
            <delta_ts>2016-01-21 11:05:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54955</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDE2LTAxLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgbG9hZCBlbGltaW5hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMjg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcGxldGUgR0NTRSBwYXNzIHRo
YXQgaW5jbHVkZXMgbG9hZCBlbGltaW5hdGlvbi4gSXQgd291bGQgaGF2ZSBiZWVuIHN1cGVyIGhh
cmQKKyAgICAgICAgdG8gbWFrZSB0aGlzIHdvcmsgYXMgcGFydCBvZiB0aGUgcmVkdWNlU3RyZW5n
dGgoKSBmaXhwb2ludCwgc2luY2UgR0NTRSBuZWVkcyB0byBhbmFseXplCisgICAgICAgIGNvbnRy
b2wgZmxvdyBhbmQgcmVkdWNlU3RyZW5ndGgoKSBpcyBtZXNzaW5nIHdpdGggY29udHJvbCBmbG93
LiBTbywgSSBkaWQgYSBjb21wcm9taXNlOiBJCisgICAgICAgIGZhY3RvcmVkIG91dCB0aGUgcHVy
ZSBDU0UgdGhhdCByZWR1Y2VTdHJlbmd0aCgpIHdhcyBhbHJlYWR5IGRvaW5nLCBhbmQgbm93IHdl
IGhhdmU6CisKKyAgICAgICAgLSByZWR1Y2VTdHJlbmd0aCgpIHN0aWxsIGRvZXMgcHVyZSBDU0Ug
dXNpbmcgdGhlIG5ldyBQdXJlQ1NFIGhlbHBlci4KKworICAgICAgICAtIGVsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zKCkgaXMgYSBzZXBhcmF0ZSBwaGFzZSB0aGF0IGRvZXMgZ2VuZXJhbCBD
U0UuIEl0IHVzZXMgdGhlCisgICAgICAgICAgUHVyZUNTRSBoZWxwZXIgZm9yIHB1cmUgdmFsdWVz
IGFuZCBkb2VzIGl0cyBvd24gc3BlY2lhbCB0aGluZyBmb3IgbWVtb3J5IHZhbHVlcy4KKyAgICAg
ICAgCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lc24ndCBoZWxwIGFueSBiZW5jaG1h
cmsgcmlnaHQgbm93LiBJdCBkb2Vzbid0IGh1cnQgYW55dGhpbmcsIGVpdGhlciwKKyAgICAgICAg
YW5kIGl0J3MgbGlrZWx5IHRvIGJlY29tZSBhIGJpZ2dlciBwYXktb2ZmIG9uY2Ugd2UgaW1wbGVt
ZW50IG90aGVyIGZlYXR1cmVzLCBsaWtlIG1hcHBpbmcKKyAgICAgICAgRlRMJ3MgYWJzdHJhY3Qg
aGVhcHMgb250byBCMydzIGhlYXAgcmFuZ2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkIzOjplbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyk6CisgICAgICAg
ICogYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6
OkhlYXBSYW5nZSk6CisgICAgICAgICogYjMvQjNJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKEpT
Qzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
c2VydGlvblNldDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6OmNv
ZGUpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0OjphcHBlbmRJbnNlcnRpb24pOgor
ICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1B1cmVDU0UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlB1cmVDU0U6OlB1cmVDU0UpOgorICAgICAgICAo
SlNDOjpCMzo6UHVyZUNTRTo6flB1cmVDU0UpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6cHJvY2Vzcyk6CisgICAgICAgICog
YjMvQjNQdXJlQ1NFLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguaDoKKyAgICAgICAgKiBiMy9CM1ZhbGlk
YXRlLmNwcDoKKwogMjAxNi0wMS0xOSAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVuYWJsZSBWSURFT19QUkVTRU5UQVRJT05fTU9E
RSBvbiBvdGhlciBDb2NvYSBwbGF0Zm9ybXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzRGF0YVNlY3Rpb24uY3BwCiAgICAgYjMvQjNEdXBs
aWNhdGVUYWlscy5jcHAKICAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKICAgICBiMy9CM0ZpeFNTQS5jcHAKICAgICBiMy9CM0Zv
bGRQYXRoQ29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCkBAIC0xNDIs
NiArMTQzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1BoYXNlU2Nv
cGUuY3BwCiAgICAgYjMvQjNQaGlDaGlsZHJlbi5jcHAKICAgICBiMy9CM1Byb2NlZHVyZS5jcHAK
KyAgICBiMy9CM1B1cmVDU0UuY3BwCiAgICAgYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAog
ICAgIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCiAgICAgYjMvQjNTU0FDYWxjdWxhdG9yLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDEwIEBACiAJCTBGNzAyNUFBMTcxNEIw
RkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAv
KiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2
RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgfTsKKwkJMEY3MjVD
QTcxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTMx
QzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICov
OyB9OworCQkwRjcyNUNBODFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuaCAqLzsgfTsKKwkJMEY3MjVDQTkxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLzsgfTsKKwkJMEY3MjVDQUExQzUw
M0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5o
ICovOyB9OwogCQkwRjcyNUNBRjFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcy
NUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi87IH07CiAJ
CTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0M0JBQTE2Qjg4
MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjAxNjUxQzY2MTAwQTgwQUZFIC8qIEFS
TTY0RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKQEAgLTI2NDcsNiArMjY1MSwxMCBAQAogCQkwRjcw
MjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIx
NkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHBhdGggPSBiMy9CM0Vs
aW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHVyZUNTRS5jcHA7IHBhdGggPSBiMy9CM1B1cmVDU0UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NF
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHVyZUNTRS5oOyBwYXRoID0g
YjMvQjNQdXJlQ1NFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FEMUM1
MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBwYXRoID0gYjMv
QjNGb2xkUGF0aENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzI1Q0FFMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuaDsgcGF0aCA9IGIz
L0IzRm9sZFBhdGhDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzgzLDYgKzQ3OTEsOCBAQAogCQkJCTBGNkI4QUQ3MUM0RUREQTIwMDk2OTA1
MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggKi8sCiAJCQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0
IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZFQzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIz
RWZmZWN0cy5oICovLAorCQkJCTBGNzI1Q0EzMUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQkwRjcyNUNBNDFDNTAzREVEMDBBRDk0
M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oICovLAogCQkJCTBGNkI4QUUw
MUM0RUZFMTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCiAJCQkJMEY2QjhBRTExQzRFRkUx
NzAwOTY5MDUyIC8qIEIzRml4U1NBLmggKi8sCiAJCQkJMEY3MjVDQUQxQzUwNkQzQjAwQUQ5NDNB
IC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovLApAQCAtNDgzNCw2ICs0ODQ0LDggQEAKIAkJ
CQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAogCQkJCTBG
RUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAogCQkJCTBGRUM4NEUz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLywKKwkJCQkwRjcyNUNBNjFDNTAz
REVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi8sCiAJCQkJNDM0MjJBNjQxQzE2MjIxRTAwRTJF
Qjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgKi8sCiAJCQkJNDM0MjJBNjUxQzE2MjIx
RTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKQEAgLTczMjQsNiArNzMz
Niw3IEBACiAJCQkJMEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTM0MTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhE
RjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzI1
Q0E4MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmlu
YWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyog
REZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVE
MDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzY1MSw2ICs3
NjY0LDcgQEAKIAkJCQlBMUQ3OTJGRDFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFENzkyRkYxQjQzODY0QjAwNDUxNkY1IC8qIEludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkUxQjQ1
QTM2MDAwQ0M3RjZDIC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNzI1Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9y
bWF0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdG
NkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1NTE2NUQzMUJERjBCOUUwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODAsNiArODg5NCw3IEBACiAJCQkJQTdEOUEyOTQxN0Ew
QkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmls
aXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzI1Q0E3MUM1MDNERUQwMEFEOTQzQSAv
KiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzMjgsNiAr
OTM0Myw3IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBCNzkxOTgxQzAyNEEyOTAwMjQ4MUUyIC8qIEdl
bmVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBOTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5
MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzcz
MDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9SYW5nZVNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCB0cmVhdCBQYXRjaHBvaW50cyB3aXRoIGEgbm9uLWVtcHR5IHNldCBv
ZiByZWFkcyBhcyBhICJtZW1vcnkgdmFsdWUiIGFuZCBzb21laG93CisvLyBlbGltaW5hdGUgcmVk
dW5kYW50IG9uZXMuIFdlIHdvdWxkIG5lZWQgc29tZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgdHdv
IHBhdGNocG9pbnRzIGFyZSByZXBsYWNhYmxlLgorLy8gSXQgZG9lc24ndCBzZWVtIHJpZ2h0IHRv
IHVzZSB0aGUgcmVhZHMgc2V0IGZvciB0aGlzLiBXZSBjb3VsZCB1c2UgdGhlIGdlbmVyYXRvciwg
YnV0IHRoYXQgZmVlbHMKKy8vIGxhbWUgYmVjYXVzZSB0aGUgRlRMIHdpbGwgcHJldHR5IG11Y2gg
dXNlIGEgdW5pcXVlIGdlbmVyYXRvciBmb3IgZWFjaCBwYXRjaHBvaW50IGV2ZW4gd2hlbiB0d28K
Ky8vIHBhdGNocG9pbnRzIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIGZhciBhcyBDU0Ugd291
bGQgYmUgY29uY2VybmVkLiBXZSBjb3VsZCBpbnZlbnQgc29tZXRoaW5nCisvLyBsaWtlIGEgInZh
bHVlIElEIiBmb3IgcGF0Y2hwb2ludHMuIEJ5IGRlZmF1bHQsIGVhY2ggb25lIGdldHMgYSB1bmlx
dWUgdmFsdWUgSUQsIGJ1dCBGVEwgY291bGQgZm9yY2UKKy8vIHNvbWUgcGF0Y2hwb2ludHMgdG8g
c2hhcmUgdGhlIHNhbWUgb25lIGFzIGEgc2lnbmFsIHRoYXQgdGhleSB3aWxsIHJldHVybiB0aGUg
c2FtZSB2YWx1ZSBpZiBleGVjdXRlZAorLy8gaW4gdGhlIHNhbWUgaGVhcCB3aXRoIHRoZSBzYW1l
IGlucHV0cy4KKwordHlwZWRlZiBWZWN0b3I8TWVtb3J5VmFsdWUqLCAxPiBNZW1vcnlNYXRjaGVz
OworCitzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdy
aXRlczsKKyAgICAKKyAgICAvLyBNYXBzIGFuIGFkZHJlc3MgYmFzZSB0byBhbGwgb2YgdGhlIE1l
bW9yeVZhbHVlcyB0aGF0IGRvIHRoaW5ncyB0byBpdC4gQWZ0ZXIgd2UncmUgZG9uZQorICAgIC8v
IHByb2Nlc3NpbmcgYSBtYXAsIHRoaXMgdGVsbHMgdXMgdGhlIHZhbHVlcyBhdCB0YWlsLgorICAg
IEhhc2hNYXA8VmFsdWUqLCBNZW1vcnlNYXRjaGVzPiBtZW1vcnlWYWx1ZXM7Cit9OworCitjbGFz
cyBDU0UgeworcHVibGljOgorICAgIENTRShQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9w
cm9jKHByb2MpCisgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2MuZG9taW5hdG9ycygpKQorICAg
ICAgICAsIG1faW1wdXJlQmxvY2tEYXRhKHByb2Muc2l6ZSgpKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIENTRTpcbiIs
IG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwor
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAg
IG1fZGF0YSA9ICZtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICBtX2RhdGEtPndyaXRlcy5hZGQo
dmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9kYXRhID0gJm1faW1wdXJl
QmxvY2tEYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIG1fd3JpdGVzLmNsZWFyKCk7CisgICAgICAg
ICAgICBmb3IgKG1faW5kZXggPSAwOyBtX2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGJsb2NrLT5hdChtX2luZGV4KTsKKyAgICAg
ICAgICAgICAgICBwcm9jZXNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2No
YW5nZWQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsK
KyAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOworCisgICAgICAgIGlmICht
X3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCBtX2RvbWluYXRvcnMpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIW1fdmFsdWUtPmVmZmVjdHMoKS53cml0ZXMoKSk7CisgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KEhlYXBSYW5nZSB3cml0ZXMgPSBtX3ZhbHVlLT5lZmZlY3RzKCkud3JpdGVzKQorICAgICAgICAg
ICAgY2xvYmJlcih3cml0ZXMpOworICAgICAgICAKKyAgICAgICAgaWYgKE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkKKyAgICAgICAgICAgIHByb2Nlc3NN
ZW1vcnkobWVtb3J5KTsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoSGVhcFJhbmdlIHdyaXRl
cykKKyAgICB7CisgICAgICAgIG1fd3JpdGVzLmFkZCh3cml0ZXMpOworICAgICAgICAKKyAgICAg
ICAgbV9kYXRhLT5tZW1vcnlWYWx1ZXMucmVtb3ZlSWYoCisgICAgICAgICAgICBbJl0gKEhhc2hN
YXA8VmFsdWUqLCBNZW1vcnlNYXRjaGVzPjo6S2V5VmFsdWVQYWlyVHlwZSYgZW50cnkpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlLnJlbW92ZUFsbE1hdGNoaW5nKAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKE1lbW9yeVZhbHVlKiBtZW1vcnkpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW9yeS0+cmFuZ2UoKS5vdmVybGFwcyh3cml0
ZXMpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50
cnkudmFsdWUuaXNFbXB0eSgpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBw
cm9jZXNzTWVtb3J5KE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBWYWx1ZSog
cHRyID0gbWVtb3J5LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgSGVhcFJhbmdlIHJhbmdlID0gbWVt
b3J5LT5yYW5nZSgpOworICAgICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeS0+b2Zmc2V0KCk7
CisgICAgICAgIFR5cGUgdHlwZSA9IG1lbW9yeS0+dHlwZSgpOworCisgICAgICAgIC8vIEZJWE1F
OiBFbXBvd2VyIHRoaXMgdG8gaW5zZXJ0IG1vcmUgY2FzdHMgYW5kIHNoaWZ0cy4gRm9yIGV4YW1w
bGUsIGEgTG9hZDggY291bGQgbWF0Y2ggYQorICAgICAgICAvLyBTdG9yZSBhbmQgbWFzayB0aGUg
cmVzdWx0LiBZb3UgY291bGQgZXZlbiBoYXZlOgorICAgICAgICAvLworICAgICAgICAvLyBTdG9y
ZShAdmFsdWUsIEBwdHIsIG9mZnNldCA9IDApCisgICAgICAgIC8vIExvYWQ4WihAcHRyLCBvZmZz
ZXQgPSAyKQorICAgICAgICAvLworICAgICAgICAvLyBXaGljaCBjb3VsZCBiZSB0dXJuZWQgaW50
byBzb21ldGhpbmcgbGlrZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBTdG9yZShAdmFs
dWUsIEBwdHIsIG9mZnNldCA9IDApCisgICAgICAgIC8vIFpTaHIoQHZhbHVlLCAxNikKKyAgICAg
ICAgCisgICAgICAgIHN3aXRjaCAobWVtb3J5LT5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIExv
YWQ4WjogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVl
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNl
dCgpID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bj
b2RlKCkgPT0gTG9hZDhaIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4KTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTG9hZDhTOiB7CisgICAg
ICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAg
ICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2Fk
OFMgfHwgY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZTgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoLT5v
cGNvZGUoKSA9PSBTdG9yZTgpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgU0V4dDgs
IG1fdmFsdWUtPm9yaWdpbigpLCBtYXRjaC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGxhY2UobWF0Y2gpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVt
b3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2Fk
MTZaOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUo
CisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRl
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0
KCkgPT0gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNv
ZGUoKSA9PSBMb2FkMTZaIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAocmVwbGFjZShtYXRjaCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQxNlM6IHsKKyAg
ICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1ZSgKKyAgICAgICAg
ICAgICAgICBwdHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQoKSA9PSBvZmZz
ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IExv
YWQxNlMgfHwgY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZTE2KTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRj
aC0+b3Bjb2RlKCkgPT0gU3RvcmUxNikgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBT
RXh0MTYsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXRjaC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGxhY2UobWF0Y2gpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkTWVtb3J5VmFs
dWUobWVtb3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBMb2FkOiB7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFs
dWUoCisgICAgICAgICAgICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlk
YXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b2Zmc2V0
KCkgIT0gb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IExvYWQgJiYgY2Fu
ZGlkYXRlLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0
b3JlICYmIGNhbmRpZGF0ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVt
b3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdG9y
ZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZTogeworICAgICAg
ICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRhdGFMb2coIkJhZCBtZW1vcnkg
dmFsdWU6ICIsIGRlZXBEdW1wKG1fcHJvYywgbV92YWx1ZSksICJcbiIpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCByZXBsYWNlKE1lbW9yeVZhbHVlKiBtYXRjaCkKKyAgICB7
CisgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJFbGltaW5hdGluZyAiLCAqbV92
YWx1ZSwgIiBkdWUgdG8gIiwgKm1hdGNoLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
YXRjaC0+aXNTdG9yZSgpKQorICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0
eShtYXRjaC0+Y2hpbGQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KG1hdGNoKTsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBhZGRNZW1vcnlWYWx1ZShNZW1v
cnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAgICAgICAgYWRkTWVtb3J5VmFsdWUoKm1fZGF0YSwg
bWVtb3J5KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1lbW9yeVZhbHVlKEltcHVyZUJsb2NrRGF0
YSYgZGF0YSwgTWVtb3J5VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIE1lbW9yeU1hdGNo
ZXMmIG1hdGNoZXMgPQorICAgICAgICAgICAgZGF0YS5tZW1vcnlWYWx1ZXMuYWRkKG1lbW9yeS0+
bGFzdENoaWxkKCksIE1lbW9yeU1hdGNoZXMoKSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAg
IGlmIChtYXRjaGVzLmNvbnRhaW5zKG1lbW9yeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbWF0Y2hlcy5hcHBlbmQobWVtb3J5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGaWx0ZXI+CisgICAgTWVtb3J5VmFsdWUqIGZpbmRNZW1vcnlWYWx1ZShWYWx1ZSogcHRy
LCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVyKQorICAgIHsKKyAgICAgICAg
YXV0byBmaW5kID0gWyZdIChJbXB1cmVCbG9ja0RhdGEmIGRhdGEpIC0+IE1lbW9yeVZhbHVlKiB7
CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBkYXRhLm1lbW9yeVZhbHVlcy5maW5kKHB0cik7Cisg
ICAgICAgICAgICBpZiAoaXRlciAhPSBkYXRhLm1lbW9yeVZhbHVlcy5lbmQoKSkgeworICAgICAg
ICAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSA6IGl0ZXItPnZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH07CisKKyAgICAgICAg
aWYgKE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmQoKm1fZGF0YSkpCisgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisKKyAgICAgICAgaWYgKG1fd3JpdGVzLm92ZXJsYXBzKHJhbmdlKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7
CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgOD4gc2Vlbkxpc3Q7CisKKyAgICAgICAgd29y
a2xpc3QucHVzaEFsbChtX2Jsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisKKyAgICAgICAgTWVtb3J5
VmFsdWUqIG1hdGNoID0gbnVsbHB0cjsKKworICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxv
Y2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgc2Vlbkxpc3QuYXBwZW5kKGJsb2Nr
KTsKKworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVCbG9ja0Rh
dGFbYmxvY2tdOworCisgICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLnN0cmljdGx5RG9taW5h
dGVzKGJsb2NrLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAgIG1hdGNoID0gZmluZChkYXRh
KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGF0YS53cml0ZXMub3Zlcmxh
cHMocmFuZ2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoQWxsKGJsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHNlZW5MaXN0KQorICAgICAgICAgICAgYWRkTWVt
b3J5VmFsdWUobV9pbXB1cmVCbG9ja0RhdGFbYmxvY2tdLCBtYXRjaCk7CisgICAgICAgIGFkZE1l
bW9yeVZhbHVlKG1hdGNoKTsKKworICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfQorCisgICAg
dHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAxPiBNYXRjaGVzOworCisgICAgUHJvY2VkdXJlJiBtX3By
b2M7CisKKyAgICBEb21pbmF0b3JzJiBtX2RvbWluYXRvcnM7CisgICAgUHVyZUNTRSBtX3B1cmVD
U0U7CisgICAgCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSW1wdXJlQmxvY2tEYXRhPiBtX2lt
cHVyZUJsb2NrRGF0YTsKKworICAgIEltcHVyZUJsb2NrRGF0YSogbV9kYXRhOworICAgIFJhbmdl
U2V0PEhlYXBSYW5nZT4gbV93cml0ZXM7CisKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUqIG1fdmFsdWU7CisKKyAgICBJbnNlcnRpb25T
ZXQgbV9pbnNlcnRpb25TZXQ7CisKKyAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBlbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHBy
b2MsICJlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyIpOworCisgICAgQ1NFIGNzZShwcm9j
KTsKKyAgICByZXR1cm4gY3NlLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRWxpbWlu
YXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNfaAorI2RlZmluZSBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4
cHJlc3Npb25zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBnbG9iYWwgY29t
bW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gKENTRSkgb3ZlciBib3RoIHB1cmUgdmFsdWVz
IGFuZCBtZW1vcnkgYWNjZXNzZXMuCisKK2Jvb2wgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZp
c2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNEdXBsaWNhdGVUYWlscy5o
IgorI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKICNpbmNsdWRl
ICJCM0ZvbGRQYXRoQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNl
dHMuaCIKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9zLmgiCkBAIC03OCw2ICs3OSw3IEBAIHZvaWQg
Z2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICBpZiAob3B0TGV2ZWwgPj0g
MSkgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CisgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7CiAg
ICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBIZWFw
UmFuZ2UgewogcHVibGljOgorICAgIHR5cGVkZWYgdW5zaWduZWQgVHlwZTsKKyAgICAKICAgICBI
ZWFwUmFuZ2UoKQogICAgICAgICA6IG1fYmVnaW4oMCkKICAgICAgICAgLCBtX2VuZCgwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5
NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRpb25zLmlzRW1wdHkoKTsgfQor
CiAgICAgUHJvY2VkdXJlJiBjb2RlKCkgeyByZXR1cm4gbV9wcm9jZWR1cmU7IH0KIAogICAgIHZv
aWQgYXBwZW5kSW5zZXJ0aW9uKGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTU0MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBIZWFwUmFuZ2UmIHJhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQogICAgIHZvaWQgc2V0UmFuZ2UoY29uc3QgSGVhcFJh
bmdlJiByYW5nZSkgeyBtX3JhbmdlID0gcmFuZ2U7IH0KIAorICAgIGJvb2wgaXNTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBWb2lkOyB9CisgICAgYm9vbCBpc0xvYWQoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgIT0gVm9pZDsgfQorCiAgICAgc2l6ZV90IGFjY2Vzc0J5dGVTaXplKCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1
cmVDU0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVD
U0UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNT
RS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNQdXJlQ1NFLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworUHVyZUNTRTo6UHVyZUNTRSgpCit7Cit9CisKK1B1cmVDU0U6On5QdXJlQ1NF
KCkKK3sKK30KKwordm9pZCBQdXJlQ1NFOjpjbGVhcigpCit7CisgICAgbV9tYXAuY2xlYXIoKTsK
K30KKworYm9vbCBQdXJlQ1NFOjpwcm9jZXNzKFZhbHVlKiB2YWx1ZSwgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycykKK3sKKyAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAg
aWYgKCFrZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE1hdGNoZXMmIG1hdGNoZXMg
PSBtX21hcC5hZGQoa2V5LCBNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGZvciAo
VmFsdWUqIG1hdGNoIDogbWF0Y2hlcykgeworICAgICAgICBpZiAoZG9taW5hdG9ycy5kb21pbmF0
ZXMobWF0Y2gtPm93bmVyLCB2YWx1ZS0+b3duZXIpKSB7CisgICAgICAgICAgICB2YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1hdGNoZXMuYXBwZW5kKHZhbHVlKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQdXJlQ1NFX2gKKyNkZWZpbmUgQjNQdXJlQ1NFX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBEb21pbmF0b3JzOworY2xhc3MgVmFsdWU7CisKK3R5cGVk
ZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworLy8gVGhpcyBpcyBhIHJldXNhYmxlIHV0
aWxpdHkgZm9yIGRvaW5nIHB1cmUgQ1NFLiBZb3UgY2FuIHVzZSBpdCB0byBkbyBwdXJlIENTRSBv
biBhIHByb2dyYW0gYnkganVzdAorLy8gcHJvY2VlZGluZyBpbiBvcmRlciBhbiBjYWxsaW5nIHBy
b2Nlc3MoKS4KK2NsYXNzIFB1cmVDU0UgeworcHVibGljOgorICAgIFB1cmVDU0UoKTsKKyAgICB+
UHVyZUNTRSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgYm9vbCBwcm9jZXNzKFZhbHVl
KiwgRG9taW5hdG9ycyYpOworICAgIAorcHJpdmF0ZToKKyAgICBIYXNoTWFwPFZhbHVlS2V5LCBN
YXRjaGVzPiBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHVyZUNTRV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5
NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5o
IgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgpAQCAt
MjgyLDcgKzI4Myw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVP
d25lcnMoKTsKICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2MuZG9taW5hdG9ycygp
OyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgbV9wdXJlVmFsdWVzLmNs
ZWFyKCk7CisgICAgICAgICAgICBtX3B1cmVDU0UuY2xlYXIoKTsKIAogICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAg
ICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkBAIC0xNzUxLDMxICsxNzUyLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7Ci0gICAgICAgIC8vIFRo
aXMgZG9lcyBhIHZlcnkgc2ltcGxlIHB1cmUgZG9taW5hdG9yLWJhc2VkIENTRS4gSW4gdGhlIGZ1
dHVyZSB3ZSBjb3VsZCBhZGQgbG9hZCBlbGltaW5hdGlvbi4KLSAgICAgICAgLy8gTm90ZSB0aGF0
IGlmIHdlIGFkZCBsb2FkIGVsaW1pbmF0aW9uLCB3ZSBzaG91bGQgZG8gaXQgYnkgZGlyZWN0bHkg
bWF0Y2hpbmcgbG9hZCBhbmQgc3RvcmUKLSAgICAgICAgLy8gaW5zdHJ1Y3Rpb25zIGluc3RlYWQg
b2YgdXNpbmcgdGhlIFZhbHVlS2V5IGZ1bmN0aW9uYWxpdHkgb3IgZG9pbmcgREZHIEhlYXBMb2Nh
dGlvbi1saWtlCi0gICAgICAgIC8vIHRoaW5ncy4KLQotICAgICAgICAvLyBEb24ndCBib3RoZXIg
d2l0aCBpZGVudGl0aWVzLiBXZSBraWxsIHRob3NlIGFueXdheS4KLSAgICAgICAgaWYgKG1fdmFs
dWUtPm9wY29kZSgpID09IElkZW50aXR5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IFZhbHVlS2V5IGtleSA9IG1fdmFsdWUtPmtleSgpOwotICAgICAgICBpZiAoIWtleSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZSosIDE+JiBtYXRj
aGVzID0gbV9wdXJlVmFsdWVzLmFkZChrZXksIFZlY3RvcjxWYWx1ZSosIDE+KCkpLml0ZXJhdG9y
LT52YWx1ZTsKLQotICAgICAgICAvLyBSZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCB3aGljaGV2ZXIg
dmFsdWUgZG9taW5hdGVzIHVzLgotICAgICAgICBmb3IgKFZhbHVlKiBtYXRjaCA6IG1hdGNoZXMp
IHsKLSAgICAgICAgICAgIGlmIChtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhtYXRjaC0+b3duZXIs
IG1fdmFsdWUtPm93bmVyKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRo
SWRlbnRpdHkobWF0Y2gpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
bWF0Y2hlcy5hcHBlbmQobV92YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlZCB8PSBtX3B1cmVDU0Uu
cHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsKICAgICB9CiAKICAgICB2b2lkIHNpbXBs
aWZ5Q0ZHKCkKQEAgLTIwNDIsNyArMjAxOSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9p
bmRleCB7IDAgfTsKICAgICBWYWx1ZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKICAgICBEb21pbmF0
b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07Ci0gICAgSGFzaE1hcDxWYWx1ZUtleSwgVmVj
dG9yPFZhbHVlKiwgMT4+IG1fcHVyZVZhbHVlczsKKyAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2NoYW5nZWRDRkcgeyBmYWxz
ZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguaAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBQcm9jZWR1cmU7CiAKLS8vIERvZXMgc3Ry
ZW5ndGggcmVkdWN0aW9uLCBjb25zdGFudCBmb2xkaW5nLCBjYW5vbmljYWxpemF0aW9uLCBDRkcg
c2ltcGxpZmljYXRpb24sIERDRSwgYW5kIENTRS4gVGhpcwotLy8gcGhhc2UgcnVucyB0aG9zZSBv
cHRpbWl6YXRpb25zIHRvIGZpeHBvaW50LiBUaGUgZ29hbCBvZiB0aGUgcGhhc2UgaXMgdG8gZHJh
bWF0aWNhbGx5IHJlZHVjZSB0aGUKLS8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuIEluIHRoZSBm
dXR1cmUsIGl0J3MgcHJlZmVyYWJsZSB0byBhZGQgb3B0aW1pemF0aW9ucyB0byB0aGlzIHBoYXNl
IHJhdGhlciB0aGFuCi0vLyBjcmVhdGluZyBuZXcgb3B0aW1pemF0aW9ucyBiZWNhdXNlIHRoZW4g
dGhlIG9wdGltaXphdGlvbnMgY2FuIHBhcnRpY2lwYXRlIGluIHRoZSBmaXhwb2ludC4gSG93ZXZl
ciwKLS8vIHRoaXMgcGhhc2Ugc2hvdWxkbid0IGJlY29tZSB0b28gZXhwZW5zaXZlLCBzbyBleHBl
bnNpdmUgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgc2VwYXJhdGUuCisvLyBEb2VzIHN0cmVuZ3Ro
IHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXphdGlvbiwgQ0ZHIHNpbXBs
aWZpY2F0aW9uLCBEQ0UsIGFuZCB2ZXJ5CisvLyBzaW1wbGUgQ1NFLiBUaGlzIHBoYXNlIHJ1bnMg
dGhvc2Ugb3B0aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwgb2YgdGhlIHBoYXNlIGlz
IHRvCisvLyBkcmFtYXRpY2FsbHkgcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLiBJ
biB0aGUgZnV0dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGltaXphdGlvbnMKKy8vIHRv
IHRoaXMgcGhhc2UgcmF0aGVyIHRoYW4gY3JlYXRpbmcgbmV3IG9wdGltaXphdGlvbnMgYmVjYXVz
ZSB0aGVuIHRoZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZQorLy8gaW4gdGhlIGZpeHBv
aW50LiBIb3dldmVyLCBiZWNhdXNlIG9mIHRoZSBtYW55IGludGVybG9ja2luZyBvcHRpbWl6YXRp
b25zLCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvCisvLyBhZGQgc29waGlzdGljYXRlZCBvcHRpbWl6
YXRpb25zIHRvIGl0LiBGb3IgdGhhdCByZWFzb24gd2UgaGF2ZSBmdWxsIENTRSBpbiBhIGRpZmZl
cmVudCBwaGFzZSwgZm9yCisvLyBleGFtcGxlLgogCiBib29sIHJlZHVjZVN0cmVuZ3RoKFByb2Nl
ZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw2ICszNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWQUxJ
REFURSghKHZhbHVlLT5lZmZlY3RzKCkud3JpdGVzICYmIHZhbHVlLT5rZXkoKSksICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTU0MTMpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisy
MDE2LTAxLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMg
c2hvdWxkIGhhdmUgbG9hZCBlbGltaW5hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMjg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSSBuZWVkZWQgYSB3YXkgdG8gdHJhY2sgc2V0cyBvZiByYW5n
ZXMsIHdoZXJlIHRoZXJlIGlzIGEgaGlnaCBsaWtlbGlob29kIHRoYXQgYWxsIG9mIHRoZQorICAg
ICAgICByYW5nZXMgb3ZlcmxhcC4gU28gSSBjcmVhdGVkIFJhbmdlU2V0LiBJdCdzIGEgdXN1YWxs
eS1zb3J0ZWQgbGlzdCBvZiBjb2FsZXNjZWQgcmFuZ2VzLgorICAgICAgICBQcmFjdGljYWxseSB0
aGlzIG1lYW5zIHRoYXQgcmlnaHQgbm93LCBGVEwgQjMgd2lsbCBlbmQgdXAgd2l0aCB0d28ga2lu
ZHMgb2YgcmFuZ2Ugc2V0czogYSBzZXQKKyAgICAgICAgdGhhdCBqdXN0IGNvbnRhaW5zIHRvcCBh
bmQgYSBzZXQgdGhhdCBjb250YWlucyBub3RoaW5nLiBJbiB0aGUgZnV0dXJlLCBtb3N0IHNldHMg
d2lsbCBlaXRoZXIKKyAgICAgICAgYmUgdG9wIG9mIGVtcHR5IGJ1dCBzb21lIG9mIHRoZW0gd2ls
bCBjb250YWluIGEgaGFuZGZ1bCBvZiBvdGhlciB0aGluZ3MuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6bGVmdFNoaWZ0V2l0aFNh
dHVyYXRpb24pOgorICAgICAgICAoV1RGOjpub25FbXB0eVJhbmdlc092ZXJsYXApOgorICAgICAg
ICAoV1RGOjpyYW5nZXNPdmVybGFwKToKKyAgICAgICAgKiB3dGYvUmFuZ2VTZXQuaDogQWRkZWQu
CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpSYW5nZVNldCk6CisgICAgICAgIChXVEY6OlJhbmdl
U2V0Ojp+UmFuZ2VTZXQpOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6YWRkKToKKyAgICAgICAg
KFdURjo6UmFuZ2VTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6Om92ZXJs
YXBzKToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdURjo6UmFu
Z2VTZXQ6OmR1bXApOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6ZHVtcFJhdyk6CisgICAgICAg
IChXVEY6OlJhbmdlU2V0Ojpjb21wYWN0KToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6Om92ZXJs
YXBzTm9uRW1wdHkpOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6c3Vic3VtZXNOb25FbXB0eSk6
CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpmaW5kUmFuZ2UpOgorICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoSW1wbCk6CisgICAgICAgIChX
VEY6OmJpbmFyeVNlYXJjaCk6CisgICAgICAgIChXVEY6OnRyeUJpbmFyeVNlYXJjaCk6CisgICAg
ICAgIChXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoKToKKwogMjAxNi0wMS0xOSAgQWRhIENo
YW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVu
YWJsZSBWSURFT19QUkVTRU5UQVRJT05fTU9ERSBvbiBvdGhlciBDb2NvYSBwbGF0Zm9ybXMuCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
NTQwOSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8q
IFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CiAJCTBG
NDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyog
RG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxl
U29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY3MjVDQUMx
QzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQu
aCAqLzsgfTsKIAkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjQxQjc0
NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkwRjgyNEE2OTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNGMTkw
MDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CkBAIC0zMzIsNiArMzMzLDcgQEAKIAkJMEYz
NTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmtpbmdMb3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJraW5nTG90Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3Niw2ICs4NzgsNyBAQAogCQkJ
CUE4QTQ3MkZCMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCUE4
QTQ3MkZDMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJG
RDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBGNzI1Q0FC
MUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkw
MDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8sCiAJCQkJQThBNDcyRkUxNTFBODI1QjAwNDEyM0ZG
IC8qIFJlZEJsYWNrVHJlZS5oICovLAogCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBS
ZWYuaCAqLywKQEAgLTExNjgsNiArMTE3MSw3IEBACiAJCQkJQThBNDczQjQxNTFBODI1QjAwNDEy
M0ZGIC8qIGZhc3QtZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBQzUxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0M0MTUx
QTgyNUIwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIzOEZE
N0JEMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5RDMzNjExNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDczQjYxNTFBODI1QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2EuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTQwOSkKKysr
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3
Nyw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIFJBTVNpemUuaAogICAgIFJhbmRvbU51bWJlci5o
CiAgICAgUmFuZG9tTnVtYmVyU2VlZC5oCisgICAgUmFuZ2VTZXQuaAogICAgIFJhd1BvaW50ZXIu
aAogICAgIFJlZEJsYWNrVHJlZS5oCiAgICAgUmVmLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJl
dmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDE5LDYgKzQxOSwyMCBAQCBpbmxpbmUgVCBsZWZ0U2hpZnRXaXRoU2F0dXJhdGlv
bihUIHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gQ2hlY2sgaWYgdHdvIHJhbmdl
cyBvdmVybGFwIGFzc3VtaW5nIHRoYXQgbmVpdGhlciByYW5nZSBpcyBlbXB0eS4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBub25FbXB0eVJhbmdlc092ZXJsYXAoVCBsZWZ0TWlu
LCBUIGxlZnRNYXgsIFQgcmlnaHRNaW4sIFQgcmlnaHRNYXgpCit7CisgICAgQVNTRVJUKGxlZnRN
aW4gPCBsZWZ0TWF4KTsKKyAgICBBU1NFUlQocmlnaHRNaW4gPCByaWdodE1heCk7CisgICAgCisg
ICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVmdE1heCA+IHJpZ2h0TWluKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+
IGxlZnRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwog
Ly8gUGFzcyByYW5nZXMgd2l0aCB0aGUgbWluIGJlaW5nIGluY2x1c2l2ZSBhbmQgdGhlIG1heCBi
ZWluZyBleGNsdXNpdmUuIEZvciBleGFtcGxlLCB0aGlzIHNob3VsZAogLy8gcmV0dXJuIGZhbHNl
OgogLy8KQEAgLTQzNCwxMiArNDQ4LDggQEAgaW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxl
ZnRNaW4sIFQgbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHJpZ2h0TWluID09IHJp
Z2h0TWF4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGxlZnRNaW4gPD0g
cmlnaHRNaW4gJiYgbGVmdE1heCA+IHJpZ2h0TWluKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+IGxlZnRNaW4pCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBub25FbXB0eVJh
bmdlc092ZXJsYXAobGVmdE1pbiwgbGVmdE1heCwgcmlnaHRNaW4sIHJpZ2h0TWF4KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RG
X1JhbmdlU2V0X2gKKyNkZWZpbmUgV1RGX1JhbmdlU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIEEgUmFuZ2VTZXQgaXMgYSBzZXQgb2YgbnVtZXJpY2FsIHJhbmdlcy4gQSB2YWx1ZSBiZWxv
bmdzIHRvIHRoZSBzZXQgaWYgaXQgaXMgd2l0aGluIGFueSBvZiB0aGUKKy8vIHJhbmdlcy4gQSBy
YW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQgaWYgZXZlcnkgdmFsdWUgaW4gdGhlIHJhbmdlIGJlbG9u
Z3MgdG8gdGhlIHNldC4gQSByYW5nZSBvdmVybGFwcworLy8gdGhlIHNldCBpZiBhbnkgdmFsdWUg
aW4gdGhlIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNldC4gWW91IGNhbiBhZGQgcmFuZ2VzIGFuZCBx
dWVyeSByYW5nZQorLy8gbWVtYmVyc2hpcC4gVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlz
IGEgbGlzdCBvZiByYW5nZXMgdGhhdCBnZXRzIHBlcmlvZGljYWxseSBjb21wYWN0ZWQuIFRoaXMK
Ky8vIHJlcHJlc2VudGF0aW9uIGlzIG9wdGltYWwgc28gbG9uZyBhcyB0aGUgbnVtYmVyIG9mIGRp
c3RpbmN0IHJhbmdlcyB0ZW5kcyB0byBiZSBzbWFsbCwgYW5kIHRoZQorLy8gbnVtYmVyIG9mIHJh
bmdlIHNldHMgdGVuZHMgdG8gYmUgc21hbGwgYXMgd2VsbC4gVGhpcyB3b3JrcyByZWFzb25hYmx5
IHdlbGwgaW4gYSBidW5jaCBvZiBjb21waWxlcgorLy8gYWxnb3JpdGhtcywgd2hlcmUgdGhlIHRv
cCByYW5nZSBlbmRzIHVwIGJlaW5nIHVzZWQgYSBsb3QuCisvLworLy8gVGhlIGluaXRpYWwgdXNl
ciBvZiB0aGlzIGlzIEpTQzo6QjM6OkhlYXBSYW5nZSwgd2hpY2ggaXMgdXNlZCB0byBwZXJmb3Jt
IGFsaWFzIGFuYWx5c2lzLiBZb3UgY2FuCisvLyBtb2RlbCBuZXcgdXNlcnMgb24gdGhhdCBjbGFz
cy4gQmFzaWNhbGx5LCB5b3UgbmVlZCB0byBkZWZpbmU6CisvLworLy8gVDo6VHlwZSAtIHRoZSB0
eXBlIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSByYW5nZS4gSGVhcFJhbmdlIHVzZXMgdW5zaWduZWQu
CisvLyBUKFQ6OlR5cGUgYmVnaW4sIFQ6OlR5cGUgZW5kKSAtIGNvbnN0cnVjdCBhIG5ldyByYW5n
ZS4KKy8vIFQ6OlR5cGUgVDo6YmVnaW4oKSBjb25zdCAtIGluc3RhbmNlIG1ldGhvZCBnaXZpbmcg
dGhlIGluY2x1c2l2ZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlLgorLy8gVDo6VHlwZSBUOjplbmQo
KSBjb25zdCAtIGluc3RhbmNlIG1ldGhvZCBnaXZpbmcgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhl
IHJhbmdlLgorLy8gdm9pZCBUOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QgLSBzb21lIGtpbmQg
b2YgZHVtcGluZy4KKwordGVtcGxhdGU8dHlwZW5hbWUgUmFuZ2VUeXBlPgorY2xhc3MgUmFuZ2VT
ZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgUmFuZ2VUeXBlIFJhbmdlOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgUmFuZ2U6OlR5cGUgVHlwZTsKKworICAgIFJhbmdlU2V0KCkKKyAgICB7CisgICAg
fQorCisgICAgflJhbmdlU2V0KCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBhZGQoY29uc3Qg
UmFuZ2UmIHJhbmdlKQorICAgIHsKKyAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2Uu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBXZSBleHBl
Y3QgdGhlIHJhbmdlIHNldCB0byBiZWNvbWUgdG9wIGluIGEgbG90IG9mIGNhc2VzLiBXZSBhbHNv
IGV4cGVjdCB0aGUgc2FtZSByYW5nZSB0bworICAgICAgICAvLyBiZSBhZGRlZCByZXBlYXRlZGx5
LiBUaGF0J3Mgd2h5IHRoaXMgaXMgaGVyZS4KKyAgICAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5
KCkgJiYgc3Vic3VtZXNOb25FbXB0eShtX3Jhbmdlcy5sYXN0KCksIHJhbmdlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOworCisgICAgICAgIC8v
IFdlIGFwcGVuZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50
ZWVkIG5vdCB0byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUo
KSArIDEgPCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBtX3Jhbmdlcy5hcHBl
bmQocmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9y
YW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgY29tcGFjdCgpOworICAgIH0KKworICAgIGJv
b2wgY29udGFpbnMoY29uc3QgUmFuZ2UmIHJhbmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2UuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGZpbmRSYW5nZShyYW5nZSk7Cisg
ICAgICAgIGlmIChpbmRleCArIDEgPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAgICAgICYmIHN1
YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXggKyAxXSwgcmFuZ2UpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpbmRleCA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAg
ICAgICAgJiYgc3Vic3VtZXNOb25FbXB0eShtX3Jhbmdlc1tpbmRleF0sIHJhbmdlKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
ZGV4IC0gMSkgPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAgICAgICYmIHN1YnN1bWVzTm9uRW1w
dHkobV9yYW5nZXNbaW5kZXggLSAxXSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFJhbmdlJiByYW5nZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChyYW5nZS5iZWdpbigpID09
IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBmaW5kUmFuZ2UocmFuZ2UpOworICAgICAgICBpZiAoaW5kZXgg
KyAxIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBvdmVybGFwc05vbkVtcHR5KG1f
cmFuZ2VzW2luZGV4ICsgMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoaW5kZXggPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAgICAgICYmIG92ZXJsYXBz
Tm9uRW1wdHkobV9yYW5nZXNbaW5kZXhdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCAtIDEpIDwgbV9yYW5n
ZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBvdmVybGFwc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4
IC0gMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3Jhbmdl
cy5jbGVhcigpOworICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0
PFJhbmdlU2V0Kj4odGhpcyktPmNvbXBhY3QoKTsKKyAgICAgICAgb3V0LnByaW50KGxpc3REdW1w
KG1fcmFuZ2VzKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wUmF3KFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoInsiLCBsaXN0RHVtcChtX3Jhbmdlcyks
ICIsIGlzQ29tcGFjdCA9ICIsIG1faXNDb21wYWN0LCAifSIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGNvbXBhY3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb21wYWN0KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1faXNDb21wYWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fcmFuZ2VzLmJlZ2luKCks
IG1fcmFuZ2VzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBSYW5nZSYgYSwgY29uc3Qg
UmFuZ2UmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmJlZ2luKCkgPCBi
LmJlZ2luKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICB1bnNpZ25lZCBzcmNJbmRleCA9
IDE7CisgICAgICAgIHVuc2lnbmVkIGRzdEluZGV4ID0gMTsKKyAgICAgICAgUmFuZ2UqIGxhc3RS
YW5nZSA9ICZtX3Jhbmdlc1swXTsKKyAgICAgICAgd2hpbGUgKHNyY0luZGV4IDwgbV9yYW5nZXMu
c2l6ZSgpKSB7CisgICAgICAgICAgICBSYW5nZSByYW5nZSA9IG1fcmFuZ2VzW3NyY0luZGV4Kytd
OworICAgICAgICAgICAgQVNTRVJUKHJhbmdlLmJlZ2luKCkgPj0gbGFzdFJhbmdlLT5iZWdpbigp
KTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5lbmQoKSA8PSBsYXN0UmFuZ2UtPmVuZCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPD0g
bGFzdFJhbmdlLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICpsYXN0UmFuZ2UgPSBSYW5nZShs
YXN0UmFuZ2UtPmJlZ2luKCksIHJhbmdlLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghb3ZlcmxhcCgqbGFzdFJhbmdl
LCByYW5nZSkpOworICAgICAgICAgICAgbGFzdFJhbmdlID0gJm1fcmFuZ2VzW2RzdEluZGV4Kytd
OworICAgICAgICAgICAgKmxhc3RSYW5nZSA9IHJhbmdlOworICAgICAgICB9CisgICAgICAgIG1f
cmFuZ2VzLnJlc2l6ZShkc3RJbmRleCk7CisKKyAgICAgICAgbV9pc0NvbXBhY3QgPSB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBvdmVybGFwc05vbkVtcHR5KGNvbnN0IFJhbmdl
JiBhLCBjb25zdCBSYW5nZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBub25FbXB0eVJhbmdl
c092ZXJsYXAoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCksIGIuZW5kKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIHN1YnN1bWVzTm9uRW1wdHkoY29uc3QgUmFuZ2UmIGEsIGNvbnN0
IFJhbmdlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuYmVnaW4oKSA8PSBiLmJlZ2luKCkg
JiYgYS5lbmQoKSA+PSBiLmVuZCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZpbmRSYW5nZShj
b25zdCBSYW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PFJhbmdl
U2V0Kj4odGhpcyktPmNvbXBhY3QoKTsKKworICAgICAgICBjb25zdCBSYW5nZSogZm91bmQgPSBh
cHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxjb25zdCBSYW5nZSwgVHlwZT4oCisgICAgICAgICAgICBt
X3JhbmdlcywgbV9yYW5nZXMuc2l6ZSgpLCByYW5nZS5iZWdpbigpLCBbJl0gKGNvbnN0IFJhbmdl
KiByYW5nZSkgLT4gVHlwZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlLT5iZWdpbigp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1
cm4gVUlOVF9NQVg7CisKKyAgICAgICAgcmV0dXJuIGZvdW5kIC0gbV9yYW5nZXMuYmVnaW4oKTsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPFJhbmdlLCA4PiBtX3JhbmdlczsKKyAgICBib29sIG1f
aXNDb21wYWN0IHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UmFuZ2VTZXQ7CisKKyNlbmRpZiAvLyBXVEZfUmFuZ2VTZXRfaAorCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRM
aWJFeHRyYXMuaAkocmV2aXNpb24gMTk1NDA5KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0
cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMjEyLDcgKzIxMiw3IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5h
cnlTZWFyY2hJbXAKICAgICAgICAgQVNTRVJUKG1vZGUgIT0gS2V5TXVzdEJlUHJlc2VudEluQXJy
YXkgfHwgc2l6ZSk7CiAgICAgfQogICAgIAotICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQ
cmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKKyAgICBpZiAobW9kZSAhPSBLZXlNdXN0QmVQcmVzZW50
SW5BcnJheSAmJiAhc2l6ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgQXJyYXlFbGVt
ZW50VHlwZSogcmVzdWx0ID0gJmFycmF5W29mZnNldF07CkBAIC0yMzAsMzggKzIzMCwzOCBAQCBp
bmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wCiAKIC8vIElmIHRoZSBlbGVt
ZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYW5kIGJlaGF2
ZSBsaWtlIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoIGluIHJlbGVhc2UgYnVpbGRzLgogdGVtcGxh
dGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUg
QXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUq
IGJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXks
IEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5
cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewog
ICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFy
cmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXpl
LCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAvLyBSZXR1cm4gemVybyBpZiB0aGUgZWxlbWVudCBp
cyBub3QgZm91bmQuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+Ci1pbmxp
bmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNp
emVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChBcnJheVR5cGUm
IGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJh
Y3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJy
YXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlNaWdodE5v
dEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiAv
LyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhlIGxlZnQsIG9yIHRoZSBy
aWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVuIGZvdW5kLgogdGVtcGxh
dGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUg
QXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUq
IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBL
ZXlUeXBlIGtleSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQoraW5saW5l
IEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJy
YXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtl
eSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVs
ZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIFJldHVybkFkamFjZW50
RWxlbWVudElmS2V5SXNOb3RQcmVzZW50PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsK
IH0KIAogLy8gVmFyaWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0LgogdGVtcGxhdGU8
dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJy
YXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJp
bmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBr
ZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVs
ZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGNv
bnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQog
dGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVu
dFR5cGUqIHRyeUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6
ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lu
bGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBh
cnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0
S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5
RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5TWlnaHROb3RC
ZVByZXNlbnRJbkFycmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwgc2l6ZSwga2V5
LCBleHRyYWN0S2V5KTsKIH0KIHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4K
LWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChjb25zdCBB
cnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0
cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hp
bWF0ZUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5
VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7
CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwg
QXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJl
c2VudD4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtl
eSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269472</attachid>
            <date>2016-01-21 11:05:52 -0800</date>
            <delta_ts>2016-01-21 11:08:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54962</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDE2LTAxLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgbG9hZCBlbGltaW5hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMjg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcGxldGUgR0NTRSBwYXNzIHRo
YXQgaW5jbHVkZXMgbG9hZCBlbGltaW5hdGlvbi4gSXQgd291bGQgaGF2ZSBiZWVuIHN1cGVyIGhh
cmQKKyAgICAgICAgdG8gbWFrZSB0aGlzIHdvcmsgYXMgcGFydCBvZiB0aGUgcmVkdWNlU3RyZW5n
dGgoKSBmaXhwb2ludCwgc2luY2UgR0NTRSBuZWVkcyB0byBhbmFseXplCisgICAgICAgIGNvbnRy
b2wgZmxvdyBhbmQgcmVkdWNlU3RyZW5ndGgoKSBpcyBtZXNzaW5nIHdpdGggY29udHJvbCBmbG93
LiBTbywgSSBkaWQgYSBjb21wcm9taXNlOiBJCisgICAgICAgIGZhY3RvcmVkIG91dCB0aGUgcHVy
ZSBDU0UgdGhhdCByZWR1Y2VTdHJlbmd0aCgpIHdhcyBhbHJlYWR5IGRvaW5nLCBhbmQgbm93IHdl
IGhhdmU6CisKKyAgICAgICAgLSByZWR1Y2VTdHJlbmd0aCgpIHN0aWxsIGRvZXMgcHVyZSBDU0Ug
dXNpbmcgdGhlIG5ldyBQdXJlQ1NFIGhlbHBlci4KKworICAgICAgICAtIGVsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zKCkgaXMgYSBzZXBhcmF0ZSBwaGFzZSB0aGF0IGRvZXMgZ2VuZXJhbCBD
U0UuIEl0IHVzZXMgdGhlCisgICAgICAgICAgUHVyZUNTRSBoZWxwZXIgZm9yIHB1cmUgdmFsdWVz
IGFuZCBkb2VzIGl0cyBvd24gc3BlY2lhbCB0aGluZyBmb3IgbWVtb3J5IHZhbHVlcy4KKyAgICAg
ICAgCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lc24ndCBoZWxwIGFueSBiZW5jaG1h
cmsgcmlnaHQgbm93LiBJdCBkb2Vzbid0IGh1cnQgYW55dGhpbmcsIGVpdGhlciwKKyAgICAgICAg
YW5kIGl0J3MgbGlrZWx5IHRvIGJlY29tZSBhIGJpZ2dlciBwYXktb2ZmIG9uY2Ugd2UgaW1wbGVt
ZW50IG90aGVyIGZlYXR1cmVzLCBsaWtlIG1hcHBpbmcKKyAgICAgICAgRlRMJ3MgYWJzdHJhY3Qg
aGVhcHMgb250byBCMydzIGhlYXAgcmFuZ2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkIzOjplbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyk6CisgICAgICAg
ICogYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6
OkhlYXBSYW5nZSk6CisgICAgICAgICogYjMvQjNJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKEpT
Qzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
c2VydGlvblNldDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6OmNv
ZGUpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0OjphcHBlbmRJbnNlcnRpb24pOgor
ICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1B1cmVDU0UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlB1cmVDU0U6OlB1cmVDU0UpOgorICAgICAgICAo
SlNDOjpCMzo6UHVyZUNTRTo6flB1cmVDU0UpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6cHJvY2Vzcyk6CisgICAgICAgICog
YjMvQjNQdXJlQ1NFLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguaDoKKyAgICAgICAgKiBiMy9CM1ZhbGlk
YXRlLmNwcDoKKwogMjAxNi0wMS0xOSAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVuYWJsZSBWSURFT19QUkVTRU5UQVRJT05fTU9E
RSBvbiBvdGhlciBDb2NvYSBwbGF0Zm9ybXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzRGF0YVNlY3Rpb24uY3BwCiAgICAgYjMvQjNEdXBs
aWNhdGVUYWlscy5jcHAKICAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKICAgICBiMy9CM0ZpeFNTQS5jcHAKICAgICBiMy9CM0Zv
bGRQYXRoQ29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCkBAIC0xNDIs
NiArMTQzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1BoYXNlU2Nv
cGUuY3BwCiAgICAgYjMvQjNQaGlDaGlsZHJlbi5jcHAKICAgICBiMy9CM1Byb2NlZHVyZS5jcHAK
KyAgICBiMy9CM1B1cmVDU0UuY3BwCiAgICAgYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAog
ICAgIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCiAgICAgYjMvQjNTU0FDYWxjdWxhdG9yLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDEwIEBACiAJCTBGNzAyNUFBMTcxNEIw
RkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAv
KiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2
RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgfTsKKwkJMEY3MjVD
QTcxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTMx
QzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICov
OyB9OworCQkwRjcyNUNBODFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuaCAqLzsgfTsKKwkJMEY3MjVDQTkxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLzsgfTsKKwkJMEY3MjVDQUExQzUw
M0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5o
ICovOyB9OwogCQkwRjcyNUNBRjFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcy
NUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi87IH07CiAJ
CTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0M0JBQTE2Qjg4
MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjAxNjUxQzY2MTAwQTgwQUZFIC8qIEFS
TTY0RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKQEAgLTI2NDcsNiArMjY1MSwxMCBAQAogCQkwRjcw
MjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIx
NkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHBhdGggPSBiMy9CM0Vs
aW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHVyZUNTRS5jcHA7IHBhdGggPSBiMy9CM1B1cmVDU0UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NF
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHVyZUNTRS5oOyBwYXRoID0g
YjMvQjNQdXJlQ1NFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FEMUM1
MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBwYXRoID0gYjMv
QjNGb2xkUGF0aENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzI1Q0FFMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuaDsgcGF0aCA9IGIz
L0IzRm9sZFBhdGhDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzgzLDYgKzQ3OTEsOCBAQAogCQkJCTBGNkI4QUQ3MUM0RUREQTIwMDk2OTA1
MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggKi8sCiAJCQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0
IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZFQzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIz
RWZmZWN0cy5oICovLAorCQkJCTBGNzI1Q0EzMUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQkwRjcyNUNBNDFDNTAzREVEMDBBRDk0
M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oICovLAogCQkJCTBGNkI4QUUw
MUM0RUZFMTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCiAJCQkJMEY2QjhBRTExQzRFRkUx
NzAwOTY5MDUyIC8qIEIzRml4U1NBLmggKi8sCiAJCQkJMEY3MjVDQUQxQzUwNkQzQjAwQUQ5NDNB
IC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovLApAQCAtNDgzNCw2ICs0ODQ0LDggQEAKIAkJ
CQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAogCQkJCTBG
RUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAogCQkJCTBGRUM4NEUz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLywKKwkJCQkwRjcyNUNBNjFDNTAz
REVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi8sCiAJCQkJNDM0MjJBNjQxQzE2MjIxRTAwRTJF
Qjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgKi8sCiAJCQkJNDM0MjJBNjUxQzE2MjIx
RTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKQEAgLTczMjQsNiArNzMz
Niw3IEBACiAJCQkJMEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTM0MTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhE
RjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzI1
Q0E4MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmlu
YWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyog
REZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVE
MDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzY1MSw2ICs3
NjY0LDcgQEAKIAkJCQlBMUQ3OTJGRDFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFENzkyRkYxQjQzODY0QjAwNDUxNkY1IC8qIEludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkUxQjQ1
QTM2MDAwQ0M3RjZDIC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNzI1Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9y
bWF0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdG
NkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1NTE2NUQzMUJERjBCOUUwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODAsNiArODg5NCw3IEBACiAJCQkJQTdEOUEyOTQxN0Ew
QkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmls
aXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzI1Q0E3MUM1MDNERUQwMEFEOTQzQSAv
KiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzMjgsNiAr
OTM0Myw3IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBCNzkxOTgxQzAyNEEyOTAwMjQ4MUUyIC8qIEdl
bmVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBOTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5
MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzcz
MDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9SYW5nZVNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCB0cmVhdCBQYXRjaHBvaW50cyB3aXRoIGEgbm9uLWVtcHR5IHNldCBv
ZiByZWFkcyBhcyBhICJtZW1vcnkgdmFsdWUiIGFuZCBzb21laG93CisvLyBlbGltaW5hdGUgcmVk
dW5kYW50IG9uZXMuIFdlIHdvdWxkIG5lZWQgc29tZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgdHdv
IHBhdGNocG9pbnRzIGFyZSByZXBsYWNhYmxlLgorLy8gSXQgZG9lc24ndCBzZWVtIHJpZ2h0IHRv
IHVzZSB0aGUgcmVhZHMgc2V0IGZvciB0aGlzLiBXZSBjb3VsZCB1c2UgdGhlIGdlbmVyYXRvciwg
YnV0IHRoYXQgZmVlbHMKKy8vIGxhbWUgYmVjYXVzZSB0aGUgRlRMIHdpbGwgcHJldHR5IG11Y2gg
dXNlIGEgdW5pcXVlIGdlbmVyYXRvciBmb3IgZWFjaCBwYXRjaHBvaW50IGV2ZW4gd2hlbiB0d28K
Ky8vIHBhdGNocG9pbnRzIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIGZhciBhcyBDU0Ugd291
bGQgYmUgY29uY2VybmVkLiBXZSBjb3VsZCBpbnZlbnQgc29tZXRoaW5nCisvLyBsaWtlIGEgInZh
bHVlIElEIiBmb3IgcGF0Y2hwb2ludHMuIEJ5IGRlZmF1bHQsIGVhY2ggb25lIGdldHMgYSB1bmlx
dWUgdmFsdWUgSUQsIGJ1dCBGVEwgY291bGQgZm9yY2UKKy8vIHNvbWUgcGF0Y2hwb2ludHMgdG8g
c2hhcmUgdGhlIHNhbWUgb25lIGFzIGEgc2lnbmFsIHRoYXQgdGhleSB3aWxsIHJldHVybiB0aGUg
c2FtZSB2YWx1ZSBpZiBleGVjdXRlZAorLy8gaW4gdGhlIHNhbWUgaGVhcCB3aXRoIHRoZSBzYW1l
IGlucHV0cy4KKwordHlwZWRlZiBWZWN0b3I8TWVtb3J5VmFsdWUqLCAxPiBNZW1vcnlNYXRjaGVz
OworCitzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdy
aXRlczsKKyAgICAKKyAgICAvLyBNYXBzIGFuIGFkZHJlc3MgYmFzZSB0byBhbGwgb2YgdGhlIE1l
bW9yeVZhbHVlcyB0aGF0IGRvIHRoaW5ncyB0byBpdC4gQWZ0ZXIgd2UncmUgZG9uZQorICAgIC8v
IHByb2Nlc3NpbmcgYSBtYXAsIHRoaXMgdGVsbHMgdXMgdGhlIHZhbHVlcyBhdCB0YWlsLgorICAg
IEhhc2hNYXA8VmFsdWUqLCBNZW1vcnlNYXRjaGVzPiBtZW1vcnlWYWx1ZXM7Cit9OworCitjbGFz
cyBDU0UgeworcHVibGljOgorICAgIENTRShQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9w
cm9jKHByb2MpCisgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2MuZG9taW5hdG9ycygpKQorICAg
ICAgICAsIG1faW1wdXJlQmxvY2tEYXRhKHByb2Muc2l6ZSgpKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIENTRTpcbiIs
IG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwor
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAg
IG1fZGF0YSA9ICZtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICBtX2RhdGEtPndyaXRlcy5hZGQo
dmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9kYXRhID0gJm1faW1wdXJl
QmxvY2tEYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIG1fd3JpdGVzLmNsZWFyKCk7CisgICAgICAg
ICAgICBmb3IgKG1faW5kZXggPSAwOyBtX2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGJsb2NrLT5hdChtX2luZGV4KTsKKyAgICAg
ICAgICAgICAgICBwcm9jZXNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2No
YW5nZWQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsK
KyAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOworCisgICAgICAgIGlmICht
X3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCBtX2RvbWluYXRvcnMpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIW1fdmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpOworICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChI
ZWFwUmFuZ2Ugd3JpdGVzID0gbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKKyAgICAgICAgICAg
IGNsb2JiZXIod3JpdGVzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVt
b3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCisgICAgICAgICAgICBwcm9jZXNzTWVt
b3J5KG1lbW9yeSk7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKEhlYXBSYW5nZSB3cml0ZXMp
CisgICAgeworICAgICAgICBtX3dyaXRlcy5hZGQod3JpdGVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fZGF0YS0+bWVtb3J5VmFsdWVzLnJlbW92ZUlmKAorICAgICAgICAgICAgWyZdIChIYXNoTWFw
PFZhbHVlKiwgTWVtb3J5TWF0Y2hlcz46OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogbWVtb3J5KSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1vcnktPnJhbmdlKCkub3ZlcmxhcHMod3JpdGVz
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgcHJv
Y2Vzc01lbW9yeShNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAgICAgICAgVmFsdWUqIHB0
ciA9IG1lbW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgIEhlYXBSYW5nZSByYW5nZSA9IG1lbW9y
eS0+cmFuZ2UoKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnktPm9mZnNldCgpOwor
ICAgICAgICBUeXBlIHR5cGUgPSBtZW1vcnktPnR5cGUoKTsKKworICAgICAgICAvLyBGSVhNRTog
RW1wb3dlciB0aGlzIHRvIGluc2VydCBtb3JlIGNhc3RzIGFuZCBzaGlmdHMuIEZvciBleGFtcGxl
LCBhIExvYWQ4IGNvdWxkIG1hdGNoIGEKKyAgICAgICAgLy8gU3RvcmUgYW5kIG1hc2sgdGhlIHJl
c3VsdC4gWW91IGNvdWxkIGV2ZW4gaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcmUo
QHZhbHVlLCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBMb2FkOFooQHB0ciwgb2Zmc2V0
ID0gMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hpY2ggY291bGQgYmUgdHVybmVkIGludG8g
c29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcmUoQHZhbHVl
LCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBaU2hyKEB2YWx1ZSwgMTYpCisgICAgICAg
IAorICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2Fk
OFo6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1ZSgK
KyAgICAgICAgICAgICAgICBwdHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQo
KSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9wY29k
ZSgpID09IExvYWQ4WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlOCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAocmVwbGFjZShtYXRjaCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQ4UzogeworICAgICAg
ICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAgICAg
ICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9mZnNldAor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDhT
IHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4KTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaC0+b3Bj
b2RlKCkgPT0gU3RvcmU4KSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNFeHQ4LCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9y
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTG9hZDE2
WjogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAor
ICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgp
ID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2Rl
KCkgPT0gTG9hZDE2WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlMTYpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkMTZTOiB7CisgICAg
ICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAg
ICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2Fk
MTZTIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gt
Pm9wY29kZSgpID09IFN0b3JlMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgU0V4
dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVl
KG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
TG9hZDogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVl
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9mZnNldCgp
ICE9IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRp
ZGF0ZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9y
ZSAmJiBjYW5kaWRhdGUtPmNoaWxkKDApLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9y
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU4
OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhTG9nKCJCYWQgbWVtb3J5IHZh
bHVlOiAiLCBkZWVwRHVtcChtX3Byb2MsIG1fdmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgcmVwbGFjZShNZW1vcnlWYWx1ZSogbWF0Y2gpCisgICAgewor
ICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWxpbWluYXRpbmcgIiwgKm1fdmFs
dWUsICIgZHVlIHRvICIsICptYXRjaCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAobWF0
Y2gtPmlzU3RvcmUoKSkKKyAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bWF0Y2gtPmNoaWxkKDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoTWVtb3J5
VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIGFkZE1lbW9yeVZhbHVlKCptX2RhdGEsIG1l
bW9yeSk7CisgICAgfQorCisgICAgdm9pZCBhZGRNZW1vcnlWYWx1ZShJbXB1cmVCbG9ja0RhdGEm
IGRhdGEsIE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBNZW1vcnlNYXRjaGVz
JiBtYXRjaGVzID0KKyAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzLmFkZChtZW1vcnktPmxh
c3RDaGlsZCgpLCBNZW1vcnlNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBp
ZiAobWF0Y2hlcy5jb250YWlucyhtZW1vcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG1lbW9yeSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRmlsdGVyPgorICAgIE1lbW9yeVZhbHVlKiBmaW5kTWVtb3J5VmFsdWUoVmFsdWUqIHB0ciwg
SGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKKyAgICB7CisgICAgICAgIGF1
dG8gZmluZCA9IFsmXSAoSW1wdXJlQmxvY2tEYXRhJiBkYXRhKSAtPiBNZW1vcnlWYWx1ZSogewor
ICAgICAgICAgICAgYXV0byBpdGVyID0gZGF0YS5tZW1vcnlWYWx1ZXMuZmluZChwdHIpOworICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gZGF0YS5tZW1vcnlWYWx1ZXMuZW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUgOiBpdGVyLT52YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9OworCisgICAgICAgIGlm
IChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKCptX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOworCisgICAgICAgIGlmIChtX3dyaXRlcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OworCisgICAgICAgIHdvcmts
aXN0LnB1c2hBbGwobV9ibG9jay0+cHJlZGVjZXNzb3JzKCkpOworCisgICAgICAgIE1lbW9yeVZh
bHVlKiBtYXRjaCA9IG51bGxwdHI7CisKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIHNlZW5MaXN0LmFwcGVuZChibG9jayk7
CisKKyAgICAgICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRh
W2Jsb2NrXTsKKworICAgICAgICAgICAgaWYgKG1fZG9taW5hdG9ycy5zdHJpY3RseURvbWluYXRl
cyhibG9jaywgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGZpbmQoZGF0YSk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJsYXBz
KHJhbmdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
d29ya2xpc3QucHVzaEFsbChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKKyAgICAgICAgICAgIGFkZE1lbW9y
eVZhbHVlKG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXSwgbWF0Y2gpOworICAgICAgICBhZGRNZW1v
cnlWYWx1ZShtYXRjaCk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNoOworICAgIH0KKworICAgIHR5
cGVkZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworICAgIFByb2NlZHVyZSYgbV9wcm9j
OworCisgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0b3JzOworICAgIFB1cmVDU0UgbV9wdXJlQ1NF
OworICAgIAorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1
cmVCbG9ja0RhdGE7CisKKyAgICBJbXB1cmVCbG9ja0RhdGEqIG1fZGF0YTsKKyAgICBSYW5nZVNl
dDxIZWFwUmFuZ2U+IG1fd3JpdGVzOworCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOworCisgICAgSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworCisgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9j
LCAiZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMiKTsKKworICAgIENTRSBjc2UocHJvYyk7
CisgICAgcmV0dXJuIGNzZS5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zX2gKKyNkZWZpbmUgQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9uc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgZ2xvYmFsIGNvbW1v
biBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIChDU0UpIG92ZXIgYm90aCBwdXJlIHZhbHVlcyBh
bmQgbWVtb3J5IGFjY2Vzc2VzLgorCitib29sIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNp
b24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzRHVwbGljYXRlVGFpbHMuaCIK
KyNpbmNsdWRlICJCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCiAjaW5jbHVkZSAi
QjNGb2xkUGF0aENvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzTGVnYWxpemVNZW1vcnlPZmZzZXRz
LmgiCiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgpAQCAtNzgsNiArNzksNyBAQCB2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgaWYgKG9wdExldmVsID49IDEp
IHsKICAgICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICByZWR1
Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBkdXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOwogICAg
ICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgSGVhcFJh
bmdlIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7CisgICAgCiAgICAgSGVh
cFJhbmdlKCkKICAgICAgICAgOiBtX2JlZ2luKDApCiAgICAgICAgICwgbV9lbmQoMCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zZXJ0aW9ucy5pc0VtcHR5KCk7IH0KKwog
ICAgIFByb2NlZHVyZSYgY29kZSgpIHsgcmV0dXJuIG1fcHJvY2VkdXJlOyB9CiAKICAgICB2b2lk
IGFwcGVuZEluc2VydGlvbihjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMTk1NDA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNiArNjAsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5n
ZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CiAKKyAgICBib29sIGlzU3RvcmUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJl
Q1NFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NF
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzUHVyZUNTRS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRG9taW5h
dG9ycy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK1B1cmVDU0U6OlB1cmVDU0UoKQoreworfQorCitQdXJlQ1NFOjp+UHVyZUNTRSgp
Cit7Cit9CisKK3ZvaWQgUHVyZUNTRTo6Y2xlYXIoKQoreworICAgIG1fbWFwLmNsZWFyKCk7Cit9
CisKK2Jvb2wgUHVyZUNTRTo6cHJvY2VzcyhWYWx1ZSogdmFsdWUsIERvbWluYXRvcnMmIGRvbWlu
YXRvcnMpCit7CisgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAgIGlm
ICgha2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBNYXRjaGVzJiBtYXRjaGVzID0g
bV9tYXAuYWRkKGtleSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBmb3IgKFZh
bHVlKiBtYXRjaCA6IG1hdGNoZXMpIHsKKyAgICAgICAgaWYgKGRvbWluYXRvcnMuZG9taW5hdGVz
KG1hdGNoLT5vd25lciwgdmFsdWUtPm93bmVyKSkgeworICAgICAgICAgICAgdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkobWF0Y2gpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtYXRjaGVzLmFwcGVuZCh2YWx1ZSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUHVyZUNTRV9oCisjZGVmaW5lIEIzUHVyZUNTRV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIFZhbHVlOworCit0eXBlZGVm
IFZlY3RvcjxWYWx1ZSosIDE+IE1hdGNoZXM7CisKKy8vIFRoaXMgaXMgYSByZXVzYWJsZSB1dGls
aXR5IGZvciBkb2luZyBwdXJlIENTRS4gWW91IGNhbiB1c2UgaXQgdG8gZG8gcHVyZSBDU0Ugb24g
YSBwcm9ncmFtIGJ5IGp1c3QKKy8vIHByb2NlZWRpbmcgaW4gb3JkZXIgYW4gY2FsbGluZyBwcm9j
ZXNzKCkuCitjbGFzcyBQdXJlQ1NFIHsKK3B1YmxpYzoKKyAgICBQdXJlQ1NFKCk7CisgICAgflB1
cmVDU0UoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgcHJvY2VzcyhWYWx1ZSos
IERvbWluYXRvcnMmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxWYWx1ZUtleSwgTWF0
Y2hlcz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1B1cmVDU0VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIK
ICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIK
ICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKQEAgLTI4
Miw3ICsyODMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3du
ZXJzKCk7CiAgICAgICAgICAgICBtX2RvbWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMoKTsg
Ly8gUmVjb21wdXRlIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIG1fcHVyZVZhbHVlcy5jbGVh
cigpOworICAgICAgICAgICAgbV9wdXJlQ1NFLmNsZWFyKCk7CiAKICAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpAQCAtMTc1MSwzMSArMTc1Miw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHJlcGxhY2VJZlJlZHVuZGFudCgpCiAgICAgewotICAgICAgICAvLyBUaGlz
IGRvZXMgYSB2ZXJ5IHNpbXBsZSBwdXJlIGRvbWluYXRvci1iYXNlZCBDU0UuIEluIHRoZSBmdXR1
cmUgd2UgY291bGQgYWRkIGxvYWQgZWxpbWluYXRpb24uCi0gICAgICAgIC8vIE5vdGUgdGhhdCBp
ZiB3ZSBhZGQgbG9hZCBlbGltaW5hdGlvbiwgd2Ugc2hvdWxkIGRvIGl0IGJ5IGRpcmVjdGx5IG1h
dGNoaW5nIGxvYWQgYW5kIHN0b3JlCi0gICAgICAgIC8vIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBWYWx1ZUtleSBmdW5jdGlvbmFsaXR5IG9yIGRvaW5nIERGRyBIZWFwTG9jYXRp
b24tbGlrZQotICAgICAgICAvLyB0aGluZ3MuCi0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHdp
dGggaWRlbnRpdGllcy4gV2Uga2lsbCB0aG9zZSBhbnl3YXkuCi0gICAgICAgIGlmIChtX3ZhbHVl
LT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBW
YWx1ZUtleSBrZXkgPSBtX3ZhbHVlLT5rZXkoKTsKLSAgICAgICAgaWYgKCFrZXkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWUqLCAxPiYgbWF0Y2hl
cyA9IG1fcHVyZVZhbHVlcy5hZGQoa2V5LCBWZWN0b3I8VmFsdWUqLCAxPigpKS5pdGVyYXRvci0+
dmFsdWU7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHZhbHVlIHdpdGggd2hpY2hldmVyIHZh
bHVlIGRvbWluYXRlcyB1cy4KLSAgICAgICAgZm9yIChWYWx1ZSogbWF0Y2ggOiBtYXRjaGVzKSB7
Ci0gICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobWF0Y2gtPm93bmVyLCBt
X3ZhbHVlLT5vd25lcikpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG1hdGNoKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1h
dGNoZXMuYXBwZW5kKG1fdmFsdWUpOworICAgICAgICBtX2NoYW5nZWQgfD0gbV9wdXJlQ1NFLnBy
b2Nlc3MobV92YWx1ZSwgKm1fZG9taW5hdG9ycyk7CiAgICAgfQogCiAgICAgdm9pZCBzaW1wbGlm
eUNGRygpCkBAIC0yMDQyLDcgKzIwMTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5k
ZXggeyAwIH07CiAgICAgVmFsdWUqIG1fdmFsdWUgeyBudWxscHRyIH07CiAgICAgRG9taW5hdG9y
cyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OwotICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3Rv
cjxWYWx1ZSosIDE+PiBtX3B1cmVWYWx1ZXM7CisgICAgUHVyZUNTRSBtX3B1cmVDU0U7CiAgICAg
Ym9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jaGFuZ2VkQ0ZHIHsgZmFsc2Ug
fTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBEb2VzIHN0cmVu
Z3RoIHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXphdGlvbiwgQ0ZHIHNp
bXBsaWZpY2F0aW9uLCBEQ0UsIGFuZCBDU0UuIFRoaXMKLS8vIHBoYXNlIHJ1bnMgdGhvc2Ugb3B0
aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwgb2YgdGhlIHBoYXNlIGlzIHRvIGRyYW1h
dGljYWxseSByZWR1Y2UgdGhlCi0vLyBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLiBJbiB0aGUgZnV0
dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGltaXphdGlvbnMgdG8gdGhpcyBwaGFzZSBy
YXRoZXIgdGhhbgotLy8gY3JlYXRpbmcgbmV3IG9wdGltaXphdGlvbnMgYmVjYXVzZSB0aGVuIHRo
ZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZSBpbiB0aGUgZml4cG9pbnQuIEhvd2V2ZXIs
Ci0vLyB0aGlzIHBoYXNlIHNob3VsZG4ndCBiZWNvbWUgdG9vIGV4cGVuc2l2ZSwgc28gZXhwZW5z
aXZlIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIHNlcGFyYXRlLgorLy8gRG9lcyBzdHJlbmd0aCBy
ZWR1Y3Rpb24sIGNvbnN0YW50IGZvbGRpbmcsIGNhbm9uaWNhbGl6YXRpb24sIENGRyBzaW1wbGlm
aWNhdGlvbiwgRENFLCBhbmQgdmVyeQorLy8gc2ltcGxlIENTRS4gVGhpcyBwaGFzZSBydW5zIHRo
b3NlIG9wdGltaXphdGlvbnMgdG8gZml4cG9pbnQuIFRoZSBnb2FsIG9mIHRoZSBwaGFzZSBpcyB0
bworLy8gZHJhbWF0aWNhbGx5IHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGUgY29kZS4gSW4g
dGhlIGZ1dHVyZSwgaXQncyBwcmVmZXJhYmxlIHRvIGFkZCBvcHRpbWl6YXRpb25zCisvLyB0byB0
aGlzIHBoYXNlIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvcHRpbWl6YXRpb25zIGJlY2F1c2Ug
dGhlbiB0aGUgb3B0aW1pemF0aW9ucyBjYW4gcGFydGljaXBhdGUKKy8vIGluIHRoZSBmaXhwb2lu
dC4gSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgbWFueSBpbnRlcmxvY2tpbmcgb3B0aW1pemF0aW9u
cywgaXQgY2FuIGJlIGRpZmZpY3VsdCB0bworLy8gYWRkIHNvcGhpc3RpY2F0ZWQgb3B0aW1pemF0
aW9ucyB0byBpdC4gRm9yIHRoYXQgcmVhc29uIHdlIGhhdmUgZnVsbCBDU0UgaW4gYSBkaWZmZXJl
bnQgcGhhc2UsIGZvcgorLy8gZXhhbXBsZS4KIAogYm9vbCByZWR1Y2VTdHJlbmd0aChQcm9jZWR1
cmUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNiArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVkFMSURB
VEUoISh2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcyAmJiB2YWx1ZS0+a2V5KCkpLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDEzKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAx
Ni0wMS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzIHNo
b3VsZCBoYXZlIGxvYWQgZWxpbWluYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEkgbmVlZGVkIGEgd2F5IHRvIHRyYWNrIHNldHMgb2YgcmFuZ2Vz
LCB3aGVyZSB0aGVyZSBpcyBhIGhpZ2ggbGlrZWxpaG9vZCB0aGF0IGFsbCBvZiB0aGUKKyAgICAg
ICAgcmFuZ2VzIG92ZXJsYXAuIFNvIEkgY3JlYXRlZCBSYW5nZVNldC4gSXQncyBhIHVzdWFsbHkt
c29ydGVkIGxpc3Qgb2YgY29hbGVzY2VkIHJhbmdlcy4KKyAgICAgICAgUHJhY3RpY2FsbHkgdGhp
cyBtZWFucyB0aGF0IHJpZ2h0IG5vdywgRlRMIEIzIHdpbGwgZW5kIHVwIHdpdGggdHdvIGtpbmRz
IG9mIHJhbmdlIHNldHM6IGEgc2V0CisgICAgICAgIHRoYXQganVzdCBjb250YWlucyB0b3AgYW5k
IGEgc2V0IHRoYXQgY29udGFpbnMgbm90aGluZy4gSW4gdGhlIGZ1dHVyZSwgbW9zdCBzZXRzIHdp
bGwgZWl0aGVyCisgICAgICAgIGJlIHRvcCBvZiBlbXB0eSBidXQgc29tZSBvZiB0aGVtIHdpbGwg
Y29udGFpbiBhIGhhbmRmdWwgb2Ygb3RoZXIgdGhpbmdzLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChXVEY6OmxlZnRTaGlmdFdpdGhTYXR1
cmF0aW9uKToKKyAgICAgICAgKFdURjo6bm9uRW1wdHlSYW5nZXNPdmVybGFwKToKKyAgICAgICAg
KFdURjo6cmFuZ2VzT3ZlcmxhcCk6CisgICAgICAgICogd3RmL1JhbmdlU2V0Lmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpSYW5nZVNldDo6UmFuZ2VTZXQpOgorICAgICAgICAoV1RGOjpSYW5nZVNl
dDo6flJhbmdlU2V0KToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmFkZCk6CisgICAgICAgIChX
VEY6OlJhbmdlU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpvdmVybGFw
cyk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OlJhbmdl
U2V0OjpkdW1wKToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmR1bXBSYXcpOgorICAgICAgICAo
V1RGOjpSYW5nZVNldDo6Y29tcGFjdCk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpvdmVybGFw
c05vbkVtcHR5KToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OnN1YnN1bWVzTm9uRW1wdHkpOgor
ICAgICAgICAoV1RGOjpSYW5nZVNldDo6ZmluZFJhbmdlKToKKyAgICAgICAgKiB3dGYvU3RkTGli
RXh0cmFzLmg6CisgICAgICAgIChXVEY6OmJpbmFyeVNlYXJjaEltcGwpOgorICAgICAgICAoV1RG
OjpiaW5hcnlTZWFyY2gpOgorICAgICAgICAoV1RGOjp0cnlCaW5hcnlTZWFyY2gpOgorICAgICAg
ICAoV1RGOjphcHByb3hpbWF0ZUJpbmFyeVNlYXJjaCk6CisKIDIwMTYtMDEtMTkgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlbmFi
bGUgVklERU9fUFJFU0VOVEFUSU9OX01PREUgb24gb3RoZXIgQ29jb2EgcGxhdGZvcm1zLgpJbmRl
eDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjQ1
NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERv
bWluYXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3
MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNzI1Q0FDMUM1
MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0Lmgg
Ki87IH07CiAJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQz
QTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAw
MkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87
IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwpAQCAtMzMyLDYgKzMzMyw3IEBACiAJCTBGMzUw
MTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtp
bmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzYsNiArODc4LDcgQEAKIAkJCQlB
OEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0
NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjcyNUNBQjFD
NTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCUE4QTQ3MkZFMTUxQTgyNUIwMDQxMjNGRiAv
KiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVm
LmggKi8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3M0I0MTUxQTgyNUIwMDQxMjNG
RiAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUM1MTU0RkIyMkUwMDk4
M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNDNDE1MUE4
MjVCMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3MjVDQUMx
QzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMzhGRDdC
RDE2ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOUQzMzYxMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3M0I2MTUxQTgyNUIwMDQxMjNGRiAvKiBmaXhlZC1kdG9hLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTU0MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIuaAog
ICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2ludGVyLmgK
ICAgICBSZWRCbGFja1RyZWUuaAogICAgIFJlZi5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZp
c2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMywgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxOSw2ICs0MTksMjAgQEAgaW5saW5lIFQgbGVmdFNoaWZ0V2l0aFNhdHVyYXRpb24o
VCB2YWx1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIENoZWNrIGlmIHR3byByYW5nZXMg
b3ZlcmxhcCBhc3N1bWluZyB0aGF0IG5laXRoZXIgcmFuZ2UgaXMgZW1wdHkuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbm9uRW1wdHlSYW5nZXNPdmVybGFwKFQgbGVmdE1pbiwg
VCBsZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4KQoreworICAgIEFTU0VSVChsZWZ0TWlu
IDwgbGVmdE1heCk7CisgICAgQVNTRVJUKHJpZ2h0TWluIDwgcmlnaHRNYXgpOworICAgIAorICAg
IGlmIChsZWZ0TWluIDw9IHJpZ2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBs
ZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8v
IFBhc3MgcmFuZ2VzIHdpdGggdGhlIG1pbiBiZWluZyBpbmNsdXNpdmUgYW5kIHRoZSBtYXggYmVp
bmcgZXhjbHVzaXZlLiBGb3IgZXhhbXBsZSwgdGhpcyBzaG91bGQKIC8vIHJldHVybiBmYWxzZToK
IC8vCkBAIC00MzQsMTIgKzQ0OCw4IEBAIGlubGluZSBib29sIHJhbmdlc092ZXJsYXAoVCBsZWZ0
TWluLCBUIGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChyaWdodE1pbiA9PSByaWdo
dE1heCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChsZWZ0TWluIDw9IHJp
Z2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBsZWZ0TWluKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbm9uRW1wdHlSYW5n
ZXNPdmVybGFwKGxlZnRNaW4sIGxlZnRNYXgsIHJpZ2h0TWluLCByaWdodE1heCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9S
YW5nZVNldF9oCisjZGVmaW5lIFdURl9SYW5nZVNldF9oCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBIFJhbmdlU2V0IGlzIGEgc2V0IG9mIG51bWVyaWNhbCByYW5nZXMuIEEgdmFsdWUgYmVsb25n
cyB0byB0aGUgc2V0IGlmIGl0IGlzIHdpdGhpbiBhbnkgb2YgdGhlCisvLyByYW5nZXMuIEEgcmFu
Z2UgYmVsb25ncyB0byB0aGUgc2V0IGlmIGV2ZXJ5IHZhbHVlIGluIHRoZSByYW5nZSBiZWxvbmdz
IHRvIHRoZSBzZXQuIEEgcmFuZ2Ugb3ZlcmxhcHMKKy8vIHRoZSBzZXQgaWYgYW55IHZhbHVlIGlu
IHRoZSByYW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQuIFlvdSBjYW4gYWRkIHJhbmdlcyBhbmQgcXVl
cnkgcmFuZ2UKKy8vIG1lbWJlcnNoaXAuIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBh
IGxpc3Qgb2YgcmFuZ2VzIHRoYXQgZ2V0cyBwZXJpb2RpY2FsbHkgY29tcGFjdGVkLiBUaGlzCisv
LyByZXByZXNlbnRhdGlvbiBpcyBvcHRpbWFsIHNvIGxvbmcgYXMgdGhlIG51bWJlciBvZiBkaXN0
aW5jdCByYW5nZXMgdGVuZHMgdG8gYmUgc21hbGwsIGFuZCB0aGUKKy8vIG51bWJlciBvZiByYW5n
ZSBzZXRzIHRlbmRzIHRvIGJlIHNtYWxsIGFzIHdlbGwuIFRoaXMgd29ya3MgcmVhc29uYWJseSB3
ZWxsIGluIGEgYnVuY2ggb2YgY29tcGlsZXIKKy8vIGFsZ29yaXRobXMsIHdoZXJlIHRoZSB0b3Ag
cmFuZ2UgZW5kcyB1cCBiZWluZyB1c2VkIGEgbG90LgorLy8KKy8vIFRoZSBpbml0aWFsIHVzZXIg
b2YgdGhpcyBpcyBKU0M6OkIzOjpIZWFwUmFuZ2UsIHdoaWNoIGlzIHVzZWQgdG8gcGVyZm9ybSBh
bGlhcyBhbmFseXNpcy4gWW91IGNhbgorLy8gbW9kZWwgbmV3IHVzZXJzIG9uIHRoYXQgY2xhc3Mu
IEJhc2ljYWxseSwgeW91IG5lZWQgdG8gZGVmaW5lOgorLy8KKy8vIFQ6OlR5cGUgLSB0aGUgdHlw
ZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgcmFuZ2UuIEhlYXBSYW5nZSB1c2VzIHVuc2lnbmVkLgor
Ly8gVChUOjpUeXBlIGJlZ2luLCBUOjpUeXBlIGVuZCkgLSBjb25zdHJ1Y3QgYSBuZXcgcmFuZ2Uu
CisvLyBUOjpUeXBlIFQ6OmJlZ2luKCkgY29uc3QgLSBpbnN0YW5jZSBtZXRob2QgZ2l2aW5nIHRo
ZSBpbmNsdXNpdmUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZS4KKy8vIFQ6OlR5cGUgVDo6ZW5kKCkg
Y29uc3QgLSBpbnN0YW5jZSBtZXRob2QgZ2l2aW5nIHRoZSBleGNsdXNpdmUgZW5kIG9mIHRoZSBy
YW5nZS4KKy8vIHZvaWQgVDo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IC0gc29tZSBraW5kIG9m
IGR1bXBpbmcuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJhbmdlVHlwZT4KK2NsYXNzIFJhbmdlU2V0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFJhbmdlVHlwZSBSYW5nZTsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFJhbmdlOjpUeXBlIFR5cGU7CisKKyAgICBSYW5nZVNldCgpCisgICAgeworICAgIH0K
KworICAgIH5SYW5nZVNldCgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYWRkKGNvbnN0IFJh
bmdlJiByYW5nZSkKKyAgICB7CisgICAgICAgIGlmIChyYW5nZS5iZWdpbigpID09IHJhbmdlLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZXhwZWN0
IHRoZSByYW5nZSBzZXQgdG8gYmVjb21lIHRvcCBpbiBhIGxvdCBvZiBjYXNlcy4gV2UgYWxzbyBl
eHBlY3QgdGhlIHNhbWUgcmFuZ2UgdG8KKyAgICAgICAgLy8gYmUgYWRkZWQgcmVwZWF0ZWRseS4g
VGhhdCdzIHdoeSB0aGlzIGlzIGhlcmUuCisgICAgICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgp
ICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXMubGFzdCgpLCByYW5nZSkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbV9pc0NvbXBhY3QgPSBmYWxzZTsKKworICAgICAgICAvLyBX
ZSBhcHBlbmQgd2l0aG91dCBjb21wYWN0aW5nIG9ubHkgaWYgZG9pbmcgc28gaXMgZ3VhcmFudGVl
ZCBub3QgdG8gcmVzaXplIHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkg
KyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgeworICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5k
KHJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcmFu
Z2VzLmFwcGVuZChyYW5nZSk7CisgICAgICAgIGNvbXBhY3QoKTsKKyAgICB9CisKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IFJhbmdlJiByYW5nZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChy
YW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBmaW5kUmFuZ2UocmFuZ2UpOworICAg
ICAgICBpZiAoaW5kZXggKyAxIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBzdWJz
dW1lc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4ICsgMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoaW5kZXggPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAg
ICAgICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXhdLCByYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCAtIDEpIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBzdWJzdW1lc05vbkVtcHR5
KG1fcmFuZ2VzW2luZGV4IC0gMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBS
YW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSBy
YW5nZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gZmluZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKGluZGV4ICsg
MSA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jh
bmdlc1tpbmRleCArIDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBvdmVybGFwc05v
bkVtcHR5KG1fcmFuZ2VzW2luZGV4XSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXggLSAxKSA8IG1fcmFuZ2Vz
LnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jhbmdlc1tpbmRleCAt
IDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9yYW5nZXMu
Y2xlYXIoKTsKKyAgICAgICAgbV9pc0NvbXBhY3QgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxS
YW5nZVNldCo+KHRoaXMpLT5jb21wYWN0KCk7CisgICAgICAgIG91dC5wcmludChsaXN0RHVtcCht
X3JhbmdlcykpOworICAgIH0KKworICAgIHZvaWQgZHVtcFJhdyhQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7IiwgbGlzdER1bXAobV9yYW5nZXMpLCAi
LCBpc0NvbXBhY3QgPSAiLCBtX2lzQ29tcGFjdCwgIn0iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjb21wYWN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzQ29tcGFjdCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9yYW5nZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX3Jhbmdlcy5iZWdpbigpLCBt
X3Jhbmdlcy5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJh
bmdlJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5iZWdpbigpIDwgYi5i
ZWdpbigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgdW5zaWduZWQgc3JjSW5kZXggPSAx
OworICAgICAgICB1bnNpZ25lZCBkc3RJbmRleCA9IDE7CisgICAgICAgIFJhbmdlKiBsYXN0UmFu
Z2UgPSAmbV9yYW5nZXNbMF07CisgICAgICAgIHdoaWxlIChzcmNJbmRleCA8IG1fcmFuZ2VzLnNp
emUoKSkgeworICAgICAgICAgICAgUmFuZ2UgcmFuZ2UgPSBtX3Jhbmdlc1tzcmNJbmRleCsrXTsK
KyAgICAgICAgICAgIEFTU0VSVChyYW5nZS5iZWdpbigpID49IGxhc3RSYW5nZS0+YmVnaW4oKSk7
CisgICAgICAgICAgICBpZiAocmFuZ2UuZW5kKCkgPD0gbGFzdFJhbmdlLT5lbmQoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5iZWdpbigpIDw9IGxh
c3RSYW5nZS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAqbGFzdFJhbmdlID0gUmFuZ2UobGFz
dFJhbmdlLT5iZWdpbigpLCByYW5nZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW92ZXJsYXBzTm9uRW1wcnkoKmxh
c3RSYW5nZSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIGxhc3RSYW5nZSA9ICZtX3Jhbmdlc1tkc3RJ
bmRleCsrXTsKKyAgICAgICAgICAgICpsYXN0UmFuZ2UgPSByYW5nZTsKKyAgICAgICAgfQorICAg
ICAgICBtX3Jhbmdlcy5yZXNpemUoZHN0SW5kZXgpOworCisgICAgICAgIG1faXNDb21wYWN0ID0g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgb3ZlcmxhcHNOb25FbXB0eShjb25z
dCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCisgICAgeworICAgICAgICByZXR1cm4gbm9uRW1w
dHlSYW5nZXNPdmVybGFwKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpLCBiLmVuZCgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdWJzdW1lc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBh
LCBjb25zdCBSYW5nZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmJlZ2luKCkgPD0gYi5i
ZWdpbigpICYmIGEuZW5kKCkgPj0gYi5lbmQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmaW5k
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxSYW5nZVNldCo+KHRoaXMpLT5jb21wYWN0KCk7CisKKyAgICAgICAgY29uc3QgUmFuZ2UqIGZv
dW5kID0gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8Y29uc3QgUmFuZ2UsIFR5cGU+KAorICAgICAg
ICAgICAgbV9yYW5nZXMsIG1fcmFuZ2VzLnNpemUoKSwgcmFuZ2UuYmVnaW4oKSwgWyZdIChjb25z
dCBSYW5nZSogcmFuZ2UpIC0+IFR5cGUgeworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZS0+
YmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIFVJTlRfTUFYOworCisgICAgICAgIHJldHVybiBmb3VuZCAtIG1fcmFuZ2VzLmJl
Z2luKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxSYW5nZSwgOD4gbV9yYW5nZXM7CisgICAg
Ym9vbCBtX2lzQ29tcGFjdCB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OlJhbmdlU2V0OworCisjZW5kaWYgLy8gV1RGX1JhbmdlU2V0X2gKKwpJbmRleDog
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0
ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDEzIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTIxMiw3ICsyMTIsNyBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlw
ZSogYmluYXJ5U2VhcmNoSW1wCiAgICAgICAgIEFTU0VSVChtb2RlICE9IEtleU11c3RCZVByZXNl
bnRJbkFycmF5IHx8IHNpemUpOwogICAgIH0KICAgICAKLSAgICBpZiAobW9kZSA9PSBLZXlNaWdo
dE5vdEJlUHJlc2VudEluQXJyYXkgJiYgIXNpemUpCisgICAgaWYgKG1vZGUgIT0gS2V5TXVzdEJl
UHJlc2VudEluQXJyYXkgJiYgIXNpemUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEFy
cmF5RWxlbWVudFR5cGUqIHJlc3VsdCA9ICZhcnJheVtvZmZzZXRdOwpAQCAtMjMwLDM4ICsyMzAs
MzggQEAgaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaEltcAogCiAvLyBJZiB0
aGUgZWxlbWVudCBpcyBub3QgZm91bmQsIGNyYXNoIGlmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFu
ZCBiZWhhdmUgbGlrZSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaCBpbiByZWxlYXNlIGJ1aWxkcy4K
IHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5
cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJy
YXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXpl
LCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXko
KSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlU
eXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU11c3RCZVByZXNlbnRJbkFycmF5PihhcnJh
eSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIAogLy8gUmV0dXJuIHplcm8gaWYgdGhlIGVs
ZW1lbnQgaXMgbm90IGZvdW5kLgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwg
dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5
PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFy
cmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goQXJy
YXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5
JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJ
bXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5
TWlnaHROb3RCZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsK
IH0KIAogLy8gUmV0dXJuIHRoZSBlbGVtZW50IHRoYXQgaXMgZWl0aGVyIHRvIHRoZSBsZWZ0LCBv
ciB0aGUgcmlnaHQsIG9mIHdoZXJlIHRoZSBlbGVtZW50IHdvdWxkIGhhdmUgYmVlbiBmb3VuZC4K
IHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qg
c2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkK
K2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5
cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4
dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8
QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5B
ZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJlc2VudD4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFj
dEtleSk7CiB9CiAKIC8vIFZhcmlhbnRzIG9mIHRoZSBhYm92ZSB0aGF0IHVzZSBjb25zdC4KIHRl
bXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVu
YW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRU
eXBlKiBiaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtl
eVR5cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUg
QXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNp
emVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRU
eXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU11c3RCZVByZXNlbnRJbkFy
cmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5
KTsKIH0KIHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5
cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJh
eUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6
ZV90IHNpemUsIEtleVR5cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5
KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5
VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1w
bDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU1p
Z2h0Tm90QmVQcmVzZW50SW5BcnJheT4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNp
emUsIGtleSwgZXh0cmFjdEtleSk7CiB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRU
eXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJh
Y3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYXBwcm94aW1hdGVCaW5hcnlTZWFyY2go
Y29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBFeHRyYWN0
S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSog
YXBwcm94aW1hdGVCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJ
c05vdFByZXNlbnQ+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4
dHJhY3RLZXkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269473</attachid>
            <date>2016-01-21 11:08:40 -0800</date>
            <delta_ts>2016-01-21 11:46:01 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54962</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDE2LTAxLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgbG9hZCBlbGltaW5hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMjg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgY29tcGxldGUgR0NTRSBwYXNzIHRo
YXQgaW5jbHVkZXMgbG9hZCBlbGltaW5hdGlvbi4gSXQgd291bGQgaGF2ZSBiZWVuIHN1cGVyIGhh
cmQKKyAgICAgICAgdG8gbWFrZSB0aGlzIHdvcmsgYXMgcGFydCBvZiB0aGUgcmVkdWNlU3RyZW5n
dGgoKSBmaXhwb2ludCwgc2luY2UgR0NTRSBuZWVkcyB0byBhbmFseXplCisgICAgICAgIGNvbnRy
b2wgZmxvdyBhbmQgcmVkdWNlU3RyZW5ndGgoKSBpcyBtZXNzaW5nIHdpdGggY29udHJvbCBmbG93
LiBTbywgSSBkaWQgYSBjb21wcm9taXNlOiBJCisgICAgICAgIGZhY3RvcmVkIG91dCB0aGUgcHVy
ZSBDU0UgdGhhdCByZWR1Y2VTdHJlbmd0aCgpIHdhcyBhbHJlYWR5IGRvaW5nLCBhbmQgbm93IHdl
IGhhdmU6CisKKyAgICAgICAgLSByZWR1Y2VTdHJlbmd0aCgpIHN0aWxsIGRvZXMgcHVyZSBDU0Ug
dXNpbmcgdGhlIG5ldyBQdXJlQ1NFIGhlbHBlci4KKworICAgICAgICAtIGVsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zKCkgaXMgYSBzZXBhcmF0ZSBwaGFzZSB0aGF0IGRvZXMgZ2VuZXJhbCBD
U0UuIEl0IHVzZXMgdGhlCisgICAgICAgICAgUHVyZUNTRSBoZWxwZXIgZm9yIHB1cmUgdmFsdWVz
IGFuZCBkb2VzIGl0cyBvd24gc3BlY2lhbCB0aGluZyBmb3IgbWVtb3J5IHZhbHVlcy4KKyAgICAg
ICAgCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lc24ndCBoZWxwIGFueSBiZW5jaG1h
cmsgcmlnaHQgbm93LiBJdCBkb2Vzbid0IGh1cnQgYW55dGhpbmcsIGVpdGhlciwKKyAgICAgICAg
YW5kIGl0J3MgbGlrZWx5IHRvIGJlY29tZSBhIGJpZ2dlciBwYXktb2ZmIG9uY2Ugd2UgaW1wbGVt
ZW50IG90aGVyIGZlYXR1cmVzLCBsaWtlIG1hcHBpbmcKKyAgICAgICAgRlRMJ3MgYWJzdHJhY3Qg
aGVhcHMgb250byBCMydzIGhlYXAgcmFuZ2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkIzOjplbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyk6CisgICAgICAg
ICogYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6
OkhlYXBSYW5nZSk6CisgICAgICAgICogYjMvQjNJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKEpT
Qzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
c2VydGlvblNldDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6OmNv
ZGUpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0OjphcHBlbmRJbnNlcnRpb24pOgor
ICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1B1cmVDU0UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlB1cmVDU0U6OlB1cmVDU0UpOgorICAgICAgICAo
SlNDOjpCMzo6UHVyZUNTRTo6flB1cmVDU0UpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6cHJvY2Vzcyk6CisgICAgICAgICog
YjMvQjNQdXJlQ1NFLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguaDoKKyAgICAgICAgKiBiMy9CM1ZhbGlk
YXRlLmNwcDoKKwogMjAxNi0wMS0xOSAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVuYWJsZSBWSURFT19QUkVTRU5UQVRJT05fTU9E
RSBvbiBvdGhlciBDb2NvYSBwbGF0Zm9ybXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzRGF0YVNlY3Rpb24uY3BwCiAgICAgYjMvQjNEdXBs
aWNhdGVUYWlscy5jcHAKICAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKICAgICBiMy9CM0ZpeFNTQS5jcHAKICAgICBiMy9CM0Zv
bGRQYXRoQ29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCkBAIC0xNDIs
NiArMTQzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1BoYXNlU2Nv
cGUuY3BwCiAgICAgYjMvQjNQaGlDaGlsZHJlbi5jcHAKICAgICBiMy9CM1Byb2NlZHVyZS5jcHAK
KyAgICBiMy9CM1B1cmVDU0UuY3BwCiAgICAgYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAog
ICAgIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCiAgICAgYjMvQjNTU0FDYWxjdWxhdG9yLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDEwIEBACiAJCTBGNzAyNUFBMTcxNEIw
RkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAv
KiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2
RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgfTsKKwkJMEY3MjVD
QTcxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTMx
QzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICov
OyB9OworCQkwRjcyNUNBODFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuaCAqLzsgfTsKKwkJMEY3MjVDQTkxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLzsgfTsKKwkJMEY3MjVDQUExQzUw
M0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5o
ICovOyB9OwogCQkwRjcyNUNBRjFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcy
NUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi87IH07CiAJ
CTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0M0JBQTE2Qjg4
MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjAxNjUxQzY2MTAwQTgwQUZFIC8qIEFS
TTY0RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKQEAgLTI2NDcsNiArMjY1MSwxMCBAQAogCQkwRjcw
MjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIx
NkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHA7IHBhdGggPSBiMy9CM0Vs
aW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHVyZUNTRS5jcHA7IHBhdGggPSBiMy9CM1B1cmVDU0UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NF
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHVyZUNTRS5oOyBwYXRoID0g
YjMvQjNQdXJlQ1NFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FEMUM1
MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBwYXRoID0gYjMv
QjNGb2xkUGF0aENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzI1Q0FFMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuaDsgcGF0aCA9IGIz
L0IzRm9sZFBhdGhDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzgzLDYgKzQ3OTEsOCBAQAogCQkJCTBGNkI4QUQ3MUM0RUREQTIwMDk2OTA1
MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggKi8sCiAJCQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0
IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZFQzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIz
RWZmZWN0cy5oICovLAorCQkJCTBGNzI1Q0EzMUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQkwRjcyNUNBNDFDNTAzREVEMDBBRDk0
M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oICovLAogCQkJCTBGNkI4QUUw
MUM0RUZFMTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCiAJCQkJMEY2QjhBRTExQzRFRkUx
NzAwOTY5MDUyIC8qIEIzRml4U1NBLmggKi8sCiAJCQkJMEY3MjVDQUQxQzUwNkQzQjAwQUQ5NDNB
IC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovLApAQCAtNDgzNCw2ICs0ODQ0LDggQEAKIAkJ
CQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAogCQkJCTBG
RUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAogCQkJCTBGRUM4NEUz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRjcyNUNB
NTFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCAqLywKKwkJCQkwRjcyNUNBNjFDNTAz
REVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi8sCiAJCQkJNDM0MjJBNjQxQzE2MjIxRTAwRTJF
Qjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgKi8sCiAJCQkJNDM0MjJBNjUxQzE2MjIx
RTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKQEAgLTczMjQsNiArNzMz
Niw3IEBACiAJCQkJMEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTM0MTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhE
RjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzI1
Q0E4MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmlu
YWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyog
REZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVE
MDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtNzY1MSw2ICs3
NjY0LDcgQEAKIAkJCQlBMUQ3OTJGRDFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFENzkyRkYxQjQzODY0QjAwNDUxNkY1IC8qIEludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkUxQjQ1
QTM2MDAwQ0M3RjZDIC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNzI1Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9y
bWF0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdG
NkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1NTE2NUQzMUJERjBCOUUwMDNCNzVDMSAvKiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODAsNiArODg5NCw3IEBACiAJCQkJQTdEOUEyOTQxN0Ew
QkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmls
aXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzI1Q0E3MUM1MDNERUQwMEFEOTQzQSAv
KiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YzMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzMjgsNiAr
OTM0Myw3IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBCNzkxOTgxQzAyNEEyOTAwMjQ4MUUyIC8qIEdl
bmVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjcyNUNBOTFDNTAzREVE
MDBBRDk0M0EgLyogQjNQdXJlQ1NFLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5
MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzcz
MDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNF
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1B1cmVDU0UuaCIKKyNpbmNsdWRlICJCM1ZhbHVlS2V5
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9SYW5nZVNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCB0cmVhdCBQYXRjaHBvaW50cyB3aXRoIGEgbm9uLWVtcHR5IHNldCBv
ZiByZWFkcyBhcyBhICJtZW1vcnkgdmFsdWUiIGFuZCBzb21laG93CisvLyBlbGltaW5hdGUgcmVk
dW5kYW50IG9uZXMuIFdlIHdvdWxkIG5lZWQgc29tZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgdHdv
IHBhdGNocG9pbnRzIGFyZSByZXBsYWNhYmxlLgorLy8gSXQgZG9lc24ndCBzZWVtIHJpZ2h0IHRv
IHVzZSB0aGUgcmVhZHMgc2V0IGZvciB0aGlzLiBXZSBjb3VsZCB1c2UgdGhlIGdlbmVyYXRvciwg
YnV0IHRoYXQgZmVlbHMKKy8vIGxhbWUgYmVjYXVzZSB0aGUgRlRMIHdpbGwgcHJldHR5IG11Y2gg
dXNlIGEgdW5pcXVlIGdlbmVyYXRvciBmb3IgZWFjaCBwYXRjaHBvaW50IGV2ZW4gd2hlbiB0d28K
Ky8vIHBhdGNocG9pbnRzIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIGZhciBhcyBDU0Ugd291
bGQgYmUgY29uY2VybmVkLiBXZSBjb3VsZCBpbnZlbnQgc29tZXRoaW5nCisvLyBsaWtlIGEgInZh
bHVlIElEIiBmb3IgcGF0Y2hwb2ludHMuIEJ5IGRlZmF1bHQsIGVhY2ggb25lIGdldHMgYSB1bmlx
dWUgdmFsdWUgSUQsIGJ1dCBGVEwgY291bGQgZm9yY2UKKy8vIHNvbWUgcGF0Y2hwb2ludHMgdG8g
c2hhcmUgdGhlIHNhbWUgb25lIGFzIGEgc2lnbmFsIHRoYXQgdGhleSB3aWxsIHJldHVybiB0aGUg
c2FtZSB2YWx1ZSBpZiBleGVjdXRlZAorLy8gaW4gdGhlIHNhbWUgaGVhcCB3aXRoIHRoZSBzYW1l
IGlucHV0cy4KKwordHlwZWRlZiBWZWN0b3I8TWVtb3J5VmFsdWUqLCAxPiBNZW1vcnlNYXRjaGVz
OworCitzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKKyAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdy
aXRlczsKKyAgICAKKyAgICAvLyBNYXBzIGFuIGFkZHJlc3MgYmFzZSB0byBhbGwgb2YgdGhlIE1l
bW9yeVZhbHVlcyB0aGF0IGRvIHRoaW5ncyB0byBpdC4gQWZ0ZXIgd2UncmUgZG9uZQorICAgIC8v
IHByb2Nlc3NpbmcgYSBtYXAsIHRoaXMgdGVsbHMgdXMgdGhlIHZhbHVlcyBhdCB0YWlsLgorICAg
IEhhc2hNYXA8VmFsdWUqLCBNZW1vcnlNYXRjaGVzPiBtZW1vcnlWYWx1ZXM7Cit9OworCitjbGFz
cyBDU0UgeworcHVibGljOgorICAgIENTRShQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9w
cm9jKHByb2MpCisgICAgICAgICwgbV9kb21pbmF0b3JzKHByb2MuZG9taW5hdG9ycygpKQorICAg
ICAgICAsIG1faW1wdXJlQmxvY2tEYXRhKHByb2Muc2l6ZSgpKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIENTRTpcbiIs
IG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwor
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAg
IG1fZGF0YSA9ICZtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICBtX2RhdGEtPndyaXRlcy5hZGQo
dmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9kYXRhID0gJm1faW1wdXJl
QmxvY2tEYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIG1fd3JpdGVzLmNsZWFyKCk7CisgICAgICAg
ICAgICBmb3IgKG1faW5kZXggPSAwOyBtX2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGJsb2NrLT5hdChtX2luZGV4KTsKKyAgICAg
ICAgICAgICAgICBwcm9jZXNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2No
YW5nZWQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsK
KyAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOworCisgICAgICAgIGlmICht
X3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCBtX2RvbWluYXRvcnMpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIW1fdmFsdWUtPmVmZmVjdHMoKS53cml0ZXMpOworICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChI
ZWFwUmFuZ2Ugd3JpdGVzID0gbV92YWx1ZS0+ZWZmZWN0cygpLndyaXRlcykKKyAgICAgICAgICAg
IGNsb2JiZXIod3JpdGVzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogbWVt
b3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkpCisgICAgICAgICAgICBwcm9jZXNzTWVt
b3J5KG1lbW9yeSk7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKEhlYXBSYW5nZSB3cml0ZXMp
CisgICAgeworICAgICAgICBtX3dyaXRlcy5hZGQod3JpdGVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fZGF0YS0+bWVtb3J5VmFsdWVzLnJlbW92ZUlmKAorICAgICAgICAgICAgWyZdIChIYXNoTWFw
PFZhbHVlKiwgTWVtb3J5TWF0Y2hlcz46OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogbWVtb3J5KSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1vcnktPnJhbmdlKCkub3ZlcmxhcHMod3JpdGVz
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgcHJv
Y2Vzc01lbW9yeShNZW1vcnlWYWx1ZSogbWVtb3J5KQorICAgIHsKKyAgICAgICAgVmFsdWUqIHB0
ciA9IG1lbW9yeS0+bGFzdENoaWxkKCk7CisgICAgICAgIEhlYXBSYW5nZSByYW5nZSA9IG1lbW9y
eS0+cmFuZ2UoKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnktPm9mZnNldCgpOwor
ICAgICAgICBUeXBlIHR5cGUgPSBtZW1vcnktPnR5cGUoKTsKKworICAgICAgICAvLyBGSVhNRTog
RW1wb3dlciB0aGlzIHRvIGluc2VydCBtb3JlIGNhc3RzIGFuZCBzaGlmdHMuIEZvciBleGFtcGxl
LCBhIExvYWQ4IGNvdWxkIG1hdGNoIGEKKyAgICAgICAgLy8gU3RvcmUgYW5kIG1hc2sgdGhlIHJl
c3VsdC4gWW91IGNvdWxkIGV2ZW4gaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcmUo
QHZhbHVlLCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBMb2FkOFooQHB0ciwgb2Zmc2V0
ID0gMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hpY2ggY291bGQgYmUgdHVybmVkIGludG8g
c29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcmUoQHZhbHVl
LCBAcHRyLCBvZmZzZXQgPSAwKQorICAgICAgICAvLyBaU2hyKEB2YWx1ZSwgMTYpCisgICAgICAg
IAorICAgICAgICBzd2l0Y2ggKG1lbW9yeS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBMb2Fk
OFo6IHsKKyAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGZpbmRNZW1vcnlWYWx1ZSgK
KyAgICAgICAgICAgICAgICBwdHIsIHJhbmdlLCBbJl0gKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLT5vZmZzZXQo
KSA9PSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYW5kaWRhdGUtPm9wY29k
ZSgpID09IExvYWQ4WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlOCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAocmVwbGFjZShtYXRjaCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBhZGRNZW1vcnlWYWx1ZShtZW1vcnkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExvYWQ4UzogeworICAgICAg
ICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAorICAgICAgICAgICAg
ICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgpID09IG9mZnNldAor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZDhT
IHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmU4KTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaC0+b3Bj
b2RlKCkgPT0gU3RvcmU4KSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNFeHQ4LCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9y
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTG9hZDE2
WjogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVlKAor
ICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUtPm9mZnNldCgp
ID09IG9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS0+b3Bjb2Rl
KCkgPT0gTG9hZDE2WiB8fCBjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3JlMTYpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHJlcGxhY2UobWF0Y2gpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRkTWVtb3J5VmFsdWUobWVtb3J5KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMb2FkMTZTOiB7CisgICAg
ICAgICAgICBNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kTWVtb3J5VmFsdWUoCisgICAgICAgICAg
ICAgICAgcHRyLCByYW5nZSwgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS0+b2Zmc2V0KCkgPT0gb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2Fk
MTZTIHx8IGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gU3RvcmUxNik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gt
Pm9wY29kZSgpID09IFN0b3JlMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgU0V4
dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWF0Y2gtPmNoaWxkKDApKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBsYWNlKG1hdGNoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVl
KG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
TG9hZDogeworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZmluZE1lbW9yeVZhbHVl
KAorICAgICAgICAgICAgICAgIHB0ciwgcmFuZ2UsIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9mZnNldCgp
ICE9IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRp
ZGF0ZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9y
ZSAmJiBjYW5kaWRhdGUtPmNoaWxkKDApLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlKG1hdGNoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9y
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RvcmU4
OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAg
ICAgIGFkZE1lbW9yeVZhbHVlKG1lbW9yeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhTG9nKCJCYWQgbWVtb3J5IHZh
bHVlOiAiLCBkZWVwRHVtcChtX3Byb2MsIG1fdmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgcmVwbGFjZShNZW1vcnlWYWx1ZSogbWF0Y2gpCisgICAgewor
ICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRWxpbWluYXRpbmcgIiwgKm1fdmFs
dWUsICIgZHVlIHRvICIsICptYXRjaCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAobWF0
Y2gtPmlzU3RvcmUoKSkKKyAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bWF0Y2gtPmNoaWxkKDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eShtYXRjaCk7CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5VmFsdWUoTWVtb3J5
VmFsdWUqIG1lbW9yeSkKKyAgICB7CisgICAgICAgIGFkZE1lbW9yeVZhbHVlKCptX2RhdGEsIG1l
bW9yeSk7CisgICAgfQorCisgICAgdm9pZCBhZGRNZW1vcnlWYWx1ZShJbXB1cmVCbG9ja0RhdGEm
IGRhdGEsIE1lbW9yeVZhbHVlKiBtZW1vcnkpCisgICAgeworICAgICAgICBNZW1vcnlNYXRjaGVz
JiBtYXRjaGVzID0KKyAgICAgICAgICAgIGRhdGEubWVtb3J5VmFsdWVzLmFkZChtZW1vcnktPmxh
c3RDaGlsZCgpLCBNZW1vcnlNYXRjaGVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBp
ZiAobWF0Y2hlcy5jb250YWlucyhtZW1vcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG1lbW9yeSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRmlsdGVyPgorICAgIE1lbW9yeVZhbHVlKiBmaW5kTWVtb3J5VmFsdWUoVmFsdWUqIHB0ciwg
SGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKKyAgICB7CisgICAgICAgIGF1
dG8gZmluZCA9IFsmXSAoSW1wdXJlQmxvY2tEYXRhJiBkYXRhKSAtPiBNZW1vcnlWYWx1ZSogewor
ICAgICAgICAgICAgYXV0byBpdGVyID0gZGF0YS5tZW1vcnlWYWx1ZXMuZmluZChwdHIpOworICAg
ICAgICAgICAgaWYgKGl0ZXIgIT0gZGF0YS5tZW1vcnlWYWx1ZXMuZW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBjYW5kaWRhdGUgOiBpdGVyLT52YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9OworCisgICAgICAgIGlm
IChNZW1vcnlWYWx1ZSogbWF0Y2ggPSBmaW5kKCptX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOworCisgICAgICAgIGlmIChtX3dyaXRlcy5vdmVybGFwcyhyYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDg+IHNlZW5MaXN0OworCisgICAgICAgIHdvcmts
aXN0LnB1c2hBbGwobV9ibG9jay0+cHJlZGVjZXNzb3JzKCkpOworCisgICAgICAgIE1lbW9yeVZh
bHVlKiBtYXRjaCA9IG51bGxwdHI7CisKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIHNlZW5MaXN0LmFwcGVuZChibG9jayk7
CisKKyAgICAgICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRh
W2Jsb2NrXTsKKworICAgICAgICAgICAgaWYgKG1fZG9taW5hdG9ycy5zdHJpY3RseURvbWluYXRl
cyhibG9jaywgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGZpbmQoZGF0YSk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEud3JpdGVzLm92ZXJsYXBz
KHJhbmdlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
d29ya2xpc3QucHVzaEFsbChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKKyAgICAgICAgICAgIGFkZE1lbW9y
eVZhbHVlKG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXSwgbWF0Y2gpOworICAgICAgICBhZGRNZW1v
cnlWYWx1ZShtYXRjaCk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNoOworICAgIH0KKworICAgIHR5
cGVkZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKKworICAgIFByb2NlZHVyZSYgbV9wcm9j
OworCisgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0b3JzOworICAgIFB1cmVDU0UgbV9wdXJlQ1NF
OworICAgIAorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1
cmVCbG9ja0RhdGE7CisKKyAgICBJbXB1cmVCbG9ja0RhdGEqIG1fZGF0YTsKKyAgICBSYW5nZVNl
dDxIZWFwUmFuZ2U+IG1fd3JpdGVzOworCisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOworCisgICAgSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworCisgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9j
LCAiZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMiKTsKKworICAgIENTRSBjc2UocHJvYyk7
CisgICAgcmV0dXJuIGNzZS5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zX2gKKyNkZWZpbmUgQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9uc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgZ2xvYmFsIGNvbW1v
biBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIChDU0UpIG92ZXIgYm90aCBwdXJlIHZhbHVlcyBh
bmQgbWVtb3J5IGFjY2Vzc2VzLgorCitib29sIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNp
b24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzRHVwbGljYXRlVGFpbHMuaCIK
KyNpbmNsdWRlICJCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCiAjaW5jbHVkZSAi
QjNGb2xkUGF0aENvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzTGVnYWxpemVNZW1vcnlPZmZzZXRz
LmgiCiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgpAQCAtNzgsNiArNzksNyBAQCB2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgaWYgKG9wdExldmVsID49IDEp
IHsKICAgICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICByZWR1
Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBkdXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOwogICAg
ICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAxOTU0MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgSGVhcFJh
bmdlIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7CisgICAgCiAgICAgSGVh
cFJhbmdlKCkKICAgICAgICAgOiBtX2JlZ2luKDApCiAgICAgICAgICwgbV9lbmQoMCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zZXJ0aW9ucy5pc0VtcHR5KCk7IH0KKwog
ICAgIFByb2NlZHVyZSYgY29kZSgpIHsgcmV0dXJuIG1fcHJvY2VkdXJlOyB9CiAKICAgICB2b2lk
IGFwcGVuZEluc2VydGlvbihjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMTk1NDA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNiArNjAsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBSYW5n
ZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CiAKKyAgICBib29sIGlzU3RvcmUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVm9pZDsgfQorICAgIGJvb2wgaXNMb2FkKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpICE9IFZvaWQ7IH0KKwogICAgIHNpemVfdCBhY2Nlc3NCeXRlU2l6ZSgpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJl
Q1NFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NF
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzUHVyZUNTRS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRG9taW5h
dG9ycy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK1B1cmVDU0U6OlB1cmVDU0UoKQoreworfQorCitQdXJlQ1NFOjp+UHVyZUNTRSgp
Cit7Cit9CisKK3ZvaWQgUHVyZUNTRTo6Y2xlYXIoKQoreworICAgIG1fbWFwLmNsZWFyKCk7Cit9
CisKK2Jvb2wgUHVyZUNTRTo6cHJvY2VzcyhWYWx1ZSogdmFsdWUsIERvbWluYXRvcnMmIGRvbWlu
YXRvcnMpCit7CisgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAgIGlm
ICgha2V5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBNYXRjaGVzJiBtYXRjaGVzID0g
bV9tYXAuYWRkKGtleSwgTWF0Y2hlcygpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBmb3IgKFZh
bHVlKiBtYXRjaCA6IG1hdGNoZXMpIHsKKyAgICAgICAgaWYgKGRvbWluYXRvcnMuZG9taW5hdGVz
KG1hdGNoLT5vd25lciwgdmFsdWUtPm93bmVyKSkgeworICAgICAgICAgICAgdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkobWF0Y2gpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtYXRjaGVzLmFwcGVuZCh2YWx1ZSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUHVyZUNTRV9oCisjZGVmaW5lIEIzUHVyZUNTRV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIFZhbHVlOworCit0eXBlZGVm
IFZlY3RvcjxWYWx1ZSosIDE+IE1hdGNoZXM7CisKKy8vIFRoaXMgaXMgYSByZXVzYWJsZSB1dGls
aXR5IGZvciBkb2luZyBwdXJlIENTRS4gWW91IGNhbiB1c2UgaXQgdG8gZG8gcHVyZSBDU0Ugb24g
YSBwcm9ncmFtIGJ5IGp1c3QKKy8vIHByb2NlZWRpbmcgaW4gb3JkZXIgYW4gY2FsbGluZyBwcm9j
ZXNzKCkuCitjbGFzcyBQdXJlQ1NFIHsKK3B1YmxpYzoKKyAgICBQdXJlQ1NFKCk7CisgICAgflB1
cmVDU0UoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgcHJvY2VzcyhWYWx1ZSos
IERvbWluYXRvcnMmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxWYWx1ZUtleSwgTWF0
Y2hlcz4gbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1B1cmVDU0VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIK
ICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIK
ICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKQEAgLTI4
Miw3ICsyODMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3du
ZXJzKCk7CiAgICAgICAgICAgICBtX2RvbWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMoKTsg
Ly8gUmVjb21wdXRlIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIG1fcHVyZVZhbHVlcy5jbGVh
cigpOworICAgICAgICAgICAgbV9wdXJlQ1NFLmNsZWFyKCk7CiAKICAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAg
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpAQCAtMTc1MSwzMSArMTc1Miw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHJlcGxhY2VJZlJlZHVuZGFudCgpCiAgICAgewotICAgICAgICAvLyBUaGlz
IGRvZXMgYSB2ZXJ5IHNpbXBsZSBwdXJlIGRvbWluYXRvci1iYXNlZCBDU0UuIEluIHRoZSBmdXR1
cmUgd2UgY291bGQgYWRkIGxvYWQgZWxpbWluYXRpb24uCi0gICAgICAgIC8vIE5vdGUgdGhhdCBp
ZiB3ZSBhZGQgbG9hZCBlbGltaW5hdGlvbiwgd2Ugc2hvdWxkIGRvIGl0IGJ5IGRpcmVjdGx5IG1h
dGNoaW5nIGxvYWQgYW5kIHN0b3JlCi0gICAgICAgIC8vIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBWYWx1ZUtleSBmdW5jdGlvbmFsaXR5IG9yIGRvaW5nIERGRyBIZWFwTG9jYXRp
b24tbGlrZQotICAgICAgICAvLyB0aGluZ3MuCi0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHdp
dGggaWRlbnRpdGllcy4gV2Uga2lsbCB0aG9zZSBhbnl3YXkuCi0gICAgICAgIGlmIChtX3ZhbHVl
LT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBW
YWx1ZUtleSBrZXkgPSBtX3ZhbHVlLT5rZXkoKTsKLSAgICAgICAgaWYgKCFrZXkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWUqLCAxPiYgbWF0Y2hl
cyA9IG1fcHVyZVZhbHVlcy5hZGQoa2V5LCBWZWN0b3I8VmFsdWUqLCAxPigpKS5pdGVyYXRvci0+
dmFsdWU7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHZhbHVlIHdpdGggd2hpY2hldmVyIHZh
bHVlIGRvbWluYXRlcyB1cy4KLSAgICAgICAgZm9yIChWYWx1ZSogbWF0Y2ggOiBtYXRjaGVzKSB7
Ci0gICAgICAgICAgICBpZiAobV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobWF0Y2gtPm93bmVyLCBt
X3ZhbHVlLT5vd25lcikpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElk
ZW50aXR5KG1hdGNoKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1h
dGNoZXMuYXBwZW5kKG1fdmFsdWUpOworICAgICAgICBtX2NoYW5nZWQgfD0gbV9wdXJlQ1NFLnBy
b2Nlc3MobV92YWx1ZSwgKm1fZG9taW5hdG9ycyk7CiAgICAgfQogCiAgICAgdm9pZCBzaW1wbGlm
eUNGRygpCkBAIC0yMDQyLDcgKzIwMTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5k
ZXggeyAwIH07CiAgICAgVmFsdWUqIG1fdmFsdWUgeyBudWxscHRyIH07CiAgICAgRG9taW5hdG9y
cyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OwotICAgIEhhc2hNYXA8VmFsdWVLZXksIFZlY3Rv
cjxWYWx1ZSosIDE+PiBtX3B1cmVWYWx1ZXM7CisgICAgUHVyZUNTRSBtX3B1cmVDU0U7CiAgICAg
Ym9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jaGFuZ2VkQ0ZHIHsgZmFsc2Ug
fTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBEb2VzIHN0cmVu
Z3RoIHJlZHVjdGlvbiwgY29uc3RhbnQgZm9sZGluZywgY2Fub25pY2FsaXphdGlvbiwgQ0ZHIHNp
bXBsaWZpY2F0aW9uLCBEQ0UsIGFuZCBDU0UuIFRoaXMKLS8vIHBoYXNlIHJ1bnMgdGhvc2Ugb3B0
aW1pemF0aW9ucyB0byBmaXhwb2ludC4gVGhlIGdvYWwgb2YgdGhlIHBoYXNlIGlzIHRvIGRyYW1h
dGljYWxseSByZWR1Y2UgdGhlCi0vLyBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLiBJbiB0aGUgZnV0
dXJlLCBpdCdzIHByZWZlcmFibGUgdG8gYWRkIG9wdGltaXphdGlvbnMgdG8gdGhpcyBwaGFzZSBy
YXRoZXIgdGhhbgotLy8gY3JlYXRpbmcgbmV3IG9wdGltaXphdGlvbnMgYmVjYXVzZSB0aGVuIHRo
ZSBvcHRpbWl6YXRpb25zIGNhbiBwYXJ0aWNpcGF0ZSBpbiB0aGUgZml4cG9pbnQuIEhvd2V2ZXIs
Ci0vLyB0aGlzIHBoYXNlIHNob3VsZG4ndCBiZWNvbWUgdG9vIGV4cGVuc2l2ZSwgc28gZXhwZW5z
aXZlIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIHNlcGFyYXRlLgorLy8gRG9lcyBzdHJlbmd0aCBy
ZWR1Y3Rpb24sIGNvbnN0YW50IGZvbGRpbmcsIGNhbm9uaWNhbGl6YXRpb24sIENGRyBzaW1wbGlm
aWNhdGlvbiwgRENFLCBhbmQgdmVyeQorLy8gc2ltcGxlIENTRS4gVGhpcyBwaGFzZSBydW5zIHRo
b3NlIG9wdGltaXphdGlvbnMgdG8gZml4cG9pbnQuIFRoZSBnb2FsIG9mIHRoZSBwaGFzZSBpcyB0
bworLy8gZHJhbWF0aWNhbGx5IHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGUgY29kZS4gSW4g
dGhlIGZ1dHVyZSwgaXQncyBwcmVmZXJhYmxlIHRvIGFkZCBvcHRpbWl6YXRpb25zCisvLyB0byB0
aGlzIHBoYXNlIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvcHRpbWl6YXRpb25zIGJlY2F1c2Ug
dGhlbiB0aGUgb3B0aW1pemF0aW9ucyBjYW4gcGFydGljaXBhdGUKKy8vIGluIHRoZSBmaXhwb2lu
dC4gSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgbWFueSBpbnRlcmxvY2tpbmcgb3B0aW1pemF0aW9u
cywgaXQgY2FuIGJlIGRpZmZpY3VsdCB0bworLy8gYWRkIHNvcGhpc3RpY2F0ZWQgb3B0aW1pemF0
aW9ucyB0byBpdC4gRm9yIHRoYXQgcmVhc29uIHdlIGhhdmUgZnVsbCBDU0UgaW4gYSBkaWZmZXJl
bnQgcGhhc2UsIGZvcgorLy8gZXhhbXBsZS4KIAogYm9vbCByZWR1Y2VTdHJlbmd0aChQcm9jZWR1
cmUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTk1NDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNiArMzcxLDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVkFMSURB
VEUoISh2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcyAmJiB2YWx1ZS0+a2V5KCkpLCAoIkF0ICIsICp2
YWx1ZSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NDEzKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAx
Ni0wMS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzIHNo
b3VsZCBoYXZlIGxvYWQgZWxpbWluYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEkgbmVlZGVkIGEgd2F5IHRvIHRyYWNrIHNldHMgb2YgcmFuZ2Vz
LCB3aGVyZSB0aGVyZSBpcyBhIGhpZ2ggbGlrZWxpaG9vZCB0aGF0IGFsbCBvZiB0aGUKKyAgICAg
ICAgcmFuZ2VzIG92ZXJsYXAuIFNvIEkgY3JlYXRlZCBSYW5nZVNldC4gSXQncyBhIHVzdWFsbHkt
c29ydGVkIGxpc3Qgb2YgY29hbGVzY2VkIHJhbmdlcy4KKyAgICAgICAgUHJhY3RpY2FsbHkgdGhp
cyBtZWFucyB0aGF0IHJpZ2h0IG5vdywgRlRMIEIzIHdpbGwgZW5kIHVwIHdpdGggdHdvIGtpbmRz
IG9mIHJhbmdlIHNldHM6IGEgc2V0CisgICAgICAgIHRoYXQganVzdCBjb250YWlucyB0b3AgYW5k
IGEgc2V0IHRoYXQgY29udGFpbnMgbm90aGluZy4gSW4gdGhlIGZ1dHVyZSwgbW9zdCBzZXRzIHdp
bGwgZWl0aGVyCisgICAgICAgIGJlIHRvcCBvZiBlbXB0eSBidXQgc29tZSBvZiB0aGVtIHdpbGwg
Y29udGFpbiBhIGhhbmRmdWwgb2Ygb3RoZXIgdGhpbmdzLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChXVEY6OmxlZnRTaGlmdFdpdGhTYXR1
cmF0aW9uKToKKyAgICAgICAgKFdURjo6bm9uRW1wdHlSYW5nZXNPdmVybGFwKToKKyAgICAgICAg
KFdURjo6cmFuZ2VzT3ZlcmxhcCk6CisgICAgICAgICogd3RmL1JhbmdlU2V0Lmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpSYW5nZVNldDo6UmFuZ2VTZXQpOgorICAgICAgICAoV1RGOjpSYW5nZVNl
dDo6flJhbmdlU2V0KToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmFkZCk6CisgICAgICAgIChX
VEY6OlJhbmdlU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpvdmVybGFw
cyk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OlJhbmdl
U2V0OjpkdW1wKToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmR1bXBSYXcpOgorICAgICAgICAo
V1RGOjpSYW5nZVNldDo6Y29tcGFjdCk6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpvdmVybGFw
c05vbkVtcHR5KToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OnN1YnN1bWVzTm9uRW1wdHkpOgor
ICAgICAgICAoV1RGOjpSYW5nZVNldDo6ZmluZFJhbmdlKToKKyAgICAgICAgKiB3dGYvU3RkTGli
RXh0cmFzLmg6CisgICAgICAgIChXVEY6OmJpbmFyeVNlYXJjaEltcGwpOgorICAgICAgICAoV1RG
OjpiaW5hcnlTZWFyY2gpOgorICAgICAgICAoV1RGOjp0cnlCaW5hcnlTZWFyY2gpOgorICAgICAg
ICAoV1RGOjphcHByb3hpbWF0ZUJpbmFyeVNlYXJjaCk6CisKIDIwMTYtMDEtMTkgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlbmFi
bGUgVklERU9fUFJFU0VOVEFUSU9OX01PREUgb24gb3RoZXIgQ29jb2EgcGxhdGZvcm1zLgpJbmRl
eDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU0
MDkpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjQ1
NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERv
bWluYXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3
MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNzI1Q0FDMUM1
MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0Lmgg
Ki87IH07CiAJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQz
QTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAw
MkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87
IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwpAQCAtMzMyLDYgKzMzMyw3IEBACiAJCTBGMzUw
MTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtp
bmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzYsNiArODc4LDcgQEAKIAkJCQlB
OEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0
NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjcyNUNBQjFD
NTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCUE4QTQ3MkZFMTUxQTgyNUIwMDQxMjNGRiAv
KiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVm
LmggKi8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3M0I0MTUxQTgyNUIwMDQxMjNG
RiAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUM1MTU0RkIyMkUwMDk4
M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNDNDE1MUE4
MjVCMDA0MTIzRkYgLyogRmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3MjVDQUMx
QzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMzhGRDdC
RDE2ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOUQzMzYxMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3M0I2MTUxQTgyNUIwMDQxMjNGRiAvKiBmaXhlZC1kdG9hLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTU0MDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIuaAog
ICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2ludGVyLmgK
ICAgICBSZWRCbGFja1RyZWUuaAogICAgIFJlZi5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZp
c2lvbiAxOTU0MDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMywgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxOSw2ICs0MTksMjAgQEAgaW5saW5lIFQgbGVmdFNoaWZ0V2l0aFNhdHVyYXRpb24o
VCB2YWx1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIENoZWNrIGlmIHR3byByYW5nZXMg
b3ZlcmxhcCBhc3N1bWluZyB0aGF0IG5laXRoZXIgcmFuZ2UgaXMgZW1wdHkuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbm9uRW1wdHlSYW5nZXNPdmVybGFwKFQgbGVmdE1pbiwg
VCBsZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4KQoreworICAgIEFTU0VSVChsZWZ0TWlu
IDwgbGVmdE1heCk7CisgICAgQVNTRVJUKHJpZ2h0TWluIDwgcmlnaHRNYXgpOworICAgIAorICAg
IGlmIChsZWZ0TWluIDw9IHJpZ2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBs
ZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8v
IFBhc3MgcmFuZ2VzIHdpdGggdGhlIG1pbiBiZWluZyBpbmNsdXNpdmUgYW5kIHRoZSBtYXggYmVp
bmcgZXhjbHVzaXZlLiBGb3IgZXhhbXBsZSwgdGhpcyBzaG91bGQKIC8vIHJldHVybiBmYWxzZToK
IC8vCkBAIC00MzQsMTIgKzQ0OCw4IEBAIGlubGluZSBib29sIHJhbmdlc092ZXJsYXAoVCBsZWZ0
TWluLCBUIGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChyaWdodE1pbiA9PSByaWdo
dE1heCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChsZWZ0TWluIDw9IHJp
Z2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBsZWZ0TWluKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbm9uRW1wdHlSYW5n
ZXNPdmVybGFwKGxlZnRNaW4sIGxlZnRNYXgsIHJpZ2h0TWluLCByaWdodE1heCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9S
YW5nZVNldF9oCisjZGVmaW5lIFdURl9SYW5nZVNldF9oCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBIFJhbmdlU2V0IGlzIGEgc2V0IG9mIG51bWVyaWNhbCByYW5nZXMuIEEgdmFsdWUgYmVsb25n
cyB0byB0aGUgc2V0IGlmIGl0IGlzIHdpdGhpbiBhbnkgb2YgdGhlCisvLyByYW5nZXMuIEEgcmFu
Z2UgYmVsb25ncyB0byB0aGUgc2V0IGlmIGV2ZXJ5IHZhbHVlIGluIHRoZSByYW5nZSBiZWxvbmdz
IHRvIHRoZSBzZXQuIEEgcmFuZ2Ugb3ZlcmxhcHMKKy8vIHRoZSBzZXQgaWYgYW55IHZhbHVlIGlu
IHRoZSByYW5nZSBiZWxvbmdzIHRvIHRoZSBzZXQuIFlvdSBjYW4gYWRkIHJhbmdlcyBhbmQgcXVl
cnkgcmFuZ2UKKy8vIG1lbWJlcnNoaXAuIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBh
IGxpc3Qgb2YgcmFuZ2VzIHRoYXQgZ2V0cyBwZXJpb2RpY2FsbHkgY29tcGFjdGVkLiBUaGlzCisv
LyByZXByZXNlbnRhdGlvbiBpcyBvcHRpbWFsIHNvIGxvbmcgYXMgdGhlIG51bWJlciBvZiBkaXN0
aW5jdCByYW5nZXMgdGVuZHMgdG8gYmUgc21hbGwsIGFuZCB0aGUKKy8vIG51bWJlciBvZiByYW5n
ZSBzZXRzIHRlbmRzIHRvIGJlIHNtYWxsIGFzIHdlbGwuIFRoaXMgd29ya3MgcmVhc29uYWJseSB3
ZWxsIGluIGEgYnVuY2ggb2YgY29tcGlsZXIKKy8vIGFsZ29yaXRobXMsIHdoZXJlIHRoZSB0b3Ag
cmFuZ2UgZW5kcyB1cCBiZWluZyB1c2VkIGEgbG90LgorLy8KKy8vIFRoZSBpbml0aWFsIHVzZXIg
b2YgdGhpcyBpcyBKU0M6OkIzOjpIZWFwUmFuZ2UsIHdoaWNoIGlzIHVzZWQgdG8gcGVyZm9ybSBh
bGlhcyBhbmFseXNpcy4gWW91IGNhbgorLy8gbW9kZWwgbmV3IHVzZXJzIG9uIHRoYXQgY2xhc3Mu
IEJhc2ljYWxseSwgeW91IG5lZWQgdG8gZGVmaW5lOgorLy8KKy8vIFQ6OlR5cGUgLSB0aGUgdHlw
ZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgcmFuZ2UuIEhlYXBSYW5nZSB1c2VzIHVuc2lnbmVkLgor
Ly8gVChUOjpUeXBlIGJlZ2luLCBUOjpUeXBlIGVuZCkgLSBjb25zdHJ1Y3QgYSBuZXcgcmFuZ2Uu
CisvLyBUOjpUeXBlIFQ6OmJlZ2luKCkgY29uc3QgLSBpbnN0YW5jZSBtZXRob2QgZ2l2aW5nIHRo
ZSBpbmNsdXNpdmUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZS4KKy8vIFQ6OlR5cGUgVDo6ZW5kKCkg
Y29uc3QgLSBpbnN0YW5jZSBtZXRob2QgZ2l2aW5nIHRoZSBleGNsdXNpdmUgZW5kIG9mIHRoZSBy
YW5nZS4KKy8vIHZvaWQgVDo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IC0gc29tZSBraW5kIG9m
IGR1bXBpbmcuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJhbmdlVHlwZT4KK2NsYXNzIFJhbmdlU2V0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFJhbmdlVHlwZSBSYW5nZTsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIFJhbmdlOjpUeXBlIFR5cGU7CisKKyAgICBSYW5nZVNldCgpCisgICAgeworICAgIH0K
KworICAgIH5SYW5nZVNldCgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYWRkKGNvbnN0IFJh
bmdlJiByYW5nZSkKKyAgICB7CisgICAgICAgIGlmIChyYW5nZS5iZWdpbigpID09IHJhbmdlLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZXhwZWN0
IHRoZSByYW5nZSBzZXQgdG8gYmVjb21lIHRvcCBpbiBhIGxvdCBvZiBjYXNlcy4gV2UgYWxzbyBl
eHBlY3QgdGhlIHNhbWUgcmFuZ2UgdG8KKyAgICAgICAgLy8gYmUgYWRkZWQgcmVwZWF0ZWRseS4g
VGhhdCdzIHdoeSB0aGlzIGlzIGhlcmUuCisgICAgICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgp
ICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXMubGFzdCgpLCByYW5nZSkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbV9pc0NvbXBhY3QgPSBmYWxzZTsKKworICAgICAgICAvLyBX
ZSBhcHBlbmQgd2l0aG91dCBjb21wYWN0aW5nIG9ubHkgaWYgZG9pbmcgc28gaXMgZ3VhcmFudGVl
ZCBub3QgdG8gcmVzaXplIHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkg
KyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgeworICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5k
KHJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcmFu
Z2VzLmFwcGVuZChyYW5nZSk7CisgICAgICAgIGNvbXBhY3QoKTsKKyAgICB9CisKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IFJhbmdlJiByYW5nZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChy
YW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBmaW5kUmFuZ2UocmFuZ2UpOworICAg
ICAgICBpZiAoaW5kZXggKyAxIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBzdWJz
dW1lc05vbkVtcHR5KG1fcmFuZ2VzW2luZGV4ICsgMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoaW5kZXggPCBtX3Jhbmdlcy5zaXplKCkKKyAgICAgICAg
ICAgICYmIHN1YnN1bWVzTm9uRW1wdHkobV9yYW5nZXNbaW5kZXhdLCByYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCAtIDEpIDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBzdWJzdW1lc05vbkVtcHR5
KG1fcmFuZ2VzW2luZGV4IC0gMV0sIHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBS
YW5nZSYgcmFuZ2UpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSBy
YW5nZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gZmluZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKGluZGV4ICsg
MSA8IG1fcmFuZ2VzLnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jh
bmdlc1tpbmRleCArIDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbV9yYW5nZXMuc2l6ZSgpCisgICAgICAgICAgICAmJiBvdmVybGFwc05v
bkVtcHR5KG1fcmFuZ2VzW2luZGV4XSwgcmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXggLSAxKSA8IG1fcmFuZ2Vz
LnNpemUoKQorICAgICAgICAgICAgJiYgb3ZlcmxhcHNOb25FbXB0eShtX3Jhbmdlc1tpbmRleCAt
IDFdLCByYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9yYW5nZXMu
Y2xlYXIoKTsKKyAgICAgICAgbV9pc0NvbXBhY3QgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxS
YW5nZVNldCo+KHRoaXMpLT5jb21wYWN0KCk7CisgICAgICAgIG91dC5wcmludChsaXN0RHVtcCht
X3JhbmdlcykpOworICAgIH0KKworICAgIHZvaWQgZHVtcFJhdyhQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7IiwgbGlzdER1bXAobV9yYW5nZXMpLCAi
LCBpc0NvbXBhY3QgPSAiLCBtX2lzQ29tcGFjdCwgIn0iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjb21wYWN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzQ29tcGFjdCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9yYW5nZXMuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX3Jhbmdlcy5iZWdpbigpLCBt
X3Jhbmdlcy5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJh
bmdlJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5iZWdpbigpIDwgYi5i
ZWdpbigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgdW5zaWduZWQgc3JjSW5kZXggPSAx
OworICAgICAgICB1bnNpZ25lZCBkc3RJbmRleCA9IDE7CisgICAgICAgIFJhbmdlKiBsYXN0UmFu
Z2UgPSAmbV9yYW5nZXNbMF07CisgICAgICAgIHdoaWxlIChzcmNJbmRleCA8IG1fcmFuZ2VzLnNp
emUoKSkgeworICAgICAgICAgICAgUmFuZ2UgcmFuZ2UgPSBtX3Jhbmdlc1tzcmNJbmRleCsrXTsK
KyAgICAgICAgICAgIEFTU0VSVChyYW5nZS5iZWdpbigpID49IGxhc3RSYW5nZS0+YmVnaW4oKSk7
CisgICAgICAgICAgICBpZiAocmFuZ2UuZW5kKCkgPD0gbGFzdFJhbmdlLT5lbmQoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5iZWdpbigpIDw9IGxh
c3RSYW5nZS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAqbGFzdFJhbmdlID0gUmFuZ2UobGFz
dFJhbmdlLT5iZWdpbigpLCByYW5nZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW92ZXJsYXBzTm9uRW1wdHkoKmxh
c3RSYW5nZSwgcmFuZ2UpKTsKKyAgICAgICAgICAgIGxhc3RSYW5nZSA9ICZtX3Jhbmdlc1tkc3RJ
bmRleCsrXTsKKyAgICAgICAgICAgICpsYXN0UmFuZ2UgPSByYW5nZTsKKyAgICAgICAgfQorICAg
ICAgICBtX3Jhbmdlcy5yZXNpemUoZHN0SW5kZXgpOworCisgICAgICAgIG1faXNDb21wYWN0ID0g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgb3ZlcmxhcHNOb25FbXB0eShjb25z
dCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCisgICAgeworICAgICAgICByZXR1cm4gbm9uRW1w
dHlSYW5nZXNPdmVybGFwKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpLCBiLmVuZCgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBzdWJzdW1lc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBh
LCBjb25zdCBSYW5nZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmJlZ2luKCkgPD0gYi5i
ZWdpbigpICYmIGEuZW5kKCkgPj0gYi5lbmQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmaW5k
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxSYW5nZVNldCo+KHRoaXMpLT5jb21wYWN0KCk7CisKKyAgICAgICAgY29uc3QgUmFuZ2UqIGZv
dW5kID0gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8Y29uc3QgUmFuZ2UsIFR5cGU+KAorICAgICAg
ICAgICAgbV9yYW5nZXMsIG1fcmFuZ2VzLnNpemUoKSwgcmFuZ2UuYmVnaW4oKSwgWyZdIChjb25z
dCBSYW5nZSogcmFuZ2UpIC0+IFR5cGUgeworICAgICAgICAgICAgICAgIHJldHVybiByYW5nZS0+
YmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIFVJTlRfTUFYOworCisgICAgICAgIHJldHVybiBmb3VuZCAtIG1fcmFuZ2VzLmJl
Z2luKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxSYW5nZSwgOD4gbV9yYW5nZXM7CisgICAg
Ym9vbCBtX2lzQ29tcGFjdCB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OlJhbmdlU2V0OworCisjZW5kaWYgLy8gV1RGX1JhbmdlU2V0X2gKKwpJbmRleDog
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE5NTQwOSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0
ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDEzIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTIxMiw3ICsyMTIsNyBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlw
ZSogYmluYXJ5U2VhcmNoSW1wCiAgICAgICAgIEFTU0VSVChtb2RlICE9IEtleU11c3RCZVByZXNl
bnRJbkFycmF5IHx8IHNpemUpOwogICAgIH0KICAgICAKLSAgICBpZiAobW9kZSA9PSBLZXlNaWdo
dE5vdEJlUHJlc2VudEluQXJyYXkgJiYgIXNpemUpCisgICAgaWYgKG1vZGUgIT0gS2V5TXVzdEJl
UHJlc2VudEluQXJyYXkgJiYgIXNpemUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEFy
cmF5RWxlbWVudFR5cGUqIHJlc3VsdCA9ICZhcnJheVtvZmZzZXRdOwpAQCAtMjMwLDM4ICsyMzAs
MzggQEAgaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaEltcAogCiAvLyBJZiB0
aGUgZWxlbWVudCBpcyBub3QgZm91bmQsIGNyYXNoIGlmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFu
ZCBiZWhhdmUgbGlrZSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaCBpbiByZWxlYXNlIGJ1aWxkcy4K
IHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5
cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJy
YXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXpl
LCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXko
KSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlU
eXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU11c3RCZVByZXNlbnRJbkFycmF5PihhcnJh
eSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIAogLy8gUmV0dXJuIHplcm8gaWYgdGhlIGVs
ZW1lbnQgaXMgbm90IGZvdW5kLgogdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwg
dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5
PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFy
cmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goQXJy
YXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5
JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJ
bXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgS2V5
TWlnaHROb3RCZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsK
IH0KIAogLy8gUmV0dXJuIHRoZSBlbGVtZW50IHRoYXQgaXMgZWl0aGVyIHRvIHRoZSBsZWZ0LCBv
ciB0aGUgcmlnaHQsIG9mIHdoZXJlIHRoZSBlbGVtZW50IHdvdWxkIGhhdmUgYmVlbiBmb3VuZC4K
IHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qg
c2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkK
K2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5
cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4
dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7CiAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8
QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5B
ZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJlc2VudD4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFj
dEtleSk7CiB9CiAKIC8vIFZhcmlhbnRzIG9mIHRoZSBhYm92ZSB0aGF0IHVzZSBjb25zdC4KIHRl
bXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVu
YW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRU
eXBlKiBiaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtl
eVR5cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUg
QXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNp
emVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRU
eXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU11c3RCZVByZXNlbnRJbkFy
cmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5
KTsKIH0KIHRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5
cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJh
eUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6
ZV90IHNpemUsIEtleVR5cGUga2V5LCBFeHRyYWN0S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5
KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5
VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1w
bDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU1p
Z2h0Tm90QmVQcmVzZW50SW5BcnJheT4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNp
emUsIGtleSwgZXh0cmFjdEtleSk7CiB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRU
eXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJh
Y3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYXBwcm94aW1hdGVCaW5hcnlTZWFyY2go
Y29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBFeHRyYWN0
S2V5IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSog
YXBwcm94aW1hdGVCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNp
emUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtl
eSgpKQogewogICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJ
c05vdFByZXNlbnQ+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4
dHJhY3RLZXkpOwogfQo=
</data>
<flag name="review"
          id="294394"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>