<?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>171075</bug_id>
          
          <creation_ts>2017-04-20 14:12:45 -0700</creation_ts>
          <short_desc>Air should support callsite-saves</short_desc>
          <delta_ts>2017-04-21 11:52:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1299288</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-20 14:12:45 -0700</bug_when>
    <thetext>Callsite-saves are an optimization that I found to be useful in a previous compiler project.  Basically, if you find that some register file needs callee-saves, but the ABI doesn&apos;t give them to you, you can fake it in the compiler: just designate some registers callsite-save and then do:

- Ignore those registers if they appear in the clobber set for any instruction during interference graph building.  Note that if an instruction defs a callsite-save, it still gets interference.

- After register allocation completes, emit save/restore code around any instruction that clobbers but does not def a callsite save.

I previously found this to be a &gt;=30% speed-up on some floating-point code (some raytracer written in Java) on x86-32 when compiling to cdecl, which has no floating point callee-saves.  I used 3 callsite-saves in that project.

It&apos;s worth trying at B3 -O2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299292</commentid>
    <comment_count>1</comment_count>
      <attachid>307636</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-20 14:16:06 -0700</bug_when>
    <thetext>Created attachment 307636
it builds!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299742</commentid>
    <comment_count>2</comment_count>
      <attachid>307764</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-21 11:51:51 -0700</bug_when>
    <thetext>Created attachment 307764
full attempt

This is neutral on everything except Kraken, where it&apos;s a 1% regression.

I guess we don&apos;t need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299743</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-21 11:52:10 -0700</bug_when>
    <thetext>It&apos;s not a progression, so we shouldn&apos;t do it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307636</attachid>
            <date>2017-04-20 14:16:06 -0700</date>
            <delta_ts>2017-04-21 11:51:51 -0700</delta_ts>
            <desc>it builds!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32263</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE3LTA0LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBzdXBwb3J0IGNhbGxzaXRlLXNhdmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEwNzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGIzL0IzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OmFkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzKToKKyAgICAgICAgKiBiMy9CM0Fk
ZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVnc0luUHJpb3JpdHlPcmRl
cik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZENhbGxzaXRlU2F2ZXMpOgorICAg
ICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9B
aXJDb2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmNhbGxzaXRlU2F2ZXMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRDYWxsc2l0ZVNhdmVzKToKKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpwcmVwYXJl
Rm9yR2VuZXJhdGlvbik6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpjYWxsc2l0ZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWly
SW5zdC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdz
RXhjbHVkaW5nQ2FsbHNpdGVTYXZlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZv
ckVhY2hEZWZXaXRoRmlsdGVyZWRFeHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTYXZlQ2FsbHNpdGVTYXZlcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpzYXZlQ2FsbHNpdGVTYXZlcyk6CisgICAgICAgICogYjMvYWlyL0FpclNhdmVDYWxsc2l0ZVNh
dmVzLmg6IEFkZGVkLgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKwogMjAxNy0wNC0xNSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIFNoYXJl
ZEFycmF5QnVmZmVyIGluIHRoZSBERkcrRlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw2
ICszODYsMTAgQEAKIAkJMEYzQzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLzsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgfTsKKwkJMEYzRkJCQkYxRUE5NTBDNzAwMjBF
QTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0ZCQkJEMUVBOTUwQzUwMDIwRUEzQSAvKiBBaXJTYXZl
Q2FsbHNpdGVTYXZlcy5jcHAgKi87IH07CisJCTBGM0ZCQkMwMUVBOTUwQ0EwMDIwRUEzQSAvKiBB
aXJTYXZlQ2FsbHNpdGVTYXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzRkJCQkUxRUE5NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNh
dmVzLmggKi87IH07CisJCTBGM0ZCQkMzMUVBOTU1Q0MwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFi
bGVDYWxsc2l0ZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0ZCQkMxMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFibGVDYWxs
c2l0ZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEYzRkJCQzQxRUE5NTVDRjAwMjBFQTNBIC8qIEIzQWRk
UmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0ZCQkMyMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFi
bGVDYWxsc2l0ZVNhdmVzLmggKi87IH07CiAJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBB
aXJPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjE4MzMyMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3
RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3
MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMjkzMCw2ICsyOTM0LDEwIEBACiAJCTBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHBhdGggPSBk
ZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNGQkJCRDFFQTk1MEM1MDAyMEVBM0EgLyogQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYzRkJCQkUxRUE5NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0
ZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNhdmVDYWxsc2l0
ZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzRkJCQzExRUE5NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVh
c29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5jcHA7IHBhdGggPSBiMy9CM0FkZFJl
YXNvbmFibGVDYWxsc2l0ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzRkJCQzIxRUE5NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBZGRSZWFzb25hYmxlQ2FsbHNp
dGVTYXZlcy5oOyBwYXRoID0gYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFs
dWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292
ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEz
MUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2
QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU0MDMsNiArNTQxMSw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJMEYzRkJCQzExRUE5
NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwICovLAorCQkJ
CTBGM0ZCQkMyMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVz
LmggKi8sCiAJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5jcHAgKi8sCiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVl
LmNwcCAqLywKQEAgLTU2NTYsNiArNTY2Niw4IEBACiAJCQkJMEZGNEI0QkIxRTg4NDQ5NTAwREJC
RTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcwM0ExQkU0NUYwQTAwNjJBNjI5
IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLAogCQkJCTBGNDU3MDNCMUJFNDVGMEEw
MDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi8sCisJCQkJMEYzRkJCQkQxRUE5
NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcCAqLywKKwkJCQkwRjNGQkJC
RTFFQTk1MEM1MDAyMEVBM0EgLyogQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuaCAqLywKIAkJCQkwRjMz
OERGQjFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwICovLAogCQkJCTBGMzM4
REZDMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oICovLAogCQkJCTBGRUM4NTYy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKQEAgLTg2MzAsNiArODY0Miw3
IEBACiAJCQkJRTNGRkM4NTMxREFEN0QxNTAwREVBNTNFIC8qIERPTUpJVFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMzE4RkUwMUNBQzk4MkYwMERGQ0M1NCAvKiBFQ01BU2NyaXB0
U3BlY0ludGVybmFsRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjNGQkJDNDFFQTk1
NUNGMDAyMEVBM0EgLyogQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0
eUlucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4
OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkwNDksNiArOTA2Miw3IEBA
CiAJCQkJQkMxOEM0MkEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzRkJCQzAxRUE5NTBDQTAwMjBFQTNBIC8q
IEFpclNhdmVDYWxsc2l0ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwNDYsNiArMTAwNjAsNyBAQAogCQkJCUE3
QThBRjM2MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNDE1ODQxRDc4RkI0QzAwREY4RDA5IC8qIEFycmF5Q29u
dmVudGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzRkJCQzMxRUE5NTVDQzAwMjBFQTNB
IC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTJCNzRCNEExRENDMDQ2OTAwMzQxNTdEIC8qIEFycmF5SXRlcmF0b3JBZGFwdGl2ZVdhdGNocG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBDIC8qIEFy
cmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQxNUQw
NzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjg2
LDYgKzEwMzAxLDcgQEAKIAkJCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAgLyogREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUQwODVEMUI4Q0Y5OUQwMDEx
NDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0U2MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGM0ZCQkJGMUVBOTUwQzcwMDIwRUEzQSAvKiBBaXJTYXZlQ2FsbHNp
dGVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQxQjUg
LyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkUmVhc29uYWJsZUNh
bGxzaXRlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBhZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcyhQcm9jZWR1
cmUmIHByb2MpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSBwcm9jLnJlZ3NJblBy
aW9yaXR5T3JkZXIoRlApOworICAgIFJlZ2lzdGVyU2V0IGNhbGxzaXRlU2F2ZXM7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gcmVncy5zaXplKCksIGNvdW50ID0gNTsgaS0tICYmIGNvdW50LS07KQor
ICAgICAgICBjYWxsc2l0ZVNhdmVzLmFkZChyZWdzW2ldKTsKKyAgICBwcm9jLmFkZENhbGxzaXRl
U2F2ZXMoY2FsbHNpdGVTYXZlcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZFJlYXNvbmFibGVDYWxsc2l0ZVNh
dmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CisKKy8vIFRoaXMgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB0ZWxscyB0aGUgUHJv
Y2VkdXJlIHRvIHVzZSBjYWxsc2l0ZSBzYXZlcy4gV2UgZG9uJ3QgbWFrZQorLy8gdGhpcyB0aGUg
ZGVmYXVsdCBiZWNhdXNlIGl0J3MgYSB3ZWlyZCBjb25maWd1cmF0aW9uIHRoYXQgbWF5IG5vdCBw
cm9maXQgZXZlcnlvbmUuCit2b2lkIGFkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzKFByb2NlZHVy
ZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2
aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDExICszMjksMjEgQEAgdm9pZCBQcm9jZWR1cmU6OnJl
cXVlc3RDYWxsQXJnQXJlYVNpemVJbgogICAgIGNvZGUoKS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
SW5CeXRlcyhzaXplKTsKIH0KIAorY29uc3QgVmVjdG9yPFJlZz4mIFByb2NlZHVyZTo6cmVnc0lu
UHJpb3JpdHlPcmRlcihCYW5rIGJhbmspIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvZGUoKS5yZWdz
SW5Qcmlvcml0eU9yZGVyKGJhbmspOworfQorCiB2b2lkIFByb2NlZHVyZTo6cGluUmVnaXN0ZXIo
UmVnIHJlZykKIHsKICAgICBjb2RlKCkucGluUmVnaXN0ZXIocmVnKTsKIH0KIAordm9pZCBQcm9j
ZWR1cmU6OmFkZENhbGxzaXRlU2F2ZXMoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKK3sKKyAgICBj
b2RlKCkuYWRkQ2FsbHNpdGVTYXZlcyhzZXQpOworfQorCiB2b2lkIFByb2NlZHVyZTo6c2V0T3B0
TGV2ZWwodW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgbV9vcHRMZXZlbCA9IG9wdExldmVsOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxNTU3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjksMTAgKzIyOSwxNSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjYWxsQXJn
QXJlYVNpemVJbkJ5dGVzKCkgY29uc3Q7CiAgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
SW5CeXRlcyh1bnNpZ25lZCBzaXplKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBjb25z
dCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihCYW5rKSBjb25zdDsKIAogICAgIC8v
IFRoaXMgdGVsbHMgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvcnMgdG8gc3RheSBhd2F5IGZyb20gdGhp
cyByZWdpc3Rlci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHBpblJlZ2lzdGVyKFJlZyk7
CiAgICAgCisgICAgLy8gVGVsbCB0aGUgY29tcGlsZXIgdGhhdCB0aGVzZSByZWdpc3RlcnMgY2Fu
IGJlIHVzZWQgYXMgY2FsbHNpdGUtc2F2ZXMuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
ZGRDYWxsc2l0ZVNhdmVzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisgICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRPcHRMZXZlbCh1bnNpZ25lZCB2YWx1ZSk7CiAgICAgdW5zaWduZWQg
b3B0TGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX29wdExldmVsOyB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE1NTcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDgsOCArMTYwOCw4IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAgICAgICBkYXRhTG9nKCJCdWlsZGlu
ZyBiZXR3ZWVuICIsIHBvaW50ZXJEdW1wKHByZXZJbnN0KSwgIiBhbmQgIiwgcG9pbnRlckR1bXAo
bmV4dEluc3QpLCAiOlxuIik7CiAKLSAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNs
b2JiZXJlZFJlZ3M8VG1wPigKLSAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAg
ICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3NFeGNsdWRpbmdDYWxsc2l0
ZVNhdmVzPFRtcD4oCisgICAgICAgICAgICBtX2NvZGUsIHByZXZJbnN0LCBuZXh0SW5zdCwKICAg
ICAgICAgICAgIFsmXSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQmFuayBhcmdCYW5rLCBX
aWR0aCkgewogICAgICAgICAgICAgICAgIGlmIChhcmdCYW5rICE9IGJhbmspCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTE3MDIsOCArMTcwMiw4IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGFkZEVkZ2VzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1w
TGl2ZW5lc3M8YmFuaz46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2ZVRtcHMpCiAgICAgewogICAg
ICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBldmVydGhpbmcgbGl2ZS4KLSAg
ICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8VG1wPigKLSAgICAg
ICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhF
eHRyYUNsb2JiZXJlZFJlZ3NFeGNsdWRpbmdDYWxsc2l0ZVNhdmVzPFRtcD4oCisgICAgICAgICAg
ICBtX2NvZGUsIHByZXZJbnN0LCBuZXh0SW5zdCwKICAgICAgICAgICAgIFsmXSAoY29uc3QgVG1w
JiBhcmcsIEFyZzo6Um9sZSwgQmFuayBhcmdCYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAg
IGlmIChhcmdCYW5rICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjE1NTcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIHZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSB0
aGlzLT5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICBpZiAoY2FsbGVlU2F2
ZVJlZ2lzdGVycy5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBj
YWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKKyAgICBpZiAoIW1fY2FsbHNpdGVTYXZlcy5pc0Vt
cHR5KCkpCisgICAgICAgIG91dC5wcmludCgiQ2FsbHNpdGUgc2F2ZXM6ICIsIG1fY2FsbHNpdGVT
YXZlcywgIlxuIik7CiB9CiAKIHVuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5z
aWduZWQgaW5kZXgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDExIEBAIHB1YmxpYzoKICAgICBi
b29sIGlzUGlubmVkKFJlZyByZWcpIGNvbnN0IHsgcmV0dXJuICFtdXRhYmxlUmVncygpLmdldChy
ZWcpOyB9CiAgICAgdm9pZCBwaW5SZWdpc3RlcihSZWcpOwogICAgIAorICAgIC8vIENhbGxzaXRl
LXNhdmVzIGFyZSBhIGhhY2t5IHdheSBvZiBzaW11bGF0aW5nIGNhbGxlZS1zYXZlcy4gSXQncyBh
IGhpbnQgdG8gdGhlIHJlZ2lzdGVyCisgICAgLy8gYWxsb2NhdG9yLCBhbmQgbmVlZCBub3QgYmUg
b2JleWVkLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxsc2l0ZVNhdmVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsc2l0ZVNhdmVzOyB9CisgICAgdm9pZCBhZGRDYWxsc2l0ZVNhdmVzKGNvbnN0
IFJlZ2lzdGVyU2V0JiBzZXQpIHsgbV9jYWxsc2l0ZVNhdmVzLm1lcmdlKHNldCk7IH0KKyAgICAK
ICAgICB2b2lkIHNldE9wdExldmVsKHVuc2lnbmVkIG9wdExldmVsKSB7IG1fb3B0TGV2ZWwgPSBv
cHRMZXZlbDsgfQogICAgIHVuc2lnbmVkIG9wdExldmVsKCkgY29uc3QgeyByZXR1cm4gbV9vcHRM
ZXZlbDsgfQogICAgIApAQCAtMzMyLDYgKzMzNyw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
Zz4gbV9ncFJlZ3NJblByaW9yaXR5T3JkZXI7CiAgICAgVmVjdG9yPFJlZz4gbV9mcFJlZ3NJblBy
aW9yaXR5T3JkZXI7CiAgICAgUmVnaXN0ZXJTZXQgbV9tdXRhYmxlUmVnczsKKyAgICBSZWdpc3Rl
clNldCBtX2NhbGxzaXRlU2F2ZXM7CiAgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+IG1f
c3RhY2tTbG90czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Js
b2NrczsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24g
MjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJBaXJPcGNvZGVVdGls
cy5oIgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJl
cG9ydFVzZWRSZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJBaXJTYXZlQ2FsbHNpdGVTYXZlcy5oIgog
I2luY2x1ZGUgIkFpclNpbXBsaWZ5Q0ZHLmgiCiAjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJCM0NvbW1vbi5oIgpAQCAtMTEwLDYgKzExMSw5IEBAIHZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIFJ1biB0aGlzIHBoYXNlIG5vdyBi
ZWNhdXNlIHRoZSBsYXRlciBwaGFzZXMgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgY29uY2VwdC4KKyAg
ICAgICAgc2F2ZUNhbGxzaXRlU2F2ZXMoY29kZSk7CisgICAgICAgIAogICAgICAgICAvLyBUaGlz
IHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRz
IGlmIHBvc3NpYmxlLiBJdAogICAgICAgICAvLyBkb2VzIHRoaXMgYnkgbWluaW1pemluZyB0aGUg
YW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIKICAgICAg
ICAgLy8gYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZCB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0
ZXJzIHRob3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNw
cAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDMxIEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK1Jl
Z2lzdGVyU2V0IEluc3Q6OmNhbGxzaXRlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBpZiAoa2lu
ZC5vcGNvZGUgIT0gUGF0Y2gpCisgICAgICAgIHJldHVybiBSZWdpc3RlclNldCgpOworICAgIAor
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IGV4dHJhQ2xvYmJlcmVkUmVncygpOworICAgIHJlc3Vs
dC5tZXJnZShleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICByZXN1bHQuZmlsdGVyKGNv
ZGUuY2FsbHNpdGVTYXZlcygpKTsKKyAgICAKKyAgICBmb3JFYWNoPFJlZz4oCisgICAgICAgIFsm
XSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnJlbW92ZShy
ZWcpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIElu
c3Q6Omhhc0Vhcmx5RGVmKCkKIHsKICAgICBpZiAoa2luZC5vcGNvZGUgPT0gUGF0Y2ggJiYgIWV4
dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDIxNTU3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE5
IEBAIHN0cnVjdCBJbnN0IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUg
RnVuY3Rvcj4KICAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVn
cyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKICAgICAK
KyAgICAvLyBMaWtlIHRoZSBhYm92ZSwgYnV0IGV4Y2x1ZGVzIHRoZSBjYWxsc2l0ZS1zYXZlcyBm
cm9tIHRoZSBjbG9iYmVyIHNldHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJl
ZFJlZ3NFeGNsdWRpbmdDYWxsc2l0ZVNhdmVzKENvZGUmLCBJbnN0KiBwcmV2SW5zdCwgSW5zdCog
bmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgbG93ZXIt
bGV2ZWwgZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIG11dGF0ZSB0aGUgZXh0cmEgY2xvYmJl
cmVkIHJlZ2lzdGVycworICAgIC8vIGJlZm9yZSB0aGV5IGFyZSBhbmFseXplZC4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgRXh0cmFDbG9iYmVy
c0ZpbHRlckZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaERlZldpdGhGaWx0ZXJlZEV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmMm
LCBjb25zdCBFeHRyYUNsb2JiZXJzRmlsdGVyRnVuYyYpOworICAgIAorICAgIC8vIFRoZSBhY3R1
YWwgY2FsbHNpdGUtc2F2ZXMgb2YgYW4gaW5zdHJ1Y3Rpb24gYXJlIGl0cyBjbG9iYmVyZWQgcmVn
aXN0ZXJzIGludGVyc2VjdGVkIHdpdGgKKyAgICAvLyB0aGUgY2FsbHNpdGUgc2F2ZXMsIGV4Y2x1
ZGluZyByZWdpc3RlcnMgbWVudGlvbmVkIGV4cGxpY2l0bHkgaW4gRGVmcy4KKyAgICBSZWdpc3Rl
clNldCBjYWxsc2l0ZVNhdmVzKENvZGUmKTsKKyAgICAKICAgICAvLyBTb21lIHN1bW1hcmllcyBh
Ym91dCBhbGwgYXJndW1lbnRzLiBUaGVzZSBhcmUgdXNlZnVsIGZvciBuZWVkc1BhZGRpbmcoKS4K
ICAgICBib29sIGhhc0Vhcmx5RGVmKCk7CiAgICAgYm9vbCBoYXNMYXRlVXNlT3JEZWYoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJl
dmlzaW9uIDIxNTU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMjcgKzc2LDU5IEBAIGlubGluZSB2b2lkIElu
c3Q6OmZvckVhY2hEZWYoSW5zdCogcHJldkkKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZldp
dGhFeHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVu
YW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
Ci0gICAgZm9yRWFjaERlZjxUaGluZz4ocHJldkluc3QsIG5leHRJbnN0LCBmdW5jdG9yKTsKKyAg
ICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEZpbHRlcmVkRXh0cmFDbG9iYmVyZWRSZWdzPFRoaW5nPigK
KyAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LCBmdW5jLAorICAgICAgICBbJl0gKGNvbnN0IFJl
Z2lzdGVyU2V0JiBzZXQsIGNvbnN0IGF1dG8mIGNvbnRpbnVhdGlvbikgeworICAgICAgICAgICAg
Y29udGludWF0aW9uKHNldCk7CisgICAgICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
aGluZywgdHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0
cmFDbG9iYmVyZWRSZWdzRXhjbHVkaW5nQ2FsbHNpdGVTYXZlcygKKyAgICBDb2RlJiBjb2RlLCBJ
bnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
SW5zdDo6Zm9yRWFjaERlZldpdGhGaWx0ZXJlZEV4dHJhQ2xvYmJlcmVkUmVnczxUaGluZz4oCisg
ICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwgZnVuYywKKyAgICAgICAgWyZdIChjb25zdCBSZWdp
c3RlclNldCYgc2V0LCBjb25zdCBhdXRvJiBjb250aW51YXRpb24pIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHdpdGhvdXRDYWxsc2l0ZVNhdmVzID0gc2V0OworICAgICAgICAgICAgd2l0aG91
dENhbGxzaXRlU2F2ZXMuZXhjbHVkZShjb2RlLmNhbGxzaXRlU2F2ZXMoKSk7CisgICAgICAgICAg
ICBjb250aW51YXRpb24od2l0aG91dENhbGxzaXRlU2F2ZXMpOworICAgICAgICB9KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIEV4dHJhQ2xv
YmJlcnNGaWx0ZXJGdW5jPgoraW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZldpdGhGaWx0ZXJl
ZEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICBJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3Qs
IGNvbnN0IEZ1bmMmIGZ1bmMsCisgICAgY29uc3QgRXh0cmFDbG9iYmVyc0ZpbHRlckZ1bmMmIGV4
dHJhQ2xvYmJlcnNGaWx0ZXJGdW5jKQoreworICAgIGZvckVhY2hEZWY8VGhpbmc+KHByZXZJbnN0
LCBuZXh0SW5zdCwgZnVuYyk7CiAKICAgICBBcmc6OlJvbGUgcmVnRGVmUm9sZTsKICAgICAKICAg
ICBhdXRvIHJlcG9ydFJlZyA9IFsmXSAoUmVnIHJlZykgewogICAgICAgICBCYW5rIGJhbmsgPSBy
ZWcuaXNHUFIoKSA/IEdQIDogRlA7Ci0gICAgICAgIGZ1bmN0b3IoVGhpbmcocmVnKSwgcmVnRGVm
Um9sZSwgYmFuaywgY29uc2VydmF0aXZlV2lkdGgoYmFuaykpOworICAgICAgICBmdW5jKFRoaW5n
KHJlZyksIHJlZ0RlZlJvbGUsIGJhbmssIGNvbnNlcnZhdGl2ZVdpZHRoKGJhbmspKTsKICAgICB9
OwogCiAgICAgaWYgKHByZXZJbnN0ICYmIHByZXZJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkg
ewogICAgICAgICByZWdEZWZSb2xlID0gQXJnOjpEZWY7Ci0gICAgICAgIHByZXZJbnN0LT5leHRy
YUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CisgICAgICAgIGV4dHJhQ2xvYmJl
cnNGaWx0ZXJGdW5jKAorICAgICAgICAgICAgcHJldkluc3QtPmV4dHJhQ2xvYmJlcmVkUmVncygp
LAorICAgICAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7CisgICAgICAgICAg
ICAgICAgc2V0LmZvckVhY2gocmVwb3J0UmVnKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KIAog
ICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAg
ICAgICAgcmVnRGVmUm9sZSA9IEFyZzo6RWFybHlEZWY7Ci0gICAgICAgIG5leHRJbnN0LT5leHRy
YUVhcmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVwb3J0UmVnKTsKKyAgICAgICAgZXh0cmFD
bG9iYmVyc0ZpbHRlckZ1bmMoCisgICAgICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2Ji
ZXJlZFJlZ3MoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgewor
ICAgICAgICAgICAgICAgIHNldC5mb3JFYWNoKHJlcG9ydFJlZyk7CisgICAgICAgICAgICB9KTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2F2ZUNh
bGxzaXRlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNhdmVDYWxsc2l0ZVNh
dmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisj
aW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJSZWdpc3Rlck1hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgc2F2
ZUNhbGxzaXRlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgInNhdmVDYWxsc2l0ZVNhdmVzIik7CisgICAgCisgICAgaWYgKGNvZGUuY2FsbHNpdGVT
YXZlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZ2lzdGVyTWFw
PFN0YWNrU2xvdCo+IHNhdmVTbG90czsKKyAgICBmb3IgKFJlZyByZWcgOiBjb2RlLmNhbGxzaXRl
U2F2ZXMoKSkKKyAgICAgICAgc2F2ZVNsb3RzW3JlZ10gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBT
dGFja1Nsb3RLaW5kOjpTcGlsbCk7CisgICAgCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29k
ZSk7CisgICAgCisgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IGNhbGxzaXRlU2F2ZXNU
b1NhdmU7CisgICAgCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxzaXRlU2F2
ZXMgPSBpbnN0LmNhbGxzaXRlU2F2ZXMoY29kZSk7CisgICAgICAgICAgICBjYWxsc2l0ZVNhdmVz
LmZpbHRlcihsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIGlmICghY2FsbHNpdGVTYXZl
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY2FsbHNpdGVTYXZlc1RvU2F2ZS5hZGQoJmlu
c3QsIGNhbGxzaXRlU2F2ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2NhbENhbGMu
ZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEluc2VydGlv
blNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJs
b2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgYXV0byBpdGVyID0gY2FsbHNpdGVTYXZl
c1RvU2F2ZS5maW5kKCZpbnN0KTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGNhbGxzaXRlU2F2
ZXNUb1NhdmUuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgU2h1ZmZsZVBhaXIgcGFpcihUbXAocmVnKSwgQXJnOjpzdGFjayhzYXZlU2xvdHNbcmVnXSks
IFdpZHRoNjQpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KGluc3RJ
bmRleCwgcGFpci5pbnN0KG51bGxwdHIsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBpdGVyLT52YWx1ZSkgeworICAgICAgICAgICAgICAg
IFNodWZmbGVQYWlyIHBhaXIoQXJnOjpzdGFjayhzYXZlU2xvdHNbcmVnXSksIFRtcChyZWcpLCBX
aWR0aDY0KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5k
ZXggKyAxLCBwYWlyLmluc3QobnVsbHB0ciwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNhdmVDYWxs
c2l0ZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTYXZlQ2FsbHNpdGVTYXZlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBBaXIncyBy
ZWdpc3RlciBhbGxvY2F0b3JzIGRvbid0IGhhdmUgdG8gYm90aGVyIHNhdmluZyBzby1jYWxsZWQg
ImNhbGxzaXRlIHNhdmUiIHJlZ2lzdGVycywKKy8vIHdoaWNoIHRoZSBjbGllbnQgb2YgQjMgY2Fu
IGRlc2lnbmF0ZS4gV2UgaW1wbGVtZW50IHRoaXMgYnkgc2F2aW5nIHRoZW0gYXJvdW5kIHRoZSBj
YWxsc2l0ZSwKKy8vIHdoaWNoIHRoaXMgcGhhc2UgZG9lcy4KKwordm9pZCBzYXZlQ2FsbHNpdGVT
YXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmNwcAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkZUTEZvck9T
UkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTY1LDYgKzY2LDgg
QEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICBmaW5hbGl6ZXIgPSBzdGF0aWNfY2Fz
dDxKSVRGaW5hbGl6ZXIqPihncmFwaC5tX3BsYW4uZmluYWxpemVyLmdldCgpKTsKIAogICAgIHBy
b2MgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2NlZHVyZT4oKTsKKyAgICAKKyAgICBhZGRSZWFzb25h
YmxlQ2FsbHNpdGVTYXZlcygqcHJvYyk7CiAKICAgICBwcm9jLT5zZXRPcmlnaW5QcmludGVyKAog
ICAgICAgICBbdGhpc10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2VJZi5oIgorI2luY2x1ZGUgIkIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaCIKICNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNDb21waWxlLmgiCkBAIC0xMzUwLDcgKzEzNTEsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndh
c21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAKICAg
ICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotCisgICAgCiAgICAgcHJvY2VkdXJlLnNldE9yaWdpblBy
aW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKICAgICAgICAgaWYg
KG9yaWdpbi5kYXRhKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2Vf
Y2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOwpAQCAtMTM2Miw2ICsxMzYzLDggQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgIC8vIG9wdExldmVsPTEuCiAg
ICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7CiAgICAgCisgICAgYWRk
UmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMocHJvY2VkdXJlKTsKKyAgICAKICAgICBwcm9jZWR1cmUu
c2V0T3B0TGV2ZWwob3B0TGV2ZWwpOwogCiAgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8s
IHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307764</attachid>
            <date>2017-04-21 11:51:51 -0700</date>
            <delta_ts>2017-04-21 11:51:51 -0700</delta_ts>
            <desc>full attempt</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46965</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE3LTA0LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBzdXBwb3J0IGNhbGxzaXRlLXNhdmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEwNzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGIzL0IzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OmFkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzKToKKyAgICAgICAgKiBiMy9CM0Fk
ZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVnc0luUHJpb3JpdHlPcmRl
cik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZENhbGxzaXRlU2F2ZXMpOgorICAg
ICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9B
aXJDb2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmNhbGxzaXRlU2F2ZXMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRDYWxsc2l0ZVNhdmVzKToKKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpwcmVwYXJl
Rm9yR2VuZXJhdGlvbik6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpjYWxsc2l0ZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWly
SW5zdC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdz
RXhjbHVkaW5nQ2FsbHNpdGVTYXZlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZv
ckVhY2hEZWZXaXRoRmlsdGVyZWRFeHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTYXZlQ2FsbHNpdGVTYXZlcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpzYXZlQ2FsbHNpdGVTYXZlcyk6CisgICAgICAgICogYjMvYWlyL0FpclNhdmVDYWxsc2l0ZVNh
dmVzLmg6IEFkZGVkLgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKwogMjAxNy0wNC0xNSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIFNoYXJl
ZEFycmF5QnVmZmVyIGluIHRoZSBERkcrRlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw2
ICszODYsMTAgQEAKIAkJMEYzQzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLzsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgfTsKKwkJMEYzRkJCQkYxRUE5NTBDNzAwMjBF
QTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0ZCQkJEMUVBOTUwQzUwMDIwRUEzQSAvKiBBaXJTYXZl
Q2FsbHNpdGVTYXZlcy5jcHAgKi87IH07CisJCTBGM0ZCQkMwMUVBOTUwQ0EwMDIwRUEzQSAvKiBB
aXJTYXZlQ2FsbHNpdGVTYXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzRkJCQkUxRUE5NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNh
dmVzLmggKi87IH07CisJCTBGM0ZCQkMzMUVBOTU1Q0MwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFi
bGVDYWxsc2l0ZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0ZCQkMxMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFibGVDYWxs
c2l0ZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEYzRkJCQzQxRUE5NTVDRjAwMjBFQTNBIC8qIEIzQWRk
UmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0ZCQkMyMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFi
bGVDYWxsc2l0ZVNhdmVzLmggKi87IH07CiAJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBB
aXJPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjE4MzMyMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3
RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3
MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMjkzMCw2ICsyOTM0LDEwIEBACiAJCTBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZn
L0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHBhdGggPSBk
ZmcvREZHUHJlUG9zdE51bWJlcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNGQkJCRDFFQTk1MEM1MDAyMEVBM0EgLyogQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYzRkJCQkUxRUE5NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0
ZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNhdmVDYWxsc2l0
ZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzRkJCQzExRUE5NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVh
c29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5jcHA7IHBhdGggPSBiMy9CM0FkZFJl
YXNvbmFibGVDYWxsc2l0ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzRkJCQzIxRUE5NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBZGRSZWFzb25hYmxlQ2FsbHNp
dGVTYXZlcy5oOyBwYXRoID0gYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFs
dWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292
ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEz
MUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2
QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU0MDMsNiArNTQxMSw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJMEYzRkJCQzExRUE5
NTVDQTAwMjBFQTNBIC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwICovLAorCQkJ
CTBGM0ZCQkMyMUVBOTU1Q0EwMDIwRUEzQSAvKiBCM0FkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVz
LmggKi8sCiAJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5jcHAgKi8sCiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVl
LmNwcCAqLywKQEAgLTU2NTYsNiArNTY2Niw4IEBACiAJCQkJMEZGNEI0QkIxRTg4NDQ5NTAwREJC
RTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcwM0ExQkU0NUYwQTAwNjJBNjI5
IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLAogCQkJCTBGNDU3MDNCMUJFNDVGMEEw
MDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi8sCisJCQkJMEYzRkJCQkQxRUE5
NTBDNTAwMjBFQTNBIC8qIEFpclNhdmVDYWxsc2l0ZVNhdmVzLmNwcCAqLywKKwkJCQkwRjNGQkJC
RTFFQTk1MEM1MDAyMEVBM0EgLyogQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuaCAqLywKIAkJCQkwRjMz
OERGQjFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwICovLAogCQkJCTBGMzM4
REZDMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oICovLAogCQkJCTBGRUM4NTYy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKQEAgLTg2MzAsNiArODY0Miw3
IEBACiAJCQkJRTNGRkM4NTMxREFEN0QxNTAwREVBNTNFIC8qIERPTUpJVFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMzE4RkUwMUNBQzk4MkYwMERGQ0M1NCAvKiBFQ01BU2NyaXB0
U3BlY0ludGVybmFsRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjNGQkJDNDFFQTk1
NUNGMDAyMEVBM0EgLyogQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0
eUlucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4
OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkwNDksNiArOTA2Miw3IEBA
CiAJCQkJQkMxOEM0MkEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzRkJCQzAxRUE5NTBDQTAwMjBFQTNBIC8q
IEFpclNhdmVDYWxsc2l0ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwNDYsNiArMTAwNjAsNyBAQAogCQkJCUE3
QThBRjM2MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNDE1ODQxRDc4RkI0QzAwREY4RDA5IC8qIEFycmF5Q29u
dmVudGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzRkJCQzMxRUE5NTVDQzAwMjBFQTNB
IC8qIEIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTJCNzRCNEExRENDMDQ2OTAwMzQxNTdEIC8qIEFycmF5SXRlcmF0b3JBZGFwdGl2ZVdhdGNocG9p
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBDIC8qIEFy
cmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQxNUQw
NzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjg2
LDYgKzEwMzAxLDcgQEAKIAkJCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAgLyogREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUQwODVEMUI4Q0Y5OUQwMDEx
NDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0U2MTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGM0ZCQkJGMUVBOTUwQzcwMDIwRUEzQSAvKiBBaXJTYXZlQ2FsbHNp
dGVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFODE5RDBCQTdEMDBCMUQxQjUg
LyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FkZFJlYXNvbmFibGVDYWxsc2l0ZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkUmVhc29uYWJsZUNh
bGxzaXRlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQWRkUmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBhZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcyhQcm9jZWR1
cmUmIHByb2MpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSBwcm9jLnJlZ3NJblBy
aW9yaXR5T3JkZXIoRlApOworICAgIFJlZ2lzdGVyU2V0IGNhbGxzaXRlU2F2ZXM7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gcmVncy5zaXplKCksIGNvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZDYWxs
c2l0ZUNhbGxlZVNhdmVzKCk7IGktLSAmJiBjb3VudC0tOykKKyAgICAgICAgY2FsbHNpdGVTYXZl
cy5hZGQocmVnc1tpXSk7CisgICAgcHJvYy5hZGRDYWxsc2l0ZVNhdmVzKGNhbGxzaXRlU2F2ZXMp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZFJlYXNvbmFibGVDYWxs
c2l0ZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
UmVhc29uYWJsZUNhbGxzaXRlU2F2ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGlzIGFu
IG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgdGVsbHMgdGhlIFByb2NlZHVyZSB0byB1c2UgY2FsbHNp
dGUgc2F2ZXMuIFdlIGRvbid0IG1ha2UKKy8vIHRoaXMgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCdz
IGEgd2VpcmQgY29uZmlndXJhdGlvbiB0aGF0IG1heSBub3QgcHJvZml0IGV2ZXJ5b25lLgordm9p
ZCBhZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxNTU3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyOSwxMSArMzI5LDIxIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
SW4KICAgICBjb2RlKCkucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoc2l6ZSk7CiB9CiAK
K2NvbnN0IFZlY3RvcjxSZWc+JiBQcm9jZWR1cmU6OnJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBi
YW5rKSBjb25zdAoreworICAgIHJldHVybiBjb2RlKCkucmVnc0luUHJpb3JpdHlPcmRlcihiYW5r
KTsKK30KKwogdm9pZCBQcm9jZWR1cmU6OnBpblJlZ2lzdGVyKFJlZyByZWcpCiB7CiAgICAgY29k
ZSgpLnBpblJlZ2lzdGVyKHJlZyk7CiB9CiAKK3ZvaWQgUHJvY2VkdXJlOjphZGRDYWxsc2l0ZVNh
dmVzKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCit7CisgICAgY29kZSgpLmFkZENhbGxzaXRlU2F2
ZXMoc2V0KTsKK30KKwogdm9pZCBQcm9jZWR1cmU6OnNldE9wdExldmVsKHVuc2lnbmVkIG9wdExl
dmVsKQogewogICAgIG1fb3B0TGV2ZWwgPSBvcHRMZXZlbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDEwICsyMjks
MTUgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplSW5CeXRlcygpIGNv
bnN0OwogICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXModW5zaWduZWQgc2l6
ZSk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJ
blByaW9yaXR5T3JkZXIoQmFuaykgY29uc3Q7CiAKICAgICAvLyBUaGlzIHRlbGxzIHRoZSByZWdp
c3RlciBhbGxvY2F0b3JzIHRvIHN0YXkgYXdheSBmcm9tIHRoaXMgcmVnaXN0ZXIuCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwaW5SZWdpc3RlcihSZWcpOwogICAgIAorICAgIC8vIFRlbGwg
dGhlIGNvbXBpbGVyIHRoYXQgdGhlc2UgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkIGFzIGNhbGxzaXRl
LXNhdmVzLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkQ2FsbHNpdGVTYXZlcyhjb25z
dCBSZWdpc3RlclNldCYpOworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0T3B0
TGV2ZWwodW5zaWduZWQgdmFsdWUpOwogICAgIHVuc2lnbmVkIG9wdExldmVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcHRMZXZlbDsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHAJKHJldmlzaW9uIDIxNTU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjA4LDE1ICsxNjA4LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKHRy
YWNlRGVidWcpCiAgICAgICAgICAgICBkYXRhTG9nKCJCdWlsZGluZyBiZXR3ZWVuICIsIHBvaW50
ZXJEdW1wKHByZXZJbnN0KSwgIiBhbmQgIiwgcG9pbnRlckR1bXAobmV4dEluc3QpLCAiOlxuIik7
CiAKLSAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8VG1wPigK
LSAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERl
ZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3NFeGNsdWRpbmdDYWxsc2l0ZVNhdmVzPFRtcD4oCisgICAg
ICAgICAgICBtX2NvZGUsIHByZXZJbnN0LCBuZXh0SW5zdCwKICAgICAgICAgICAgIFsmXSAoY29u
c3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQmFuayBhcmdCYW5rLCBXaWR0aCkgewogICAgICAgICAg
ICAgICAgIGlmIChhcmdCYW5rICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRl
cmZlcmUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIGFsbCB0aGUgZXh0cmEgY2xvYmJlcmVkIFRt
cHMuCi0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCB1c2UgZm9yRWFjaERlZldpdGhF
eHRyYUNsb2JiZXJlZFJlZ3MoKSBoZXJlIHNpbmNlIGNvbG9yZWQgVG1wcwotICAgICAgICAgICAg
ICAgIC8vIGRvIG5vdCBuZWVkIGludGVyZmVyZW5jZSBlZGdlcyBpbiBvdXIgaW1wbGVtZW50YXRp
b24uCiAgICAgICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxUbXA+KAogICAgICAgICAgICAg
ICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1w
JiBvdGhlckFyZywgQXJnOjpSb2xlLCBCYW5rIGFyZ0JhbmssIFdpZHRoKSB7CkBAIC0xNjI4LDcg
KzE2MjYsMjggQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+YWRk
RWRnZShhcmcsIG90aGVyQXJnKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KTsKLQorICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBj
YWxsc2l0ZSBzYXZlcyBvZiB0aGlzIGluc3RydWN0aW9uIGludGVyZmVyZSB3aXRoIGFsbCBvZgor
ICAgICAgICAvLyB0aGUgdGVtcG9yYXJpZXMgbWVudGlvbmVkIGluIHRoaXMgaW5zdHJ1Y3Rpb24u
IE5vdGUgdGhhdCBib3RoIG5leHRJbnN0IGFuZCBwcmV2SW5zdAorICAgICAgICAvLyBib3RoIHJh
bmdlIG92ZXIgYWxsIGluc3RydWN0aW9ucywgc28gaWYgd2UncmUgZG9pbmcgc29tZXRoaW5nIHRo
YXQgZG9lc24ndCBjYXJlCisgICAgICAgIC8vIGFib3V0IGJvdW5kYXJpZXMsIHdlIGNhbiBqdXN0
IHBpY2sgZWl0aGVyIG9uZS4KKyAgICAgICAgaWYgKG5leHRJbnN0KSB7CisgICAgICAgICAgICBp
ZiAoUmVnaXN0ZXJTZXQgY2FsbHNpdGVTYXZlcyA9IG5leHRJbnN0LT5jYWxsc2l0ZVNhdmVzKG1f
Y29kZSkpIHsKKyAgICAgICAgICAgICAgICBuZXh0SW5zdC0+Zm9yRWFjaFRtcEZhc3QoCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHNpdGVTYXZlcy5mb3JFYWNoKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAgcmVnVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWdUbXAuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPmFkZEVkZ2UodG1wLCByZWdUbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgaWYgKHByZXZJbnN0ICYmIG1heUJlQ29hbGVzY2FibGUoKnByZXZJ
bnN0KSkgewogICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdGhlIFVzZSgpIG9mIHRoaXMg
bW92ZSB0byBpbnRlcmZlcmUgd2l0aCB0aGUgRGVmKCksIGV2ZW4gaWYgaXQgaXMgbGl2ZQogICAg
ICAgICAgICAgLy8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdlIHdlcmUgdG8gYWRkIHRoZSBpbnRlcmZl
cmVuY2UgZWRnZSwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0bwpAQCAtMTcwMiw4ICsxNzIxLDgg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYWRkRWRnZXMoSW5zdCogcHJldkluc3QsIEluc3QqIG5l
eHRJbnN0LCB0eXBlbmFtZSBUbXBMaXZlbmVzczxiYW5rPjo6TG9jYWxDYWxjOjpJdGVyYWJsZSBs
aXZlVG1wcykKICAgICB7CiAgICAgICAgIC8vIEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3aXRo
IGV2ZXJ0aGluZyBsaXZlLgotICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJl
cmVkUmVnczxUbXA+KAotICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAorICAgICAgICBJ
bnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVnc0V4Y2x1ZGluZ0NhbGxzaXRlU2F2
ZXM8VG1wPigKKyAgICAgICAgICAgIG1fY29kZSwgcHJldkluc3QsIG5leHRJbnN0LAogICAgICAg
ICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlLCBCYW5rIGFyZ0JhbmssIFdpZHRo
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ0JhbmsgIT0gYmFuaykKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCShyZXZpc2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDggQEAgdm9pZCBDb2RlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IHRoaXMtPmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgp
OwogICAgIGlmIChjYWxsZWVTYXZlUmVnaXN0ZXJzLnNpemUoKSkKICAgICAgICAgb3V0LnByaW50
KCJDYWxsZWUgc2F2ZXM6ICIsIGNhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworICAgIGlmICgh
bV9jYWxsc2l0ZVNhdmVzLmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KCJDYWxsc2l0ZSBz
YXZlczogIiwgbV9jYWxsc2l0ZVNhdmVzLCAiXG4iKTsKIH0KIAogdW5zaWduZWQgQ29kZTo6Zmlu
ZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAs
MTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNQaW5uZWQoUmVnIHJlZykgY29uc3QgeyByZXR1cm4g
IW11dGFibGVSZWdzKCkuZ2V0KHJlZyk7IH0KICAgICB2b2lkIHBpblJlZ2lzdGVyKFJlZyk7CiAg
ICAgCisgICAgLy8gQ2FsbHNpdGUtc2F2ZXMgYXJlIGEgaGFja3kgd2F5IG9mIHNpbXVsYXRpbmcg
Y2FsbGVlLXNhdmVzLiBJdCdzIGEgaGludCB0byB0aGUgcmVnaXN0ZXIKKyAgICAvLyBhbGxvY2F0
b3IsIGFuZCBuZWVkIG5vdCBiZSBvYmV5ZWQuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGxz
aXRlU2F2ZXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxzaXRlU2F2ZXM7IH0KKyAgICB2b2lkIGFk
ZENhbGxzaXRlU2F2ZXMoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeyBtX2NhbGxzaXRlU2F2ZXMu
bWVyZ2Uoc2V0KTsgfQorICAgIAogICAgIHZvaWQgc2V0T3B0TGV2ZWwodW5zaWduZWQgb3B0TGV2
ZWwpIHsgbV9vcHRMZXZlbCA9IG9wdExldmVsOyB9CiAgICAgdW5zaWduZWQgb3B0TGV2ZWwoKSBj
b25zdCB7IHJldHVybiBtX29wdExldmVsOyB9CiAgICAgCkBAIC0zMzIsNiArMzM3LDcgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVnPiBtX2dwUmVnc0luUHJpb3JpdHlPcmRlcjsKICAgICBWZWN0
b3I8UmVnPiBtX2ZwUmVnc0luUHJpb3JpdHlPcmRlcjsKICAgICBSZWdpc3RlclNldCBtX211dGFi
bGVSZWdzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbHNpdGVTYXZlczsKICAgICBTcGFyc2VDb2xs
ZWN0aW9uPFN0YWNrU2xvdD4gbV9zdGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFNwYXJzZUNvbGxlY3Rpb248U3BlY2lhbD4g
bV9zcGVjaWFsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDg2ICsxMDUsODcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLQotICAgIHZvaWQgZXhlY3V0ZUluc3QoKQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JBbGxBbGlhc2VzKGNvbnN0IEZ1bmMmIGZ1bmMpCiAg
ICAgewogICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQobV9pbnN0SW5kZXgpOwogCi0g
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEV4ZWN1dGluZyAi
LCBpbnN0LCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKLQotICAgICAgICBJbnN0Ojpmb3JFYWNoRGVm
V2l0aEV4dHJhQ2xvYmJlcmVkUmVnczxBcmc+KAotICAgICAgICAgICAgJmluc3QsICZpbnN0LAot
ICAgICAgICAgICAgWyZdIChjb25zdCBBcmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICAgIENsb2JiZXJpbmcgIiwgYXJnLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLmNsb2JiZXIoYXJnKTsKLSAgICAgICAgICAgIH0pOwotCiAgICAgICAgIHN3aXRjaCAo
aW5zdC5raW5kLm9wY29kZSkgewogICAgICAgICBjYXNlIE1vdmU6CiAgICAgICAgICAgICBpZiAo
aW5zdC5hcmdzWzBdLmlzU29tZUltbSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJn
c1sxXS5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0Nv
bnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnZhbHVlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZnVuYyhSZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1sw
XS52YWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNTcGlsbFNsb3QoaW5zdC5h
cmdzWzFdKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhTbG90Q29uc3Qo
aW5zdC5hcmdzWzFdLnN0YWNrU2xvdCgpLCBpbnN0LmFyZ3NbMF0udmFsdWUoKSkpOworICAgICAg
ICAgICAgICAgICAgICBmdW5jKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIGlu
c3QuYXJnc1swXS52YWx1ZSgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3BpbGxTbG90
KGluc3QuYXJnc1swXSkgJiYgaW5zdC5hcmdzWzFdLmlzUmVnKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRG
b3IoaW5zdC5hcmdzWzBdKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhS
ZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksICpjb25zdGFudCkpOwotICAgICAgICAgICAgICAg
IG1fc3RhdGUuYWRkQWxpYXMoCi0gICAgICAgICAgICAgICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdz
WzFdLnJlZygpLCBpbnN0LmFyZ3NbMF0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6OkFsbEJpdHMpKTsK
KyAgICAgICAgICAgICAgICAgICAgZnVuYyhSZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksICpj
b25zdGFudCkpOworICAgICAgICAgICAgICAgIGZ1bmMoUmVnU2xvdChpbnN0LmFyZ3NbMV0ucmVn
KCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChpbnN0LmFyZ3NbMF0uaXNSZWcoKSAmJiBpc1NwaWxsU2xvdChpbnN0
LmFyZ3NbMV0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4g
Y29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJnc1swXSkpCi0gICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5zdGFja1Ns
b3QoKSwgKmNvbnN0YW50KSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKLSAg
ICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sx
XS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOworICAgICAgICAgICAgICAgICAgICBm
dW5jKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksICpjb25zdGFudCkpOworICAg
ICAgICAgICAgICAgIGZ1bmMoUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sx
XS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNb3ZlMzI6CiAgICAgICAgICAgICBpZiAoaW5z
dC5hcmdzWzBdLmlzU29tZUltbSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1sx
XS5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0
KGluc3QuYXJnc1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52
YWx1ZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBmdW5jKFJlZ0NvbnN0KGluc3QuYXJnc1sx
XS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52YWx1ZSgpKSkpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzU3BpbGxTbG90KGluc3QuYXJnc1sxXSkpCi0gICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5z
dGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52YWx1ZSgpKSkp
OworICAgICAgICAgICAgICAgICAgICBmdW5jKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tT
bG90KCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0LmFyZ3NbMF0udmFsdWUoKSkpKTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzBdKSAmJiBpbnN0LmFy
Z3NbMV0uaXNSZWcoKSkgewogICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0
X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0pKQotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWco
KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCpjb25zdGFudCkpKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLmFkZEFsaWFzKAotICAgICAgICAgICAgICAgICAgICBSZWdTbG90KGluc3QuYXJnc1sx
XS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpaRXh0MzIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZnVuYyhSZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIHN0YXRp
Y19jYXN0PHVpbnQzMl90PigqY29uc3RhbnQpKSk7CisgICAgICAgICAgICAgICAgZnVuYyhSZWdT
bG90KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90
OjpaRXh0MzIpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdC5hcmdzWzBdLmlzUmVnKCkg
JiYgaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkgewogICAgICAgICAgICAgICAgIGlmIChzdGQ6
Om9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFy
Z3NbMF0pKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChp
bnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIHN0YXRpY19jYXN0PGludDMyX3Q+KCpjb25zdGFudCkp
KTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKAotICAgICAgICAgICAgICAgICAg
ICBSZWdTbG90KGluc3QuYXJnc1swXS5yZWcoKSwgaW5zdC5hcmdzWzFdLnN0YWNrU2xvdCgpLCBS
ZWdTbG90OjpNYXRjaDMyKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMoU2xvdENvbnN0KGlu
c3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oKmNvbnN0YW50KSkp
OworICAgICAgICAgICAgICAgIGZ1bmMoUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3Qu
YXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6TWF0Y2gzMikpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNb3ZlRmxvYXQ6Ci0gICAgICAgICAg
ICBpZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzBdKSAmJiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSkg
ewotICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoCi0gICAgICAgICAgICAgICAgICAg
IFJlZ1Nsb3QoaW5zdC5hcmdzWzFdLnJlZygpLCBpbnN0LmFyZ3NbMF0uc3RhY2tTbG90KCksIFJl
Z1Nsb3Q6Ok1hdGNoMzIpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdC5hcmdzWzBdLmlz
UmVnKCkgJiYgaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkgewotICAgICAgICAgICAgICAgIG1f
c3RhdGUuYWRkQWxpYXMoCi0gICAgICAgICAgICAgICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdzWzBd
LnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6Ok1hdGNoMzIpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0pICYm
IGluc3QuYXJnc1sxXS5pc1JlZygpKQorICAgICAgICAgICAgICAgIGZ1bmMoUmVnU2xvdChpbnN0
LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6TWF0Y2gz
MikpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5zdC5hcmdzWzBdLmlzUmVnKCkgJiYgaXNTcGls
bFNsb3QoaW5zdC5hcmdzWzFdKSkKKyAgICAgICAgICAgICAgICBmdW5jKFJlZ1Nsb3QoaW5zdC5h
cmdzWzBdLnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6Ok1hdGNoMzIp
KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTW92ZURvdWJsZToKLSAgICAg
ICAgICAgIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0pICYmIGluc3QuYXJnc1sxXS5pc1Jl
ZygpKSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKLSAgICAgICAgICAgICAg
ICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3Qo
KSwgUmVnU2xvdDo6QWxsQml0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0LmFyZ3Nb
MF0uaXNSZWcoKSAmJiBpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0pKSB7Ci0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5hZGRBbGlhcygKLSAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFy
Z3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzU3BpbGxTbG90KGluc3QuYXJnc1sw
XSkgJiYgaW5zdC5hcmdzWzFdLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgZnVuYyhSZWdTbG90
KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpB
bGxCaXRzKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpbnN0LmFyZ3NbMF0uaXNSZWcoKSAmJiBp
c1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0pKQorICAgICAgICAgICAgICAgIGZ1bmMoUmVnU2xvdChp
bnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxs
Qml0cykpOwogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgIAogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGV4
ZWN1dGVJbnN0KCkKKyAgICB7CisgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2lu
c3RJbmRleCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRXhlY3V0aW5nICIsIGluc3QsICI6ICIsIG1fc3RhdGUsICJcbiIpOworCisgICAgICAgIElu
c3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPEFyZz4oCisgICAgICAgICAgICAm
aW5zdCwgJmluc3QsCisgICAgICAgICAgICBbJl0gKGNvbnN0IEFyZyYgYXJnLCBBcmc6OlJvbGUs
IEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQ2xvYmJlcmluZyAiLCBhcmcsICJcbiIpOworICAg
ICAgICAgICAgICAgIG1fc3RhdGUuY2xvYmJlcihhcmcpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICBmb3JBbGxBbGlhc2VzKAorICAgICAgICAgICAgWyZdIChjb25zdCBhdXRv
JiBhbGlhcykgeworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoYWxpYXMpOworICAg
ICAgICAgICAgfSk7CisgICAgfQorCiAgICAgdm9pZCBmaXhJbnN0KCkKICAgICB7CiAgICAgICAg
IEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CkBAIC0xOTIsNiArMTkzLDE3
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygi
Rml4aW5nIGluc3QgIiwgaW5zdCwgIjogIiwgbV9zdGF0ZSwgIlxuIik7CiAgICAgICAgIAorICAg
ICAgICAvLyBDaGVjayBpZiBhbGlhcyBhbmFseXNpcyBzYXlzIHRoYXQgdGhpcyBpcyB1bm5lY2Vz
c2FyeS4KKyAgICAgICAgYm9vbCBzaG91bGRMaXZlID0gdHJ1ZTsKKyAgICAgICAgZm9yQWxsQWxp
YXNlcygKKyAgICAgICAgICAgIFsmXSAoY29uc3QgYXV0byYgYWxpYXMpIHsKKyAgICAgICAgICAg
ICAgICBzaG91bGRMaXZlICY9ICFtX3N0YXRlLmNvbnRhaW5zKGFsaWFzKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBpZiAoIXNob3VsZExpdmUpIHsKKyAgICAgICAgICAgIGluc3QgPSBJbnN0
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8v
IEZpcnN0IGhhbmRsZSBzb21lIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zLgogICAgICAgICBzd2l0Y2gg
KGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgY2FzZSBNb3ZlOiB7CkBAIC0zMTYsNiArMzI4
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhIXJlZzsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ0NvbnN0
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlZyA9PSBvdGhl
ci5yZWcKKyAgICAgICAgICAgICAgICAmJiBjb25zdGFudCA9PSBvdGhlci5jb25zdGFudDsKKyAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
ICAgICB7CkBAIC0zNDgsNiArMzY2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBzbG90ICYmIHJlZzsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFJlZ1Nsb3QmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc2xvdCA9PSBvdGhlci5zbG90CisgICAgICAgICAgICAgICAgJiYgcmVn
ID09IG90aGVyLnJlZworICAgICAgICAgICAgICAgICYmIG1vZGUgPT0gb3RoZXIubW9kZTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
ICAgICB7CkBAIC0zODUsNiArNDEwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBzbG90OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgU2xvdENvbnN0JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHNsb3QgPT0gb3RoZXIuc2xvdAorICAgICAgICAgICAgICAgICYmIGNvbnN0YW50
ID09IG90aGVyLmNvbnN0YW50OworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTM5OCwxNSArNDI5LDI4IEBAIHByaXZh
dGU6CiAgICAgc3RydWN0IFN0YXRlIHsKICAgICAgICAgdm9pZCBhZGRBbGlhcyhjb25zdCBSZWdD
b25zdCYgbmV3QWxpYXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ0NvbnN0LmFwcGVuZChu
ZXdBbGlhcyk7CisgICAgICAgICAgICByZXR1cm4gcmVnQ29uc3QuYXBwZW5kKG5ld0FsaWFzKTsK
ICAgICAgICAgfQogICAgICAgICB2b2lkIGFkZEFsaWFzKGNvbnN0IFJlZ1Nsb3QmIG5ld0FsaWFz
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZWdTbG90LmFwcGVuZChuZXdBbGlhcyk7CisgICAg
ICAgICAgICByZXR1cm4gcmVnU2xvdC5hcHBlbmQobmV3QWxpYXMpOwogICAgICAgICB9CiAgICAg
ICAgIHZvaWQgYWRkQWxpYXMoY29uc3QgU2xvdENvbnN0JiBuZXdBbGlhcykKICAgICAgICAgewot
ICAgICAgICAgICAgc2xvdENvbnN0LmFwcGVuZChuZXdBbGlhcyk7CisgICAgICAgICAgICByZXR1
cm4gc2xvdENvbnN0LmFwcGVuZChuZXdBbGlhcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgUmVnQ29uc3QmIGFsaWFzKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gcmVnQ29uc3QuY29udGFpbnMoYWxpYXMpOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgUmVnU2xvdCYgYWxpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiByZWdTbG90LmNvbnRhaW5zKGFsaWFzKTsKKyAgICAgICAgfQorICAgICAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFNsb3RDb25zdCYgYWxpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBzbG90Q29uc3QuY29udGFpbnMoYWxpYXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgY29uc3QgUmVnQ29uc3QqIGdldFJlZ0NvbnN0KFJlZyByZWcpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24g
MjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJBaXJPcGNvZGVVdGls
cy5oIgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJl
cG9ydFVzZWRSZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJBaXJTYXZlQ2FsbHNpdGVTYXZlcy5oIgog
I2luY2x1ZGUgIkFpclNpbXBsaWZ5Q0ZHLmgiCiAjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJCM0NvbW1vbi5oIgpAQCAtMTEwLDYgKzExMSw5IEBAIHZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIFJ1biB0aGlzIHBoYXNlIG5vdyBi
ZWNhdXNlIHRoZSBsYXRlciBwaGFzZXMgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgY29uY2VwdC4KKyAg
ICAgICAgc2F2ZUNhbGxzaXRlU2F2ZXMoY29kZSk7CisgICAgICAgIAogICAgICAgICAvLyBUaGlz
IHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRz
IGlmIHBvc3NpYmxlLiBJdAogICAgICAgICAvLyBkb2VzIHRoaXMgYnkgbWluaW1pemluZyB0aGUg
YW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIKICAgICAg
ICAgLy8gYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZCB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0
ZXJzIHRob3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNw
cAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDM0IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK1Jl
Z2lzdGVyU2V0IEluc3Q6OmNhbGxzaXRlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBpZiAoa2lu
ZC5vcGNvZGUgIT0gUGF0Y2gpCisgICAgICAgIHJldHVybiBSZWdpc3RlclNldCgpOworICAgIAor
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9IGV4dHJhQ2xvYmJlcmVkUmVncygpOworICAgIHJlc3Vs
dC5tZXJnZShleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICByZXN1bHQuZmlsdGVyKGNv
ZGUuY2FsbHNpdGVTYXZlcygpKTsKKworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIGZvckVhY2hUbXBGYXN0KAorICAgICAgICBbJl0g
KFRtcCYgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnJlbW92ZSh0bXAucmVnKCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBib29sIEluc3Q6Omhhc0Vhcmx5RGVmKCkKIHsKICAgICBpZiAoa2lu
ZC5vcGNvZGUgPT0gUGF0Y2ggJiYgIWV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuaXNFbXB0eSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDIx
NTU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNiArMTMwLDEwIEBAIHN0cnVjdCBJbnN0IHsKICAgICBSZWdpc3RlclNl
dCBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJl
cmVkUmVncygpOwogCisgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBEZWYncyBhbmQgVXNlJ3MgdGhh
dCBoYXBwZW4gYXQgdGhlIGVuZCBvZiBhbiBpbnN0cnVjdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUaGluZywgdHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3Qq
IHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuYyYpOworICAgIAogICAgIC8vIEl0
ZXJhdGUgb3ZlciBhbGwgRGVmJ3MgdGhhdCBoYXBwZW4gYXQgdGhlIGVuZCBvZiBhbiBpbnN0cnVj
dGlvbi4gWW91IHN1cHBseSBhIHBhaXIKICAgICAvLyBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVj
dGlvbnMgbXVzdCBhcHBlYXIgbmV4dCB0byBlYWNoIG90aGVyLCBpbiB0aGF0IG9yZGVyLCBpbiBz
b21lIGJhc2ljCiAgICAgLy8gYmxvY2suIFlvdSBjYW4gcGFzcyBudWxsIGZvciB0aGUgZmlyc3Qg
aW5zdHJ1Y3Rpb24gd2hlbiBhbmFseXppbmcgd2hhdCBoYXBwZW5zIGF0IHRoZSB0b3Agb2YKQEAg
LTE0Myw2ICsxNDcsMTkgQEAgc3RydWN0IEluc3QgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRo
aW5nLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hEZWZXaXRoRXh0
cmFDbG9iYmVyZWRSZWdzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVu
Y3RvciYpOwogICAgIAorICAgIC8vIExpa2UgdGhlIGFib3ZlLCBidXQgZXhjbHVkZXMgdGhlIGNh
bGxzaXRlLXNhdmVzIGZyb20gdGhlIGNsb2JiZXIgc2V0cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0
aEV4dHJhQ2xvYmJlcmVkUmVnc0V4Y2x1ZGluZ0NhbGxzaXRlU2F2ZXMoQ29kZSYsIEluc3QqIHBy
ZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYpOworICAgIAorICAgIC8vIFRo
aXMgaXMgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGFsbG93cyB5b3UgdG8gbXV0YXRlIHRo
ZSBleHRyYSBjbG9iYmVyZWQgcmVnaXN0ZXJzCisgICAgLy8gYmVmb3JlIHRoZXkgYXJlIGFuYWx5
emVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSBFeHRyYUNsb2JiZXJzRmlsdGVyRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0
aEZpbHRlcmVkRXh0cmFDbG9iYmVyZWRSZWdzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5z
dCwgY29uc3QgRnVuYyYsIGNvbnN0IEV4dHJhQ2xvYmJlcnNGaWx0ZXJGdW5jJik7CisgICAgCisg
ICAgLy8gVGhlIGFjdHVhbCBjYWxsc2l0ZS1zYXZlcyBvZiBhbiBpbnN0cnVjdGlvbiBhcmUgaXRz
IGNsb2JiZXJlZCByZWdpc3RlcnMgaW50ZXJzZWN0ZWQgd2l0aAorICAgIC8vIHRoZSBjYWxsc2l0
ZSBzYXZlcywgZXhjbHVkaW5nIHJlZ2lzdGVycyBtZW50aW9uZWQgZXhwbGljaXRseSBpbiBEZWZz
LgorICAgIFJlZ2lzdGVyU2V0IGNhbGxzaXRlU2F2ZXMoQ29kZSYpOworICAgIAogICAgIC8vIFNv
bWUgc3VtbWFyaWVzIGFib3V0IGFsbCBhcmd1bWVudHMuIFRoZXNlIGFyZSB1c2VmdWwgZm9yIG5l
ZWRzUGFkZGluZygpLgogICAgIGJvb2wgaGFzRWFybHlEZWYoKTsKICAgICBib29sIGhhc0xhdGVV
c2VPckRlZigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dElubGluZXMuaAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywyNiBAQCBp
bmxpbmUgUmVnaXN0ZXJTZXQgSW5zdDo6ZXh0cmFFYXJseUNsb2JiCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFj
aChJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
Cit7CisgICAgaWYgKHByZXZJbnN0KSB7CisgICAgICAgIHByZXZJbnN0LT5mb3JFYWNoPFRoaW5n
PigKKyAgICAgICAgICAgIFsmXSAoVGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBh
cmdCYW5rLCBXaWR0aCBhcmdXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6OmFjdGl2
ZUF0KHJvbGUsIEFyZzo6TGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhpbmcs
IHJvbGUsIGFyZ0JhbmssIGFyZ1dpZHRoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAg
IGlmIChuZXh0SW5zdCkgeworICAgICAgICBuZXh0SW5zdC0+Zm9yRWFjaDxUaGluZz4oCisgICAg
ICAgICAgICBbJl0gKFRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYXJnQmFuaywg
V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjphY3RpdmVBdChyb2xl
LCBBcmc6OkVhcmx5KSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0aGluZywgcm9sZSwg
YXJnQmFuaywgYXJnV2lkdGgpOworICAgICAgICAgICAgfSk7CisgICAgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KIGlubGluZSB2b2lkIEluc3Q6OmZv
ckVhY2hEZWYoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQogewogICAgIGlmIChwcmV2SW5zdCkgewpAQCAtNzYsMjcgKzk2LDU5IEBAIGlubGlu
ZSB2b2lkIEluc3Q6OmZvckVhY2hEZWYoSW5zdCogcHJldkkKICAgICB9CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIHZvaWQgSW5zdDo6Zm9y
RWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgSW5zdCogcHJldkluc3QsIEluc3Qq
IG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmcsIHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhGaWx0ZXJlZEV4dHJhQ2xvYmJlcmVk
UmVnczxUaGluZz4oCisgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwgZnVuYywKKyAgICAgICAg
WyZdIChJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgY29uc3QgYXV0byYgY29udGludWF0
aW9uKSB7CisgICAgICAgICAgICBjb250aW51YXRpb24oc2V0KTsKKyAgICAgICAgfSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgSW5z
dDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3NFeGNsdWRpbmdDYWxsc2l0ZVNhdmVz
KAorICAgIENvZGUmIGNvZGUsIEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3Qg
RnVuYyYgZnVuYykKK3sKKyAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEZpbHRlcmVkRXh0cmFDbG9i
YmVyZWRSZWdzPFRoaW5nPigKKyAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LCBmdW5jLAorICAg
ICAgICBbJl0gKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIGNvbnN0IGF1dG8m
IGNvbnRpbnVhdGlvbikgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgd2l0aG91dENhbGxzaXRl
U2F2ZXMgPSBzZXQ7CisgICAgICAgICAgICB3aXRob3V0Q2FsbHNpdGVTYXZlcy5leGNsdWRlKGlu
c3QuY2FsbHNpdGVTYXZlcyhjb2RlKSk7CisgICAgICAgICAgICBjb250aW51YXRpb24od2l0aG91
dENhbGxzaXRlU2F2ZXMpOworICAgICAgICB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmcsIHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIEV4dHJhQ2xvYmJlcnNGaWx0ZXJGdW5jPgoraW5s
aW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZldpdGhGaWx0ZXJlZEV4dHJhQ2xvYmJlcmVkUmVncygK
KyAgICBJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmMmIGZ1bmMsCisg
ICAgY29uc3QgRXh0cmFDbG9iYmVyc0ZpbHRlckZ1bmMmIGV4dHJhQ2xvYmJlcnNGaWx0ZXJGdW5j
KQogewotICAgIGZvckVhY2hEZWY8VGhpbmc+KHByZXZJbnN0LCBuZXh0SW5zdCwgZnVuY3Rvcik7
CisgICAgZm9yRWFjaERlZjxUaGluZz4ocHJldkluc3QsIG5leHRJbnN0LCBmdW5jKTsKIAogICAg
IEFyZzo6Um9sZSByZWdEZWZSb2xlOwogICAgIAogICAgIGF1dG8gcmVwb3J0UmVnID0gWyZdIChS
ZWcgcmVnKSB7CiAgICAgICAgIEJhbmsgYmFuayA9IHJlZy5pc0dQUigpID8gR1AgOiBGUDsKLSAg
ICAgICAgZnVuY3RvcihUaGluZyhyZWcpLCByZWdEZWZSb2xlLCBiYW5rLCBjb25zZXJ2YXRpdmVX
aWR0aChiYW5rKSk7CisgICAgICAgIGZ1bmMoVGhpbmcocmVnKSwgcmVnRGVmUm9sZSwgYmFuaywg
Y29uc2VydmF0aXZlV2lkdGgoYmFuaykpOwogICAgIH07CiAKICAgICBpZiAocHJldkluc3QgJiYg
cHJldkluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgIHJlZ0RlZlJvbGUgPSBB
cmc6OkRlZjsKLSAgICAgICAgcHJldkluc3QtPmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2go
cmVwb3J0UmVnKTsKKyAgICAgICAgZXh0cmFDbG9iYmVyc0ZpbHRlckZ1bmMoCisgICAgICAgICAg
ICAqcHJldkluc3QsIHByZXZJbnN0LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSwKKyAgICAgICAgICAg
IFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeworICAgICAgICAgICAgICAgIHNldC5mb3JF
YWNoKHJlcG9ydFJlZyk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAobmV4dElu
c3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgIHJlZ0RlZlJv
bGUgPSBBcmc6OkVhcmx5RGVmOwotICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJl
ZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CisgICAgICAgIGV4dHJhQ2xvYmJlcnNGaWx0ZXJG
dW5jKAorICAgICAgICAgICAgKm5leHRJbnN0LCBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJl
ZFJlZ3MoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeworICAg
ICAgICAgICAgICAgIHNldC5mb3JFYWNoKHJlcG9ydFJlZyk7CisgICAgICAgICAgICB9KTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2F2ZUNhbGxz
aXRlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTYXZlQ2FsbHNpdGVTYXZl
cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNs
dWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2lu
Y2x1ZGUgIkFpclJlZ0xpdmVuZXNzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJNYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3ZvaWQgc2F2ZUNhbGxzaXRlU2F2ZXMoQ29kZSYg
Y29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNhdmVDYWxsc2l0ZVNh
dmVzIik7CisgICAgCisgICAgaWYgKGNvZGUuY2FsbHNpdGVTYXZlcygpLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZ2lzdGVyTWFwPFN0YWNrU2xvdCo+IHNhdmVTbG90
czsKKyAgICBmb3IgKFJlZyByZWcgOiBjb2RlLmNhbGxzaXRlU2F2ZXMoKSkKKyAgICAgICAgc2F2
ZVNsb3RzW3JlZ10gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7
CisgICAgCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgCisgICAgSGFzaE1h
cDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IGNhbGxzaXRlU2F2ZXNUb1NhdmU7CisgICAgCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2Fs
Q2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxzaXRlU2F2ZXMgPSBpbnN0LmNhbGxzaXRlU2F2
ZXMoY29kZSk7CisgICAgICAgICAgICBjYWxsc2l0ZVNhdmVzLmZpbHRlcihsb2NhbENhbGMubGl2
ZSgpKTsKKyAgICAgICAgICAgIGlmICghY2FsbHNpdGVTYXZlcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgY2FsbHNpdGVTYXZlc1RvU2F2ZS5hZGQoJmluc3QsIGNhbGxzaXRlU2F2ZXMpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChjYWxsc2l0ZVNhdmVzVG9TYXZlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCJJUiBiZWZvcmUgc2F2ZUNhbGxzaXRlU2F2ZXM6XG4iLCBjb2RlKTsKKyAgICAKKyAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGNh
bGxzaXRlU2F2ZXNUb1NhdmUuZmluZCgmaW5zdCk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBj
YWxsc2l0ZVNhdmVzVG9TYXZlLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCJJbiAiLCAqYmxvY2ssICIgYXQgIiwgaW5zdCwgIjogc2F2aW5nICIsIGl0ZXItPnZhbHVl
LCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogaXRlci0+
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyKFRtcChyZWcpLCBBcmc6
OnN0YWNrKHNhdmVTbG90c1tyZWddKSwgV2lkdGg2NCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydEluc3QoaW5zdEluZGV4LCBwYWlyLmluc3QobnVsbHB0ciwgaW5zdC5vcmln
aW4pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGl0ZXItPnZh
bHVlKSB7CisgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpcihBcmc6OnN0YWNrKHNhdmVT
bG90c1tyZWddKSwgVG1wKHJlZyksIFdpZHRoNjQpOworICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRJbnN0KGluc3RJbmRleCArIDEsIHBhaXIuaW5zdChudWxscHRyLCBpbnN0Lm9y
aWdpbikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIklSIGFmdGVyIHNhdmVDYWxsc2l0ZVNhdmVzOlxuIiwgY29kZSk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2F2ZUNhbGxzaXRlU2F2ZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNhdmVDYWxs
c2l0ZVNhdmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTYXZlQ2FsbHNpdGVTYXZlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFpcidzIHJlZ2lzdGVyIGFs
bG9jYXRvcnMgZG9uJ3QgaGF2ZSB0byBib3RoZXIgc2F2aW5nIHNvLWNhbGxlZCAiY2FsbHNpdGUg
c2F2ZSIgcmVnaXN0ZXJzLAorLy8gd2hpY2ggdGhlIGNsaWVudCBvZiBCMyBjYW4gZGVzaWduYXRl
LiBXZSBpbXBsZW1lbnQgdGhpcyBieSBzYXZpbmcgdGhlbSBhcm91bmQgdGhlIGNhbGxzaXRlLAor
Ly8gd2hpY2ggdGhpcyBwaGFzZSBkb2VzLgorCit2b2lkIHNhdmVDYWxsc2l0ZVNhdmVzKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZp
c2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShGVExf
SklUKQogCisjaW5jbHVkZSAiQjNBZGRSZWFzb25hYmxlQ2FsbHNpdGVTYXZlcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtNjUsNiArNjYsOCBAQCBTdGF0ZTo6
U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIGZpbmFsaXplciA9IHN0YXRpY19jYXN0PEpJVEZpbmFs
aXplcio+KGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIuZ2V0KCkpOwogCiAgICAgcHJvYyA9IHN0ZDo6
bWFrZV91bmlxdWU8UHJvY2VkdXJlPigpOworICAgIAorICAgIGFkZFJlYXNvbmFibGVDYWxsc2l0
ZVNhdmVzKCpwcm9jKTsKIAogICAgIHByb2MtPnNldE9yaWdpblByaW50ZXIoCiAgICAgICAgIFt0
aGlzXSAoUHJpbnRTdHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDIxNTU3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2JpdHMuaXNFbXB0eSgpOyB9CiAgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICFpc0VtcHR5KCk7IH0KKyAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKICAgICBlbnVtIEVt
cHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTU1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGFpckxpbmVhclNj
YW5TcGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCBhaXJGb3JjZUJyaWdnc0FsbG9jYXRvciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgYWlyRm9yY2VJUkNBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
KyAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkNhbGxzaXRlQ2FsbGVlU2F2ZXMsIDMsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgY29hbGVzY2VTcGlsbFNsb3RzLCB0cnVlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhCM1RhaWxEdXBCbG9ja1NpemUs
IDMsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjE1NTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM0FkZFJlYXNv
bmFibGVDYWxsc2l0ZVNhdmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgog
I2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29tcGlsZS5oIgpAQCAtMTM1
MSwxMCArMTM1MiwxMyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwogCi0gICAgcHJvY2VkdXJlLnNldE9yaWdpblBy
aW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKLSAgICAgICAgaWYg
KG9yaWdpbi5kYXRhKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2Vf
Y2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOwotICAgIH0pOworICAgIC8vIEZJWE1FOiBUaGlz
IGN1cnJlbnRseSBjcmFzaGVzLgorICAgIGlmIChmYWxzZSkgeworICAgICAgICBwcm9jZWR1cmUu
c2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgewor
ICAgICAgICAgICAgaWYgKG9yaWdpbi5kYXRhKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKKyAgICAgICAg
fSk7CisgICAgfQogICAgIAogICAgIC8vIFRoaXMgbWVhbnMgd2UgY2Fubm90IHVzZSBlaXRoZXIg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKCkgb3IKICAgICAvLyBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkuIEluIGV4Y2hhbmdl
IGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCkBAIC0xMzYyLDYgKzEzNjYsOCBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuCiAgICAgLy8gb3B0TGV2ZWw9MS4KICAgICBw
cm9jZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKICAgICAKKyAgICBhZGRSZWFz
b25hYmxlQ2FsbHNpdGVTYXZlcyhwcm9jZWR1cmUpOworICAgIAogICAgIHByb2NlZHVyZS5zZXRP
cHRMZXZlbChvcHRMZXZlbCk7CiAKICAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywgcHJv
Y2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>