<?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>147841</bug_id>
          
          <creation_ts>2015-08-10 14:03:01 -0700</creation_ts>
          <short_desc>Convert all locking and condition variables in WebKit to use fast ParkingLot-based locks and condition variables</short_desc>
          <delta_ts>2015-08-26 19:14:40 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147665</dependson>
    
    <dependson>147908</dependson>
    
    <dependson>147986</dependson>
    
    <dependson>148089</dependson>
    
    <dependson>148140</dependson>
    
    <dependson>148493</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1116330</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-10 14:03:01 -0700</bug_when>
    <thetext>The grand plan is:

- Make Lock use atomic increments on the fast path and ParkingLot on the slow path.  This will make the fast path a lot better and will reduce the memory usage of Lock.

- Give Lock and ByteLock the ability to act as their own condition variables.

- Create a separate Condition that uses one byte and some ParkingLot magic, for those cases where a separate condition variable is needed.

Then we can remove all uses of std::mutex, std::condition_variable, WTF::Mutex, and WTF::ThreadCondition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117202</commentid>
    <comment_count>1</comment_count>
      <attachid>258884</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-13 00:29:40 -0700</bug_when>
    <thetext>Created attachment 258884
ParkingLot-based Condition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117309</commentid>
    <comment_count>2</comment_count>
      <attachid>258912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-13 12:09:25 -0700</bug_when>
    <thetext>Created attachment 258912
the patch

This patch is good to go assuming we want to land this separately from the patch that replaces all uses of ThreadCondition/std::condition_variable with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117311</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-13 12:11:05 -0700</bug_when>
    <thetext>Attachment 258912 did not pass style-queue:


ERROR: Source/WTF/wtf/ParkingLot.cpp:561:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:68:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:83:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:115:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:122:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 11 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>1117317</commentid>
    <comment_count>4</comment_count>
      <attachid>258912</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-13 12:19:23 -0700</bug_when>
    <thetext>Comment on attachment 258912
the patch

Missing the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117328</commentid>
    <comment_count>5</comment_count>
      <attachid>258912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-13 12:49:07 -0700</bug_when>
    <thetext>Comment on attachment 258912
the patch

I will submit this patch to a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118936</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-19 11:19:59 -0700</bug_when>
    <thetext>OK, I think this is done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258884</attachid>
            <date>2015-08-13 00:29:40 -0700</date>
            <delta_ts>2015-08-13 12:09:25 -0700</delta_ts>
            <desc>ParkingLot-based Condition</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14163</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MzczKQorKysg
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDYgKzE3Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ2hlY2tlZEFyaXRo
bWV0aWMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQm9vbGVh
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGVyLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ3VycmVudFRpbWUuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4
MzczKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogCQkwRkM0NDg4MzE2RkU5RkUxMDA4NDRCRTkgLyog
UHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi87IH07CiAJCTBGQzRF
REU2MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCAqLzsgfTsKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RC
aXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJMEZEQjY5OEUxQjdDNjQzQTAwMEMxMDc4IC8q
IENvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICovOyB9OwogCQkwRkRE
QkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uaCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njgx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9OwpAQCAtMzI3LDYgKzMyOCw3IEBACiAJ
CTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRp
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25kaXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
REJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzMwLDYgKzczMiw3IEBACiAJCQkJMEY4RjJCOEYxNzJFMDBGMDAw
N0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLywKIAkJCQkwRjhGMkI5MDE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVB
MDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKKwkJCQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzgg
LyogQ29uZGl0aW9uLmggKi8sCiAJCQkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0
b2dyYXBoaWNVdGlsaXRpZXMuY3BwICovLAogCQkJCUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAv
KiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8sCiAJCQkJQThBNDcyNzMxNTFBODI1QTAwNDEy
M0ZGIC8qIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcCAqLywKQEAgLTExODUsNiAr
MTE4OCw3IEBACiAJCQkJQThBNDc0MjMxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbXBsZVN0YXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNDE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlu
a2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8q
IFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREI2OThFMUI3QzY0M0Ew
MDBDMTA3OCAvKiBDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI2MTUxQTgy
NUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjgxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRURBQ0Qz
RTE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4MzczKQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAgc2V0KFdURl9IRUFE
RVJTCiAgICAgQnl0ZU9yZGVyLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGls
ZXIuaAorICAgIENvbmRpdGlvbi5oCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oCiAgICAg
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaAogICAgIEN1cnJlbnRUaW1lLmgKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0NvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfQ29uZGl0aW9uX2gKKyNkZWZpbmUg
V1RGX0NvbmRpdGlvbl9oCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgQ29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBDb25kaXRpb24o
KSB7IH0KKworICAgIC8vIFdhaXQgb24gYSBwYXJraW5nIHF1ZXVlLCB1c2luZyB0aGUgZ2l2ZW4g
bG9jayBhbmQgdW5sb2NrIGNhbGxiYWNrcy4gSXQgd2lsbCB1bmxvY2sgdGhlCisgICAgLy8gbG9j
ayBqdXN0IGJlZm9yZSBwYXJraW5nLCBhbmQgcmVsb2NrIGl0IHVwb24gd2FrZXVwLiBSZXR1cm5z
IHRydWUgaWYgd2Ugd29rZSB1cCB3YXMgZHVlIHRvCisgICAgLy8gc29tZSBjYWxsIHRvIG5vdGlm
eU9uZSgpIG9yIG5vdGlmeUFsbCgpLiBSZXR1cm5zIGZhbHNlIGlmIHdlIHdva2UgdXAgZHVlIHRv
IGEgdGltZW91dC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KKyAgICBib29sIHdh
aXRVbnRpbCgKKyAgICAgICAgTG9ja1R5cGUmIGxvY2ssIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xv
Y2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gUGFy
a2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgICAgICAmbV9kdW1teSwKKyAgICAg
ICAgICAgIFtdICgpIC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfSwKKyAgICAgICAgICAgIFsmbG9j
a10gKCkgeyBsb2NrLnVubG9jaygpOyB9LAorICAgICAgICAgICAgdGltZW91dCk7CisgICAgICAg
IGxvY2subG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFdh
aXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1ZSBp
ZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KKyAgICAvLyBNYXkgcmV0dXJuIGVhcmx5IGR1
ZSB0byB0aW1lb3V0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBG
dW5jdG9yPgorICAgIGJvb2wgd2FpdFVudGlsKAorICAgICAgICBMb2NrVHlwZSYgbG9jaywgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICB3aGlsZSAoIXByZWRpY2F0ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXdhaXRVbnRpbChsb2NrLCB0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHJlZGljYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4g
UmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgorICAgIC8vIE1heSBy
ZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIHdh
aXRGb3IoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBhYnNvbHV0ZVRpbWVvdXQgPQorICAg
ICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVy
YXRpb24+KHJlbGF0aXZlVGltZW91dCk7CisKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2Nr
LCBhYnNvbHV0ZVRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGU+CisgICAgdm9pZCB3YWl0KExvY2tUeXBlJiBsb2NrKQorICAgIHsKKyAg
ICAgICAgd2FpdFVudGlsKGxvY2ssIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9p
bnQ6Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhaXQoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IEZ1bmN0
b3ImIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpCisgICAg
ICAgICAgICB3YWl0KGxvY2spOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5T25lKCkKKyAgICB7
CisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgmbV9kdW1teSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbm90aWZ5QWxsKCkKKyAgICB7CisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0Fs
bCgmbV9kdW1teSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAKKyAgICB1aW50OF90IG1f
ZHVtbXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9Db25kaXRp
b25faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMTg4Mzc0KQorKysgU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNywxMyArNTA3
LDIwIEBAIGJvb2wgZGVxdWV1ZSgKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJvb2wg
UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpm
dW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCitib29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRp
b25hbGx5KAorICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCisgICAgc3RkOjpmdW5jdGlvbjxib29s
KCk+IHZhbGlkYXRpb24sCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGJlZm9yZVNsZWVwLAor
ICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKIHsKICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHBhcmtpbmcuXG4iKSk7CiAgICAgCiAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERh
dGEoKTsKIAorICAgIC8vIEd1YXJkIGFnYWluc3Qgc29tZW9uZSBjYWxsaW5nIHBhcmtDb25kaXRp
b25hbGx5KCkgcmVjdXJzaXZlbHkgZnJvbSBiZWZvcmVTbGVlcCgpLgorICAgIFJFTEVBU0VfQVNT
RVJUKCFtZS0+YWRkcmVzcyk7CisKICAgICBib29sIHJlc3VsdCA9IGVucXVldWUoCiAgICAgICAg
IGFkZHJlc3MsCiAgICAgICAgIFsmXSAoKSAtPiBUaHJlYWREYXRhKiB7CkBAIC01MjcsMTYgKzUz
NCw0OSBAQCBib29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5KGNvbnN0CiAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZyBzZWxmOiAi
LCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOworICAgIGJlZm9yZVNsZWVwKCk7CisKKyAgICBib29s
IGRpZEdldERlcXVldWVkOwogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNz
KQotICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAg
ICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkg
PCB0aW1lb3V0KQorICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdF91bnRpbChs
b2NrZXIsIHRpbWVvdXQpOworICAgICAgICBBU1NFUlQoIW1lLT5hZGRyZXNzIHx8IG1lLT5hZGRy
ZXNzID09IGFkZHJlc3MpOworICAgICAgICBkaWRHZXREZXF1ZXVlZCA9ICFtZS0+YWRkcmVzczsK
ICAgICB9Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOwot
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChkaWRHZXREZXF1ZXVlZCkgeworICAgICAgICAvLyBH
cmVhdCEgV2UgYWN0dWFsbHkgZ290IGRlcXVldWVkIHJhdGhlciB0aGFuIHRoZSB0aW1lb3V0IGV4
cGlyaW5nLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBIYXZlIHRvIHJl
bW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcXVldWUgc2luY2Ugd2UgdGltZWQgb3V0IGFuZCBub2Jv
ZHkgaGFzIGRlcXVldWVkIHVzIHlldC4KKworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBn
ZXQgdW5wYXJrZWQgcmlnaHQgaGVyZSwganVzdCBiZWZvcmUgZGVxdWV1ZSgpIGdyYWJzIGEgbG9j
ay4gSXQncworICAgIC8vIHByb2JhYmx5IHdvcnRod2hpbGUgdG8gZGV0ZWN0IHdoZW4gdGhpcyBo
YXBwZW5zLCBhbmQgcmV0dXJuIHRydWUgaW4gdGhhdCBjYXNlLCB0byBlbnN1cmUKKyAgICAvLyB0
aGF0IHdoZW4gd2UgcmV0dXJuIGZhbHNlIGl0IHJlYWxseSBtZWFucyB0aGF0IG5vIHVucGFyayBj
b3VsZCBoYXZlIGJlZW4gcmVzcG9uc2libGUgZm9yIHVzCisgICAgLy8gd2FraW5nIHVwLCBhbmQg
dGhhdCBpZiBhbiB1bnBhcmsgY2FsbCBkaWQgaGFwcGVuLCBpdCB3b2tlIHNvbWVvbmUgZWxzZSB1
cC4KKyAgICBib29sIGRpZEZpbmQgPSBmYWxzZTsKKyAgICBkZXF1ZXVlKAorICAgICAgICBhZGRy
ZXNzLCBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwKKyAgICAgICAgWyZdIChUaHJlYWREYXRhKiBl
bGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBtZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICAgICAgICAg
IGRpZEZpbmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIERlcXVl
dWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgfSwKKyAgICAgICAgW10gKGJvb2wpIHsgfSk7CisK
KyAgICBBU1NFUlQoIW1lLT5uZXh0SW5RdWV1ZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBu
byBtYXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgorICAg
IHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2lu
Z0xvY2spOworICAgICAgICBtZS0+YWRkcmVzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8g
SWYgd2Ugd2VyZSBub3QgZm91bmQgaW4gdGhlIHNlYXJjaCBhYm92ZSwgdGhlbiB3ZSBrbm93IHRo
YXQgc29tZW9uZSB1bnBhcmtlZCB1cy4KKyAgICByZXR1cm4gIWRpZEZpbmQ7CiB9CiAKIGJvb2wg
UGFya2luZ0xvdDo6dW5wYXJrT25lKGNvbnN0IHZvaWQqIGFkZHJlc3MpCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QYXJraW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oCShyZXZpc2lvbiAxODgzNzQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV1RGX1BhcmtpbmdMb3Rf
aAogI2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCiAKKyNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KQEAgLTM5LDEwICs0MCwyMyBAQCBjbGFzcyBQYXJraW5nTG90IHsKIHB1Ymxp
YzoKICAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCiAgICAgLy8gcGFya2lu
ZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3
aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dGhyZWFkIGFjdHVhbGx5IHNsZXB0LCBvciBmYWxzZSBpZiBpdCByZXR1cm5lZCBxdWlja2x5IGJl
Y2F1c2Ugb2YKLSAgICAvLyB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIHBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0
ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKTsKKyAgICAvLyBJZiB2YWxpZGF0aW9uIHJl
dHVybnMgZmFsc2UsIGl0IHdpbGwgdW5sb2NrIHRoZSBpbnRlcm5hbCBwYXJraW5nIHF1ZXVlIGFu
ZCB0aGVuIGl0IHdpbGwKKyAgICAvLyByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNl
LiBJZiB2YWxpZGF0aW9uIHJldHVybnMgdHJ1ZSwgaXQgd2lsbCBlbnF1ZXVlIHRoZSB0aHJlYWQs
CisgICAgLy8gdW5sb2NrIHRoZSBwYXJraW5nIHF1ZXVlIGxvY2ssIGNhbGwgdGhlIGJlZm9yZVNs
ZWVwIGZ1bmN0aW9uLCBhbmQgdGhlbiBpdCB3aWxsIHNsZWVwIHNvIGxvbmcKKyAgICAvLyBhcyB0
aGUgdGhyZWFkIGNvbnRpbnVlcyB0byBiZSBvbiB0aGUgcXVldWUgYW5kIHRoZSB0aW1lb3V0IGhh
c24ndCBmaXJlZC4gRmluYWxseSwgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSBpZiB3ZSBhY3R1
YWxseSBnb3QgdW5wYXJrZWQgb3IgZmFsc2UgaWYgdGhlIHRpbWVvdXQgd2FzIGhpdC4gTm90ZSB0
aGF0CisgICAgLy8gYmVmb3JlU2xlZXAgaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZCwgc28g
aXQncyBPSyB0byBkbyBwcmV0dHkgbXVjaCBhbnl0aGluZyBzbyBsb25nIGFzCisgICAgLy8geW91
IGRvbid0IHJlY3Vyc2l2ZWx5IGNhbGwgcGFya0NvbmRpdGlvbmFsbHkoKS4gWW91IGNhbiBjYWxs
IHVucGFya09uZSgpL3VucGFya0FsbCgpIHRob3VnaC4KKyAgICAvLyBJdCdzIHVzZWZ1bCB0byB1
c2UgYmVmb3JlU2xlZXAoKSB0byB1bmxvY2sgc29tZSBtdXRleCBpbiB0aGUgaW1wbGVtZW50YXRp
b24gb2YKKyAgICAvLyBDb25kaXRpb246OndhaXQoKS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJl
c3MsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uLAorICAgICAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYmVmb3JlU2xlZXAsCisgICAgICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCk7CiAKKyAgICAvLyBTaW1wbGUgdmVyc2lv
biBvZiBwYXJrQ29uZGl0aW9uYWxseSgpIHRoYXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBjYXNl
OiB5b3Ugd2FudCB0byBwYXJrCisgICAgLy8gaW5kZWZpbml0ZWx5IHNvIGxvbmcgYXMgdGhlIHZh
bHVlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGhhc24ndCBjaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgc3RhdGljIGJvb2wgY29tcGFyZUFuZFBhcmsoY29u
c3QgQXRvbWljPFQ+KiBhZGRyZXNzLCBVIGV4cGVjdGVkKQogICAgIHsKQEAgLTUxLDcgKzY1LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29sIHsK
ICAgICAgICAgICAgICAgICBVIHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKLSAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFtdICgpIHsgfSwKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtz
IG9uZSB0aHJlYWQgZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRy
ZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258912</attachid>
            <date>2015-08-13 12:09:25 -0700</date>
            <delta_ts>2015-08-13 12:49:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>27724</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MzczKQorKysg
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDYgKzE3Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ2hlY2tlZEFyaXRo
bWV0aWMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQm9vbGVh
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGVyLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ3VycmVudFRpbWUuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4
MzczKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogCQkwRkM0NDg4MzE2RkU5RkUxMDA4NDRCRTkgLyog
UHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi87IH07CiAJCTBGQzRF
REU2MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCAqLzsgfTsKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RC
aXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJMEZEQjY5OEUxQjdDNjQzQTAwMEMxMDc4IC8q
IENvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICovOyB9OwogCQkwRkRE
QkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uaCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njgx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9OwpAQCAtMzI3LDYgKzMyOCw3IEBACiAJ
CTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRp
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25kaXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
REJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzMwLDYgKzczMiw3IEBACiAJCQkJMEY4RjJCOEYxNzJFMDBGMDAw
N0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLywKIAkJCQkwRjhGMkI5MDE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVB
MDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKKwkJCQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzgg
LyogQ29uZGl0aW9uLmggKi8sCiAJCQkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0
b2dyYXBoaWNVdGlsaXRpZXMuY3BwICovLAogCQkJCUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAv
KiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8sCiAJCQkJQThBNDcyNzMxNTFBODI1QTAwNDEy
M0ZGIC8qIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcCAqLywKQEAgLTExODUsNiAr
MTE4OCw3IEBACiAJCQkJQThBNDc0MjMxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbXBsZVN0YXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNDE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlu
a2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTMxN0EwQkRBRTAwRkEwNENCIC8q
IFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREI2OThFMUI3QzY0M0Ew
MDBDMTA3OCAvKiBDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI2MTUxQTgy
NUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjgxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRURBQ0Qz
RTE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4MzczKQorKysgU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAgc2V0KFdURl9IRUFE
RVJTCiAgICAgQnl0ZU9yZGVyLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGls
ZXIuaAorICAgIENvbmRpdGlvbi5oCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oCiAgICAg
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaAogICAgIEN1cnJlbnRUaW1lLmgKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0NvbmRpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfQ29uZGl0aW9uX2gKKyNkZWZpbmUg
V1RGX0NvbmRpdGlvbl9oCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgQ29uZGl0aW9uIHsKK3B1YmxpYzoKKyAgICBDb25kaXRpb24o
KSB7IH0KKworICAgIC8vIFdhaXQgb24gYSBwYXJraW5nIHF1ZXVlLCB1c2luZyB0aGUgZ2l2ZW4g
bG9jayBhbmQgdW5sb2NrIGNhbGxiYWNrcy4gSXQgd2lsbCB1bmxvY2sgdGhlCisgICAgLy8gbG9j
ayBqdXN0IGJlZm9yZSBwYXJraW5nLCBhbmQgcmVsb2NrIGl0IHVwb24gd2FrZXVwLiBSZXR1cm5z
IHRydWUgaWYgd2Ugd29rZSB1cCB3YXMgZHVlIHRvCisgICAgLy8gc29tZSBjYWxsIHRvIG5vdGlm
eU9uZSgpIG9yIG5vdGlmeUFsbCgpLiBSZXR1cm5zIGZhbHNlIGlmIHdlIHdva2UgdXAgZHVlIHRv
IGEgdGltZW91dC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KKyAgICBib29sIHdh
aXRVbnRpbCgKKyAgICAgICAgTG9ja1R5cGUmIGxvY2ssIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xv
Y2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gUGFy
a2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgICAgICAmbV9kdW1teSwKKyAgICAg
ICAgICAgIFtdICgpIC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfSwKKyAgICAgICAgICAgIFsmbG9j
a10gKCkgeyBsb2NrLnVubG9jaygpOyB9LAorICAgICAgICAgICAgdGltZW91dCk7CisgICAgICAg
IGxvY2subG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFdh
aXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1ZSBp
ZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KKyAgICAvLyBNYXkgcmV0dXJuIGVhcmx5IGR1
ZSB0byB0aW1lb3V0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBG
dW5jdG9yPgorICAgIGJvb2wgd2FpdFVudGlsKAorICAgICAgICBMb2NrVHlwZSYgbG9jaywgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICB3aGlsZSAoIXByZWRpY2F0ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXdhaXRVbnRpbChsb2NrLCB0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHJlZGljYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4g
UmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgorICAgIC8vIE1heSBy
ZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIHdh
aXRGb3IoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBhYnNvbHV0ZVRpbWVvdXQgPQorICAg
ICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVy
YXRpb24+KHJlbGF0aXZlVGltZW91dCk7CisKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2Nr
LCBhYnNvbHV0ZVRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGU+CisgICAgdm9pZCB3YWl0KExvY2tUeXBlJiBsb2NrKQorICAgIHsKKyAg
ICAgICAgd2FpdFVudGlsKGxvY2ssIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9p
bnQ6Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHdhaXQoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IEZ1bmN0
b3ImIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpCisgICAg
ICAgICAgICB3YWl0KGxvY2spOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5T25lKCkKKyAgICB7
CisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgmbV9kdW1teSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbm90aWZ5QWxsKCkKKyAgICB7CisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0Fs
bCgmbV9kdW1teSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAKKyAgICB1aW50OF90IG1f
ZHVtbXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9Db25kaXRp
b25faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMTg4Mzc0KQorKysgU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNywxMyArNTA3
LDIwIEBAIGJvb2wgZGVxdWV1ZSgKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJvb2wg
UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpm
dW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCitib29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRp
b25hbGx5KAorICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCisgICAgc3RkOjpmdW5jdGlvbjxib29s
KCk+IHZhbGlkYXRpb24sCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGJlZm9yZVNsZWVwLAor
ICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKIHsKICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHBhcmtpbmcuXG4iKSk7CiAgICAgCiAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERh
dGEoKTsKIAorICAgIC8vIEd1YXJkIGFnYWluc3Qgc29tZW9uZSBjYWxsaW5nIHBhcmtDb25kaXRp
b25hbGx5KCkgcmVjdXJzaXZlbHkgZnJvbSBiZWZvcmVTbGVlcCgpLgorICAgIFJFTEVBU0VfQVNT
RVJUKCFtZS0+YWRkcmVzcyk7CisKICAgICBib29sIHJlc3VsdCA9IGVucXVldWUoCiAgICAgICAg
IGFkZHJlc3MsCiAgICAgICAgIFsmXSAoKSAtPiBUaHJlYWREYXRhKiB7CkBAIC01MjcsMTYgKzUz
NCw0OSBAQCBib29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5KGNvbnN0CiAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZyBzZWxmOiAi
LCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOworICAgIGJlZm9yZVNsZWVwKCk7CisKKyAgICBib29s
IGRpZEdldERlcXVldWVkOwogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNz
KQotICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAg
ICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkg
PCB0aW1lb3V0KQorICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdF91bnRpbChs
b2NrZXIsIHRpbWVvdXQpOworICAgICAgICBBU1NFUlQoIW1lLT5hZGRyZXNzIHx8IG1lLT5hZGRy
ZXNzID09IGFkZHJlc3MpOworICAgICAgICBkaWRHZXREZXF1ZXVlZCA9ICFtZS0+YWRkcmVzczsK
ICAgICB9Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOwot
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChkaWRHZXREZXF1ZXVlZCkgeworICAgICAgICAvLyBH
cmVhdCEgV2UgYWN0dWFsbHkgZ290IGRlcXVldWVkIHJhdGhlciB0aGFuIHRoZSB0aW1lb3V0IGV4
cGlyaW5nLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBIYXZlIHRvIHJl
bW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcXVldWUgc2luY2Ugd2UgdGltZWQgb3V0IGFuZCBub2Jv
ZHkgaGFzIGRlcXVldWVkIHVzIHlldC4KKworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBn
ZXQgdW5wYXJrZWQgcmlnaHQgaGVyZSwganVzdCBiZWZvcmUgZGVxdWV1ZSgpIGdyYWJzIGEgbG9j
ay4gSXQncworICAgIC8vIHByb2JhYmx5IHdvcnRod2hpbGUgdG8gZGV0ZWN0IHdoZW4gdGhpcyBo
YXBwZW5zLCBhbmQgcmV0dXJuIHRydWUgaW4gdGhhdCBjYXNlLCB0byBlbnN1cmUKKyAgICAvLyB0
aGF0IHdoZW4gd2UgcmV0dXJuIGZhbHNlIGl0IHJlYWxseSBtZWFucyB0aGF0IG5vIHVucGFyayBj
b3VsZCBoYXZlIGJlZW4gcmVzcG9uc2libGUgZm9yIHVzCisgICAgLy8gd2FraW5nIHVwLCBhbmQg
dGhhdCBpZiBhbiB1bnBhcmsgY2FsbCBkaWQgaGFwcGVuLCBpdCB3b2tlIHNvbWVvbmUgZWxzZSB1
cC4KKyAgICBib29sIGRpZEZpbmQgPSBmYWxzZTsKKyAgICBkZXF1ZXVlKAorICAgICAgICBhZGRy
ZXNzLCBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwKKyAgICAgICAgWyZdIChUaHJlYWREYXRhKiBl
bGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBtZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICAgICAgICAg
IGRpZEZpbmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIERlcXVl
dWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgfSwKKyAgICAgICAgW10gKGJvb2wpIHsgfSk7CisK
KyAgICBBU1NFUlQoIW1lLT5uZXh0SW5RdWV1ZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBu
byBtYXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgorICAg
IHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2lu
Z0xvY2spOworICAgICAgICBtZS0+YWRkcmVzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8g
SWYgd2Ugd2VyZSBub3QgZm91bmQgaW4gdGhlIHNlYXJjaCBhYm92ZSwgdGhlbiB3ZSBrbm93IHRo
YXQgc29tZW9uZSB1bnBhcmtlZCB1cy4KKyAgICByZXR1cm4gIWRpZEZpbmQ7CiB9CiAKIGJvb2wg
UGFya2luZ0xvdDo6dW5wYXJrT25lKGNvbnN0IHZvaWQqIGFkZHJlc3MpCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QYXJraW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oCShyZXZpc2lvbiAxODgzNzQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV1RGX1BhcmtpbmdMb3Rf
aAogI2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCiAKKyNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KQEAgLTM5LDEwICs0MCwyMyBAQCBjbGFzcyBQYXJraW5nTG90IHsKIHB1Ymxp
YzoKICAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCiAgICAgLy8gcGFya2lu
ZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3
aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dGhyZWFkIGFjdHVhbGx5IHNsZXB0LCBvciBmYWxzZSBpZiBpdCByZXR1cm5lZCBxdWlja2x5IGJl
Y2F1c2Ugb2YKLSAgICAvLyB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIHBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0
ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKTsKKyAgICAvLyBJZiB2YWxpZGF0aW9uIHJl
dHVybnMgZmFsc2UsIGl0IHdpbGwgdW5sb2NrIHRoZSBpbnRlcm5hbCBwYXJraW5nIHF1ZXVlIGFu
ZCB0aGVuIGl0IHdpbGwKKyAgICAvLyByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNl
LiBJZiB2YWxpZGF0aW9uIHJldHVybnMgdHJ1ZSwgaXQgd2lsbCBlbnF1ZXVlIHRoZSB0aHJlYWQs
CisgICAgLy8gdW5sb2NrIHRoZSBwYXJraW5nIHF1ZXVlIGxvY2ssIGNhbGwgdGhlIGJlZm9yZVNs
ZWVwIGZ1bmN0aW9uLCBhbmQgdGhlbiBpdCB3aWxsIHNsZWVwIHNvIGxvbmcKKyAgICAvLyBhcyB0
aGUgdGhyZWFkIGNvbnRpbnVlcyB0byBiZSBvbiB0aGUgcXVldWUgYW5kIHRoZSB0aW1lb3V0IGhh
c24ndCBmaXJlZC4gRmluYWxseSwgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSBpZiB3ZSBhY3R1
YWxseSBnb3QgdW5wYXJrZWQgb3IgZmFsc2UgaWYgdGhlIHRpbWVvdXQgd2FzIGhpdC4gTm90ZSB0
aGF0CisgICAgLy8gYmVmb3JlU2xlZXAgaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZCwgc28g
aXQncyBPSyB0byBkbyBwcmV0dHkgbXVjaCBhbnl0aGluZyBzbyBsb25nIGFzCisgICAgLy8geW91
IGRvbid0IHJlY3Vyc2l2ZWx5IGNhbGwgcGFya0NvbmRpdGlvbmFsbHkoKS4gWW91IGNhbiBjYWxs
IHVucGFya09uZSgpL3VucGFya0FsbCgpIHRob3VnaC4KKyAgICAvLyBJdCdzIHVzZWZ1bCB0byB1
c2UgYmVmb3JlU2xlZXAoKSB0byB1bmxvY2sgc29tZSBtdXRleCBpbiB0aGUgaW1wbGVtZW50YXRp
b24gb2YKKyAgICAvLyBDb25kaXRpb246OndhaXQoKS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJl
c3MsCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uLAorICAgICAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYmVmb3JlU2xlZXAsCisgICAgICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCk7CiAKKyAgICAvLyBTaW1wbGUgdmVyc2lv
biBvZiBwYXJrQ29uZGl0aW9uYWxseSgpIHRoYXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBjYXNl
OiB5b3Ugd2FudCB0byBwYXJrCisgICAgLy8gaW5kZWZpbml0ZWx5IHNvIGxvbmcgYXMgdGhlIHZh
bHVlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGhhc24ndCBjaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgc3RhdGljIGJvb2wgY29tcGFyZUFuZFBhcmsoY29u
c3QgQXRvbWljPFQ+KiBhZGRyZXNzLCBVIGV4cGVjdGVkKQogICAgIHsKQEAgLTUxLDcgKzY1LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29sIHsK
ICAgICAgICAgICAgICAgICBVIHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKLSAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFtdICgpIHsgfSwKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtz
IG9uZSB0aHJlYWQgZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRy
ZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTg4MzczKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VT
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9BdG9taWNTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvRGVxdWUuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShy
ZXZpc2lvbiAxODgzNzMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4
cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWls
ZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv
bS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENv
bmZpZ3VyYXRpb25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdT
dWZmaXh8V2luMzIiPgpAQCAtMzEyLDYgKzMxMiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxUZXN0c1xXVEZcY2ZcUmV0YWluUHRyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXFRlc3RzXFdURlxjZlxSZXRhaW5QdHJIYXNoaW5nLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXENvbmRpdGlvbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcQ1N0cmluZy5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcRGF0ZU1hdGguY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXERlcXVlLmNwcCIgLz4KSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgzNzMpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTIsNiArMTIsNyBAQAogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxh
dGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGll
c0NvY29hLm1tICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3
RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRl
SmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEZFNDQ3OTkxQjc2RjFFQjAwOTQ5OEVCIC8qIFBhcmtp
bmdMb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OworCQkwRkVB
RTM2OTFCN0QxOUQyMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUFFMzY3MUI3RDE5Q0IwMENFMTdGMiAvKiBD
b25kaXRpb24uY3BwICovOyB9OwogCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVB
NDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQw
MEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAq
LzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFGQzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNy
ZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE1MEFBMUYxQTJBNEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGlu
LWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07CkBAIC00MzEsNiArNDMyLDcgQEAKIAkJMEZDNkM0Q0Ix
NDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZWRCbGFja1RyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBh
cmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2lu
Z0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUFFMzY3MUI3RDE5Q0Iw
MENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzQ1
QTQxQjczRUJFMjAwODVCRDYyIC8qIExvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDY0
MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2F0dXJh
dGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA5MSw2ICsxMDkzLDcgQEAKIAkJCQlCQzAyOUIxQTE0ODZCMjM4MDA4MTdEQTkgLyogbnMg
Ki8sCiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAwRDFFNEJGIC8qIEF0b21pY1N0cmluZy5jcHAgKi8s
CiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAgKi8sCisJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8qIENvbmRpdGlvbi5j
cHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJpbmcuY3BwICovLAog
CQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJ
N0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywKQEAgLTE0OTQsNiAr
MTQ5Nyw3IEBACiAJCQkJN0NDRTdFQkYxQTQxMUE3RTAwNDQ3QzRDIC8qIEVsZW1lbnRBdFBvaW50
SW5XZWJGcmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUVGMUE0MTFBRTYwMDQ0N0M0
QyAvKiBFcGhlbWVyYWxTZXNzaW9uUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFRjAxQTQxMUFFNjAwNDQ3QzRDIC8qIEV2YWx1YXRlSmF2YVNj
cmlwdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVBRTM2OTFCN0QxOUQyMDBDRTE3RjIgLyog
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYxMUE0MTFBRTYwMDQ0N0M0
QyAvKiBGYWlsZWRMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYzMUE0MTFBRTYw
MDQ0N0M0QyAvKiBGaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUY0MUE0MTFBRTYw
MDQ0N0M0QyAvKiBGaW5kTWF0Y2hlcy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CisKK2VudW0gTm90aWZ5U3R5bGUgeworICAgIEFsd2F5c05vdGlmeU9u
ZSwKKyAgICBUYWN0aWNhbGx5Tm90aWZ5QWxsCit9OworCit2b2lkIHJ1blRlc3QoCisgICAgdW5z
aWduZWQgbnVtUHJvZHVjZXJzLAorICAgIHVuc2lnbmVkIG51bUNvbnN1bWVycywKKyAgICB1bnNp
Z25lZCBtYXhRdWV1ZVNpemUsCisgICAgdW5zaWduZWQgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwK
KyAgICBOb3RpZnlTdHlsZSBub3RpZnlTdHlsZSkKK3sKKyAgICBEZXF1ZTx1bnNpZ25lZD4gcXVl
dWU7CisgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CisgICAgTG9jayBsb2NrOworICAg
IENvbmRpdGlvbiBlbXB0eUNvbmRpdGlvbjsKKyAgICBDb25kaXRpb24gZnVsbENvbmRpdGlvbjsK
KworICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7CisgICAgVmVj
dG9yPFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKworICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcmVjZWl2ZWQ7CisgICAgTG9jayByZWNlaXZlZExvY2s7CisgICAgCisgICAgYXV0byBu
b3RpZnkgPSBbJl0gKENvbmRpdGlvbiYgY29uZGl0aW9uLCBib29sIHNob3VsZE5vdGlmeSkgewor
ICAgICAgICBzd2l0Y2ggKG5vdGlmeVN0eWxlKSB7CisgICAgICAgIGNhc2UgQWx3YXlzTm90aWZ5
T25lOgorICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVGFjdGljYWxseU5vdGlmeUFsbDoKKyAgICAgICAgICAgIGlmIChz
aG91bGROb3RpZnkpCisgICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgeworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAiQ29uc3VtZXIgdGhy
ZWFkIiwKKyAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3VsZE5vdGlmeSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2tlcihsb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLndhaXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3Vs
ZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1
ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICBzaG91bGROb3RpZnkgPSBxdWV1ZS5zaXplKCkgPT0gbWF4UXVldWVTaXplOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcXVldWUudGFrZUZpcnN0KCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5KGZ1bGxDb25kaXRpb24s
IHNob3VsZE5vdGlmeSk7CisKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihyZWNlaXZlZExvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
Y29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgIlBy
b2R1Y2VyIFRocmVhZCIsCisgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGROb3RpZnkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2Nr
PiBsb2NrZXIobG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29uZGl0aW9uLndh
aXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRl
IHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgp
ID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkTm90aWZ5ID0g
cXVldWUuaXNFbXB0eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKGkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0
eUNvbmRpdGlvbiwgc2hvdWxkTm90aWZ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHBy
b2R1Y2VyVGhyZWFkcykKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRl
bnRpZmllcik7CisKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIo
bG9jayk7CisgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CisgICAgfQorICAgIGVtcHR5
Q29uZGl0aW9uLm5vdGlmeUFsbCgpOworCisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworCisgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAq
IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CisgICAgc3RkOjpzb3J0
KHJlY2VpdmVkLmJlZ2luKCksIHJlY2VpdmVkLmVuZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIG1l
c3NhZ2VJbmRleCA9IDA7IG1lc3NhZ2VJbmRleCA8IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7ICsr
bWVzc2FnZUluZGV4KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgcHJvZHVjZXJJbmRleCA9IDA7
IHByb2R1Y2VySW5kZXggPCBudW1Qcm9kdWNlcnM7ICsrcHJvZHVjZXJJbmRleCkKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShtZXNzYWdlSW5kZXgsIHJlY2VpdmVkW21lc3NhZ2VJbmRleCAqIG51bVBy
b2R1Y2VycyArIHByb2R1Y2VySW5kZXhdKTsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitURVNUKFdURl9Db25kaXRpb24sIE9uZVByb2R1Y2VyT25lQ29uc3VtZXJPbmVT
bG90KQoreworICAgIHJ1blRlc3QoMSwgMSwgMSwgMTAwMDAwLCBUYWN0aWNhbGx5Tm90aWZ5QWxs
KTsKK30KKworVEVTVChXVEZfQ29uZGl0aW9uLCBPbmVQcm9kdWNlck9uZUNvbnN1bWVySHVuZHJl
ZFNsb3RzKQoreworICAgIHJ1blRlc3QoMSwgMSwgMTAwLCAxMDAwMDAwLCBUYWN0aWNhbGx5Tm90
aWZ5QWxsKTsKK30KKworVEVTVChXVEZfQ29uZGl0aW9uLCBUZW5Qcm9kdWNlcnNPbmVDb25zdW1l
ck9uZVNsb3QpCit7CisgICAgcnVuVGVzdCgxMCwgMSwgMSwgMTAwMDAsIFRhY3RpY2FsbHlOb3Rp
ZnlBbGwpOworfQorCitURVNUKFdURl9Db25kaXRpb24sIFRlblByb2R1Y2Vyc09uZUNvbnN1bWVy
SHVuZHJlZFNsb3RzTm90aWZ5QWxsKQoreworICAgIHJ1blRlc3QoMTAsIDEsIDEwMCwgMTAwMDAs
IFRhY3RpY2FsbHlOb3RpZnlBbGwpOworfQorCitURVNUKFdURl9Db25kaXRpb24sIFRlblByb2R1
Y2Vyc09uZUNvbnN1bWVySHVuZHJlZFNsb3RzTm90aWZ5T25lKQoreworICAgIHJ1blRlc3QoMTAs
IDEsIDEwMCwgMTAwMDAsIEFsd2F5c05vdGlmeU9uZSk7Cit9CisKK1RFU1QoV1RGX0NvbmRpdGlv
biwgT25lUHJvZHVjZXJUZW5Db25zdW1lcnNPbmVTbG90KQoreworICAgIHJ1blRlc3QoMSwgMTAs
IDEsIDEwMDAwLCBUYWN0aWNhbGx5Tm90aWZ5QWxsKTsKK30KKworVEVTVChXVEZfQ29uZGl0aW9u
LCBPbmVQcm9kdWNlclRlbkNvbnN1bWVyc0h1bmRyZWRTbG90c05vdGlmeUFsbCkKK3sKKyAgICBy
dW5UZXN0KDEsIDEwLCAxMDAsIDEwMDAwMCwgVGFjdGljYWxseU5vdGlmeUFsbCk7Cit9CisKK1RF
U1QoV1RGX0NvbmRpdGlvbiwgT25lUHJvZHVjZXJUZW5Db25zdW1lcnNIdW5kcmVkU2xvdHNOb3Rp
ZnlPbmUpCit7CisgICAgcnVuVGVzdCgxLCAxMCwgMTAwLCAxMDAwMDAsIEFsd2F5c05vdGlmeU9u
ZSk7Cit9CisKK1RFU1QoV1RGX0NvbmRpdGlvbiwgVGVuUHJvZHVjZXJzVGVuQ29uc3VtZXJzT25l
U2xvdCkKK3sKKyAgICBydW5UZXN0KDEwLCAxMCwgMSwgNTAwMDAsIFRhY3RpY2FsbHlOb3RpZnlB
bGwpOworfQorCitURVNUKFdURl9Db25kaXRpb24sIFRlblByb2R1Y2Vyc1RlbkNvbnN1bWVyc0h1
bmRyZWRTbG90c05vdGlmeUFsbCkKK3sKKyAgICBydW5UZXN0KDEwLCAxMCwgMTAwLCA1MDAwMCwg
VGFjdGljYWxseU5vdGlmeUFsbCk7Cit9CisKK1RFU1QoV1RGX0NvbmRpdGlvbiwgVGVuUHJvZHVj
ZXJzVGVuQ29uc3VtZXJzSHVuZHJlZFNsb3RzTm90aWZ5T25lKQoreworICAgIHJ1blRlc3QoMTAs
IDEwLCAxMDAsIDUwMDAwLCBBbHdheXNOb3RpZnlPbmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCisKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3Bw
CShyZXZpc2lvbiAxODgzNzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRl
eCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAgIHRo
cmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4
XSA9IGNyZWF0ZVRocmVhZCgKLSAgICAgICAgICAgICAgICAiQmVuY2htYXJrIHRocmVhZCIsCisg
ICAgICAgICAgICAgICAgIkxvY2sgdGVzdCB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFt0aHJl
YWRHcm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRp
Y2FsU2VjdGlvbl0gKCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1JdGVyYXRpb25zOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJl
YWRHcm91cEluZGV4XS5sb2NrKCk7Cg==
</data>
<flag name="review"
          id="284101"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>