<?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>178532</bug_id>
          
          <creation_ts>2017-10-19 12:24:49 -0700</creation_ts>
          <short_desc>re-inline ObjectAllocationProfile::initializeProfile</short_desc>
          <delta_ts>2017-11-15 13:02:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1362254</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 12:24:49 -0700</bug_when>
    <thetext>I un-inlined this when doing poly proto. I think there are contexts where inlining this actually turns the function into very few instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362365</commentid>
    <comment_count>1</comment_count>
      <attachid>324296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 14:50:59 -0700</bug_when>
    <thetext>Created attachment 324296
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362368</commentid>
    <comment_count>2</comment_count>
      <attachid>324296</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-10-19 14:51:54 -0700</bug_when>
    <thetext>Comment on attachment 324296
patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362369</commentid>
    <comment_count>3</comment_count>
      <attachid>324296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 14:52:22 -0700</bug_when>
    <thetext>Comment on attachment 324296
patch

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

&gt; Source/JavaScriptCore/bytecode/ObjectAllocationProfileInlines.h:25
&gt; +

OOPS I&apos;m missing pragma once. Will add</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362371</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-19 14:52:43 -0700</bug_when>
    <thetext>Attachment 324296 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/ObjectAllocationProfileInlines.h:26:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/ObjectAllocationProfileInlines.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362373</commentid>
    <comment_count>5</comment_count>
      <attachid>324298</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 14:56:37 -0700</bug_when>
    <thetext>Created attachment 324298
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362374</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-19 14:58:32 -0700</bug_when>
    <thetext>Attachment 324298 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/ObjectAllocationProfileInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362442</commentid>
    <comment_count>7</comment_count>
      <attachid>324298</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 16:34:28 -0700</bug_when>
    <thetext>Comment on attachment 324298
patch for landing

Clearing flags on attachment: 324298

Committed r223727: &lt;https://trac.webkit.org/changeset/223727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362443</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 16:34:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372325</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 13:02:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/35568665&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324296</attachid>
            <date>2017-10-19 14:50:59 -0700</date>
            <delta_ts>2017-10-19 14:56:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>22296</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzNzEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTEwLTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHJlLWlubGluZSBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODUzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgdW4taW5saW5l
ZCB0aGlzIGZ1bmN0aW9uIHdoZW4gaW1wbGVtZW50aW5nIHBvbHkgcHJvdG8uCisgICAgICAgIFRo
aXMgcGF0Y2ggcmUtaW5saW5lcyBpdC4gSW4gbXkgdGVzdGluZywgaXQgbG9va3MgbGlrZSBpdAor
ICAgICAgICBtaWdodCBiZSBhIDAuNSUgc3BlZWRvbWV0ZXIgcHJvZ3Jlc3Npb24gdG8gaW5saW5l
IGl0LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMu
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9j
YXRpb25Qcm9maWxlLmNwcC4KKyAgICAgICAgKEpTQzo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
OmluaXRpYWxpemVQcm9maWxlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0QWxsb2NhdGlvblByb2Zp
bGU6OnBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHA6CisKIDIwMTctMTAtMTkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgVHVybiB2YXJpb3VzIHBvbHkgcHJvdG8gUkVMRUFTRV9BU1NF
UlRzIGludG8gQVNTRVJUcyBiZWNhdXNlIHRoZXkncmUgb24gdGhlIGhvdCBwYXRoIGluIHNwZWVk
b21ldGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjM3MTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIyNyw3ICsyMjcsNiBAQCBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKIGJ5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCiBieXRlY29kZS9Nb2R1bGVO
YW1lc3BhY2VBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5j
cHAKLWJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAogYnl0ZWNvZGUvT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAKIGJ5dGVjb2RlL09wY29kZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjM3MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA3Miw2
ICsxMDcyLDcgQEAKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFE
NzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJp
dGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5
QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlB
NiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3OUFDMzBGRjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVJbmxpbmVzLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRN
YXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUIwMENCRDFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQjkxQzZBQjA3RTAwODhD
NjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3OUIwMENCRjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmpl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAw
Q0JCMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTI4LDYgKzM1MjksNyBAQAogCQk3OUE4
OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzlBQkIxN0IxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEaXNhc3NlbWJs
ZXIuY3BwOyBwYXRoID0gYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRGlzYXNzZW1ibGVyLmg7
IHBhdGggPSBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUYw
QkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDSW5saW5lUmVzdWx0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNv
bnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5
Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUIwMENCOTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm94eUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzY5LDYgKzczNzEsNyBAQAogCQkJCTE0QUQ5MTEzMURDQTk3RkQwMDE0RjlGRSAv
KiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmNwcCAqLywKIAkJCQkxNEFEOTEwOTFEQ0E5Mjk0MDAx
NEY5RkUgLyogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oICovLAogCQkJCTE0Q0E5NThDMTZBQjUw
RkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJCTc5QUMzMEZF
MUY5OTUzNjMwMDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLywK
IAkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAogCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oICovLAogCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCkBAIC04NTg5LDYgKzg1OTIsNyBAQAogCQkJCUExMjU4
NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2Jq
ZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3
IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTM0RTAzNTQxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRp
b25LaW5kLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM3MTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsNyBAQAogI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQ
b2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFs
bG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMjIzNzEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTRnVuY3Rp
b25JbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlOjppbml0aWFsaXplUHJvZmlsZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGluZmVy
cmVkSW5saW5lQ2FwYWNpdHksIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yKQotewotICAgIEFTU0VS
VCghbV9hbGxvY2F0b3IpOwotICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUpOwotICAgIEFTU0VSVCgh
bV9pbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICAvLyBGSVhNRTogV2hlbiBnb2luZyBwb2x5IHByb3Rv
LCB3ZSBzaG91bGQgbWFrZSBhbiBhbGxvY2F0b3IgYW5kIHRlYWNoCi0gICAgLy8gY3JlYXRlX3Ro
aXMnIGZhc3QgcGF0aCBob3cgdG8gYWxsb2NhdGUgYSBwb2x5IHByb3RvIG9iamVjdC4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTE3Ci0gICAgYm9v
bCBpc1BvbHlQcm90byA9IGZhbHNlOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGNvbnN0cnVjdG9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBB
IEpTRnVuY3Rpb24gc2hvdWxkIHdhdGNoIHRoZSBwb2x5IHByb3RvIHdhdGNocG9pbnQgaWYgaXQg
aXMgbm90IGludmFsaWRhdGVkLgotICAgICAgICAvLyBUaGF0IHdheSBpdCBjYW4gY2xlYXIgdGhp
cyBvYmplY3QgYWxsb2NhdGlvbiBwcm9maWxlIHRvIGVuc3VyZSBpdCBzdG9wcyBhbGxvY2F0aW5n
Ci0gICAgICAgIC8vIG1vbm8gcHJvdG8gfHRoaXN8IHZhbHVlcyB3aGVuIGl0IGtub3dzIHRoYXQg
aXQgc2hvdWxkIGJlIGFsbG9jYXRpbmcgcG9seSBwcm90bwotICAgICAgICAvLyB8dGhpc3wgdmFs
dWVzOgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3NzkyCi0KLSAgICAgICAgZXhlY3V0YWJsZSA9IGNvbnN0cnVjdG9yLT5qc0V4ZWN1dGFibGUo
KTsKLQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxlLT5jYWNo
ZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwotICAgICAgICAg
ICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpc1BvbHlQcm90byA9IGZhbHNlOwotICAgICAgICBpZiAoT3B0aW9uczo6Zm9y
Y2VQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgIGlzUG9seVByb3RvID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgaXNQb2x5UHJvdG8gPSBleGVjdXRhYmxlLT5lbnN1cmVQb2x5UHJv
dG9XYXRjaHBvaW50KCkuaGFzQmVlbkludmFsaWRhdGVkKCkgJiYgZXhlY3V0YWJsZS0+c2luZ2xl
dG9uRnVuY3Rpb24oKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwotICAgIGlmIChpbmZlcnJlZElubGluZUNhcGFjaXR5IDwg
SlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgLy8gVHJ5
IHRvIHNocmluayB0aGUgb2JqZWN0IGJhc2VkIG9uIHN0YXRpYyBhbmFseXNpcy4KLSAgICAgICAg
aW5mZXJyZWRJbmxpbmVDYXBhY2l0eSArPSBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KHZt
LCBwcm90b3R5cGUpOwotCi0gICAgICAgIGlmICghaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSkgewot
ICAgICAgICAgICAgLy8gRW1wdHkgb2JqZWN0cyBhcmUgcmFyZSwgc28gbW9zdCBsaWtlbHkgdGhl
IHN0YXRpYyBhbmFseXplciBqdXN0IGRpZG4ndAotICAgICAgICAgICAgLy8gc2VlIHRoZSByZWFs
IGluaXRpYWxpemVyIGZ1bmN0aW9uLiBUaGlzIGNhbiBoYXBwZW4gd2l0aCBoZWxwZXIgZnVuY3Rp
b25zLgotICAgICAgICAgICAgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IEpTRmluYWxPYmplY3Q6
OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpOwotICAgICAgICB9IGVsc2UgaWYgKGluZmVycmVkSW5s
aW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICAgICAgLy8gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB3ZWFrIGd1ZXNzZXMsIHNvIGRv
bid0IGFsbG93IHRoZW0gdG8gdHVybiBhIHNtYWxsCi0gICAgICAgICAgICAvLyBvYmplY3QgaW50
byBhIGxhcmdlIG9iamVjdC4KLSAgICAgICAgICAgIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBK
U0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlubGluZUNhcGFjaXR5ID0gaW5mZXJyZWRJbmxpbmVDYXBhY2l0eTsKLSAgICAgICAgQVNT
RVJUKGlubGluZUNhcGFjaXR5IDwgSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm9ybWFsIG9yIGxhcmdlIG9iamVjdC4KLSAgICAg
ICAgaW5saW5lQ2FwYWNpdHkgPSBpbmZlcnJlZElubGluZUNhcGFjaXR5OwotICAgICAgICBpZiAo
aW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKQotICAg
ICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0
eSgpOwotICAgIH0KLQotICAgIGlmIChpc1BvbHlQcm90bykgewotICAgICAgICArK2lubGluZUNh
cGFjaXR5OwotICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IHN0ZDo6bWluKGlubGluZUNhcGFjaXR5
LCBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaW5saW5lQ2FwYWNpdHkgPiAwKTsKLSAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPD0gSlNG
aW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7Ci0KLSAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9y
KGFsbG9jYXRpb25TaXplKTsKLQotICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGlu
ZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCi0gICAgaWYgKGFsbG9jYXRv
cikgewotICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3ItPmNlbGxTaXplKCkgLSBhbGxv
Y2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgKz0gc2xvcDsKLSAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5h
bE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgaXNQ
b2x5UHJvdG8sIGV4ZWN1dGFibGUpOwotCi0gICAgaWYgKGlzUG9seVByb3RvKSB7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAgbV9hbGxvY2F0b3Ig
PSBudWxscHRyOwotICAgICAgICBleGVjdXRhYmxlLT5zZXRDYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1
cmUodm0sIHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGV4ZWN1dGFibGUp
IHsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmVuc3VyZVBvbHlQcm90b1dhdGNocG9pbnQoKTsK
LSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZW5zdXJlUmFyZURhdGEodm0pLT5zZXRTaGFyZWRQb2x5
UHJvdG9XYXRjaHBvaW50KGV4ZWN1dGFibGUtPnNoYXJlZFBvbHlQcm90b1dhdGNocG9pbnQoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICB9Ci0K
LSAgICAvLyBFbnN1cmUgdGhhdCBpZiBhbm90aGVyIHRocmVhZCBzZWVzIHRoZSBzdHJ1Y3R1cmUs
IGl0IHdpbGwgc2VlIGl0IHByb3Blcmx5IGNyZWF0ZWQKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwotCi0gICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICBt
X2lubGluZUNhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci19Ci0KLXVuc2lnbmVkIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KFZNJiB2bSwgSlNP
YmplY3QqIHByb3RvdHlwZSkKLXsKLSAgICBpZiAocHJvdG90eXBlID09IHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHNpemVfdCBjb3VudCA9IDA7Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lQXJy
YXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJv
bE1vZGU6OkluY2x1ZGUpOwotICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5
TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2Rl
KCkpOwotICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9w
ZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZl
Y3RvcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lVmVjdG9yLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBwcm90b3R5cGUtPmdldERpcmVj
dCh2bSwgcHJvcGVydHlOYW1lVmVjdG9yW2ldKTsKLQotICAgICAgICAvLyBGdW5jdGlvbnMgYXJl
IGNvbW1vbiwgYW5kIGFyZSB1c3VhbGx5IGNsYXNzLWxldmVsIG9iamVjdHMgdGhhdCBhcmUgbm90
IG92ZXJyaWRkZW4uCi0gICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwg
dmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgKytjb3VudDsKLQotICAg
IH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RB
bGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjIzNzEzKQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3BwOjIyMzcx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKKworI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG93bmVyLCBKU09iamVj
dCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBKU0Z1bmN0aW9u
KiBjb25zdHJ1Y3RvcikKK3sKKyAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKKyAgICBBU1NFUlQo
IW1fc3RydWN0dXJlKTsKKyAgICBBU1NFUlQoIW1faW5saW5lQ2FwYWNpdHkpOworCisgICAgLy8g
RklYTUU6IFdoZW4gZ29pbmcgcG9seSBwcm90bywgd2Ugc2hvdWxkIG1ha2UgYW4gYWxsb2NhdG9y
IGFuZCB0ZWFjaAorICAgIC8vIGNyZWF0ZV90aGlzJyBmYXN0IHBhdGggaG93IHRvIGFsbG9jYXRl
IGEgcG9seSBwcm90byBvYmplY3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzUxNworICAgIGJvb2wgaXNQb2x5UHJvdG8gPSBmYWxzZTsKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBudWxscHRyOworICAgIGlmIChjb25zdHJ1
Y3RvcikgeworICAgICAgICAvLyBGSVhNRTogQSBKU0Z1bmN0aW9uIHNob3VsZCB3YXRjaCB0aGUg
cG9seSBwcm90byB3YXRjaHBvaW50IGlmIGl0IGlzIG5vdCBpbnZhbGlkYXRlZC4KKyAgICAgICAg
Ly8gVGhhdCB3YXkgaXQgY2FuIGNsZWFyIHRoaXMgb2JqZWN0IGFsbG9jYXRpb24gcHJvZmlsZSB0
byBlbnN1cmUgaXQgc3RvcHMgYWxsb2NhdGluZworICAgICAgICAvLyBtb25vIHByb3RvIHx0aGlz
fCB2YWx1ZXMgd2hlbiBpdCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBhbGxvY2F0aW5nIHBvbHkg
cHJvdG8KKyAgICAgICAgLy8gfHRoaXN8IHZhbHVlczoKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzc5MgorCisgICAgICAgIGV4ZWN1dGFibGUg
PSBjb25zdHJ1Y3Rvci0+anNFeGVjdXRhYmxlKCk7CisKKyAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZXhlY3V0YWJsZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0g
RmluYWxPYmplY3RUeXBlKTsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBtX2lubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaXNQb2x5UHJvdG8gPSBmYWxz
ZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlUG9seVByb3RvKCkpCisgICAgICAgICAgICBp
c1BvbHlQcm90byA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzUG9seVByb3Rv
ID0gZXhlY3V0YWJsZS0+ZW5zdXJlUG9seVByb3RvV2F0Y2hwb2ludCgpLmhhc0JlZW5JbnZhbGlk
YXRlZCgpICYmIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPmhhc0JlZW5JbnZhbGlk
YXRlZCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMDsKKyAgICBp
ZiAoaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVD
YXBhY2l0eSgpKSB7CisgICAgICAgIC8vIFRyeSB0byBzaHJpbmsgdGhlIG9iamVjdCBiYXNlZCBv
biBzdGF0aWMgYW5hbHlzaXMuCisgICAgICAgIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgKz0gcG9z
c2libGVEZWZhdWx0UHJvcGVydHlDb3VudCh2bSwgcHJvdG90eXBlKTsKKworICAgICAgICBpZiAo
IWluZmVycmVkSW5saW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIC8vIEVtcHR5IG9iamVjdHMg
YXJlIHJhcmUsIHNvIG1vc3QgbGlrZWx5IHRoZSBzdGF0aWMgYW5hbHl6ZXIganVzdCBkaWRuJ3QK
KyAgICAgICAgICAgIC8vIHNlZSB0aGUgcmVhbCBpbml0aWFsaXplciBmdW5jdGlvbi4gVGhpcyBj
YW4gaGFwcGVuIHdpdGggaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIGluZmVycmVkSW5s
aW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpbmZlcnJlZElubGluZUNhcGFjaXR5ID4gSlNGaW5hbE9iamVjdDo6
ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIC8vIERlZmF1bHQgcHJvcGVy
dGllcyBhcmUgd2VhayBndWVzc2VzLCBzbyBkb24ndCBhbGxvdyB0aGVtIHRvIHR1cm4gYSBzbWFs
bAorICAgICAgICAgICAgLy8gb2JqZWN0IGludG8gYSBsYXJnZSBvYmplY3QuCisgICAgICAgICAg
ICBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNh
cGFjaXR5KCk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IGluZmVycmVk
SW5saW5lQ2FwYWNpdHk7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8IEpTRmluYWxP
YmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5v
cm1hbCBvciBsYXJnZSBvYmplY3QuCisgICAgICAgIGlubGluZUNhcGFjaXR5ID0gaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eTsKKyAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5hbE9iamVj
dDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gSlNG
aW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBpZiAoaXNQb2x5
UHJvdG8pIHsKKyAgICAgICAgKytpbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgaW5saW5lQ2FwYWNp
dHkgPSBzdGQ6Om1pbihpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2Fw
YWNpdHkoKSk7CisgICAgfQorCisgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5ID4gMCk7CisgICAg
QVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5
KCkpOworCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICAvLyBU
YWtlIGFkdmFudGFnZSBvZiBleHRyYSBpbmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBz
aXplIGNsYXNzLgorICAgIGlmIChhbGxvY2F0b3IpIHsKKyAgICAgICAgc2l6ZV90IHNsb3AgPSAo
YWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0gYWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPik7CisgICAgICAgIGlubGluZUNhcGFjaXR5ICs9IHNsb3A7CisgICAgICAg
IGlmIChpbmxpbmVDYXBhY2l0eSA+IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNh
cGFjaXR5KCk7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1
cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGlzUG9seVByb3RvLCBleGVjdXRhYmxlKTsKKworICAg
IGlmIChpc1BvbHlQcm90bykgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJv
dG8oKSk7CisgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgZXhlY3V0YWJs
ZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5l
bnN1cmVQb2x5UHJvdG9XYXRjaHBvaW50KCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmVuc3Vy
ZVJhcmVEYXRhKHZtKS0+c2V0U2hhcmVkUG9seVByb3RvV2F0Y2hwb2ludChleGVjdXRhYmxlLT5z
aGFyZWRQb2x5UHJvdG9XYXRjaHBvaW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgbV9hbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHRoYXQgaWYgYW5vdGhl
ciB0aHJlYWQgc2VlcyB0aGUgc3RydWN0dXJlLCBpdCB3aWxsIHNlZSBpdCBwcm9wZXJseSBjcmVh
dGVkCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKworICAgIG1fc3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFj
aXR5OworfQorCit1bnNpZ25lZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6cG9zc2libGVEZWZh
dWx0UHJvcGVydHlDb3VudChWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUpCit7CisgICAgaWYg
KHByb3RvdHlwZSA9PSBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpJbmNsdWRlKTsKKyAgICBwcm90b3R5
cGUtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVy
dHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheURh
dGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1lVmVjdG9yID0gcHJvcGVydHlOYW1l
QXJyYXkuZGF0YSgpLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb3BlcnR5TmFtZVZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gcHJvdG90eXBlLT5nZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7
CisKKyAgICAgICAgLy8gRnVuY3Rpb25zIGFyZSBjb21tb24sIGFuZCBhcmUgdXN1YWxseSBjbGFz
cy1sZXZlbCBvYmplY3RzIHRoYXQgYXJlIG5vdCBvdmVycmlkZGVuLgorICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICsrY291bnQ7CisKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJl
dmlzaW9uIDIyMzcxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RB
bGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5p
dGlhbGl6ZVByb2ZpbGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNh
cGFjaXR5LCBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvcikKK0FMV0FZU19JTkxJTkUgdm9pZCBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCB1
bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvcikK
IHsKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKICAgICBBU1NFUlQoIW1fc3RydWN0dXJlKTsK
QEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjppbml0aWFs
aXplCiAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogfQogCi11bnNpZ25l
ZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChW
TSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUpCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KFZNJiB2bSwg
SlNPYmplY3QqIHByb3RvdHlwZSkKIHsKICAgICBpZiAocHJvdG90eXBlID09IHByb3RvdHlwZS0+
Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm4gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURh
dGEuY3BwCShyZXZpc2lvbiAyMjM3MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAK
</data>
<flag name="review"
          id="343931"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324298</attachid>
            <date>2017-10-19 14:56:37 -0700</date>
            <delta_ts>2017-10-19 16:34:28 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>22519</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzNzEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTEwLTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHJlLWlubGluZSBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODUzMgorCisg
ICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE1pY2hhZWwgU2Fib2ZmLgorCisgICAgICAgIEkgdW4t
aW5saW5lZCB0aGlzIGZ1bmN0aW9uIHdoZW4gaW1wbGVtZW50aW5nIHBvbHkgcHJvdG8uCisgICAg
ICAgIFRoaXMgcGF0Y2ggcmUtaW5saW5lcyBpdC4gSW4gbXkgdGVzdGluZywgaXQgbG9va3MgbGlr
ZSBpdAorICAgICAgICBtaWdodCBiZSBhIDAuNSUgc3BlZWRvbWV0ZXIgcHJvZ3Jlc3Npb24gdG8g
aW5saW5lIGl0LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
bGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmNwcC4KKyAgICAgICAgKEpTQzo6T2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6OmluaXRpYWxpemVQcm9maWxlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6OnBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5jcHA6CisKIDIwMTctMTAtMTkgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVHVybiB2YXJpb3VzIHBvbHkgcHJvdG8gUkVMRUFT
RV9BU1NFUlRzIGludG8gQVNTRVJUcyBiZWNhdXNlIHRoZXkncmUgb24gdGhlIGhvdCBwYXRoIGlu
IHNwZWVkb21ldGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
MjM3MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNyw3ICsyMjcsNiBAQCBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAKIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCiBieXRlY29kZS9N
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5jcHAKLWJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAogYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5jcHAKIGJ5dGVjb2RlL09wY29kZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjM3MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTA3Miw2ICsxMDcyLDcgQEAKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcg
LyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07
CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcw
MDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3OUFDMzBGRjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAv
KiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OUIwMENCRDFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQjkxQzZBQjA3
RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIwMENCRjFDNkFCMDdFMDA4OEM2NUQgLyogUHJv
eHlPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QjAwQ0JCMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTI4LDYgKzM1MjksNyBAQAog
CQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBQkIxN0IxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEaXNh
c3NlbWJsZXIuY3BwOyBwYXRoID0gYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNh
c3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDSW5saW5lUmVzdWx0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQ
cm94eUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFByb3h5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUIw
MENCOTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03MzY5LDYgKzczNzEsNyBAQAogCQkJCTE0QUQ5MTEzMURDQTk3RkQwMDE0
RjlGRSAvKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmNwcCAqLywKIAkJCQkxNEFEOTEwOTFEQ0E5
Mjk0MDAxNEY5RkUgLyogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oICovLAogCQkJCTE0Q0E5NThD
MTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovLAorCQkJCTc5
QUMzMEZFMUY5OTUzNjMwMDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMu
aCAqLywKIAkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uY3BwICovLAogCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGRDNFNDA1MUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAgKi8sCkBAIC04NTg5LDYgKzg1OTIsNyBAQAogCQkJ
CUExMjU4NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJ
bnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBQzMwRkYxRjk5NTM2NDAw
NDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTM0RTAzNTQxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJ
dGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM3MTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsNyBAQAogI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMjIzNzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpT
RnVuY3Rpb25JbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmlsZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVk
IGluZmVycmVkSW5saW5lQ2FwYWNpdHksIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yKQotewotICAg
IEFTU0VSVCghbV9hbGxvY2F0b3IpOwotICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUpOwotICAgIEFT
U0VSVCghbV9pbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICAvLyBGSVhNRTogV2hlbiBnb2luZyBwb2x5
IHByb3RvLCB3ZSBzaG91bGQgbWFrZSBhbiBhbGxvY2F0b3IgYW5kIHRlYWNoCi0gICAgLy8gY3Jl
YXRlX3RoaXMnIGZhc3QgcGF0aCBob3cgdG8gYWxsb2NhdGUgYSBwb2x5IHByb3RvIG9iamVjdC4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTE3Ci0g
ICAgYm9vbCBpc1BvbHlQcm90byA9IGZhbHNlOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IG51bGxwdHI7Ci0gICAgaWYgKGNvbnN0cnVjdG9yKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBIEpTRnVuY3Rpb24gc2hvdWxkIHdhdGNoIHRoZSBwb2x5IHByb3RvIHdhdGNocG9pbnQg
aWYgaXQgaXMgbm90IGludmFsaWRhdGVkLgotICAgICAgICAvLyBUaGF0IHdheSBpdCBjYW4gY2xl
YXIgdGhpcyBvYmplY3QgYWxsb2NhdGlvbiBwcm9maWxlIHRvIGVuc3VyZSBpdCBzdG9wcyBhbGxv
Y2F0aW5nCi0gICAgICAgIC8vIG1vbm8gcHJvdG8gfHRoaXN8IHZhbHVlcyB3aGVuIGl0IGtub3dz
IHRoYXQgaXQgc2hvdWxkIGJlIGFsbG9jYXRpbmcgcG9seSBwcm90bwotICAgICAgICAvLyB8dGhp
c3wgdmFsdWVzOgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc3NzkyCi0KLSAgICAgICAgZXhlY3V0YWJsZSA9IGNvbnN0cnVjdG9yLT5qc0V4ZWN1
dGFibGUoKTsKLQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxl
LT5jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwotICAg
ICAgICAgICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpc1BvbHlQcm90byA9IGZhbHNlOwotICAgICAgICBpZiAoT3B0aW9u
czo6Zm9yY2VQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgIGlzUG9seVByb3RvID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgaXNQb2x5UHJvdG8gPSBleGVjdXRhYmxlLT5lbnN1cmVQ
b2x5UHJvdG9XYXRjaHBvaW50KCkuaGFzQmVlbkludmFsaWRhdGVkKCkgJiYgZXhlY3V0YWJsZS0+
c2luZ2xldG9uRnVuY3Rpb24oKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwotICAgIGlmIChpbmZlcnJlZElubGluZUNhcGFj
aXR5IDwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAg
Ly8gVHJ5IHRvIHNocmluayB0aGUgb2JqZWN0IGJhc2VkIG9uIHN0YXRpYyBhbmFseXNpcy4KLSAg
ICAgICAgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSArPSBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNv
dW50KHZtLCBwcm90b3R5cGUpOwotCi0gICAgICAgIGlmICghaW5mZXJyZWRJbmxpbmVDYXBhY2l0
eSkgewotICAgICAgICAgICAgLy8gRW1wdHkgb2JqZWN0cyBhcmUgcmFyZSwgc28gbW9zdCBsaWtl
bHkgdGhlIHN0YXRpYyBhbmFseXplciBqdXN0IGRpZG4ndAotICAgICAgICAgICAgLy8gc2VlIHRo
ZSByZWFsIGluaXRpYWxpemVyIGZ1bmN0aW9uLiBUaGlzIGNhbiBoYXBwZW4gd2l0aCBoZWxwZXIg
ZnVuY3Rpb25zLgotICAgICAgICAgICAgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IEpTRmluYWxP
YmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpOwotICAgICAgICB9IGVsc2UgaWYgKGluZmVy
cmVkSW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHko
KSkgewotICAgICAgICAgICAgLy8gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB3ZWFrIGd1ZXNzZXMs
IHNvIGRvbid0IGFsbG93IHRoZW0gdG8gdHVybiBhIHNtYWxsCi0gICAgICAgICAgICAvLyBvYmpl
Y3QgaW50byBhIGxhcmdlIG9iamVjdC4KLSAgICAgICAgICAgIGluZmVycmVkSW5saW5lQ2FwYWNp
dHkgPSBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlubGluZUNhcGFjaXR5ID0gaW5mZXJyZWRJbmxpbmVDYXBhY2l0eTsKLSAgICAg
ICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDwgSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm9ybWFsIG9yIGxhcmdlIG9iamVjdC4K
LSAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBpbmZlcnJlZElubGluZUNhcGFjaXR5OwotICAgICAg
ICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgp
KQotICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVD
YXBhY2l0eSgpOwotICAgIH0KLQotICAgIGlmIChpc1BvbHlQcm90bykgewotICAgICAgICArK2lu
bGluZUNhcGFjaXR5OwotICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IHN0ZDo6bWluKGlubGluZUNh
cGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPiAwKTsKLSAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkg
PD0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7Ci0KLSAgICBzaXplX3QgYWxs
b2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0
eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2Nh
dG9yRm9yKGFsbG9jYXRpb25TaXplKTsKLQotICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJh
IGlubGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCi0gICAgaWYgKGFs
bG9jYXRvcikgewotICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3ItPmNlbGxTaXplKCkg
LSBhbGxvY2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAg
ICAgaW5saW5lQ2FwYWNpdHkgKz0gc2xvcDsKLSAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4g
SlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIGlubGluZUNh
cGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKLSAgICB9Ci0KLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3Ry
dWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0
eSwgaXNQb2x5UHJvdG8sIGV4ZWN1dGFibGUpOwotCi0gICAgaWYgKGlzUG9seVByb3RvKSB7Ci0g
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAgbV9hbGxv
Y2F0b3IgPSBudWxscHRyOwotICAgICAgICBleGVjdXRhYmxlLT5zZXRDYWNoZWRQb2x5UHJvdG9T
dHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGV4ZWN1
dGFibGUpIHsKLSAgICAgICAgICAgIGV4ZWN1dGFibGUtPmVuc3VyZVBvbHlQcm90b1dhdGNocG9p
bnQoKTsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZW5zdXJlUmFyZURhdGEodm0pLT5zZXRTaGFy
ZWRQb2x5UHJvdG9XYXRjaHBvaW50KGV4ZWN1dGFibGUtPnNoYXJlZFBvbHlQcm90b1dhdGNocG9p
bnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAg
ICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBpZiBhbm90aGVyIHRocmVhZCBzZWVzIHRoZSBzdHJ1
Y3R1cmUsIGl0IHdpbGwgc2VlIGl0IHByb3Blcmx5IGNyZWF0ZWQKLSAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotCi0gICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsK
LSAgICBtX2lubGluZUNhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci19Ci0KLXVuc2lnbmVkIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KFZNJiB2
bSwgSlNPYmplY3QqIHByb3RvdHlwZSkKLXsKLSAgICBpZiAocHJvdG90eXBlID09IHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlO
YW1lQXJyYXkoJnZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkluY2x1ZGUpOwotICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRp
b25Nb2RlKCkpOwotICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9y
JiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5
TmFtZVZlY3RvcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lVmVj
dG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBwcm90b3R5cGUtPmdl
dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lVmVjdG9yW2ldKTsKLQotICAgICAgICAvLyBGdW5jdGlv
bnMgYXJlIGNvbW1vbiwgYW5kIGFyZSB1c3VhbGx5IGNsYXNzLWxldmVsIG9iamVjdHMgdGhhdCBh
cmUgbm90IG92ZXJyaWRkZW4uCi0gICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24q
Pih2bSwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgKytjb3VudDsK
LQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjIzNzEzKQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3Bw
OjIyMzcxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKKworI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2Zp
bGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG93bmVyLCBK
U09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBKU0Z1
bmN0aW9uKiBjb25zdHJ1Y3RvcikKK3sKKyAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKKyAgICBB
U1NFUlQoIW1fc3RydWN0dXJlKTsKKyAgICBBU1NFUlQoIW1faW5saW5lQ2FwYWNpdHkpOworCisg
ICAgLy8gRklYTUU6IFdoZW4gZ29pbmcgcG9seSBwcm90bywgd2Ugc2hvdWxkIG1ha2UgYW4gYWxs
b2NhdG9yIGFuZCB0ZWFjaAorICAgIC8vIGNyZWF0ZV90aGlzJyBmYXN0IHBhdGggaG93IHRvIGFs
bG9jYXRlIGEgcG9seSBwcm90byBvYmplY3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzUxNworICAgIGJvb2wgaXNQb2x5UHJvdG8gPSBmYWxzZTsK
KyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBudWxscHRyOworICAgIGlmIChj
b25zdHJ1Y3RvcikgeworICAgICAgICAvLyBGSVhNRTogQSBKU0Z1bmN0aW9uIHNob3VsZCB3YXRj
aCB0aGUgcG9seSBwcm90byB3YXRjaHBvaW50IGlmIGl0IGlzIG5vdCBpbnZhbGlkYXRlZC4KKyAg
ICAgICAgLy8gVGhhdCB3YXkgaXQgY2FuIGNsZWFyIHRoaXMgb2JqZWN0IGFsbG9jYXRpb24gcHJv
ZmlsZSB0byBlbnN1cmUgaXQgc3RvcHMgYWxsb2NhdGluZworICAgICAgICAvLyBtb25vIHByb3Rv
IHx0aGlzfCB2YWx1ZXMgd2hlbiBpdCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBhbGxvY2F0aW5n
IHBvbHkgcHJvdG8KKyAgICAgICAgLy8gfHRoaXN8IHZhbHVlczoKKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzc5MgorCisgICAgICAgIGV4ZWN1
dGFibGUgPSBjb25zdHJ1Y3Rvci0+anNFeGVjdXRhYmxlKCk7CisKKyAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJsZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgPT0gRmluYWxPYmplY3RUeXBlKTsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaXNQb2x5UHJvdG8g
PSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlUG9seVByb3RvKCkpCisgICAgICAg
ICAgICBpc1BvbHlQcm90byA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzUG9s
eVByb3RvID0gZXhlY3V0YWJsZS0+ZW5zdXJlUG9seVByb3RvV2F0Y2hwb2ludCgpLmhhc0JlZW5J
bnZhbGlkYXRlZCgpICYmIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPmhhc0JlZW5J
bnZhbGlkYXRlZCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMDsK
KyAgICBpZiAoaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJ
bmxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIC8vIFRyeSB0byBzaHJpbmsgdGhlIG9iamVjdCBi
YXNlZCBvbiBzdGF0aWMgYW5hbHlzaXMuCisgICAgICAgIGluZmVycmVkSW5saW5lQ2FwYWNpdHkg
Kz0gcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudCh2bSwgcHJvdG90eXBlKTsKKworICAgICAg
ICBpZiAoIWluZmVycmVkSW5saW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIC8vIEVtcHR5IG9i
amVjdHMgYXJlIHJhcmUsIHNvIG1vc3QgbGlrZWx5IHRoZSBzdGF0aWMgYW5hbHl6ZXIganVzdCBk
aWRuJ3QKKyAgICAgICAgICAgIC8vIHNlZSB0aGUgcmVhbCBpbml0aWFsaXplciBmdW5jdGlvbi4g
VGhpcyBjYW4gaGFwcGVuIHdpdGggaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIGluZmVy
cmVkSW5saW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHko
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZlcnJlZElubGluZUNhcGFjaXR5ID4gSlNGaW5hbE9i
amVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIC8vIERlZmF1bHQg
cHJvcGVydGllcyBhcmUgd2VhayBndWVzc2VzLCBzbyBkb24ndCBhbGxvdyB0aGVtIHRvIHR1cm4g
YSBzbWFsbAorICAgICAgICAgICAgLy8gb2JqZWN0IGludG8gYSBsYXJnZSBvYmplY3QuCisgICAg
ICAgICAgICBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElu
bGluZUNhcGFjaXR5KCk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IGlu
ZmVycmVkSW5saW5lQ2FwYWNpdHk7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8IEpT
RmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIE5vcm1hbCBvciBsYXJnZSBvYmplY3QuCisgICAgICAgIGlubGluZUNhcGFjaXR5ID0gaW5m
ZXJyZWRJbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5h
bE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBpZiAo
aXNQb2x5UHJvdG8pIHsKKyAgICAgICAgKytpbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBzdGQ6Om1pbihpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6bWF4SW5s
aW5lQ2FwYWNpdHkoKSk7CisgICAgfQorCisgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5ID4gMCk7
CisgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNh
cGFjaXR5KCkpOworCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisKKyAg
ICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBpbmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGlu
IHRoZSBzaXplIGNsYXNzLgorICAgIGlmIChhbGxvY2F0b3IpIHsKKyAgICAgICAgc2l6ZV90IHNs
b3AgPSAoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0gYWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAgIGlubGluZUNhcGFjaXR5ICs9IHNsb3A7Cisg
ICAgICAgIGlmIChpbmxpbmVDYXBhY2l0eSA+IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFj
aXR5KCkpCisgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpTRmluYWxPYmplY3Q6Om1heElu
bGluZUNhcGFjaXR5KCk7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5z
dHJ1Y3R1cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGlzUG9seVByb3RvLCBleGVjdXRhYmxlKTsK
KworICAgIGlmIChpc1BvbHlQcm90bykgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQ
b2x5UHJvdG8oKSk7CisgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgZXhl
Y3V0YWJsZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CisgICAgICAgICAgICBleGVjdXRh
YmxlLT5lbnN1cmVQb2x5UHJvdG9XYXRjaHBvaW50KCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUt
PmVuc3VyZVJhcmVEYXRhKHZtKS0+c2V0U2hhcmVkUG9seVByb3RvV2F0Y2hwb2ludChleGVjdXRh
YmxlLT5zaGFyZWRQb2x5UHJvdG9XYXRjaHBvaW50KCkpOworICAgICAgICB9CisKKyAgICAgICAg
bV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHRoYXQgaWYg
YW5vdGhlciB0aHJlYWQgc2VlcyB0aGUgc3RydWN0dXJlLCBpdCB3aWxsIHNlZSBpdCBwcm9wZXJs
eSBjcmVhdGVkCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKworICAgIG1fc3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVDYXBhY2l0eSA9IGlubGlu
ZUNhcGFjaXR5OworfQorCit1bnNpZ25lZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6cG9zc2li
bGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUpCit7Cisg
ICAgaWYgKHByb3RvdHlwZSA9PSBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90
b3R5cGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzaXplX3QgY291bnQgPSAwOworICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpJbmNsdWRlKTsKKyAgICBw
cm90b3R5cGUtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwg
cHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVB
cnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1lVmVjdG9yID0gcHJvcGVy
dHlOYW1lQXJyYXkuZGF0YSgpLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZVZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gcHJvdG90eXBlLT5nZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZVZlY3Rv
cltpXSk7CisKKyAgICAgICAgLy8gRnVuY3Rpb25zIGFyZSBjb21tb24sIGFuZCBhcmUgdXN1YWxs
eSBjbGFzcy1sZXZlbCBvYmplY3RzIHRoYXQgYXJlIG5vdCBvdmVycmlkZGVuLgorICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHZhbHVlKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICsrY291bnQ7CisKKyAgICB9CisgICAgcmV0dXJuIGNvdW50Owor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
LmgJKHJldmlzaW9uIDIyMzcxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTUg
KzIzLDE1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCisj
cHJhZ21hIG9uY2UKKwogI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCiAKLSNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6OmluaXRpYWxp
emVQcm9maWxlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBv
d25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0
eSwgSlNGdW5jdGlvbiogY29uc3RydWN0b3IpCitBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6OmluaXRpYWxpemVQcm9maWxlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWdu
ZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSwgSlNGdW5jdGlvbiogY29uc3RydWN0b3IpCiB7CiAg
ICAgQVNTRVJUKCFtX2FsbG9jYXRvcik7CiAgICAgQVNTRVJUKCFtX3N0cnVjdHVyZSk7CkBAIC0x
MzEsNyArMTMxLDcgQEAgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZQog
ICAgIG1faW5saW5lQ2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKIH0KIAotdW5zaWduZWQgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6OnBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoVk0mIHZt
LCBKU09iamVjdCogcHJvdG90eXBlKQorQUxXQVlTX0lOTElORSB1bnNpZ25lZCBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYgdm0sIEpTT2Jq
ZWN0KiBwcm90b3R5cGUpCiB7CiAgICAgaWYgKHByb3RvdHlwZSA9PSBwcm90b3R5cGUtPmdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNw
cAkocmV2aXNpb24gMjIzNzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJGdW5jdGlvblJhcmVEYXRhLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>