<?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>149435</bug_id>
          
          <creation_ts>2015-09-21 16:35:47 -0700</creation_ts>
          <short_desc>GCThreadSharedData is just a bad way of saying Heap</short_desc>
          <delta_ts>2015-09-22 18:36:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</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>149436</dependson>
    
    <dependson>149472</dependson>
          <blocked>149433</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</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>1127830</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 16:35:47 -0700</bug_when>
    <thetext>The GCThreadSharedData object maps 1-to-1 to a Heap. Its existence adds nothing useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127854</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-21 17:24:03 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; The GCThreadSharedData object maps 1-to-1 to a Heap. Its existence adds
&gt; nothing useful.

I wouldn&apos;t say that it adds nothing.  It does encapsulate the GC thread management code, and I think there is value in modularizing the code as opposed to having it all in one giant heap class.  That said, if it is adding complexity that is preventing your concurrent GC work, I won&apos;t object to its removal (especially since it may not be the best abstraction for breaking down the heap when you&apos;re done with the concurrent GC design).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127857</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 17:34:50 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; The GCThreadSharedData object maps 1-to-1 to a Heap. Its existence adds
&gt; &gt; nothing useful.
&gt; 
&gt; I wouldn&apos;t say that it adds nothing.  It does encapsulate the GC thread
&gt; management code, and I think there is value in modularizing the code as
&gt; opposed to having it all in one giant heap class.  That said, if it is
&gt; adding complexity that is preventing your concurrent GC work, I won&apos;t object
&gt; to its removal (especially since it may not be the best abstraction for
&gt; breaking down the heap when you&apos;re done with the concurrent GC design).

It&apos;s basically a struct since everyone who deals with it is a friend and accesses its members directly.  So, it&apos;s a purely harmful class - it provides no encapsulation but it does mean more code for accessing its data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128118</commentid>
    <comment_count>3</comment_count>
      <attachid>261769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-22 15:23:05 -0700</bug_when>
    <thetext>Created attachment 261769
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128149</commentid>
    <comment_count>4</comment_count>
      <attachid>261775</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-22 16:26:04 -0700</bug_when>
    <thetext>Created attachment 261775
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128150</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-22 16:28:57 -0700</bug_when>
    <thetext>Attachment 261775 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:232:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/GCThread.cpp:72:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/GCThread.cpp:78:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:372:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:623:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:1581:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 6 in 14 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>1128158</commentid>
    <comment_count>6</comment_count>
      <attachid>261775</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-22 16:43:25 -0700</bug_when>
    <thetext>Comment on attachment 261775
the patch

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

&gt; Source/JavaScriptCore/heap/CopyVisitor.cpp:59
&gt; -            m_shared.m_copiedSpace-&gt;recycleEvacuatedBlock(block, m_shared.m_vm-&gt;heap.operationInProgress());
&gt; +            m_heap.m_storageSpace.recycleEvacuatedBlock(block, m_heap.operationInProgress());

This is a change of behavior.  Is this intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128159</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-22 16:45:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 261775 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261775&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CopyVisitor.cpp:59
&gt; &gt; -            m_shared.m_copiedSpace-&gt;recycleEvacuatedBlock(block, m_shared.m_vm-&gt;heap.operationInProgress());
&gt; &gt; +            m_heap.m_storageSpace.recycleEvacuatedBlock(block, m_heap.operationInProgress());
&gt; 
&gt; This is a change of behavior.  Is this intentional?

It&apos;s not meant to be.  What behavior do you think will be different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128160</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-22 16:46:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Comment on attachment 261775 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=261775&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/CopyVisitor.cpp:59
&gt; &gt; &gt; -            m_shared.m_copiedSpace-&gt;recycleEvacuatedBlock(block, m_shared.m_vm-&gt;heap.operationInProgress());
&gt; &gt; &gt; +            m_heap.m_storageSpace.recycleEvacuatedBlock(block, m_heap.operationInProgress());
&gt; &gt; 
&gt; &gt; This is a change of behavior.  Is this intentional?
&gt; 
&gt; It&apos;s not meant to be.  What behavior do you think will be different?

Ugggh.  My reading error.  m_copiedSpace == m_storageSpace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128169</commentid>
    <comment_count>9</comment_count>
      <attachid>261775</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-22 16:54:46 -0700</bug_when>
    <thetext>Comment on attachment 261775
the patch

r=me with builds fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128170</commentid>
    <comment_count>10</comment_count>
      <attachid>261781</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-22 16:57:09 -0700</bug_when>
    <thetext>Created attachment 261781
patch for landing

Hopefully fixes the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128171</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-22 16:58:31 -0700</bug_when>
    <thetext>Attachment 261781 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:232:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/GCThread.cpp:72:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/GCThread.cpp:78:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:372:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:623:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:1581:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 6 in 15 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>1128191</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-22 18:36:33 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190151</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261769</attachid>
            <date>2015-09-22 15:23:05 -0700</date>
            <delta_ts>2015-09-22 16:26:04 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26463</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTAxMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY1Nyw4ICsxNjU3LDYgQEAKIAkJQkNGRDhDOTMwRUVC
MkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMDMy
ODIwMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMDMyODFFMTk4MTk3
OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyAqLzsgfTsKIAkJQzIw
QkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIwQkE5MkMxNkJCMUMx
NTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUz
QSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hh
cmVkRGF0YS5jcHAgKi87IH07Ci0JCUMyMTEyMkUyMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVh
ZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE2MEZFNzE1
RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjE4MUZD
MTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLzsgfTsKIAkJQzIxOEQxNDAx
NjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlX
b3JrTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0zNTI5LDggKzM1MjcsNiBAQAogCQlDMjAzMjgxRTE5ODE5NzlEMDA4OEI0OTkgLyogQ3Vz
dG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFt
ZSA9IEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jOyBwYXRoID0gQVBJL3Rlc3RzL0N1c3Rv
bUdsb2JhbE9iamVjdENsYXNzVGVzdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjAzMjgxRjE5ODE5NzlEMDA4OEI0OTkgLyogQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3RvbUdsb2JhbE9iamVjdENsYXNz
VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0N1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyog
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMTEyMkRGMTVERDlBQjMwMDc5MEUz
QSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NUaHJlYWRTaGFyZWREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0
VGVzdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNFeHBvcnRUZXN0cy5o
OyBwYXRoID0gQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIxODFGQzExOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBKU0V4cG9ydFRlc3RzLm1tOyBw
YXRoID0gQVBJL3Rlc3RzL0pTRXhwb3J0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MjU1LDggKzQyNTEsNiBAQAogCQkJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAv
KiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8q
IEdDVGhyZWFkLmggKi8sCi0JCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5jcHAgKi8sCi0JCQkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhy
ZWFkU2hhcmVkRGF0YS5oICovLAogCQkJCTE0MkUzMTJCMTM0RkYwQTYwMEFGQURCNSAvKiBIYW5k
bGUuaCAqLywKIAkJCQlDMjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2suaCAq
LywKIAkJCQlDMjgzMTkwMTE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVzLmgg
Ki8sCkBAIC02NDAxLDcgKzYzOTUsNiBAQAogCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUYx
N0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4g
SGVhZGVycyAqLywKLQkJCQlDMjExMjJFMjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFy
ZWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyog
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJB
M0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUx
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTc3MjMsNyArNzcxNiw2IEBACiAJCQkJMEY2NEIyNzExQTc4NEJBRjAwNkU0
RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThE
Q0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMDMzMkMzMThCMDE3NjMwMDVGOTc5QSAv
KiBHZXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3
MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZp
c2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKLQotI2luY2x1ZGUgIkNv
cHlWaXNpdG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
R0NUaHJlYWQuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKLSNpbmNsdWRlICJWTS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBHQ1RocmVh
ZFNoYXJlZERhdGE6OnJlc2V0Q2hpbGRyZW4oKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5zbG90
VmlzaXRvcigpLT5yZXNldCgpOwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGls
ZFZpc2l0Q291bnQoKQoteyAgICAgICAKLSAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAg
ICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQo
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpj
aGlsZEJ5dGVzVmlzaXRlZCgpCi17ICAgICAgIAotICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT5ieXRlc1Zpc2l0ZWQo
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpj
aGlsZEJ5dGVzQ29waWVkKCkKLXsgICAgICAgCi0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAg
ICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzQ29waWVkKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNo
YXJlZERhdGEoVk0qIHZtKQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fY29waWVkU3BhY2UoJnZt
LT5oZWFwLm1fc3RvcmFnZVNwYWNlKQotICAgICwgbV9zaG91bGRIYXNoQ29ucyhmYWxzZSkKLSAg
ICAsIG1fc2hhcmVkTWFya1N0YWNrKCkKLSAgICAsIG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMoMCkKLSAgICAsIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdChmYWxzZSkKLSAgICAs
IG1fY29weUluZGV4KDApCi0gICAgLCBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKDApCi0gICAg
LCBtX2djVGhyZWFkc1Nob3VsZFdhaXQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRQaGFzZShOb1Bo
YXNlKQotewotICAgIC8vIEdyYWIgdGhlIGxvY2sgc28gdGhlIG5ldyBHQyB0aHJlYWRzIGNhbiBi
ZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhleSBzdGFydCBydW5uaW5nLgotICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKLSAgICAg
ICAgbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcysrOwotICAgICAgICBHQ1RocmVhZCogbmV3VGhy
ZWFkID0gbmV3IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigq
dGhpcyksIHN0ZDo6bWFrZV91bmlxdWU8Q29weVZpc2l0b3I+KCp0aGlzKSk7Ci0gICAgICAgIFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoR0NUaHJlYWQ6OmdjVGhyZWFk
U3RhcnRGdW5jLCBuZXdUaHJlYWQsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpOwotICAgICAg
ICBuZXdUaHJlYWQtPmluaXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJRCk7Ci0gICAgICAgIG1fZ2NU
aHJlYWRzLmFwcGVuZChuZXdUaHJlYWQpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGFsbCB0
aGUgR0NUaHJlYWRzIHRvIGdldCB0byB0aGUgcmlnaHQgcGxhY2UuCi0gICAgbV9hY3Rpdml0eUNv
bmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0
aXZlR0NUaHJlYWRzOyB9KTsKLX0KLQotR0NUaHJlYWRTaGFyZWREYXRhOjp+R0NUaHJlYWRTaGFy
ZWREYXRhKCkKLXsKLSAgICAvLyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCi0gICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFya2luZ0xvY2sobV9tYXJraW5nTXV0ZXgp
OwotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1fcGhhc2VNdXRleCk7
Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKLSAgICAgICAgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9nY1RocmVhZHNTaG91
bGRXYWl0ID0gZmFsc2U7Ci0gICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKLSAgICAgICAg
bV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIH0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOwotICAgICAg
ICBkZWxldGUgbV9nY1RocmVhZHNbaV07Ci0gICAgfQotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVk
RGF0YTo6cmVzZXQoKQotewotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkp
OwotICAgIAotICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7Ci0KLSAg
ICBpZiAobV9zaG91bGRIYXNoQ29ucykgewotICAgICAgICBtX3ZtLT5yZXNldE5ld1N0cmluZ3NT
aW5jZUxhc3RIYXNoQ29ucygpOwotICAgICAgICBtX3Nob3VsZEhhc2hDb25zID0gZmFsc2U7Ci0g
ICAgfQotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6c3RhcnROZXh0UGhhc2UoR0NQaGFz
ZSBwaGFzZSkKLXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgp
OwotICAgIEFTU0VSVCghbV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50UGhhc2UgPT0gTm9QaGFzZSk7Ci0gICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gdHJ1ZTsK
LSAgICBtX2N1cnJlbnRQaGFzZSA9IHBoYXNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJs
ZS5ub3RpZnlBbGwoKTsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmVuZEN1cnJlbnRQ
aGFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7Ci0gICAgc3RkOjp1
bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgbV9jdXJyZW50UGhhc2Ug
PSBOb1BoYXNlOwotICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9IGZhbHNlOwotICAgIG1fcGhh
c2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICBtX2FjdGl2aXR5Q29uZGl0aW9u
VmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1Ro
cmVhZHM7IH0pOwotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRNYXJraW5n
KCkKLXsKLSAgICBpZiAobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENv
bGxlY3Rpb24pCi0gICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7Ci0gICAgbV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0ID0gZmFsc2U7Ci0gICAgc3RhcnROZXh0UGhhc2UoTWFyayk7Ci19Ci0KLXZvaWQg
R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRGaW5pc2hNYXJraW5nKCkKLXsKLSAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKLSAgICAgICAgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fY3VycmVudFBo
YXNlID09IE1hcmspOwotICAgIGVuZEN1cnJlbnRQaGFzZSgpOwotfQotCi12b2lkIEdDVGhyZWFk
U2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKLSAgICAgICAgaWYgKG1fdm0tPmhlYXAub3BlcmF0aW9u
SW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBSZXNldCB0
aGUgdmVjdG9yIHRvIGJlIGVtcHR5LCBidXQgZG9uJ3QgdGhyb3cgYXdheSB0aGUgYmFja2luZyBz
dG9yZS4KLSAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnNocmluaygwKTsKLSAgICAgICAgICAg
IGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9jb3BpZWRTcGFjZS0+bV9uZXdHZW4uZnJvbVNw
YWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgICAgICAg
ICAgbV9ibG9ja3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29s
bGVjdGlvbik7Ci0gICAgICAgICAgICBXVEY6OmNvcHlUb1ZlY3RvcihtX2NvcGllZFNwYWNlLT5t
X2Jsb2NrU2V0LCBtX2Jsb2Nrc1RvQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb3B5SW5k
ZXggPSAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IHdlIGF2b2lk
IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIG1haW4gdGhyZWFkIGNhbiAKLSAgICAvLyBibG93
IHRocm91Z2ggYWxsIG9mIHRoZSBjb3B5aW5nIHdvcmsgYmVmb3JlIHRoZSBHQ1RocmVhZHMgZnVs
bHkgd2FrZSB1cC4gCi0gICAgLy8gVGhlIEdDVGhyZWFkcyB0aGVuIHJlcXVlc3QgYSBibG9jayBm
cm9tIHRoZSBDb3BpZWRTcGFjZSB3aGVuIHRoZSBjb3B5aW5nIHBoYXNlIAotICAgIC8vIGhhcyBj
b21wbGV0ZWQsIHdoaWNoIGlzbid0IGFsbG93ZWQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2djVGhyZWFkcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9nY1RocmVhZHNbaV0tPmNvcHlW
aXNpdG9yKCktPnN0YXJ0Q29weWluZygpOwotCi0gICAgc3RhcnROZXh0UGhhc2UoQ29weSk7Ci19
Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaWRGaW5pc2hDb3B5aW5nKCkKLXsKLSAgICBB
U1NFUlQobV9jdXJyZW50UGhhc2UgPT0gQ29weSk7Ci0gICAgZW5kQ3VycmVudFBoYXNlKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWRTaGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgR0NUaHJlYWRTaGFyZWREYXRhX2gKLSNkZWZpbmUg
R0NUaHJlYWRTaGFyZWREYXRhX2gKLQotI2luY2x1ZGUgIkxpc3RhYmxlSGFuZGxlci5oIgotI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0jaW5jbHVkZSAi
VW5jb25kaXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8d3RmL0NvbmRp
dGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb3Bp
ZWRCbG9jazsKLWNsYXNzIENvcGllZFNwYWNlOwotY2xhc3MgQ29weVZpc2l0b3I7Ci1jbGFzcyBH
Q1RocmVhZDsKLWNsYXNzIFZNOwotCi1lbnVtIEdDUGhhc2UgewotICAgIE5vUGhhc2UsCi0gICAg
TWFyaywKLSAgICBDb3B5LAotICAgIEV4aXQKLX07Ci0KLWNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0
YSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR0NUaHJlYWRT
aGFyZWREYXRhKFZNKik7Ci0gICAgfkdDVGhyZWFkU2hhcmVkRGF0YSgpOwotICAgIAotICAgIHZv
aWQgcmVzZXQoKTsKLQotICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgdm9pZCBkaWRG
aW5pc2hNYXJraW5nKCk7Ci0gICAgdm9pZCBkaWRTdGFydENvcHlpbmcoKTsKLSAgICB2b2lkIGRp
ZEZpbmlzaENvcHlpbmcoKTsKLQotICAgIHZvaWQgcmVzZXRDaGlsZHJlbigpOwotICAgIHNpemVf
dCBjaGlsZFZpc2l0Q291bnQoKTsKLSAgICBzaXplX3QgY2hpbGRCeXRlc1Zpc2l0ZWQoKTsKLSAg
ICBzaXplX3QgY2hpbGRCeXRlc0NvcGllZCgpOwotICAgIHNpemVfdCBjaGlsZER1cFN0cmluZ3Mo
KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFkOwotICAgIGZyaWVu
ZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7Ci0KLSAg
ICB2b2lkIGdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7Ci0gICAgdm9pZCBz
dGFydE5leHRQaGFzZShHQ1BoYXNlKTsKLSAgICB2b2lkIGVuZEN1cnJlbnRQaGFzZSgpOwotCi0g
ICAgVk0qIG1fdm07Ci0gICAgQ29waWVkU3BhY2UqIG1fY29waWVkU3BhY2U7Ci0gICAgCi0gICAg
Ym9vbCBtX3Nob3VsZEhhc2hDb25zOwotCi0gICAgVmVjdG9yPEdDVGhyZWFkKj4gbV9nY1RocmVh
ZHM7Ci0KLSAgICBMb2NrIG1fbWFya2luZ011dGV4OwotICAgIENvbmRpdGlvbiBtX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZTsKLSAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsK
LSAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwotICAgIGJvb2wg
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwotCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0
ZXg7Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsKLQotICAgIExvY2sgbV9jb3B5
TG9jazsKLSAgICBWZWN0b3I8Q29waWVkQmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKLSAgICBzaXpl
X3QgbV9jb3B5SW5kZXg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRM
ZW5ndGggPSAzMjsKLQotICAgIExvY2sgbV9waGFzZU11dGV4OwotICAgIENvbmRpdGlvbiBtX3Bo
YXNlQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgQ29uZGl0aW9uIG1fYWN0aXZpdHlDb25kaXRpb25W
YXJpYWJsZTsKLSAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOwotICAgIGJv
b2wgbV9nY1RocmVhZHNTaG91bGRXYWl0OwotICAgIEdDUGhhc2UgbV9jdXJyZW50UGhhc2U7Ci0K
LSAgICBMaXN0YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVyczsKLSAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZp
bmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKLX07Ci0KLWlubGluZSB2
b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmIHN0YXJ0
LCBzaXplX3QmIGVuZCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7Ci0g
ICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKLSAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29w
eS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKLSAgICBtX2Nv
cHlJbmRleCA9IGVuZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyAr
MzM1LDYgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9l
eHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQog
ICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9zaGFyZWREYXRhKHZtKQogICAg
ICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCiAgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hh
cmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQpAQCAtMzU4LDYgKzM1NywyMSBAQCBIZWFw
OjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNl
UmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgogeworICAgIHsKKyAgICAgICAgLy8gR3JhYiB0aGUg
bG9jayBzbyB0aGUgbmV3IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJl
Zm9yZSB0aGV5IHN0YXJ0IHJ1bm5pbmcuCisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4g
bG9jayhtX3BoYXNlTXV0ZXgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBtX251bWJlck9m
QWN0aXZlR0NUaHJlYWRzKys7CisgICAgICAgICAgICBHQ1RocmVhZCogbmV3VGhyZWFkID0gbmV3
IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyksIHN0
ZDo6bWFrZV91bmlxdWU8Q29weVZpc2l0b3I+KCp0aGlzKSk7CisgICAgICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0
RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgICAg
IG5ld1RocmVhZC0+aW5pdGlhbGl6ZVRocmVhZElEKHRocmVhZElEKTsKKyAgICAgICAgICAgIG1f
Z2NUaHJlYWRzLmFwcGVuZChuZXdUaHJlYWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBXYWl0IGZvciBhbGwgdGhlIEdDVGhyZWFkcyB0byBnZXQgdG8gdGhlIHJpZ2h0IHBsYWNl
LgorICAgICAgICBtX2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10g
eyByZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOworICAgIH0KKyAgICAKICAg
ICBtX3N0b3JhZ2VTcGFjZS5pbml0KCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmlmeUhlYXAoKSkK
ICAgICAgICAgbV92ZXJpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVyPih0aGlz
LCBPcHRpb25zOjpudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24oKSk7CkBA
IC0zNjcsNiArMzgxLDIxIEBAIEhlYXA6On5IZWFwKCkKIHsKICAgICBmb3IgKFdlYWtCbG9jayog
YmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAgV2Vha0Jsb2NrOjpk
ZXN0cm95KGJsb2NrKTsKKworICAgIC8vIERlc3Ryb3kgb3VyIG1hcmtpbmcgdGhyZWFkcy4KKyAg
ICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBtYXJraW5nTG9jayhtX21hcmtpbmdN
dXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBwaGFzZUxvY2sobV9waGFzZU11
dGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgICAg
ICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOworICAgICAgICBtX2djVGhyZWFk
c1Nob3VsZFdhaXQgPSBmYWxzZTsKKyAgICAgICAgbV9jdXJyZW50UGhhc2UgPSBFeGl0OworICAg
ICAgICBtX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgfQorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkgeworICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2djVGhyZWFkc1tpXS0+dGhyZWFkSUQoKSk7Cisg
ICAgICAgIGRlbGV0ZSBtX2djVGhyZWFkc1tpXTsKKyAgICB9CiB9CiAKIGJvb2wgSGVhcDo6aXNQ
YWdlZE91dChkb3VibGUgZGVhZGxpbmUpCkBAIC01MzksNyArNTY4LDEzIEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwKIAogICAgIGNsZWFyTGl2ZW5lc3NEYXRhKCk7
CiAKLSAgICBtX3NoYXJlZERhdGEuZGlkU3RhcnRNYXJraW5nKCk7CisgICAgaWYgKG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9vcGFxdWVSb290cy5j
bGVhcigpOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJr
aW5nTXV0ZXgpOworICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsK
KyAgICAgICAgc3RhcnROZXh0UGhhc2UoTWFyayk7CisgICAgfQogICAgIG1fc2xvdFZpc2l0b3Iu
ZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvciht
X3Nsb3RWaXNpdG9yKTsKIApAQCAtNTYzLDcgKzU5OCwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0
b3IpOwogCiAgICAgY2xlYXJSZW1lbWJlcmVkU2V0KHJlbWVtYmVyZWRTZXQpOwotICAgIG1fc2hh
cmVkRGF0YS5kaWRGaW5pc2hNYXJraW5nKCk7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJz
U2hvdWxkRXhpdCA9IHRydWU7CisgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5v
dGlmeUFsbCgpOworICAgIH0KKyAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTWFyayk7Cisg
ICAgZW5kQ3VycmVudFBoYXNlKCk7CiAgICAgdXBkYXRlT2JqZWN0Q291bnRzKGdjU3RhcnRUaW1l
KTsKICAgICByZXNldFZpc2l0b3JzKCk7CiB9CkBAIC01NzksMTQgKzYyMCwzNyBAQCB2b2lkIEhl
YXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICB9CiAKICAgICBpZiAobV9zdG9yYWdlU3BhY2Uu
c2hvdWxkRG9Db3B5UGhhc2UoKSkgewotICAgICAgICBtX3NoYXJlZERhdGEuZGlkU3RhcnRDb3B5
aW5nKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY29weUxv
Y2spOworICAgICAgICAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVj
dGlvbikgeworICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB2ZWN0b3IgdG8gYmUgZW1wdHks
IGJ1dCBkb24ndCB0aHJvdyBhd2F5IHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAgICAgICAg
IG1fYmxvY2tzVG9Db3B5LnNocmluaygwKTsKKyAgICAgICAgICAgICAgICBmb3IgKENvcGllZEJs
b2NrKiBibG9jayA9IG1fc3RvcmFnZVNwYWNlLT5tX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9ibG9j
a3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7Cisg
ICAgICAgICAgICAgICAgV1RGOjpjb3B5VG9WZWN0b3IobV9zdG9yYWdlU3BhY2UtPm1fYmxvY2tT
ZXQsIG1fYmxvY2tzVG9Db3B5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29weUlu
ZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgZG8gdGhpcyBoZXJl
IHNvIHRoYXQgd2UgYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWFpbiB0aHJlYWQg
Y2FuIAorICAgICAgICAvLyBibG93IHRocm91Z2ggYWxsIG9mIHRoZSBjb3B5aW5nIHdvcmsgYmVm
b3JlIHRoZSBHQ1RocmVhZHMgZnVsbHkgd2FrZSB1cC4gCisgICAgICAgIC8vIFRoZSBHQ1RocmVh
ZHMgdGhlbiByZXF1ZXN0IGEgYmxvY2sgZnJvbSB0aGUgQ29waWVkU3BhY2Ugd2hlbiB0aGUgY29w
eWluZyBwaGFzZSAKKyAgICAgICAgLy8gaGFzIGNvbXBsZXRlZCwgd2hpY2ggaXNuJ3QgYWxsb3dl
ZC4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7IGkr
KykKKyAgICAgICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5jb3B5VmlzaXRvcigpLT5zdGFydENvcHlp
bmcoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0TmV4dFBoYXNlKENvcHkpOworICAgICAgICAK
ICAgICAgICAgbV9jb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKICAgICAgICAgbV9jb3B5Vmlz
aXRvci5jb3B5RnJvbVNoYXJlZCgpOwogICAgICAgICBtX2NvcHlWaXNpdG9yLmRvbmVDb3B5aW5n
KCk7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgZXZlcnlib2R5IHRvIGZpbmlzaCBh
bmQgcmV0dXJuIHRoZWlyIENvcGllZEJsb2NrcyAKICAgICAgICAgLy8gYmVmb3JlIHNpZ25hbGlu
ZyB0aGF0IHRoZSBwaGFzZSBpcyBjb21wbGV0ZS4KICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZG9u
ZUNvcHlpbmcoKTsKLSAgICAgICAgbV9zaGFyZWREYXRhLmRpZEZpbmlzaENvcHlpbmcoKTsKKyAg
ICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IENvcHkpOworICAgICAgICBlbmRDdXJyZW50
UGhhc2UoKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmco
KTsKIH0KQEAgLTgxMyw4ICs4NzcsMTYgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMo
ZG91YmxlIGdjUwogdm9pZCBIZWFwOjpyZXNldFZpc2l0b3JzKCkKIHsKICAgICBtX3Nsb3RWaXNp
dG9yLnJlc2V0KCk7Ci0gICAgbV9zaGFyZWREYXRhLnJlc2V0Q2hpbGRyZW4oKTsKLSAgICBtX3No
YXJlZERhdGEucmVzZXQoKTsKKworICAgIGZvciAoR0NUaHJlYWQqIHRocmVhZCA6IG1fZ2NUaHJl
YWRzKQorICAgICAgICB0aHJlYWQtPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7CisKKyAgICBBU1NF
UlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXJzLnJlbW92ZUFsbCgpOworICAgIGlmIChtX3Nob3VsZEhhc2hDb25zKSB7CisgICAgICAg
IG1fdm0tPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCk7CisgICAgICAgIG1fc2hv
dWxkSGFzaENvbnMgPSBmYWxzZTsKKyAgICB9CiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3Vu
dCgpCkBAIC0xNDY1LDQgKzE1MzcsNDggQEAgYm9vbCBIZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlF
bXB0eVdlYWtCbAogICAgIHJldHVybiB0cnVlOwogfQogCitzaXplX3QgSGVhcDo6dGhyZWFkVmlz
aXRDb3VudCgpCit7ICAgICAgIAorICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+dmlzaXRDb3VudCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3NpemVfdCBIZWFwOjp0aHJlYWRCeXRlc1Zpc2l0ZWQo
KQoreyAgICAgICAKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBtX2dj
VGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNWaXNpdGVkKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzQ29waWVkKCkKK3sgICAgICAgCisg
ICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NU
aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNs
b3RWaXNpdG9yKCktPmJ5dGVzQ29waWVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBIZWFwOjpzdGFydE5leHRQaGFzZShHQ1BoYXNlIHBoYXNlKQoreworICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7CisgICAgQVNTRVJUKCFtX2djVGhyZWFkc1No
b3VsZFdhaXQpOworICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKKyAgICBt
X2djVGhyZWFkc1Nob3VsZFdhaXQgPSB0cnVlOworICAgIG1fY3VycmVudFBoYXNlID0gcGhhc2U7
CisgICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhl
YXA6OmVuZEN1cnJlbnRQaGFzZSgpCit7CisgICAgQVNTRVJUKG1fZ2NUaHJlYWRzU2hvdWxkV2Fp
dCk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7CisgICAg
bV9jdXJyZW50UGhhc2UgPSBOb1BoYXNlOworICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9IGZh
bHNlOworICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICBtX2Fj
dGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVt
YmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBA
QAogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKLSNpbmNsdWRlICJHQ1RocmVhZFNo
YXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFj
ay5oIgogI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKQEAgLTgwLDEyICs3OSwxOCBAQCB0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlCiAKIGVudW0gSGVhcFR5cGUgeyBT
bWFsbEhlYXAsIExhcmdlSGVhcCB9OwogCitlbnVtIEdDUGhhc2UgeworICAgIE5vUGhhc2UsCisg
ICAgTWFyaywKKyAgICBDb3B5LAorICAgIEV4aXQKK307CisKIGNsYXNzIEhlYXAgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgZnJpZW5kIGNsYXNz
IEdDVGhyZWFkU2hhcmVkRGF0YTsKICAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU1ZhbHVl
KTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0
IEpTQ2VsbCopOwogCkBAIC0yNDMsNiArMjQ4LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgRGVmZXJHQ0ZvckFXaGlsZTsKICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOwogICAgIGZyaWVuZCBjbGFzcyBHQ0xvZ2dpbmc7CisgICAgZnJpZW5kIGNsYXNzIEdDVGhy
ZWFkOwogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBW
ZXJpZmllcjsKICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CkBAIC0zMzksNiArMzQ1
LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwogCisgICAgc2l6ZV90
IHRocmVhZFZpc2l0Q291bnQoKTsKKyAgICBzaXplX3QgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7Cisg
ICAgc2l6ZV90IHRocmVhZEJ5dGVzQ29waWVkKCk7CisgICAgc2l6ZV90IHRocmVhZER1cFN0cmlu
Z3MoKTsKKworICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3QmKTsK
KyAgICB2b2lkIHN0YXJ0TmV4dFBoYXNlKEdDUGhhc2UpOworICAgIHZvaWQgZW5kQ3VycmVudFBo
YXNlKCk7CisKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVf
dCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTM3
MSw3ICszODYsNiBAQCBwcml2YXRlOgogCiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5lVGhy
ZWFkczsKICAgICAKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEgbV9zaGFyZWREYXRhOwogICAgIFNs
b3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAgICAgQ29weVZpc2l0b3IgbV9jb3B5VmlzaXRvcjsK
IApAQCAtNDA5LDYgKzQyMywzNCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoTWFwPHZv
aWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fd2Vha0dDTWFwczsKKworICAgIGJvb2wgbV9z
aG91bGRIYXNoQ29ucyB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhy
ZWFkczsKKworICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fbWFya2lu
Z0NvbmRpdGlvblZhcmlhYmxlOworICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNr
OworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgeyAwIH07Cisg
ICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OworCisgICAgTG9j
ayBtX29wYXF1ZVJvb3RzTXV0ZXg7CisgICAgSGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsK
KworICAgIExvY2sgbV9jb3B5TG9jazsKKyAgICBWZWN0b3I8Q29waWVkQmxvY2sqPiBtX2Jsb2Nr
c1RvQ29weTsKKyAgICBzaXplX3QgbV9jb3B5SW5kZXggeyAwIH07CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKKworICAgIExvY2sgbV9waGFzZU11
dGV4OworICAgIENvbmRpdGlvbiBtX3BoYXNlQ29uZGl0aW9uVmFyaWFibGU7CisgICAgQ29uZGl0
aW9uIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZTsKKyAgICB1bnNpZ25lZCBtX251bWJlck9m
QWN0aXZlR0NUaHJlYWRzIHsgMCB9OworICAgIGJvb2wgbV9nY1RocmVhZHNTaG91bGRXYWl0IHsg
ZmFsc2UgfTsKKyAgICBHQ1BoYXNlIG1fY3VycmVudFBoYXNlIHsgTm9QaGFzZSB9OworCisgICAg
TGlzdGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+OjpMaXN0IG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnM7CisgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjp1
bnJlZ2lzdGVyV2Vha0dDTWFwKHZvCiAgICAgbV93ZWFrR0NNYXBzLnJlbW92ZSh3ZWFrR0NNYXAp
OwogfQogICAgIAoraW5saW5lIHZvaWQgSGVhcDo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3Qm
IHN0YXJ0LCBzaXplX3QmIGVuZCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NvcHlMb2Nr
KTsKKyAgICBzdGFydCA9IG1fY29weUluZGV4OworICAgIGVuZCA9IHN0ZDo6bWluKG1fYmxvY2tz
VG9Db3B5LnNpemUoKSwgbV9jb3B5SW5kZXggKyBzX2Jsb2NrRnJhZ21lbnRMZW5ndGgpOworICAg
IG1fY29weUluZGV4ID0gZW5kOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEhlYXBJbmxpbmVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261775</attachid>
            <date>2015-09-22 16:26:04 -0700</date>
            <delta_ts>2015-09-22 16:57:09 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE1LTA5LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0NUaHJlYWRTaGFyZWREYXRhIGlzIGp1c3QgYSBiYWQgd2F5IG9mIHNheWluZyBIZWFwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlbW92ZXMg
dGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBjbGFzcyBhbmQgbW92ZXMgaXRzIG1lbWJlcnMgaW50byBI
ZWFwLiBUaGlzIGlzIGEgbmV0CisgICAgICAgIHNpbXBsaWZpY2F0aW9uIHNpbmNlIEdDVGhyZWFk
U2hhcmVkRGF0YSBoYWQgYSAxLXRvLTEgbWFwcGluZyB0byBIZWFwIGFuZCB0aGUgdHdvIGNsYXNz
ZXMgaGFkIGEKKyAgICAgICAgdmFzdCBjb250cmFjdCB3aXRoIGEgbG90IG9mIGludGVyZGVwZW5k
ZW5jaWVzLiBIZWFwIHdvdWxkIGNhbGwgYSBsb3Qgb2YgR0NUaHJlYWRTaGFyZWREYXRhCisgICAg
ICAgIG1ldGhvZHM7IG5vdyBhIGxvdCBvZiB0aG9zZSBhcmUgaW5saW5lZCBzaW5jZSB0aGV5IHdl
cmUgb25seSBjYWxsZWQgZnJvbSB0aGUgb25lIHBsYWNlIGluIEhlYXAuCisgICAgICAgIFRoaXMg
bWFrZXMgaXQgYSBsb3QgZWFzaWVyIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uLiBGb3IgZXhhbXBs
ZSwgeW91IG5vIGxvbmdlciBoYXZlIHRvIGxvb2sgYXQKKyAgICAgICAgY29kZSBpbiB0d28gcGxh
Y2VzIChIZWFwIGFuZCBHQ1RocmVhZFNoYXJlZERhdGEpIHRvIGZpZ3VyZSBvdXQgdGhlIHRpbWlu
ZyBhbmQgc3luY2hyb25pemF0aW9uCisgICAgICAgIG9mIEdDIHBoYXNlcyAtIGFsbCBvZiB0aGF0
IGNvZGUgaXMgaW4gSGVhcCBub3cuCisKKyAgICAgICAgVGhpcyBhbHNvIHJlbW92ZXMgd2VpcmQg
aW5kaXJlY3Rpb25zIGluIG90aGVyIHBsYWNlcy4gSXQgdXNlZCB0byBiZSB0aGF0IGEgbG90IG9m
IEdDIGhlbHBlcgorICAgICAgICBjbGFzc2VzIHdvdWQgaGF2ZSBhIHBvaW50ZXIgdG8gR0NUaHJl
YWRTaGFyZWREYXRhLCBhbmQgdGhlbiB3b3VsZCB1c2UgdGhhdCB0byBnZXQgdG8gSGVhcCwgVk0s
CisgICAgICAgIGFuZCB0aGUgdmlzaXRvcnMuIE5vdyB0aGVzZSBoZWxwZXJzIGp1c3QgcG9pbnQg
dG8gSGVhcC4KKworICAgICAgICBJIHRoaW5rIHRoYXQgR0NUaHJlYWRTaGFyZWREYXRhIHdhcyBv
bmx5IHVzZWZ1bCBmb3IgZGVmaW5pbmcgdGhlIHNldCBvZiB0aGluZ3MgdGhhdCB3ZSBuZWVkIHRv
CisgICAgICAgIGtub3cgdG8gY29sbGVjdCBnYXJiYWdlLiBUaGF0J3MgaG93IHdlIGRlY2lkZWQg
aWYgc29tZXRoaW5nIHdvdWxkIGdvIGludG8gR0NUaHJlYWRTaGFyZWREYXRhCisgICAgICAgIGlu
c3RlYWQgb2YgSGVhcC4gQnV0IEkgdGhpbmsgdGhhdCBzZXBhcmF0aW5nIHRoaW5ncyBpbnRvIG11
bHRpcGxlIGNsYXNzZXMgdXN1YWxseSBtYWtlcyB0aGUKKyAgICAgICAgY29kZSBsZXNzIGhhY2th
YmxlLCBzbyB0aGVyZSBzaG91bGQgYmUgYSB2ZXJ5IGhpZ2ggYmFyIGZvciBkb2luZyB0aGlzIGlu
IGEgd2F5IHRoYXQgcHJvZHVjZXMgYQorICAgICAgICAxLXRvLTEgbWFwcGluZyBiZXR3ZWVuIHR3
byBjbGFzc2VzIC0gd2hlcmUgb25lIGluc3RhbmNlIG9mIG9uZSBvZiB0aGUgY2xhc3NlcyBpcyBh
bHdheXMgcGFpcmVkCisgICAgICAgIHdpdGggZXhhY3RseSBvbmUgaW5zdGFuY2Ugb2YgdGhlIG90
aGVyIGNsYXNzIGFuZCB2aWNlLXZlcnNhLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAg
ICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6Y29weUZyb21TaGFyZWQpOgorICAgICAgICAqIGhlYXAv
Q29weVZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0
b3I6OmRvbmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmRpZENvcHkpOgor
ICAgICAgICAqIGhlYXAvR0NUaHJlYWQuY3BwOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6R0NU
aHJlYWQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6d2FpdEZvck5leHRQaGFzZSk6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAgICAgICAqIGhlYXAvR0NUaHJl
YWQuaDoKKyAgICAgICAgKiBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
ZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc1BhZ2VkT3V0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhY2tpbmdT
dG9yZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpyZXNldFZpc2l0b3JzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0
Q291bnQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlFbXB0eVdlYWtC
bG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZFZpc2l0Q291bnQpOgorICAgICAgICAo
SlNDOjpIZWFwOjp0aHJlYWRCeXRlc1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjp0aHJl
YWRCeXRlc0NvcGllZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0YXJ0TmV4dFBoYXNlKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kQ3VycmVudFBoYXNlKToKKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnVu
cmVnaXN0ZXJXZWFrR0NNYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpnZXROZXh0QmxvY2tzVG9D
b3B5KToKKyAgICAgICAgKiBoZWFwL0xpc3RhYmxlSGFuZGxlci5oOgorICAgICAgICAqIGhlYXAv
U2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRv
bmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1hcmtTdGFjayk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnNoYXJlZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVy
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIp
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpj
b3B5TGF0ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2bSk6CisKIDIwMTUtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIEVOQUJMRShQQVJBTExFTF9HQykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MDEzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Mjk1LDcgKzI5NSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9HQ0Fj
dGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0xvZ2dpbmcuY3BwCiAgICAgaGVhcC9HQ1Ro
cmVhZC5jcHAKLSAgICBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRs
ZVNldC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhlYXAvSGVhcC5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTkwMTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY2LDcgKzU2Niw2IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFjay5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDTG9nZ2luZy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caGVhcFxIZWFwLmNwcCIgLz4KQEAgLTEzNDQsNyArMTM0Myw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDQXNzZXJ0aW9ucy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGFuZGxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXEhhbmRsZUJsb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhh
bmRsZUJsb2NrSW5saW5lcy5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsOSArMjgyLDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVT
ZXQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMjI3MCw5ICsyMjY3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWQuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmgiPgot
ICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZS5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDggKzE2
NTcsNiBAQAogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzIwMzI4MjAxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2Jh
bE9iamVjdENsYXNzVGVzdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIwMzI4MUUxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENs
YXNzVGVzdC5jICovOyB9OwogCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
QzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERTE1REQ5QUIz
MDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLzsgfTsKLQkJQzIxMTIyRTIxNURE
OUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0
MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE4MUZDMjE4QTk0OEZCMDAy
NUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMTgxRkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3Rz
Lm1tICovOyB9OwogCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjE4RDEzRjE2
NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1MjksOCArMzUyNyw2IEBACiAJCUMyMDMyODFF
MTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7
IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMyODFGMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21H
bG9iYWxPYmplY3RDbGFzc1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xv
YmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMEJB
OTJDMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBH
Q1RocmVhZFNoYXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxi
YWNrRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2FsbGJh
Y2tGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZDMDE4QTk0
OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU0V4cG9ydFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUg
LyogSlNFeHBvcnRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IEpTRXhwb3J0VGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTUsOCArNDI1MSw2IEBACiAJCQkJMkEz
NDNGNzcxOEExNzQ5RDAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmggKi8sCiAJ
CQkJQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIz
OUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKLQkJCQlDMjExMjJERTE1REQ5
QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLywKLQkJCQlDMjExMjJERjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8sCiAJCQkJMTQyRTMxMkIx
MzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZS5oICovLAogCQkJCUMyODMxOEZGMTZGRTRCN0QwMDE1
N0JGRCAvKiBIYW5kbGVCbG9jay5oICovLAogCQkJCUMyODMxOTAxMTZGRTUzM0UwMDE1N0JGRCAv
KiBIYW5kbGVCbG9ja0lubGluZXMuaCAqLywKQEAgLTY0MDEsNyArNjM5NSw2IEBACiAJCQkJMEYy
QjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxQjE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyMTEyMkUyMTVERDlBQjMw
MDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzcyMyw3ICs3NzE2LDYgQEAKIAkJ
CQkwRjY0QjI3MTFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdD
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAv
KiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENB
N0RDQTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYw
MzMyQzMxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODU1MTA3RUMwRTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJ
KHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgQ29waWVkQmxvY2s7
CiAKIGNsYXNzIENvcGllZFNwYWNlIHsKICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgSGVh
cDsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvcHlXb3JrTGlzdC5oIgotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgog
I2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgpAQCAtMzcsMTggKzM2LDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Db3B5
VmlzaXRvcjo6Q29weVZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCi0gICAgOiBt
X3NoYXJlZChzaGFyZWQpCitDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IoSGVhcCYgaGVhcCkKKyAg
ICA6IG1faGVhcChoZWFwKQogewogfQogCiB2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJl
ZCgpCiB7CiAgICAgc2l6ZV90IG5leHQsIGVuZDsKLSAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tz
VG9Db3B5KG5leHQsIGVuZCk7CisgICAgbV9oZWFwLmdldE5leHRCbG9ja3NUb0NvcHkobmV4dCwg
ZW5kKTsKICAgICB3aGlsZSAobmV4dCA8IGVuZCkgewogICAgICAgICBmb3IgKDsgbmV4dCA8IGVu
ZDsgKytuZXh0KSB7Ci0gICAgICAgICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBtX3NoYXJlZC5t
X2Jsb2Nrc1RvQ29weVtuZXh0XTsKKyAgICAgICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9IG1f
aGVhcC5tX2Jsb2Nrc1RvQ29weVtuZXh0XTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmhhc1dv
cmtMaXN0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTU3LDkgKzU2LDkgQEAg
dm9pZCBDb3B5VmlzaXRvcjo6Y29weUZyb21TaGFyZWQoKQogICAgICAgICAgICAgICAgIHZpc2l0
SXRlbSgqaXQpOwogCiAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7Ci0g
ICAgICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2so
YmxvY2ssIG1fc2hhcmVkLm1fdm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICAg
ICAgICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2ss
IG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkpOwogICAgICAgICB9Ci0gICAgICAgIG1fc2hh
cmVkLmdldE5leHRCbG9ja3NUb0NvcHkobmV4dCwgZW5kKTsKKyAgICAgICAgbV9oZWFwLmdldE5l
eHRCbG9ja3NUb0NvcHkobmV4dCwgZW5kKTsKICAgICB9CiAgICAgQVNTRVJUKG5leHQgPT0gZW5k
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2
aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBIZWFwOwogY2xhc3MgSlNDZWxsOwog
CiBjbGFzcyBDb3B5VmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgQ29weVZpc2l0b3IoR0NUaHJlYWRT
aGFyZWREYXRhJik7CisgICAgQ29weVZpc2l0b3IoSGVhcCYpOwogCiAgICAgdm9pZCBjb3B5RnJv
bVNoYXJlZCgpOwogCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYWxsb2Nh
dGVOZXdTcGFjZVNsb3coc2l6ZV90KTsKICAgICB2b2lkIHZpc2l0SXRlbShDb3B5V29ya2xpc3RJ
dGVtKTsKIAotICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CisgICAgSGVhcCYgbV9o
ZWFwOwogICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShy
ZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAi
Q2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJHQ1RocmVh
ZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAj
aW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKIApAQCAtNjYsNyArNjYsNyBAQCBpbmxp
bmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhCiBpbmxpbmUgdm9pZCogQ29weVZp
c2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKIHsKICAgICBDb3BpZWRC
bG9jayogbmV3QmxvY2sgPSAwOwotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxs
aW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2Nr
KTsKKyAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2UuZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFs
bG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwogICAgIG1fY29waWVkQWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CiAKICAgICB2b2lkKiByZXN1bHQgPSAw
OwpAQCAtNzksNyArNzksNyBAQCBpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5n
KCkKIHsKICAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7CiAgICAgQ29w
aWVkQmxvY2sqIGJsb2NrID0gMDsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmls
bGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7
CisgICAgbV9oZWFwLm1fc3RvcmFnZVNwYWNlLmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJmJsb2NrKTsKICAgICBtX2NvcGllZEFsbG9jYXRv
ci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwogfQogCkBAIC04OCw3ICs4OCw3IEBAIGlubGluZSB2
b2lkIENvcHlWaXNpdG9yOjpkb25lQ29weWluZygpCiAgICAgaWYgKCFtX2NvcGllZEFsbG9jYXRv
ci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2hhcmVkLm1fY29waWVkU3Bh
Y2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2so
KSwgMCk7CisgICAgbV9oZWFwLm1fc3RvcmFnZVNwYWNlLmRvbmVGaWxsaW5nQmxvY2sobV9jb3Bp
ZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgMCk7CiB9CiAKIGlubGluZSB2b2lkIENv
cHlWaXNpdG9yOjpkaWRDb3B5KHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkocmV2aXNpb24gMTkwMTMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxNiArMjgsMTUgQEAKIAogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiQ29w
eVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdDVGhyZWFkOjpHQ1RocmVh
ZChHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCwgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9y
PiBzbG90VmlzaXRvciwgc3RkOjp1bmlxdWVfcHRyPENvcHlWaXNpdG9yPiBjb3B5VmlzaXRvcikK
K0dDVGhyZWFkOjpHQ1RocmVhZChIZWFwJiBoZWFwLCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0
b3I+IHNsb3RWaXNpdG9yLCBzdGQ6OnVuaXF1ZV9wdHI8Q29weVZpc2l0b3I+IGNvcHlWaXNpdG9y
KQogICAgIDogbV90aHJlYWRJRCgwKQotICAgICwgbV9zaGFyZWQoc2hhcmVkKQorICAgICwgbV9o
ZWFwKGhlYXApCiAgICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6bW92ZShzbG90VmlzaXRvcikpCiAg
ICAgLCBtX2NvcHlWaXNpdG9yKFdURjo6bW92ZShjb3B5VmlzaXRvcikpCiB7CkBAIC02OSwxNiAr
NjgsMTYgQEAgQ29weVZpc2l0b3IqIEdDVGhyZWFkOjpjb3B5VmlzaXRvcigpCiAKIEdDUGhhc2Ug
R0NUaHJlYWQ6OndhaXRGb3JOZXh0UGhhc2UoKQogewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9j
az4gbG9jayhtX3NoYXJlZC5tX3BoYXNlTXV0ZXgpOwotICAgIG1fc2hhcmVkLm1fcGhhc2VDb25k
aXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9zaGFyZWQubV9nY1Ro
cmVhZHNTaG91bGRXYWl0OyB9KTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9o
ZWFwLm1fcGhhc2VNdXRleCk7CisgICAgbV9oZWFwLm1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS53
YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9oZWFwLm1fZ2NUaHJlYWRzU2hvdWxkV2FpdDsg
fSk7CiAKLSAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzLS07Ci0gICAgaWYg
KCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQotICAgICAgICBtX3NoYXJlZC5t
X2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7Ci0KLSAgICBtX3NoYXJlZC5t
X3BoYXNlQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gbV9zaGFy
ZWQubV9jdXJyZW50UGhhc2UgIT0gTm9QaGFzZTsgfSk7Ci0gICAgbV9zaGFyZWQubV9udW1iZXJP
ZkFjdGl2ZUdDVGhyZWFkcysrOwotICAgIHJldHVybiBtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZTsK
KyAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcy0tOworICAgIGlmICghbV9oZWFw
Lm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMpCisgICAgICAgIG1faGVhcC5tX2FjdGl2aXR5Q29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CisKKyAgICBtX2hlYXAubV9waGFzZUNvbmRpdGlv
blZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuIG1faGVhcC5tX2N1cnJlbnRQaGFz
ZSAhPSBOb1BoYXNlOyB9KTsKKyAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcysr
OworICAgIHJldHVybiBtX2hlYXAubV9jdXJyZW50UGhhc2U7CiB9CiAKIHZvaWQgR0NUaHJlYWQ6
OmdjVGhyZWFkTWFpbigpCkBAIC04OCw3ICs4Nyw3IEBAIHZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFk
TWFpbigpCiAgICAgLy8gV2FpdCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlzaCBjcmVhdGlu
ZyBhbmQgaW5pdGlhbGl6aW5nIHVzLiBUaGUgbWFpbiB0aHJlYWQgZ3JhYnMgdGhpcyBsb2NrIGJl
Zm9yZSAKICAgICAvLyBjcmVhdGluZyB0aGlzIHRocmVhZC4gV2UgYXJlbid0IGd1YXJhbnRlZWQg
dG8gaGF2ZSBhIHZhbGlkIHRocmVhZElEIHVudGlsIHRoZSBtYWluIHRocmVhZCByZWxlYXNlcyB0
aGlzIGxvY2suCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3No
YXJlZC5tX3BoYXNlTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X2hlYXAubV9waGFzZU11dGV4KTsKICAgICB9CiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIGVuYWJsZXIoKm1fc2xvdFZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxOSArMjYsMjUgQEAKICNp
Zm5kZWYgR0NUaHJlYWRfaAogI2RlZmluZSBHQ1RocmVhZF9oCiAKLSNpbmNsdWRlIDxHQ1RocmVh
ZFNoYXJlZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRvcjsKLWNsYXNz
IEdDVGhyZWFkU2hhcmVkRGF0YTsKK2NsYXNzIEhlYXA7CiBjbGFzcyBTbG90VmlzaXRvcjsKIAor
ZW51bSBHQ1BoYXNlIHsKKyAgICBOb1BoYXNlLAorICAgIE1hcmssCisgICAgQ29weSwKKyAgICBF
eGl0Cit9OworCiBjbGFzcyBHQ1RocmVhZCB7CiBwdWJsaWM6Ci0gICAgR0NUaHJlYWQoR0NUaHJl
YWRTaGFyZWREYXRhJiwgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiwgc3RkOjp1bmlxdWVf
cHRyPENvcHlWaXNpdG9yPik7CisgICAgR0NUaHJlYWQoSGVhcCYsIHN0ZDo6dW5pcXVlX3B0cjxT
bG90VmlzaXRvcj4sIHN0ZDo6dW5pcXVlX3B0cjxDb3B5VmlzaXRvcj4pOwogCiAgICAgU2xvdFZp
c2l0b3IqIHNsb3RWaXNpdG9yKCk7CiAgICAgQ29weVZpc2l0b3IqIGNvcHlWaXNpdG9yKCk7CkBA
IC01Miw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgR0NQaGFzZSB3YWl0Rm9yTmV4dFBoYXNlKCk7
CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgR0NUaHJlYWRTaGFyZWRE
YXRhJiBtX3NoYXJlZDsKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX3Nsb3RWaXNpdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb3B5VmlzaXRv
cj4gbV9jb3B5VmlzaXRvcjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdD
VGhyZWFkU2hhcmVkRGF0YS5oIgotCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJHQ1RocmVhZC5oIgotI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlZNLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGls
ZHJlbigpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7
ICsraSkKLSAgICAgICAgbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7Ci19
Ci0KLXNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkVmlzaXRDb3VudCgpCi17ICAgICAg
IAotICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2djVGhy
ZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+dmlzaXRDb3VudCgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkQnl0ZXNWaXNpdGVkKCkKLXsg
ICAgICAgCi0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVh
ZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzVmlzaXRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkQnl0ZXNDb3BpZWQoKQoteyAg
ICAgICAKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFk
c1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNDb3BpZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1HQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShWTSogdm0pCi0gICAg
OiBtX3ZtKHZtKQotICAgICwgbV9jb3BpZWRTcGFjZSgmdm0tPmhlYXAubV9zdG9yYWdlU3BhY2Up
Ci0gICAgLCBtX3Nob3VsZEhhc2hDb25zKGZhbHNlKQotICAgICwgbV9zaGFyZWRNYXJrU3RhY2so
KQotICAgICwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQotICAgICwgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0KGZhbHNlKQotICAgICwgbV9jb3B5SW5kZXgoMCkKLSAgICAs
IG1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMoMCkKLSAgICAsIG1fZ2NUaHJlYWRzU2hvdWxkV2Fp
dChmYWxzZSkKLSAgICAsIG1fY3VycmVudFBoYXNlKE5vUGhhc2UpCi17Ci0gICAgLy8gR3JhYiB0
aGUgbG9jayBzbyB0aGUgbmV3IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVk
IGJlZm9yZSB0aGV5IHN0YXJ0IHJ1bm5pbmcuCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6
Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewotICAgICAgICBtX251bWJlck9mQWN0aXZlR0NU
aHJlYWRzKys7Ci0gICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRo
aXMsIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSwgc3RkOjptYWtlX3VuaXF1
ZTxDb3B5VmlzaXRvcj4oKnRoaXMpKTsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCA9IGNyZWF0ZVRocmVhZChHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMsIG5ld1RocmVhZCwg
IkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIik7Ci0gICAgICAgIG5ld1RocmVhZC0+aW5pdGlhbGl6
ZVRocmVhZElEKHRocmVhZElEKTsKLSAgICAgICAgbV9nY1RocmVhZHMuYXBwZW5kKG5ld1RocmVh
ZCk7Ci0gICAgfQotCi0gICAgLy8gV2FpdCBmb3IgYWxsIHRoZSBHQ1RocmVhZHMgdG8gZ2V0IHRv
IHRoZSByaWdodCBwbGFjZS4KLSAgICBtX2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChs
b2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOwotfQot
Ci1HQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEoKQotewotICAgIC8vIERl
c3Ryb3kgb3VyIG1hcmtpbmcgdGhyZWFkcy4KLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBtYXJraW5nTG9jayhtX21hcmtpbmdNdXRleCk7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBwaGFzZUxvY2sobV9waGFzZU11dGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudFBoYXNlID09IE5vUGhhc2UpOwotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgPSB0cnVlOwotICAgICAgICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSBmYWxzZTsKLSAgICAg
ICAgbV9jdXJyZW50UGhhc2UgPSBFeGl0OwotICAgICAgICBtX3BoYXNlQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dj
VGhyZWFkcy5zaXplKCk7ICsraSkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X2djVGhyZWFkc1tpXS0+dGhyZWFkSUQoKSk7Ci0gICAgICAgIGRlbGV0ZSBtX2djVGhyZWFkc1tp
XTsKLSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCi17Ci0gICAg
QVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKLQotICAgIGlmIChtX3Nob3VsZEhhc2hDb25z
KSB7Ci0gICAgICAgIG1fdm0tPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCk7Ci0g
ICAgICAgIG1fc2hvdWxkSGFzaENvbnMgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpzdGFydE5leHRQaGFzZShHQ1BoYXNlIHBoYXNlKQotewotICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgQVNTRVJUKCFtX2djVGhy
ZWFkc1Nob3VsZFdhaXQpOwotICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsK
LSAgICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSB0cnVlOwotICAgIG1fY3VycmVudFBoYXNlID0g
cGhhc2U7Ci0gICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotfQotCi12
b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZW5kQ3VycmVudFBoYXNlKCkKLXsKLSAgICBBU1NFUlQo
bV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2so
bV9waGFzZU11dGV4KTsKLSAgICBtX2N1cnJlbnRQaGFzZSA9IE5vUGhhc2U7Ci0gICAgbV9nY1Ro
cmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5v
dGlmeUFsbCgpOwotICAgIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0
aGlzXSB7IHJldHVybiAhbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkczsgfSk7Ci19Ci0KLXZvaWQg
R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcoKQotewotICAgIGlmIChtX3ZtLT5o
ZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKLSAgICAgICAgbV9v
cGFxdWVSb290cy5jbGVhcigpOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFy
a2luZ011dGV4KTsKLSAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKLSAg
ICBzdGFydE5leHRQaGFzZShNYXJrKTsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRp
ZEZpbmlzaE1hcmtpbmcoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgPSB0cnVlOwotICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTWFyayk7Ci0gICAgZW5k
Q3VycmVudFBoYXNlKCk7Ci19Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydENv
cHlpbmcoKQotewotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2sp
OwotICAgICAgICBpZiAobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNv
bGxlY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB2ZWN0b3IgdG8gYmUgZW1wdHks
IGJ1dCBkb24ndCB0aHJvdyBhd2F5IHRoZSBiYWNraW5nIHN0b3JlLgotICAgICAgICAgICAgbV9i
bG9ja3NUb0NvcHkuc2hyaW5rKDApOwotICAgICAgICAgICAgZm9yIChDb3BpZWRCbG9jayogYmxv
Y2sgPSBtX2NvcGllZFNwYWNlLT5tX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5hcHBl
bmQoYmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1fdm0tPmhl
YXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKTsKLSAgICAgICAgICAg
IFdURjo6Y29weVRvVmVjdG9yKG1fY29waWVkU3BhY2UtPm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9D
b3B5KTsKLSAgICAgICAgfQotICAgICAgICBtX2NvcHlJbmRleCA9IDA7Ci0gICAgfQotCi0gICAg
Ly8gV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVy
ZSB0aGUgbWFpbiB0aHJlYWQgY2FuIAotICAgIC8vIGJsb3cgdGhyb3VnaCBhbGwgb2YgdGhlIGNv
cHlpbmcgd29yayBiZWZvcmUgdGhlIEdDVGhyZWFkcyBmdWxseSB3YWtlIHVwLiAKLSAgICAvLyBU
aGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBhIGJsb2NrIGZyb20gdGhlIENvcGllZFNwYWNlIHdo
ZW4gdGhlIGNvcHlpbmcgcGhhc2UgCi0gICAgLy8gaGFzIGNvbXBsZXRlZCwgd2hpY2ggaXNuJ3Qg
YWxsb3dlZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsg
aSsrKQotICAgICAgICBtX2djVGhyZWFkc1tpXS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5n
KCk7Ci0KLSAgICBzdGFydE5leHRQaGFzZShDb3B5KTsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9
PSBDb3B5KTsKLSAgICBlbmRDdXJyZW50UGhhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERh
dGEuaAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBHQ1RocmVhZFNoYXJlZERhdGFfaAotI2RlZmluZSBHQ1RocmVhZFNoYXJlZERhdGFfaAot
Ci0jaW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0j
aW5jbHVkZSAiTWFya2VkQmxvY2suaCIKLSNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmgiCi0jaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgotI2luY2x1ZGUgPGNvbmRp
dGlvbl92YXJpYWJsZT4KLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvcGllZEJsb2NrOwotY2xhc3MgQ29waWVk
U3BhY2U7Ci1jbGFzcyBDb3B5VmlzaXRvcjsKLWNsYXNzIEdDVGhyZWFkOwotY2xhc3MgVk07Ci0K
LWVudW0gR0NQaGFzZSB7Ci0gICAgTm9QaGFzZSwKLSAgICBNYXJrLAotICAgIENvcHksCi0gICAg
RXhpdAotfTsKLQotY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEoVk0qKTsKLSAgICB+
R0NUaHJlYWRTaGFyZWREYXRhKCk7Ci0gICAgCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgdm9p
ZCBkaWRTdGFydE1hcmtpbmcoKTsKLSAgICB2b2lkIGRpZEZpbmlzaE1hcmtpbmcoKTsKLSAgICB2
b2lkIGRpZFN0YXJ0Q29weWluZygpOwotICAgIHZvaWQgZGlkRmluaXNoQ29weWluZygpOwotCi0g
ICAgdm9pZCByZXNldENoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IGNoaWxkVmlzaXRDb3VudCgpOwot
ICAgIHNpemVfdCBjaGlsZEJ5dGVzVmlzaXRlZCgpOwotICAgIHNpemVfdCBjaGlsZEJ5dGVzQ29w
aWVkKCk7Ci0gICAgc2l6ZV90IGNoaWxkRHVwU3RyaW5ncygpOwotICAgIAotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7Ci0gICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwot
ICAgIGZyaWVuZCBjbGFzcyBDb3B5VmlzaXRvcjsKLQotICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1Rv
Q29weShzaXplX3QmLCBzaXplX3QmKTsKLSAgICB2b2lkIHN0YXJ0TmV4dFBoYXNlKEdDUGhhc2Up
OwotICAgIHZvaWQgZW5kQ3VycmVudFBoYXNlKCk7Ci0KLSAgICBWTSogbV92bTsKLSAgICBDb3Bp
ZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkSGFzaENvbnM7
Ci0KLSAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFkczsKLQotICAgIExvY2sgbV9tYXJr
aW5nTXV0ZXg7Ci0gICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAg
IE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOwotICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7Ci0gICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQ7Ci0KLSAgICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PHZvaWQq
PiBtX29wYXF1ZVJvb3RzOwotCi0gICAgTG9jayBtX2NvcHlMb2NrOwotICAgIFZlY3RvcjxDb3Bp
ZWRCbG9jayo+IG1fYmxvY2tzVG9Db3B5OwotICAgIHNpemVfdCBtX2NvcHlJbmRleDsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwotCi0gICAgTG9j
ayBtX3BoYXNlTXV0ZXg7Ci0gICAgQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZTsK
LSAgICBDb25kaXRpb24gbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlOwotICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7Ci0gICAgYm9vbCBtX2djVGhyZWFkc1Nob3VsZFdh
aXQ7Ci0gICAgR0NQaGFzZSBtX2N1cnJlbnRQaGFzZTsKLQotICAgIExpc3RhYmxlSGFuZGxlcjxX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwot
ICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzOwotfTsKLQotaW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRh
OjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQotewotICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKLSAgICBzdGFydCA9IG1fY29weUluZGV4
OwotICAgIGVuZCA9IHN0ZDo6bWluKG1fYmxvY2tzVG9Db3B5LnNpemUoKSwgbV9jb3B5SW5kZXgg
KyBzX2Jsb2NrRnJhZ21lbnRMZW5ndGgpOwotICAgIG1fY29weUluZGV4ID0gZW5kOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw5ICszMzUsOCBAQCBIZWFwOjpIZWFwKFZN
KiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAg
ICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRz
KHRoaXMpCi0gICAgLCBtX3NoYXJlZERhdGEodm0pCi0gICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hh
cmVkRGF0YSkKLSAgICAsIG1fY29weVZpc2l0b3IobV9zaGFyZWREYXRhKQorICAgICwgbV9zbG90
VmlzaXRvcigqdGhpcykKKyAgICAsIG1fY29weVZpc2l0b3IoKnRoaXMpCiAgICAgLCBtX2hhbmRs
ZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQogICAgICwgbV93cml0ZUJh
cnJpZXJCdWZmZXIoMjU2KQpAQCAtMzU4LDYgKzM1NywyMSBAQCBIZWFwOjpIZWFwKFZNKiB2bSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQo
MCkKICNlbmRpZgogeworICAgIHsKKyAgICAgICAgLy8gR3JhYiB0aGUgbG9jayBzbyB0aGUgbmV3
IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IHN0YXJ0
IHJ1bm5pbmcuCisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0
ZXgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRz
Kys7CisgICAgICAgICAgICBHQ1RocmVhZCogbmV3VGhyZWFkID0gbmV3IEdDVGhyZWFkKCp0aGlz
LCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyksIHN0ZDo6bWFrZV91bmlxdWU8
Q29weVZpc2l0b3I+KCp0aGlzKSk7CisgICAgICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFk
LCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgICAgIG5ld1RocmVhZC0+aW5p
dGlhbGl6ZVRocmVhZElEKHRocmVhZElEKTsKKyAgICAgICAgICAgIG1fZ2NUaHJlYWRzLmFwcGVu
ZChuZXdUaHJlYWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXYWl0IGZvciBh
bGwgdGhlIEdDVGhyZWFkcyB0byBnZXQgdG8gdGhlIHJpZ2h0IHBsYWNlLgorICAgICAgICBtX2Fj
dGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVt
YmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOworICAgIH0KKyAgICAKICAgICBtX3N0b3JhZ2VTcGFj
ZS5pbml0KCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmlmeUhlYXAoKSkKICAgICAgICAgbV92ZXJp
ZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVyPih0aGlzLCBPcHRpb25zOjpudW1i
ZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24oKSk7CkBAIC0zNjcsNiArMzgxLDIx
IEBAIEhlYXA6On5IZWFwKCkKIHsKICAgICBmb3IgKFdlYWtCbG9jayogYmxvY2sgOiBtX2xvZ2lj
YWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAgV2Vha0Jsb2NrOjpkZXN0cm95KGJsb2NrKTsK
KworICAgIC8vIERlc3Ryb3kgb3VyIG1hcmtpbmcgdGhyZWFkcy4KKyAgICB7CisgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBtYXJraW5nTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBwaGFzZUxvY2sobV9waGFzZU11dGV4KTsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgICAgICBtX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQgPSB0cnVlOworICAgICAgICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSBm
YWxzZTsKKyAgICAgICAgbV9jdXJyZW50UGhhc2UgPSBFeGl0OworICAgICAgICBtX3BoYXNlQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX2djVGhyZWFkc1tpXS0+dGhyZWFkSUQoKSk7CisgICAgICAgIGRlbGV0ZSBt
X2djVGhyZWFkc1tpXTsKKyAgICB9CiB9CiAKIGJvb2wgSGVhcDo6aXNQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUpCkBAIC01MzksNyArNTY4LDEzIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJs
ZSBnY1N0YXJ0VGltZSwKIAogICAgIGNsZWFyTGl2ZW5lc3NEYXRhKCk7CiAKLSAgICBtX3NoYXJl
ZERhdGEuZGlkU3RhcnRNYXJraW5nKCk7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOworICAgIHsK
KyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOworICAg
ICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKKyAgICAgICAgc3RhcnRO
ZXh0UGhhc2UoTWFyayk7CisgICAgfQogICAgIG1fc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5n
KCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsK
IApAQCAtNTYzLDcgKzU5OCwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFy
dFRpbWUsCiAgICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwogCiAgICAgY2xl
YXJSZW1lbWJlcmVkU2V0KHJlbWVtYmVyZWRTZXQpOwotICAgIG1fc2hhcmVkRGF0YS5kaWRGaW5p
c2hNYXJraW5nKCk7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X21hcmtpbmdNdXRleCk7CisgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRy
dWU7CisgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAg
IH0KKyAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTWFyayk7CisgICAgZW5kQ3VycmVudFBo
YXNlKCk7CiAgICAgdXBkYXRlT2JqZWN0Q291bnRzKGdjU3RhcnRUaW1lKTsKICAgICByZXNldFZp
c2l0b3JzKCk7CiB9CkBAIC01NzksMTQgKzYyMCwzNyBAQCB2b2lkIEhlYXA6OmNvcHlCYWNraW5n
U3RvcmVzKCkKICAgICB9CiAKICAgICBpZiAobV9zdG9yYWdlU3BhY2Uuc2hvdWxkRG9Db3B5UGhh
c2UoKSkgewotICAgICAgICBtX3NoYXJlZERhdGEuZGlkU3RhcnRDb3B5aW5nKCk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY29weUxvY2spOworICAgICAgICAg
ICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAg
ICAgICAgICAgIC8vIFJlc2V0IHRoZSB2ZWN0b3IgdG8gYmUgZW1wdHksIGJ1dCBkb24ndCB0aHJv
dyBhd2F5IHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5
LnNocmluaygwKTsKKyAgICAgICAgICAgICAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
c3RvcmFnZVNwYWNlLm1fbmV3R2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBi
bG9jay0+bmV4dCgpKQorICAgICAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5hcHBlbmQo
YmxvY2spOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9v
cGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBX
VEY6OmNvcHlUb1ZlY3RvcihtX3N0b3JhZ2VTcGFjZS5tX2Jsb2NrU2V0LCBtX2Jsb2Nrc1RvQ29w
eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NvcHlJbmRleCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IHdlIGF2b2lk
IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIG1haW4gdGhyZWFkIGNhbiAKKyAgICAgICAgLy8g
YmxvdyB0aHJvdWdoIGFsbCBvZiB0aGUgY29weWluZyB3b3JrIGJlZm9yZSB0aGUgR0NUaHJlYWRz
IGZ1bGx5IHdha2UgdXAuIAorICAgICAgICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBh
IGJsb2NrIGZyb20gdGhlIENvcGllZFNwYWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCisgICAg
ICAgIC8vIGhhcyBjb21wbGV0ZWQsIHdoaWNoIGlzbid0IGFsbG93ZWQuCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBt
X2djVGhyZWFkc1tpXS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5nKCk7CisgICAgICAgIAor
ICAgICAgICBzdGFydE5leHRQaGFzZShDb3B5KTsKKyAgICAgICAgCiAgICAgICAgIG1fY29weVZp
c2l0b3Iuc3RhcnRDb3B5aW5nKCk7CiAgICAgICAgIG1fY29weVZpc2l0b3IuY29weUZyb21TaGFy
ZWQoKTsKICAgICAgICAgbV9jb3B5VmlzaXRvci5kb25lQ29weWluZygpOwogICAgICAgICAvLyBX
ZSBuZWVkIHRvIHdhaXQgZm9yIGV2ZXJ5Ym9keSB0byBmaW5pc2ggYW5kIHJldHVybiB0aGVpciBD
b3BpZWRCbG9ja3MgCiAgICAgICAgIC8vIGJlZm9yZSBzaWduYWxpbmcgdGhhdCB0aGUgcGhhc2Ug
aXMgY29tcGxldGUuCiAgICAgICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVDb3B5aW5nKCk7Ci0gICAg
ICAgIG1fc2hhcmVkRGF0YS5kaWRGaW5pc2hDb3B5aW5nKCk7CisgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRQaGFzZSA9PSBDb3B5KTsKKyAgICAgICAgZW5kQ3VycmVudFBoYXNlKCk7CiAgICAgfSBl
bHNlCiAgICAgICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVDb3B5aW5nKCk7CiB9CkBAIC03OTEsNyAr
ODU1LDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjUwogCiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7CiAgICAgICAgIHNp
emVfdCB2aXNpdENvdW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7Ci0gICAgICAgIHZp
c2l0Q291bnQgKz0gbV9zaGFyZWREYXRhLmNoaWxkVmlzaXRDb3VudCgpOworICAgICAgICB2aXNp
dENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxvZ0YoIlxuTnVtYmVy
IG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CiAgICAgCkBAIC04MDYsMTUgKzg3MCwy
MyBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAgCiAgICAg
bV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpOwogICAg
IG1fdG90YWxCeXRlc0NvcGllZCArPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzQ29waWVkKCk7Ci0gICAg
bV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3NoYXJlZERhdGEuY2hpbGRCeXRlc1Zpc2l0ZWQoKTsK
LSAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgKz0gbV9zaGFyZWREYXRhLmNoaWxkQnl0ZXNDb3BpZWQo
KTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IHRocmVhZEJ5dGVzVmlzaXRlZCgpOworICAg
IG1fdG90YWxCeXRlc0NvcGllZCArPSB0aHJlYWRCeXRlc0NvcGllZCgpOwogfQogCiB2b2lkIEhl
YXA6OnJlc2V0VmlzaXRvcnMoKQogewogICAgIG1fc2xvdFZpc2l0b3IucmVzZXQoKTsKLSAgICBt
X3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwotICAgIG1fc2hhcmVkRGF0YS5yZXNldCgpOwor
CisgICAgZm9yIChHQ1RocmVhZCogdGhyZWFkIDogbV9nY1RocmVhZHMpCisgICAgICAgIHRocmVh
ZC0+c2xvdFZpc2l0b3IoKS0+cmVzZXQoKTsKKworICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkpOworICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7
CisgICAgaWYgKG1fc2hvdWxkSGFzaENvbnMpIHsKKyAgICAgICAgbV92bS0+cmVzZXROZXdTdHJp
bmdzU2luY2VMYXN0SGFzaENvbnMoKTsKKyAgICAgICAgbV9zaG91bGRIYXNoQ29ucyA9IGZhbHNl
OworICAgIH0KIH0KIAogc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkKQEAgLTE0NjUsNCArMTUz
Nyw0OCBAQCBib29sIEhlYXA6OnN3ZWVwTmV4dExvZ2ljYWxseUVtcHR5V2Vha0JsCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3NpemVfdCBIZWFwOjp0aHJlYWRWaXNpdENvdW50KCkKK3sgICAgICAg
CisgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJl
YWRzW2ldLT5zbG90VmlzaXRvcigpLT52aXNpdENvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCgpCit7ICAgICAgIAorICAgIHNp
emVfdCByZXN1bHQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90Vmlz
aXRvcigpLT5ieXRlc1Zpc2l0ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3Qg
SGVhcDo6dGhyZWFkQnl0ZXNDb3BpZWQoKQoreyAgICAgICAKKyAgICBzaXplX3QgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXND
b3BpZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEhlYXA6OnN0YXJ0TmV4dFBo
YXNlKEdDUGhhc2UgcGhhc2UpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9w
aGFzZU11dGV4KTsKKyAgICBBU1NFUlQoIW1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7CisgICAgQVNT
RVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2Fp
dCA9IHRydWU7CisgICAgbV9jdXJyZW50UGhhc2UgPSBwaGFzZTsKKyAgICBtX3BoYXNlQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6ZW5kQ3VycmVudFBoYXNl
KCkKK3sKKyAgICBBU1NFUlQobV9nY1RocmVhZHNTaG91bGRXYWl0KTsKKyAgICBzdGQ6OnVuaXF1
ZV9sb2NrPExvY2s+IGxvY2sobV9waGFzZU11dGV4KTsKKyAgICBtX2N1cnJlbnRQaGFzZSA9IE5v
UGhhc2U7CisgICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7CisgICAgbV9waGFzZUNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgIG1fYWN0aXZpdHlDb25kaXRpb25WYXJp
YWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFk
czsgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDA5LCAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMTEgKzI2LDEyIEBACiAjaW5j
bHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0
YS5oIgorI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCiAjaW5j
bHVkZSAiSGFuZGxlU3RhY2suaCIKICNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKKyNpbmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCkBAIC0zOCw3ICszOSw5IEBACiAjaW5jbHVkZSAiT3B0
aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURU
YWJsZS5oIgorI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJX
ZWFrSGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyQnVmZmVyLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtODUsNyArODgsNiBA
QCBjbGFzcyBIZWFwIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVu
ZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwotICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNo
YXJlZERhdGE7CiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9y
IGltbWVkaWF0ZSB2YWx1ZXMKICAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsK
IApAQCAtMjQzLDYgKzI0NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NG
b3JBV2hpbGU7CiAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKICAgICBm
cmllbmQgY2xhc3MgR0NMb2dnaW5nOworICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsKICAgICBm
cmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwpAQCAtMzM5LDYgKzM0MiwxNSBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgIHZvaWQgZGVjcmVt
ZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAorICAgIHNpemVfdCB0aHJlYWRWaXNp
dENvdW50KCk7CisgICAgc2l6ZV90IHRocmVhZEJ5dGVzVmlzaXRlZCgpOworICAgIHNpemVfdCB0
aHJlYWRCeXRlc0NvcGllZCgpOworICAgIHNpemVfdCB0aHJlYWREdXBTdHJpbmdzKCk7CisKKyAg
ICB2b2lkIGdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7CisgICAgdm9pZCBz
dGFydE5leHRQaGFzZShHQ1BoYXNlKTsKKyAgICB2b2lkIGVuZEN1cnJlbnRQaGFzZSgpOworCiAg
ICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXpl
OwogICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBAIC0zNzEsNyArMzgzLDYg
QEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAg
Ci0gICAgR0NUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKICAgICBTbG90VmlzaXRvciBt
X3Nsb3RWaXNpdG9yOwogICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CiAKQEAgLTQwOSw2
ICs0MjAsMzQgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+PiBtX3dlYWtHQ01hcHM7CisKKyAgICBib29sIG1fc2hvdWxkSGFzaENv
bnMgeyBmYWxzZSB9OworCisgICAgVmVjdG9yPEdDVGhyZWFkKj4gbV9nY1RocmVhZHM7CisKKyAg
ICBMb2NrIG1fbWFya2luZ011dGV4OworICAgIENvbmRpdGlvbiBtX21hcmtpbmdDb25kaXRpb25W
YXJpYWJsZTsKKyAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKKyAgICB1bnNp
Z25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OworICAgIGJvb2wgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKKworICAgIExvY2sgbV9vcGFxdWVS
b290c011dGV4OworICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CisKKyAgICBMb2Nr
IG1fY29weUxvY2s7CisgICAgVmVjdG9yPENvcGllZEJsb2NrKj4gbV9ibG9ja3NUb0NvcHk7Cisg
ICAgc2l6ZV90IG1fY29weUluZGV4IHsgMCB9OworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19i
bG9ja0ZyYWdtZW50TGVuZ3RoID0gMzI7CisKKyAgICBMb2NrIG1fcGhhc2VNdXRleDsKKyAgICBD
b25kaXRpb24gbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlOworICAgIENvbmRpdGlvbiBtX2FjdGl2
aXR5Q29uZGl0aW9uVmFyaWFibGU7CisgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZUdDVGhy
ZWFkcyB7IDAgfTsKKyAgICBib29sIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCB7IGZhbHNlIH07Cisg
ICAgR0NQaGFzZSBtX2N1cnJlbnRQaGFzZSB7IE5vUGhhc2UgfTsKKworICAgIExpc3RhYmxlSGFu
ZGxlcjxXZWFrUmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXJzOworICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBt
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDEz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNiw2ICszMjYsMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6dW5yZWdpc3Rlcldl
YWtHQ01hcCh2bwogICAgIG1fd2Vha0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKIH0KICAgICAK
K2lubGluZSB2b2lkIEhlYXA6OmdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90JiBzdGFydCwgc2l6
ZV90JiBlbmQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jb3B5TG9jayk7CisgICAgc3Rh
cnQgPSBtX2NvcHlJbmRleDsKKyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXpl
KCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRl
eCA9IGVuZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBIZWFwSW5saW5l
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIu
aAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFi
bGVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEhlYXA7CiBjbGFzcyBNYXJrU3RhY2s7CiBjbGFzcyBNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhOwogY2xhc3MgU2xvdFZpc2l0b3I7CkBAIC01MSw4ICs1Miw4IEBAIHBy
b3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICAvLyBBbGxvdyB0aGVzZSBjbGFzc2VzIHRvIHVzZSBM
aXN0YWJsZUhhbmRsZXI6Okxpc3QuCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAgICAgZnJpZW5k
IGNsYXNzIE1hcmtTdGFjazsKLSAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwog
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICAKICAgICBjbGFzcyBMaXN0IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1T
bG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCitTbG90
VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKICAgICA6IG1fc3RhY2soKQogICAgICwg
bV9ieXRlc1Zpc2l0ZWQoMCkKICAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKICAgICAsIG1fdmlzaXRD
b3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQotICAgICwgbV9zaGFyZWQo
c2hhcmVkKQorICAgICwgbV9oZWFwKGhlYXApCiAgICAgLCBtX3Nob3VsZEhhc2hDb25zKGZhbHNl
KQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uKGZhbHNlKQpAQCAtNjcsMTAgKzY3LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZygpCiAgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09
IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
OyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgogCi0gICAgbV9zaGFyZWQubV9zaG91bGRI
YXNoQ29ucyA9IG1fc2hhcmVkLm1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygp
OwotICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NoYXJlZC5tX2djVGhyZWFkcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9zaGFyZWQubV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPm1fc2hv
dWxkSGFzaENvbnMgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zOworICAgIG1faGVhcC5tX3No
b3VsZEhhc2hDb25zID0gbV9oZWFwLm1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29u
cygpOworICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29uczsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFwLm1fZ2NUaHJlYWRzLnNpemUoKTsgKytp
KQorICAgICAgICBtX2hlYXAubV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPm1fc2hvdWxk
SGFzaENvbnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29uczsKIH0KIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQpAQCAtMTM1LDIwICsxMzUsMjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRl
S25vd25QYXJhbGxlbCgpCiAKICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFyZWQg
d29yayBxdWV1ZWQgdXAsIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhhdCBk
b25hdGluZyBtb3JlIGlzIG5vdCBwcm9maXRhYmxlLgotICAgIGlmIChtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjay5zaXplKCkpCisgICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3JlIGNvbnRlbmRpbmcgb24gdGhl
IGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lIHRoYXQgYW5vdGhlcgogICAgIC8vIHRo
cmVhZCBpcyBhbHJlYWR5IGRvbmF0aW5nLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9j
ayhtX3NoYXJlZC5tX21hcmtpbmdNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1
bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCwgc3RkOjp0cnlfdG9f
bG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29uLCBh
bmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQubV9zaGFy
ZWRNYXJrU3RhY2spOworICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1fc2hh
cmVkTWFya1N0YWNrKTsKIAotICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkKLSAgICAgICAgbV9zaGFy
ZWQubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgaWYgKG1faGVh
cC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01h
cmtlcnMoKSkKKyAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCkBAIC0xOTAsMTggKzE5MCwx
OCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgIC8v
IFRoaXMgY2FsbCBzaG91bGQgYmUgYSBuby1vcC4KICAgICAgICAgQVNTRVJUX1VOVVNFRChzaGFy
ZWREcmFpbk1vZGUsIHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbik7CiAgICAgICAgIEFT
U0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQobV9oZWFwLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3NoYXJlZC5tX21hcmtpbmdNdXRl
eCk7Ci0gICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsK
KyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fbWFya2luZ011dGV4
KTsKKyAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAg
ICB9CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxMb2NrPiBsb2NrKG1fc2hhcmVkLm1fbWFya2luZ011dGV4KTsKLSAgICAgICAgICAg
IG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKKyAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAg
ICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKIAogICAg
ICAgICAgICAgLy8gSG93IHdlIHdhaXQgZGlmZmVycyBkZXBlbmRpbmcgb24gZHJhaW4gbW9kZS4K
ICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKQEAgLTIw
OSwzNiArMjA5LDM2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQK
ICAgICAgICAgICAgICAgICAvLyBmb3IgdXMgdG8gZG8uCiAgICAgICAgICAgICAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9u
PwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUg
Zm9yIHRoZW0gdG8gcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8g
YmUgZG9uZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX3NoYXJlZE1hcmtT
dGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQu
Ci0gICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
LndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS53YWl0KGxvY2spOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURy
YWluKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0
IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KLSAgICAgICAgICAgICAg
ICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFy
ZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBtX3No
YXJlZC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1faGVh
cC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAgICAgICAgICAg
ICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNd
IHsgcmV0dXJuICFtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkgfHwgbV9zaGFy
ZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OyB9KTsKKyAgICAgICAgICAgICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4g
IW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkgfHwgbV9oZWFwLm1fcGFyYWxsZWxN
YXJrZXJzU2hvdWxkRXhpdDsgfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVu
Y3Rpb24uCi0gICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hv
dWxkRXhpdCkKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hv
dWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBpZGxlVGhyZWFkQ291bnQgPSBPcHRpb25zOjpu
dW1iZXJPZkdDTWFya2VycygpIC0gbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VyczsKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKG1fc2hhcmVkLm1f
c2hhcmVkTWFya1N0YWNrLCBpZGxlVGhyZWFkQ291bnQpOwotICAgICAgICAgICAgbV9zaGFyZWQu
bV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOworICAgICAgICAgICAgc2l6ZV90IGlk
bGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSBtX2hlYXAubV9u
dW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VyczsKKyAgICAgICAgICAgIG1fc3RhY2suc3RlYWxT
b21lQ2VsbHNGcm9tKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50KTsK
KyAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGRyYWluKCk7CkBAIC0yNTAsOSArMjUwLDkgQEAg
dm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiAgICAgU3RhY2tTdGF0czo6cHJv
YmUoKTsKICAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIG9u
bHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1wdHkuCiAgICAgewotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3NoYXJlZC5tX29wYXF1ZVJvb3RzTXV0
ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVS
b290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAg
ICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgICAgICAgICAg
bV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogICAgIH0KICAgICBtX29wYXF1ZVJvb3Rz
LmNsZWFyKCk7CiB9CkBAIC0zMjcsMTUgKzMyNywxNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmludGVybmFsCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5j
ZXMoKQogewogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKiBjdXJyZW50ID0gbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCisgICAgZm9yIChXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQogICAgICAg
ICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCp0aGlzKTsKIH0KIAogdm9pZCBTbG90Vmlz
aXRvcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7CiAgICAgU3RhY2tTdGF0
czo6cHJvYmUoKTsKLSAgICB3aGlsZSAobV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpCi0gICAgICAgIG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMu
cmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOworICAgIHdoaWxlIChtX2hl
YXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5oYXNOZXh0KCkpCisgICAgICAgIG1faGVhcC5t
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIH0KIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxOTAxMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIGNsYXNzIFNsb3RWaXNpdG9yIHsKICAgICBmcmllbmQgY2xhc3MgSGVhcFJv
b3RWaXNpdG9yOyAvLyBBbGxvd2VkIHRvIG1hcmsgYSBKU1ZhbHVlKiBvciBKU0NlbGwqKiBkaXJl
Y3RseS4KIAogcHVibGljOgotICAgIFNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOwor
ICAgIFNsb3RWaXNpdG9yKEhlYXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAogICAgIE1hcmtT
dGFja0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9CkBAIC04Miw3ICs4Miw2
IEBAIHB1YmxpYzoKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KikgY29uc3Q7CiAgICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAgR0NUaHJlYWRTaGFy
ZWREYXRhJiBzaGFyZWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWQ7IH0KICAgICBib29s
IGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRT
dGFydE1hcmtpbmcoKTsKQEAgLTE0Myw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X3Zpc2l0Q291bnQ7CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgCi0gICAgR0NU
aHJlYWRTaGFyZWREYXRhJiBtX3NoYXJlZDsKKyAgICBIZWFwJiBtX2hlYXA7CiAKICAgICBib29s
IG1fc2hvdWxkSGFzaENvbnM7IC8vIExvY2FsIHBlci10aHJlYWQgY29weSBvZiBzaGFyZWQgZmxh
ZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBs
KiwgSlNWYWx1ZT4gVW5pcXVlU3RyaW5nTWFwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMTkgKzE0OCwxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFZhCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7
Ci0gICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOworICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CiB9CiAKIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIqIHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpCiB7Ci0gICAgbV9zaGFyZWQubV91bmNv
bmRpdGlvbmFsRmluYWxpemVycy5hZGRUaHJlYWRTYWZlKHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIp
OworICAgIG1faGVhcC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodW5j
b25kaXRpb25hbEZpbmFsaXplcik7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRP
cGFxdWVSb290KHZvaWQqIHJvb3QpCiB7CiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJr
ZXJzKCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhh
c2hTZXQuCi0gICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgICAg
ICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJl
ZCBvbmUgZXZlcnkgb25jZSBpbgpAQCAtMTczLDE1ICsxNzMsMTUgQEAgaW5saW5lIGJvb2wgU2xv
dFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUgogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxN
b2RlKTsKICAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBt
X3NoYXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworICAgIHJldHVybiBtX2hlYXAu
bV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKIH0KIAogaW5saW5lIFRyaVN0YXRlIFNsb3RW
aXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKiByb290KSBjb25zdAogewog
ICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQogICAgICAgICByZXR1cm4gVHJ1
ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fc2hhcmVkLm1fb3Bh
cXVlUm9vdHNNdXRleCk7Ci0gICAgaWYgKG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuY29udGFpbnMo
cm9vdCkpCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9v
dHNNdXRleCk7CisgICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQog
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwog
fQpAQCAtMTkwLDcgKzE5MCw3IEBAIGlubGluZSBpbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RD
b3VudCgKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgQVNTRVJUKG1f
b3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290
cy5zaXplKCk7CisgICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKIH0KIAog
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCkBA
IC0yMzMsNyArMjMzLDcgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0Nl
bAogICAgICAgICAvLyBpcyBjb3JyZWN0LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NzQ5CiAgICAgICAgIGJ5dGVzID0gYmxvY2stPnNpemUo
KTsKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKKyAgICAgICAg
bV9oZWFwLm1fc3RvcmFnZVNwYWNlLnBpbihibG9jayk7CiAgICAgfQogCiAgICAgQVNTRVJUKGhl
YXAoKS0+bV9zdG9yYWdlU3BhY2UuY29udGFpbnMoYmxvY2spKTsKQEAgLTI1MiwxNyArMjUyLDE3
IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW8KIAogaW5saW5lIEhl
YXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gJnNoYXJlZERhdGEo
KS5tX3ZtLT5oZWFwOworICAgIHJldHVybiAmbV9oZWFwOwogfQogCiBpbmxpbmUgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICpzaGFyZWREYXRhKCkubV92bTsKKyAgICByZXR1
cm4gKm1faGVhcC5tX3ZtOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuICpzaGFyZWREYXRhKCkubV92bTsKKyAgICByZXR1cm4gKm1f
aGVhcC5tX3ZtOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="286966"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261781</attachid>
            <date>2015-09-22 16:57:09 -0700</date>
            <delta_ts>2015-09-22 16:57:09 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56650</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE1LTA5LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0NUaHJlYWRTaGFyZWREYXRhIGlzIGp1c3QgYSBiYWQgd2F5IG9mIHNheWluZyBIZWFwCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIEdD
VGhyZWFkU2hhcmVkRGF0YSBjbGFzcyBhbmQgbW92ZXMgaXRzIG1lbWJlcnMgaW50byBIZWFwLiBU
aGlzIGlzIGEgbmV0CisgICAgICAgIHNpbXBsaWZpY2F0aW9uIHNpbmNlIEdDVGhyZWFkU2hhcmVk
RGF0YSBoYWQgYSAxLXRvLTEgbWFwcGluZyB0byBIZWFwIGFuZCB0aGUgdHdvIGNsYXNzZXMgaGFk
IGEKKyAgICAgICAgdmFzdCBjb250cmFjdCB3aXRoIGEgbG90IG9mIGludGVyZGVwZW5kZW5jaWVz
LiBIZWFwIHdvdWxkIGNhbGwgYSBsb3Qgb2YgR0NUaHJlYWRTaGFyZWREYXRhCisgICAgICAgIG1l
dGhvZHM7IG5vdyBhIGxvdCBvZiB0aG9zZSBhcmUgaW5saW5lZCBzaW5jZSB0aGV5IHdlcmUgb25s
eSBjYWxsZWQgZnJvbSB0aGUgb25lIHBsYWNlIGluIEhlYXAuCisgICAgICAgIFRoaXMgbWFrZXMg
aXQgYSBsb3QgZWFzaWVyIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uLiBGb3IgZXhhbXBsZSwgeW91
IG5vIGxvbmdlciBoYXZlIHRvIGxvb2sgYXQKKyAgICAgICAgY29kZSBpbiB0d28gcGxhY2VzIChI
ZWFwIGFuZCBHQ1RocmVhZFNoYXJlZERhdGEpIHRvIGZpZ3VyZSBvdXQgdGhlIHRpbWluZyBhbmQg
c3luY2hyb25pemF0aW9uCisgICAgICAgIG9mIEdDIHBoYXNlcyAtIGFsbCBvZiB0aGF0IGNvZGUg
aXMgaW4gSGVhcCBub3cuCisKKyAgICAgICAgVGhpcyBhbHNvIHJlbW92ZXMgd2VpcmQgaW5kaXJl
Y3Rpb25zIGluIG90aGVyIHBsYWNlcy4gSXQgdXNlZCB0byBiZSB0aGF0IGEgbG90IG9mIEdDIGhl
bHBlcgorICAgICAgICBjbGFzc2VzIHdvdWQgaGF2ZSBhIHBvaW50ZXIgdG8gR0NUaHJlYWRTaGFy
ZWREYXRhLCBhbmQgdGhlbiB3b3VsZCB1c2UgdGhhdCB0byBnZXQgdG8gSGVhcCwgVk0sCisgICAg
ICAgIGFuZCB0aGUgdmlzaXRvcnMuIE5vdyB0aGVzZSBoZWxwZXJzIGp1c3QgcG9pbnQgdG8gSGVh
cC4KKworICAgICAgICBJIHRoaW5rIHRoYXQgR0NUaHJlYWRTaGFyZWREYXRhIHdhcyBvbmx5IHVz
ZWZ1bCBmb3IgZGVmaW5pbmcgdGhlIHNldCBvZiB0aGluZ3MgdGhhdCB3ZSBuZWVkIHRvCisgICAg
ICAgIGtub3cgdG8gY29sbGVjdCBnYXJiYWdlLiBUaGF0J3MgaG93IHdlIGRlY2lkZWQgaWYgc29t
ZXRoaW5nIHdvdWxkIGdvIGludG8gR0NUaHJlYWRTaGFyZWREYXRhCisgICAgICAgIGluc3RlYWQg
b2YgSGVhcC4gQnV0IEkgdGhpbmsgdGhhdCBzZXBhcmF0aW5nIHRoaW5ncyBpbnRvIG11bHRpcGxl
IGNsYXNzZXMgdXN1YWxseSBtYWtlcyB0aGUKKyAgICAgICAgY29kZSBsZXNzIGhhY2thYmxlLCBz
byB0aGVyZSBzaG91bGQgYmUgYSB2ZXJ5IGhpZ2ggYmFyIGZvciBkb2luZyB0aGlzIGluIGEgd2F5
IHRoYXQgcHJvZHVjZXMgYQorICAgICAgICAxLXRvLTEgbWFwcGluZyBiZXR3ZWVuIHR3byBjbGFz
c2VzIC0gd2hlcmUgb25lIGluc3RhbmNlIG9mIG9uZSBvZiB0aGUgY2xhc3NlcyBpcyBhbHdheXMg
cGFpcmVkCisgICAgICAgIHdpdGggZXhhY3RseSBvbmUgaW5zdGFuY2Ugb2YgdGhlIG90aGVyIGNs
YXNzIGFuZCB2aWNlLXZlcnNhLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJz
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Y29weUZyb21TaGFyZWQpOgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3cpOgorICAgICAgICAoSlNDOjpD
b3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmRv
bmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmRpZENvcHkpOgorICAgICAg
ICAqIGhlYXAvR0NUaHJlYWQuY3BwOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6R0NUaHJlYWQp
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6d2FpdEZvck5leHRQaGFzZSk6CisgICAgICAgIChK
U0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWQuaDoK
KyAgICAgICAgKiBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMp
OgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpyZXNldFZpc2l0b3JzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0Q291bnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlFbXB0eVdlYWtCbG9jayk6
CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZFZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpI
ZWFwOjp0aHJlYWRCeXRlc1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjp0aHJlYWRCeXRl
c0NvcGllZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0YXJ0TmV4dFBoYXNlKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6ZW5kQ3VycmVudFBoYXNlKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0
ZXJXZWFrR0NNYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpnZXROZXh0QmxvY2tzVG9Db3B5KToK
KyAgICAgICAgKiBoZWFwL0xpc3RhYmxlSGFuZGxlci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtu
b3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
aGFydmVzdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3Iu
aDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1hcmtTdGFjayk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNoYXJl
ZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6b3BhcXVlUm9vdENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5TGF0
ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp2bSk6CisKIDIwMTUtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIEVOQUJMRShQQVJBTExFTF9HQykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDcg
KzI5NSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9HQ0FjdGl2aXR5
Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0xvZ2dpbmcuY3BwCiAgICAgaGVhcC9HQ1RocmVhZC5j
cHAKLSAgICBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5j
cHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhlYXAvSGVhcC5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTkwMTMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY2LDcgKzU2Niw2IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFjay5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDTG9nZ2luZy5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGhlYXBcSGFuZGxlU3RhY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxIZWFwLmNwcCIgLz4KQEAgLTEzNDQsNyArMTM0Myw2IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXEdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDQXNzZXJ0aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcSGFuZGxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhh
bmRsZUJsb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJs
b2NrSW5saW5lcy5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsOSArMjgyLDYgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1Ro
cmVhZFNoYXJlZERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjI3
MCw5ICsyMjY3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQu
aCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmgiPgotICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXEhhbmRsZS5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDggKzE2NTcsNiBA
QAogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4
NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzIwMzI4MjAxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVj
dENsYXNzVGVzdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzIwMzI4MUUxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVz
dC5jICovOyB9OwogCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzIxMTIy
RTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERTE1REQ5QUIzMDA3OTBF
M0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLzsgfTsKLQkJQzIxMTIyRTIxNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVD
MEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE4MUZDMjE4QTk0OEZCMDAyNUEyMzUg
LyogSlNFeHBvcnRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMTgxRkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICov
OyB9OwogCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjE4RDEzRjE2NTVDRkQ1
MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2NjYsNyArMTY2NCw3IEBACiAJCUMyMjM5RDE4MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIy
MzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTQxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIz
OUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovOyB9OwotCQlDMjIzOUQxQjE2
MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5o
ICovOyB9OworCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQw
MDVBQzVGRCAvKiBHQ1RocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0
MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovOyB9OwogCQlDMjJCMzFCOTE0
MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNDAzMDUzMTRCNDA0
QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi87IH07CkBAIC0zNTI5LDggKzM1MjcsNiBA
QAogCQlDMjAzMjgxRTE5ODE5NzlEMDA4OEI0OTkgLyogQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NU
ZXN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IEN1c3RvbUdsb2JhbE9iamVj
dENsYXNzVGVzdC5jOyBwYXRoID0gQVBJL3Rlc3RzL0N1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVz
dC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjAzMjgxRjE5ODE5NzlEMDA4OEI0
OTkgLyogQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0N1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjBCQTkyQzE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRh
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjExMjJERTE1REQ5QUIz
MDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTFCNTc0MTc2QTIyNEQwMDBFMkEy
MyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUNhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSlNFeHBvcnRUZXN0cy5oOyBwYXRoID0gQVBJL3Rlc3RzL0pT
RXhwb3J0VGVzdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxODFGQzExOEE5
NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBKU0V4cG9ydFRlc3RzLm1tOyBwYXRoID0gQVBJL3Rlc3RzL0pTRXhw
b3J0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjU1LDggKzQyNTEs
NiBAQAogCQkJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAg
Ki8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCi0JCQkJ
QzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCi0J
CQkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovLAog
CQkJCTE0MkUzMTJCMTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGUuaCAqLywKIAkJCQlDMjgzMThG
RjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2suaCAqLywKIAkJCQlDMjgzMTkwMTE2RkU1
MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVzLmggKi8sCkBAIC02NDAxLDcgKzYzOTUs
NiBAQAogCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlE
MUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjEx
MjJFMjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRS
ZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3MjMsNyAr
NzcxNiw2IEBACiAJCQkJMEY2NEIyNzExQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDFBMTYyNjJCREQw
MDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDMjExMjJFMTE1REQ5
QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMDMzMkMzMThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0
dGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNz
IENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7CiAgICAgZnJpZW5kIGNsYXNzIENv
cHlWaXNpdG9yOwotICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CisgICAgZnJp
ZW5kIGNsYXNzIEhlYXA7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVZpc2l0b3IuY3BwCShyZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJDb3B5V29ya0xpc3QuaCIKLSNpbmNsdWRlICJHQ1RocmVhZFNo
YXJlZERhdGEuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTM3LDE4ICszNiwxOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hh
cmVkKQotICAgIDogbV9zaGFyZWQoc2hhcmVkKQorQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEhl
YXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIAogdm9pZCBDb3B5VmlzaXRvcjo6
Y29weUZyb21TaGFyZWQoKQogewogICAgIHNpemVfdCBuZXh0LCBlbmQ7Ci0gICAgbV9zaGFyZWQu
Z2V0TmV4dEJsb2Nrc1RvQ29weShuZXh0LCBlbmQpOworICAgIG1faGVhcC5nZXROZXh0QmxvY2tz
VG9Db3B5KG5leHQsIGVuZCk7CiAgICAgd2hpbGUgKG5leHQgPCBlbmQpIHsKICAgICAgICAgZm9y
ICg7IG5leHQgPCBlbmQ7ICsrbmV4dCkgewotICAgICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9zaGFyZWQubV9ibG9ja3NUb0NvcHlbbmV4dF07CisgICAgICAgICAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSBtX2hlYXAubV9ibG9ja3NUb0NvcHlbbmV4dF07CiAgICAgICAgICAgICBpZiAo
IWJsb2NrLT5oYXNXb3JrTGlzdCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC01
Nyw5ICs1Niw5IEBAIHZvaWQgQ29weVZpc2l0b3I6OmNvcHlGcm9tU2hhcmVkKCkKICAgICAgICAg
ICAgICAgICB2aXNpdEl0ZW0oKml0KTsKIAogICAgICAgICAgICAgQVNTRVJUKCFibG9jay0+bGl2
ZUJ5dGVzKCkpOwotICAgICAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2
YWN1YXRlZEJsb2NrKGJsb2NrLCBtX3NoYXJlZC5tX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jl
c3MoKSk7CisgICAgICAgICAgICBtX2hlYXAubV9zdG9yYWdlU3BhY2UucmVjeWNsZUV2YWN1YXRl
ZEJsb2NrKGJsb2NrLCBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpKTsKICAgICAgICAgfQot
ICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KG5leHQsIGVuZCk7CisgICAgICAg
IG1faGVhcC5nZXROZXh0QmxvY2tzVG9Db3B5KG5leHQsIGVuZCk7CiAgICAgfQogICAgIEFTU0VS
VChuZXh0ID09IGVuZCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOworY2xhc3MgSGVhcDsKIGNs
YXNzIEpTQ2VsbDsKIAogY2xhc3MgQ29weVZpc2l0b3IgewogcHVibGljOgotICAgIENvcHlWaXNp
dG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworICAgIENvcHlWaXNpdG9yKEhlYXAmKTsKIAogICAg
IHZvaWQgY29weUZyb21TaGFyZWQoKTsKIApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CiAgICAgdm9pZCB2aXNpdEl0ZW0o
Q29weVdvcmtsaXN0SXRlbSk7CiAKLSAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOwor
ICAgIEhlYXAmIG1faGVhcDsKICAgICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCi0jaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAKQEAgLTY2LDcg
KzY2LDcgQEAgaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYQogaW5saW5l
IHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCiB7
CiAgICAgQ29waWVkQmxvY2sqIG5ld0Jsb2NrID0gMDsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2Nr
KCksICZuZXdCbG9jayk7CisgICAgbV9oZWFwLm1fc3RvcmFnZVNwYWNlLmRvbmVGaWxsaW5nQmxv
Y2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKICAg
ICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOwogCiAgICAgdm9p
ZCogcmVzdWx0ID0gMDsKQEAgLTc5LDcgKzc5LDcgQEAgaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6
OnN0YXJ0Q29weWluZygpCiB7CiAgICAgQVNTRVJUKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlk
KCkpOwogICAgIENvcGllZEJsb2NrKiBibG9jayA9IDA7Ci0gICAgbV9zaGFyZWQubV9jb3BpZWRT
cGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9j
aygpLCAmYmxvY2spOworICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5kb25lRmlsbGluZ0Jsb2Nr
KG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7CiAgICAgbV9j
b3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKIH0KIApAQCAtODgsNyArODgs
NyBAQCBpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQogICAgIGlmICghbV9j
b3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3NoYXJl
ZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0
Q3VycmVudEJsb2NrKCksIDApOworICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5kb25lRmlsbGlu
Z0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOwogfQogCiBp
bmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDE5
MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDE1IEBACiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgog
I2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVk
RGF0YS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HQ1Ro
cmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQsIHN0ZDo6dW5pcXVlX3B0
cjxTbG90VmlzaXRvcj4gc2xvdFZpc2l0b3IsIHN0ZDo6dW5pcXVlX3B0cjxDb3B5VmlzaXRvcj4g
Y29weVZpc2l0b3IpCitHQ1RocmVhZDo6R0NUaHJlYWQoSGVhcCYgaGVhcCwgc3RkOjp1bmlxdWVf
cHRyPFNsb3RWaXNpdG9yPiBzbG90VmlzaXRvciwgc3RkOjp1bmlxdWVfcHRyPENvcHlWaXNpdG9y
PiBjb3B5VmlzaXRvcikKICAgICA6IG1fdGhyZWFkSUQoMCkKLSAgICAsIG1fc2hhcmVkKHNoYXJl
ZCkKKyAgICAsIG1faGVhcChoZWFwKQogICAgICwgbV9zbG90VmlzaXRvcihXVEY6Om1vdmUoc2xv
dFZpc2l0b3IpKQogICAgICwgbV9jb3B5VmlzaXRvcihXVEY6Om1vdmUoY29weVZpc2l0b3IpKQog
ewpAQCAtNjksMTYgKzY4LDE2IEBAIENvcHlWaXNpdG9yKiBHQ1RocmVhZDo6Y29weVZpc2l0b3Io
KQogCiBHQ1BoYXNlIEdDVGhyZWFkOjp3YWl0Rm9yTmV4dFBoYXNlKCkKIHsKLSAgICBzdGQ6OnVu
aXF1ZV9sb2NrPExvY2s+IGxvY2sobV9zaGFyZWQubV9waGFzZU11dGV4KTsKLSAgICBtX3NoYXJl
ZC5tX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1f
c2hhcmVkLm1fZ2NUaHJlYWRzU2hvdWxkV2FpdDsgfSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxM
b2NrPiBsb2NrKG1faGVhcC5tX3BoYXNlTXV0ZXgpOworICAgIG1faGVhcC5tX3BoYXNlQ29uZGl0
aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1faGVhcC5tX2djVGhyZWFk
c1Nob3VsZFdhaXQ7IH0pOwogCi0gICAgbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFk
cy0tOwotICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcykKLSAgICAg
ICAgbV9zaGFyZWQubV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotCi0g
ICAgbV9zaGFyZWQubV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsg
cmV0dXJuIG1fc2hhcmVkLm1fY3VycmVudFBoYXNlICE9IE5vUGhhc2U7IH0pOwotICAgIG1fc2hh
cmVkLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMrKzsKLSAgICByZXR1cm4gbV9zaGFyZWQubV9j
dXJyZW50UGhhc2U7CisgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMtLTsKKyAg
ICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQorICAgICAgICBtX2hlYXAu
bV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOworCisgICAgbV9oZWFwLm1f
cGhhc2VDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX2hlYXAu
bV9jdXJyZW50UGhhc2UgIT0gTm9QaGFzZTsgfSk7CisgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3Rp
dmVHQ1RocmVhZHMrKzsKKyAgICByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNlOwogfQogCiB2
b2lkIEdDVGhyZWFkOjpnY1RocmVhZE1haW4oKQpAQCAtODgsNyArODcsNyBAQCB2b2lkIEdDVGhy
ZWFkOjpnY1RocmVhZE1haW4oKQogICAgIC8vIFdhaXQgZm9yIHRoZSBtYWluIHRocmVhZCB0byBm
aW5pc2ggY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyB1cy4gVGhlIG1haW4gdGhyZWFkIGdyYWJz
IHRoaXMgbG9jayBiZWZvcmUgCiAgICAgLy8gY3JlYXRpbmcgdGhpcyB0aHJlYWQuIFdlIGFyZW4n
dCBndWFyYW50ZWVkIHRvIGhhdmUgYSB2YWxpZCB0aHJlYWRJRCB1bnRpbCB0aGUgbWFpbiB0aHJl
YWQgcmVsZWFzZXMgdGhpcyBsb2NrLgogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9zaGFyZWQubV9waGFzZU11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9oZWFwLm1fcGhhc2VNdXRleCk7CiAgICAgfQogICAgIHsKICAgICAgICAg
UGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX3Nsb3RWaXNpdG9yKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2aXNpb24gMTkwMTMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTkg
KzI2LDI1IEBACiAjaWZuZGVmIEdDVGhyZWFkX2gKICNkZWZpbmUgR0NUaHJlYWRfaAogCi0jaW5j
bHVkZSA8R0NUaHJlYWRTaGFyZWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29weVZp
c2l0b3I7Ci1jbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBIZWFwOwogY2xhc3MgU2xv
dFZpc2l0b3I7CiAKK2VudW0gR0NQaGFzZSB7CisgICAgTm9QaGFzZSwKKyAgICBNYXJrLAorICAg
IENvcHksCisgICAgRXhpdAorfTsKKwogY2xhc3MgR0NUaHJlYWQgewogcHVibGljOgotICAgIEdD
VGhyZWFkKEdDVGhyZWFkU2hhcmVkRGF0YSYsIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4s
IHN0ZDo6dW5pcXVlX3B0cjxDb3B5VmlzaXRvcj4pOworICAgIEdDVGhyZWFkKEhlYXAmLCBzdGQ6
OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+LCBzdGQ6OnVuaXF1ZV9wdHI8Q29weVZpc2l0b3I+KTsK
IAogICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOwogICAgIENvcHlWaXNpdG9yKiBjb3B5
VmlzaXRvcigpOwpAQCAtNTIsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIEdDUGhhc2Ugd2FpdEZv
ck5leHRQaGFzZSgpOwogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIEdD
VGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CisgICAgSGVhcCYgbV9oZWFwOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxOTAx
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKLQotI2luY2x1ZGUgIkNvcHlWaXNpdG9y
LmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiR0NUaHJlYWQu
aCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNp
bmNsdWRlICJWTS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBHQ1RocmVhZFNoYXJlZERh
dGE6OnJlc2V0Q2hpbGRyZW4oKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1Ro
cmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigp
LT5yZXNldCgpOwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZpc2l0Q291
bnQoKQoteyAgICAgICAKLSAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1
bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZEJ5dGVz
VmlzaXRlZCgpCi17ICAgICAgIAotICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0
ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT5ieXRlc1Zpc2l0ZWQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZEJ5dGVz
Q29waWVkKCkKLXsgICAgICAgCi0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQg
Kz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzQ29waWVkKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEo
Vk0qIHZtKQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fY29waWVkU3BhY2UoJnZtLT5oZWFwLm1f
c3RvcmFnZVNwYWNlKQotICAgICwgbV9zaG91bGRIYXNoQ29ucyhmYWxzZSkKLSAgICAsIG1fc2hh
cmVkTWFya1N0YWNrKCkKLSAgICAsIG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMoMCkK
LSAgICAsIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdChmYWxzZSkKLSAgICAsIG1fY29weUlu
ZGV4KDApCi0gICAgLCBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKDApCi0gICAgLCBtX2djVGhy
ZWFkc1Nob3VsZFdhaXQoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRQaGFzZShOb1BoYXNlKQotewot
ICAgIC8vIEdyYWIgdGhlIGxvY2sgc28gdGhlIG5ldyBHQyB0aHJlYWRzIGNhbiBiZSBwcm9wZXJs
eSBpbml0aWFsaXplZCBiZWZvcmUgdGhleSBzdGFydCBydW5uaW5nLgotICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKLSAgICAgICAgbV9udW1i
ZXJPZkFjdGl2ZUdDVGhyZWFkcysrOwotICAgICAgICBHQ1RocmVhZCogbmV3VGhyZWFkID0gbmV3
IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyksIHN0
ZDo6bWFrZV91bmlxdWU8Q29weVZpc2l0b3I+KCp0aGlzKSk7Ci0gICAgICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5j
LCBuZXdUaHJlYWQsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpOwotICAgICAgICBuZXdUaHJl
YWQtPmluaXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJRCk7Ci0gICAgICAgIG1fZ2NUaHJlYWRzLmFw
cGVuZChuZXdUaHJlYWQpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGFsbCB0aGUgR0NUaHJl
YWRzIHRvIGdldCB0byB0aGUgcmlnaHQgcGxhY2UuCi0gICAgbV9hY3Rpdml0eUNvbmRpdGlvblZh
cmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0aXZlR0NUaHJl
YWRzOyB9KTsKLX0KLQotR0NUaHJlYWRTaGFyZWREYXRhOjp+R0NUaHJlYWRTaGFyZWREYXRhKCkK
LXsKLSAgICAvLyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCi0gICAgewotICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFya2luZ0xvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgICAg
IEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKLSAgICAgICAgbV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0g
ZmFsc2U7Ci0gICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKLSAgICAgICAgbV9waGFzZUNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOwotICAgICAgICBkZWxldGUg
bV9nY1RocmVhZHNbaV07Ci0gICAgfQotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVz
ZXQoKQotewotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwotICAgIAot
ICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7Ci0KLSAgICBpZiAobV9z
aG91bGRIYXNoQ29ucykgewotICAgICAgICBtX3ZtLT5yZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RI
YXNoQ29ucygpOwotICAgICAgICBtX3Nob3VsZEhhc2hDb25zID0gZmFsc2U7Ci0gICAgfQotfQot
Ci12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6c3RhcnROZXh0UGhhc2UoR0NQaGFzZSBwaGFzZSkK
LXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgIEFT
U0VSVCghbV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBBU1NFUlQobV9jdXJyZW50UGhhc2Ug
PT0gTm9QaGFzZSk7Ci0gICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gdHJ1ZTsKLSAgICBtX2N1
cnJlbnRQaGFzZSA9IHBoYXNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlB
bGwoKTsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmVuZEN1cnJlbnRQaGFzZSgpCi17
Ci0gICAgQVNTRVJUKG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9j
azxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgbV9jdXJyZW50UGhhc2UgPSBOb1BoYXNl
OwotICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9IGZhbHNlOwotICAgIG1fcGhhc2VDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICBtX2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUu
d2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0p
OwotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRNYXJraW5nKCkKLXsKLSAg
ICBpZiAobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24p
Ci0gICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX21hcmtpbmdNdXRleCk7Ci0gICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
ID0gZmFsc2U7Ci0gICAgc3RhcnROZXh0UGhhc2UoTWFyayk7Ci19Ci0KLXZvaWQgR0NUaHJlYWRT
aGFyZWREYXRhOjpkaWRGaW5pc2hNYXJraW5nKCkKLXsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKLSAgICAgICAgbV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1h
cmspOwotICAgIGVuZEN1cnJlbnRQaGFzZSgpOwotfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0
YTo6ZGlkU3RhcnRDb3B5aW5nKCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCZtX2NvcHlMb2NrKTsKLSAgICAgICAgaWYgKG1fdm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVz
cygpID09IEVkZW5Db2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBSZXNldCB0aGUgdmVjdG9y
IHRvIGJlIGVtcHR5LCBidXQgZG9uJ3QgdGhyb3cgYXdheSB0aGUgYmFja2luZyBzdG9yZS4KLSAg
ICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnNocmluaygwKTsKLSAgICAgICAgICAgIGZvciAoQ29w
aWVkQmxvY2sqIGJsb2NrID0gbV9jb3BpZWRTcGFjZS0+bV9uZXdHZW4uZnJvbVNwYWNlLT5oZWFk
KCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgbV9ibG9j
a3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbik7
Ci0gICAgICAgICAgICBXVEY6OmNvcHlUb1ZlY3RvcihtX2NvcGllZFNwYWNlLT5tX2Jsb2NrU2V0
LCBtX2Jsb2Nrc1RvQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb3B5SW5kZXggPSAwOwot
ICAgIH0KLQotICAgIC8vIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGEgcmFjZSBj
b25kaXRpb24gd2hlcmUgdGhlIG1haW4gdGhyZWFkIGNhbiAKLSAgICAvLyBibG93IHRocm91Z2gg
YWxsIG9mIHRoZSBjb3B5aW5nIHdvcmsgYmVmb3JlIHRoZSBHQ1RocmVhZHMgZnVsbHkgd2FrZSB1
cC4gCi0gICAgLy8gVGhlIEdDVGhyZWFkcyB0aGVuIHJlcXVlc3QgYSBibG9jayBmcm9tIHRoZSBD
b3BpZWRTcGFjZSB3aGVuIHRoZSBjb3B5aW5nIHBoYXNlIAotICAgIC8vIGhhcyBjb21wbGV0ZWQs
IHdoaWNoIGlzbid0IGFsbG93ZWQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2djVGhy
ZWFkcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9nY1RocmVhZHNbaV0tPmNvcHlWaXNpdG9yKCkt
PnN0YXJ0Q29weWluZygpOwotCi0gICAgc3RhcnROZXh0UGhhc2UoQ29weSk7Ci19Ci0KLXZvaWQg
R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRGaW5pc2hDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQobV9j
dXJyZW50UGhhc2UgPT0gQ29weSk7Ci0gICAgZW5kQ3VycmVudFBoYXNlKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgR0NUaHJlYWRTaGFyZWREYXRhX2gKLSNkZWZpbmUgR0NUaHJlYWRT
aGFyZWREYXRhX2gKLQotI2luY2x1ZGUgIkxpc3RhYmxlSGFuZGxlci5oIgotI2luY2x1ZGUgIk1h
cmtTdGFjay5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0jaW5jbHVkZSAiVW5jb25kaXRp
b25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKLSNp
bmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb3BpZWRCbG9jazsK
LWNsYXNzIENvcGllZFNwYWNlOwotY2xhc3MgQ29weVZpc2l0b3I7Ci1jbGFzcyBHQ1RocmVhZDsK
LWNsYXNzIFZNOwotCi1lbnVtIEdDUGhhc2UgewotICAgIE5vUGhhc2UsCi0gICAgTWFyaywKLSAg
ICBDb3B5LAotICAgIEV4aXQKLX07Ci0KLWNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YSB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR0NUaHJlYWRTaGFyZWREYXRh
KFZNKik7Ci0gICAgfkdDVGhyZWFkU2hhcmVkRGF0YSgpOwotICAgIAotICAgIHZvaWQgcmVzZXQo
KTsKLQotICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hNYXJr
aW5nKCk7Ci0gICAgdm9pZCBkaWRTdGFydENvcHlpbmcoKTsKLSAgICB2b2lkIGRpZEZpbmlzaENv
cHlpbmcoKTsKLQotICAgIHZvaWQgcmVzZXRDaGlsZHJlbigpOwotICAgIHNpemVfdCBjaGlsZFZp
c2l0Q291bnQoKTsKLSAgICBzaXplX3QgY2hpbGRCeXRlc1Zpc2l0ZWQoKTsKLSAgICBzaXplX3Qg
Y2hpbGRCeXRlc0NvcGllZCgpOwotICAgIHNpemVfdCBjaGlsZER1cFN0cmluZ3MoKTsKLSAgICAK
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFkOwotICAgIGZyaWVuZCBjbGFzcyBT
bG90VmlzaXRvcjsKLSAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7Ci0KLSAgICB2b2lkIGdl
dE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7Ci0gICAgdm9pZCBzdGFydE5leHRQ
aGFzZShHQ1BoYXNlKTsKLSAgICB2b2lkIGVuZEN1cnJlbnRQaGFzZSgpOwotCi0gICAgVk0qIG1f
dm07Ci0gICAgQ29waWVkU3BhY2UqIG1fY29waWVkU3BhY2U7Ci0gICAgCi0gICAgYm9vbCBtX3No
b3VsZEhhc2hDb25zOwotCi0gICAgVmVjdG9yPEdDVGhyZWFkKj4gbV9nY1RocmVhZHM7Ci0KLSAg
ICBMb2NrIG1fbWFya2luZ011dGV4OwotICAgIENvbmRpdGlvbiBtX21hcmtpbmdDb25kaXRpb25W
YXJpYWJsZTsKLSAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKLSAgICB1bnNp
Z25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwotICAgIGJvb2wgbV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0OwotCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0gICAg
SGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsKLQotICAgIExvY2sgbV9jb3B5TG9jazsKLSAg
ICBWZWN0b3I8Q29waWVkQmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKLSAgICBzaXplX3QgbV9jb3B5
SW5kZXg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAz
MjsKLQotICAgIExvY2sgbV9waGFzZU11dGV4OwotICAgIENvbmRpdGlvbiBtX3BoYXNlQ29uZGl0
aW9uVmFyaWFibGU7Ci0gICAgQ29uZGl0aW9uIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZTsK
LSAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOwotICAgIGJvb2wgbV9nY1Ro
cmVhZHNTaG91bGRXYWl0OwotICAgIEdDUGhhc2UgbV9jdXJyZW50UGhhc2U7Ci0KLSAgICBMaXN0
YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVyczsKLSAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXplcj46
Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKLX07Ci0KLWlubGluZSB2b2lkIEdDVGhy
ZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmIHN0YXJ0LCBzaXplX3Qm
IGVuZCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7Ci0gICAgc3RhcnQg
PSBtX2NvcHlJbmRleDsKLSAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCks
IG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKLSAgICBtX2NvcHlJbmRleCA9
IGVuZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsOSArMzM1LDggQEAg
SGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9leHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9t
YWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9zaGFyZWREYXRhKHZtKQotICAgICwgbV9zbG90
VmlzaXRvcihtX3NoYXJlZERhdGEpCi0gICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkK
KyAgICAsIG1fc2xvdFZpc2l0b3IoKnRoaXMpCisgICAgLCBtX2NvcHlWaXNpdG9yKCp0aGlzKQog
ICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAg
ICAsIG1fd3JpdGVCYXJyaWVyQnVmZmVyKDI1NikKQEAgLTM1OCw2ICszNTcsMjEgQEAgSGVhcDo6
SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJl
Y3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKIHsKKyAgICB7CisgICAgICAgIC8vIEdyYWIgdGhlIGxv
Y2sgc28gdGhlIG5ldyBHQyB0aHJlYWRzIGNhbiBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZv
cmUgdGhleSBzdGFydCBydW5uaW5nLgorICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxv
Y2sobV9waGFzZU11dGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgeworICAgICAgICAgICAgbV9udW1iZXJPZkFj
dGl2ZUdDVGhyZWFkcysrOworICAgICAgICAgICAgR0NUaHJlYWQqIG5ld1RocmVhZCA9IG5ldyBH
Q1RocmVhZCgqdGhpcywgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpLCBzdGQ6
Om1ha2VfdW5pcXVlPENvcHlWaXNpdG9yPigqdGhpcykpOworICAgICAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1
bmMsIG5ld1RocmVhZCwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIik7CisgICAgICAgICAgICBu
ZXdUaHJlYWQtPmluaXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJRCk7CisgICAgICAgICAgICBtX2dj
VGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gV2FpdCBmb3IgYWxsIHRoZSBHQ1RocmVhZHMgdG8gZ2V0IHRvIHRoZSByaWdodCBwbGFjZS4K
KyAgICAgICAgbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsg
cmV0dXJuICFtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9KTsKKyAgICB9CisgICAgCiAgICAg
bV9zdG9yYWdlU3BhY2UuaW5pdCgpOwogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkpCiAg
ICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhpcywg
T3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwpAQCAt
MzY3LDYgKzM4MSwyMSBAQCBIZWFwOjp+SGVhcCgpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJs
b2NrIDogbV9sb2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVz
dHJveShibG9jayk7CisKKyAgICAvLyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCisgICAg
eworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFya2luZ0xvY2sobV9tYXJraW5nTXV0
ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1fcGhhc2VNdXRl
eCk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKKyAgICAgICAg
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKKyAgICAgICAgbV9nY1RocmVhZHNT
aG91bGRXYWl0ID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKKyAgICAg
ICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOworICAg
ICAgICBkZWxldGUgbV9nY1RocmVhZHNbaV07CisgICAgfQogfQogCiBib29sIEhlYXA6OmlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKQpAQCAtNTM5LDcgKzU2OCwxMyBAQCB2b2lkIEhlYXA6Om1h
cmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAKICAgICBjbGVhckxpdmVuZXNzRGF0YSgpOwog
Ci0gICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0TWFya2luZygpOworICAgIGlmIChtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xl
YXIoKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2lu
Z011dGV4KTsKKyAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Cisg
ICAgICAgIHN0YXJ0TmV4dFBoYXNlKE1hcmspOworICAgIH0KICAgICBtX3Nsb3RWaXNpdG9yLmRp
ZFN0YXJ0TWFya2luZygpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IobV9z
bG90VmlzaXRvcik7CiAKQEAgLTU2Myw3ICs1OTgsMTMgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMo
ZG91YmxlIGdjU3RhcnRUaW1lLAogICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9y
KTsKIAogICAgIGNsZWFyUmVtZW1iZXJlZFNldChyZW1lbWJlcmVkU2V0KTsKLSAgICBtX3NoYXJl
ZERhdGEuZGlkRmluaXNoTWFya2luZygpOworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSB0cnVlOworICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlBbGwoKTsKKyAgICB9CisgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1hcmspOworICAg
IGVuZEN1cnJlbnRQaGFzZSgpOwogICAgIHVwZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7
CiAgICAgcmVzZXRWaXNpdG9ycygpOwogfQpAQCAtNTc5LDE0ICs2MjAsMzcgQEAgdm9pZCBIZWFw
Ojpjb3B5QmFja2luZ1N0b3JlcygpCiAgICAgfQogCiAgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNo
b3VsZERvQ29weVBoYXNlKCkpIHsKLSAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWlu
ZygpOworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NvcHlMb2Nr
KTsKKyAgICAgICAgICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgdmVjdG9yIHRvIGJlIGVtcHR5LCBi
dXQgZG9uJ3QgdGhyb3cgYXdheSB0aGUgYmFja2luZyBzdG9yZS4KKyAgICAgICAgICAgICAgICBt
X2Jsb2Nrc1RvQ29weS5zaHJpbmsoMCk7CisgICAgICAgICAgICAgICAgZm9yIChDb3BpZWRCbG9j
ayogYmxvY2sgPSBtX3N0b3JhZ2VTcGFjZS5tX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9ibG9ja3NU
b0NvcHkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAg
ICAgICAgICAgICAgV1RGOjpjb3B5VG9WZWN0b3IobV9zdG9yYWdlU3BhY2UubV9ibG9ja1NldCwg
bV9ibG9ja3NUb0NvcHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb3B5SW5kZXgg
PSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBkbyB0aGlzIGhlcmUgc28g
dGhhdCB3ZSBhdm9pZCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBtYWluIHRocmVhZCBjYW4g
CisgICAgICAgIC8vIGJsb3cgdGhyb3VnaCBhbGwgb2YgdGhlIGNvcHlpbmcgd29yayBiZWZvcmUg
dGhlIEdDVGhyZWFkcyBmdWxseSB3YWtlIHVwLiAKKyAgICAgICAgLy8gVGhlIEdDVGhyZWFkcyB0
aGVuIHJlcXVlc3QgYSBibG9jayBmcm9tIHRoZSBDb3BpZWRTcGFjZSB3aGVuIHRoZSBjb3B5aW5n
IHBoYXNlIAorICAgICAgICAvLyBoYXMgY29tcGxldGVkLCB3aGljaCBpc24ndCBhbGxvd2VkLgor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsrKQor
ICAgICAgICAgICAgbV9nY1RocmVhZHNbaV0tPmNvcHlWaXNpdG9yKCktPnN0YXJ0Q29weWluZygp
OworICAgICAgICAKKyAgICAgICAgc3RhcnROZXh0UGhhc2UoQ29weSk7CisgICAgICAgIAogICAg
ICAgICBtX2NvcHlWaXNpdG9yLnN0YXJ0Q29weWluZygpOwogICAgICAgICBtX2NvcHlWaXNpdG9y
LmNvcHlGcm9tU2hhcmVkKCk7CiAgICAgICAgIG1fY29weVZpc2l0b3IuZG9uZUNvcHlpbmcoKTsK
ICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBldmVyeWJvZHkgdG8gZmluaXNoIGFuZCBy
ZXR1cm4gdGhlaXIgQ29waWVkQmxvY2tzIAogICAgICAgICAvLyBiZWZvcmUgc2lnbmFsaW5nIHRo
YXQgdGhlIHBoYXNlIGlzIGNvbXBsZXRlLgogICAgICAgICBtX3N0b3JhZ2VTcGFjZS5kb25lQ29w
eWluZygpOwotICAgICAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gQ29weSk7CisgICAgICAgIGVuZEN1cnJlbnRQaGFz
ZSgpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0b3JhZ2VTcGFjZS5kb25lQ29weWluZygpOwog
fQpAQCAtNzkxLDcgKzg1NSw3IEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJs
ZSBnY1MKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkg
ewogICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgp
OwotICAgICAgICB2aXNpdENvdW50ICs9IG1fc2hhcmVkRGF0YS5jaGlsZFZpc2l0Q291bnQoKTsK
KyAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAgIGRhdGFM
b2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vj
c1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQogICAgIApAQCAt
ODA2LDE1ICs4NzAsMjMgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdj
UwogICAgIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV9zbG90VmlzaXRvci5ieXRlc1Zp
c2l0ZWQoKTsKICAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgKz0gbV9zbG90VmlzaXRvci5ieXRlc0Nv
cGllZCgpOwotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV9zaGFyZWREYXRhLmNoaWxkQnl0
ZXNWaXNpdGVkKCk7Ci0gICAgbV90b3RhbEJ5dGVzQ29waWVkICs9IG1fc2hhcmVkRGF0YS5jaGls
ZEJ5dGVzQ29waWVkKCk7CisgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSB0aHJlYWRCeXRlc1Zp
c2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNDb3BpZWQgKz0gdGhyZWFkQnl0ZXNDb3BpZWQoKTsK
IH0KIAogdm9pZCBIZWFwOjpyZXNldFZpc2l0b3JzKCkKIHsKICAgICBtX3Nsb3RWaXNpdG9yLnJl
c2V0KCk7Ci0gICAgbV9zaGFyZWREYXRhLnJlc2V0Q2hpbGRyZW4oKTsKLSAgICBtX3NoYXJlZERh
dGEucmVzZXQoKTsKKworICAgIGZvciAoR0NUaHJlYWQqIHRocmVhZCA6IG1fZ2NUaHJlYWRzKQor
ICAgICAgICB0aHJlYWQtPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7CisKKyAgICBBU1NFUlQobV9z
aGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJz
LnJlbW92ZUFsbCgpOworICAgIGlmIChtX3Nob3VsZEhhc2hDb25zKSB7CisgICAgICAgIG1fdm0t
PnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCk7CisgICAgICAgIG1fc2hvdWxkSGFz
aENvbnMgPSBmYWxzZTsKKyAgICB9CiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCkBA
IC0xNDY1LDQgKzE1MzcsNDggQEAgYm9vbCBIZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlFbXB0eVdl
YWtCbAogICAgIHJldHVybiB0cnVlOwogfQogCitzaXplX3QgSGVhcDo6dGhyZWFkVmlzaXRDb3Vu
dCgpCit7ICAgICAgIAorICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3Vs
dCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+dmlzaXRDb3VudCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3NpemVfdCBIZWFwOjp0aHJlYWRCeXRlc1Zpc2l0ZWQoKQoreyAg
ICAgICAKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFk
c1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNWaXNpdGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzQ29waWVkKCkKK3sgICAgICAgCisgICAgc2l6
ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRz
LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNp
dG9yKCktPmJ5dGVzQ29waWVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBIZWFw
OjpzdGFydE5leHRQaGFzZShHQ1BoYXNlIHBoYXNlKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7CisgICAgQVNTRVJUKCFtX2djVGhyZWFkc1Nob3VsZFdh
aXQpOworICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKKyAgICBtX2djVGhy
ZWFkc1Nob3VsZFdhaXQgPSB0cnVlOworICAgIG1fY3VycmVudFBoYXNlID0gcGhhc2U7CisgICAg
bV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhlYXA6OmVu
ZEN1cnJlbnRQaGFzZSgpCit7CisgICAgQVNTRVJUKG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7Cisg
ICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7CisgICAgbV9jdXJy
ZW50UGhhc2UgPSBOb1BoYXNlOworICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9IGZhbHNlOwor
ICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICBtX2FjdGl2aXR5
Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1fbnVtYmVyT2ZB
Y3RpdmVHQ1RocmVhZHM7IH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMy0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDExICsy
NiwxMiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9y
LmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKLSNpbmNsdWRlICJHQ1Ro
cmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkhhbmRs
ZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAjaW5jbHVkZSAiSGVhcE9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCisjaW5jbHVkZSAiTGlzdGFibGVI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtMzgsNyArMzksOSBAQAog
I2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlEVGFibGUuaCIKKyNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgi
CiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCisjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllckJ1ZmZlci5oIgogI2luY2x1ZGUgIldy
aXRlQmFycmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAg
LTg1LDcgKzg4LDYgQEAgY2xhc3MgSGVhcCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKLSAgICBmcmllbmQgY2xh
c3MgR0NUaHJlYWRTaGFyZWREYXRhOwogICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFs
dWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCiAgICAgc3RhdGljIEhlYXAqIGhlYXAoY29u
c3QgSlNDZWxsKik7CiAKQEAgLTI0Myw2ICsyNDUsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBEZWZlckdDRm9yQVdoaWxlOwogICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU7CiAgICAgZnJpZW5kIGNsYXNzIEdDTG9nZ2luZzsKKyAgICBmcmllbmQgY2xhc3MgR0NU
aHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZVNldDsKICAgICBmcmllbmQgY2xhc3MgSGVh
cFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKQEAgLTMzOSw2ICsz
NDIsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAg
ICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKKyAgICBzaXpl
X3QgdGhyZWFkVmlzaXRDb3VudCgpOworICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsK
KyAgICBzaXplX3QgdGhyZWFkQnl0ZXNDb3BpZWQoKTsKKyAgICBzaXplX3QgdGhyZWFkRHVwU3Ry
aW5ncygpOworCisgICAgdm9pZCBnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYsIHNpemVfdCYp
OworICAgIHZvaWQgc3RhcnROZXh0UGhhc2UoR0NQaGFzZSk7CisgICAgdm9pZCBlbmRDdXJyZW50
UGhhc2UoKTsKKwogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6
ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAt
MzcxLDcgKzM4Myw2IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVU
aHJlYWRzOwogICAgIAotICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAg
U2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKICAgICBDb3B5VmlzaXRvciBtX2NvcHlWaXNpdG9y
OwogCkBAIC00MDksNiArNDIwLDM0IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEhhc2hNYXA8
dm9pZCosIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV93ZWFrR0NNYXBzOworCisgICAgYm9vbCBt
X3Nob3VsZEhhc2hDb25zIHsgZmFsc2UgfTsKKworICAgIFZlY3RvcjxHQ1RocmVhZCo+IG1fZ2NU
aHJlYWRzOworCisgICAgTG9jayBtX21hcmtpbmdNdXRleDsKKyAgICBDb25kaXRpb24gbV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGU7CisgICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3Rh
Y2s7CisgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsK
KyAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CisKKyAgICBM
b2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKKyAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJvb3Rz
OworCisgICAgTG9jayBtX2NvcHlMb2NrOworICAgIFZlY3RvcjxDb3BpZWRCbG9jayo+IG1fYmxv
Y2tzVG9Db3B5OworICAgIHNpemVfdCBtX2NvcHlJbmRleCB7IDAgfTsKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOworCisgICAgTG9jayBtX3BoYXNl
TXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZTsKKyAgICBDb25k
aXRpb24gbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlOworICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZBY3RpdmVHQ1RocmVhZHMgeyAwIH07CisgICAgYm9vbCBtX2djVGhyZWFkc1Nob3VsZFdhaXQg
eyBmYWxzZSB9OworICAgIEdDUGhhc2UgbV9jdXJyZW50UGhhc2UgeyBOb1BoYXNlIH07CisKKyAg
ICBMaXN0YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVyczsKKyAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFs
aXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDE0IEBAIGlubGluZSB2b2lkIEhlYXA6
OnVucmVnaXN0ZXJXZWFrR0NNYXAodm8KICAgICBtX3dlYWtHQ01hcHMucmVtb3ZlKHdlYWtHQ01h
cCk7CiB9CiAgICAgCitpbmxpbmUgdm9pZCBIZWFwOjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVf
dCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY29weUxv
Y2spOworICAgIHN0YXJ0ID0gbV9jb3B5SW5kZXg7CisgICAgZW5kID0gc3RkOjptaW4obV9ibG9j
a3NUb0NvcHkuc2l6ZSgpLCBtX2NvcHlJbmRleCArIHNfYmxvY2tGcmFnbWVudExlbmd0aCk7Cisg
ICAgbV9jb3B5SW5kZXggPSBlbmQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gSGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFi
bGVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlz
dGFibGVIYW5kbGVyLmgJKHJldmlzaW9uIDE5MDEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOwogY2xhc3MgTWFya1N0YWNrOwogY2xh
c3MgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTsKIGNsYXNzIFNsb3RWaXNpdG9yOwpAQCAtNTEs
OCArNTIsOCBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgLy8gQWxsb3cgdGhlc2UgY2xh
c3NlcyB0byB1c2UgTGlzdGFibGVIYW5kbGVyOjpMaXN0LgorICAgIGZyaWVuZCBjbGFzcyBIZWFw
OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFk
U2hhcmVkRGF0YTsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgCiAgICAgY2xh
c3MgTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCShyZXZpc2lvbiAxOTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0MiwxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYg
c2hhcmVkKQorU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCiAgICAgOiBtX3N0
YWNrKCkKICAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX2J5dGVzQ29waWVkKDApCiAg
ICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKLSAg
ICAsIG1fc2hhcmVkKHNoYXJlZCkKKyAgICAsIG1faGVhcChoZWFwKQogICAgICwgbV9zaG91bGRI
YXNoQ29ucyhmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKQEAgLTY3LDEwICs2NywxMCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbklu
UHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9v
dHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KIAotICAgIG1fc2hh
cmVkLm1fc2hvdWxkSGFzaENvbnMgPSBtX3NoYXJlZC5tX3ZtLT5oYXZlRW5vdWdoTmV3U3RyaW5n
c1RvSGFzaENvbnMoKTsKLSAgICBtX3Nob3VsZEhhc2hDb25zID0gbV9zaGFyZWQubV9zaG91bGRI
YXNoQ29uczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9nY1RocmVh
ZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hhcmVkLm1fZ2NUaHJlYWRzW2ldLT5zbG90Vmlz
aXRvcigpLT5tX3Nob3VsZEhhc2hDb25zID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uczsKKyAg
ICBtX2hlYXAubV9zaG91bGRIYXNoQ29ucyA9IG1faGVhcC5tX3ZtLT5oYXZlRW5vdWdoTmV3U3Ry
aW5nc1RvSGFzaENvbnMoKTsKKyAgICBtX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1fc2hvdWxk
SGFzaENvbnM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGVhcC5tX2djVGhyZWFk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9oZWFwLm1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRv
cigpLT5tX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1fc2hvdWxkSGFzaENvbnM7CiB9CiAKIHZv
aWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKQEAgLTEzNSwyMCArMTM1LDIwIEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5
IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQog
ICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9z
aGFyZWQubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgpKQorICAgIGlmIChtX2hlYXAubV9zaGFyZWRN
YXJrU3RhY2suc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250
ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3Ro
ZXIKICAgICAvLyB0aHJlYWQgaXMgYWxyZWFkeSBkb25hdGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPExvY2s+IGxvY2sobV9zaGFyZWQubV9tYXJraW5nTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2sp
OworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgs
IHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdv
IGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1Rv
KG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7CiAKLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCi0g
ICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwor
ICAgIGlmIChtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6
Om51bWJlck9mR0NNYXJrZXJzKCkpCisgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25W
YXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQpAQCAt
MTkwLDE4ICsxOTAsMTggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJl
ZAogICAgICAgICAvLyBUaGlzIGNhbGwgc2hvdWxkIGJlIGEgbm8tb3AuCiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoc2hhcmVkRHJhaW5Nb2RlLCBzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4p
OwogICAgICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQobV9z
aGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1faGVh
cC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9zaGFyZWQu
bV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzKys7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5t
X21hcmtpbmdNdXRleCk7CisgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzKys7CiAgICAgfQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3NoYXJlZC5tX21hcmtpbmdNdXRleCk7
Ci0gICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9oZWFwLm1fbWFya2lu
Z011dGV4KTsKKyAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzLS07CiAKICAgICAgICAgICAgIC8vIEhvdyB3ZSB3YWl0IGRpZmZlcnMgZGVwZW5kaW5nIG9u
IGRyYWluIG1vZGUuCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRy
YWluKSB7CkBAIC0yMDksMzYgKzIwOSwzNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21T
aGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgogICAgICAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFj
aCB0ZXJtaW5hdGlvbj8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtu
b3cgaXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0
aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQu
bV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
aGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS53YWl0KGxvY2spOworICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1v
ZGUgPT0gU2xhdmVEcmFpbik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
RGlkIHdlIGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycyAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAK
LSAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0
KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0
eSgpIHx8IG1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsgfSk7CisgICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3Ro
aXNdIHsgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpIHx8IG1faGVh
cC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7IH0pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4g
ZnJvbSB0aGlzIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQpCisgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50
ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnM7Ci0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJv
bShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50KTsKLSAgICAgICAg
ICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKKyAgICAgICAg
ICAgIHNpemVfdCBpZGxlVGhyZWFkQ291bnQgPSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
IC0gbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CisgICAgICAgICAgICBt
X3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbShtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIGlkbGVU
aHJlYWRDb3VudCk7CisgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycysrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkcmFpbigpOwpAQCAtMjUw
LDkgKzI1MCw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogICAgIFN0
YWNrU3RhdHM6OnByb2JlKCk7CiAgICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7
IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5
LgogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9zaGFyZWQubV9v
cGFxdWVSb290c011dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9o
ZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3Bh
cXVlUm9vdHMpCi0gICAgICAgICAgICBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsK
KyAgICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKICAgICB9CiAgICAg
bV9vcGFxdWVSb290cy5jbGVhcigpOwogfQpAQCAtMzI3LDE1ICszMjcsMTUgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogdm9pZCBTbG90VmlzaXRvcjo6aGFydmVz
dFdlYWtSZWZlcmVuY2VzKCkKIHsKICAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwotICAgIGZvciAo
V2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQor
ICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1faGVhcC5tX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHQoKSkKICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcygqdGhpcyk7CiB9CiAK
IHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewog
ICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7Ci0gICAgd2hpbGUgKG1fc2hhcmVkLm1fdW5jb25kaXRp
b25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKQotICAgICAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKKyAg
ICB3aGlsZSAobV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKQorICAg
ICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCktPmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTkw
MTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBTbG90VmlzaXRvciB7CiAgICAgZnJpZW5k
IGNsYXNzIEhlYXBSb290VmlzaXRvcjsgLy8gQWxsb3dlZCB0byBtYXJrIGEgSlNWYWx1ZSogb3Ig
SlNDZWxsKiogZGlyZWN0bHkuCiAKIHB1YmxpYzoKLSAgICBTbG90VmlzaXRvcihHQ1RocmVhZFNo
YXJlZERhdGEmKTsKKyAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7
CiAKICAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQpA
QCAtODIsNyArODIsNiBAQCBwdWJsaWM6CiAgICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVSb290
VHJpU3RhdGUodm9pZCopIGNvbnN0OwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAotICAg
IEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVk
OyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KIAog
ICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC0xNDMsNyArMTQyLDcgQEAgcHJpdmF0ZToK
ICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwog
ICAgIAotICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CisgICAgSGVhcCYgbV9oZWFw
OwogCiAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zOyAvLyBMb2NhbCBwZXItdGhyZWFkIGNvcHkg
b2Ygc2hhcmVkIGZsYWcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nSW1wbCosIEpTVmFsdWU+IFVuaXF1ZVN0cmluZ01hcDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAx
OTAxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDE5ICsxNDgsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRWYQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNl
SGFydmVzdGVyKQogewotICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRk
VGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKKyAgICBtX2hlYXAubV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwog
fQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihV
bmNvbmRpdGlvbmFsRmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQogewotICAgIG1f
c2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRpdGlv
bmFsRmluYWxpemVyKTsKKyAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5hZGRU
aHJlYWRTYWZlKHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwogfQogCiBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQogewogICAgIGlmIChPcHRpb25zOjpu
dW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8g
dGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmFkZChy
b290KTsKKyAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3
aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KQEAgLTE3MywxNSArMTczLDE1IEBAIGlu
bGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVIKIHsKICAgICBBU1NFUlQoIW1f
aXNJblBhcmFsbGVsTW9kZSk7CiAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKKyAgICBy
ZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CiB9CiAKIGlubGluZSBU
cmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9v
dCkgY29uc3QKIHsKICAgICBpZiAobV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKICAgICAg
ICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X3NoYXJlZC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX3NoYXJlZC5tX29wYXF1ZVJv
b3RzLmNvbnRhaW5zKHJvb3QpKQorICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVh
cC5tX29wYXF1ZVJvb3RzTXV0ZXgpOworICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KSkKICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KQEAgLTE5MCw3ICsxOTAsNyBAQCBpbmxpbmUgaW50IFNsb3RWaXNpdG9y
OjpvcGFxdWVSb290Q291bnQoCiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwog
ICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fc2hhcmVk
Lm1fb3BhcXVlUm9vdHMuc2l6ZSgpOworICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5z
aXplKCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKQpAQCAtMjMzLDcgKzIzMyw3IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpj
b3B5TGF0ZXIoSlNDZWwKICAgICAgICAgLy8gaXMgY29ycmVjdC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDc0OQogICAgICAgICBieXRlcyA9
IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihibG9j
ayk7CisgICAgICAgIG1faGVhcC5tX3N0b3JhZ2VTcGFjZS5waW4oYmxvY2spOwogICAgIH0KIAog
ICAgIEFTU0VSVChoZWFwKCktPm1fc3RvcmFnZVNwYWNlLmNvbnRhaW5zKGJsb2NrKSk7CkBAIC0y
NTIsMTcgKzI1MiwxNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1v
CiAKIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICZzaGFyZWREYXRhKCkubV92bS0+aGVhcDsKKyAgICByZXR1cm4gJm1faGVhcDsKIH0KIAogaW5s
aW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqc2hhcmVkRGF0YSgpLm1f
dm07CisgICAgcmV0dXJuICptX2hlYXAubV92bTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90
VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqc2hhcmVkRGF0YSgpLm1fdm07Cisg
ICAgcmV0dXJuICptX2hlYXAubV92bTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>